--- /srv/reproducible-results/rbuild-debian/r-b-build.sFe7QI6H/b1/dune-localfunctions_2.10.0-1_i386.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.sFe7QI6H/b2/dune-localfunctions_2.10.0-1_i386.changes ├── Files │ @@ -1,3 +1,3 @@ │ │ ed28dfa4a493ec7d4bf604246e63ec6d 127204 libdevel optional libdune-localfunctions-dev_2.10.0-1_i386.deb │ - 18251b4d08777a9b60b2a9362a5e5fd9 4970304 doc optional libdune-localfunctions-doc_2.10.0-1_all.deb │ + ac18e1691fdbf778f9fa957d74f48613 4966768 doc optional libdune-localfunctions-doc_2.10.0-1_all.deb ├── libdune-localfunctions-doc_2.10.0-1_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2024-11-14 20:15:37.000000 debian-binary │ │ --rw-r--r-- 0 0 0 34036 2024-11-14 20:15:37.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 4936076 2024-11-14 20:15:37.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 34004 2024-11-14 20:15:37.000000 control.tar.xz │ │ +-rw-r--r-- 0 0 0 4932572 2024-11-14 20:15:37.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ │ │ │ ├── line order │ │ │ │ │ @@ -1,20 +1,14 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/changelog.Debian.gz │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/changelog.gz │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/copyright │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00002.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00005.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00011.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00011_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00017.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00017_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00026.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00026_source.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00029.html │ │ │ │ │ -usr/share/doc/libdune-localfunctions-doc/doxygen/a00029_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00032.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00032_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00035.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00035_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00038.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00038_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ │ @@ -51,14 +45,18 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00086_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00089_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00092_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00095_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00098.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00098_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00101.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00101_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00104.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00104_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00107.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00107_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00110_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ │ @@ -67,14 +65,16 @@ │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00116_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00119_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00122_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00125_source.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00128.html │ │ │ │ │ +usr/share/doc/libdune-localfunctions-doc/doxygen/a00128_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00131_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00134_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00137_source.html │ │ │ │ │ usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -5,362 +5,362 @@ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1034 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/changelog.Debian.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3136 2024-09-05 06:45:48.000000 ./usr/share/doc/libdune-localfunctions-doc/changelog.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 2895 2023-01-12 15:07:33.000000 ./usr/share/doc/libdune-localfunctions-doc/copyright │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3060 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00002.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3058 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00005.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6112 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24672 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00017.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10750 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00017_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5074 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00026.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22714 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00026_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00029.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13124 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00029_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5282 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 48605 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5458 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13612 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5081 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23273 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5294 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 48545 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22137 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12592 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5302 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33233 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5094 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19557 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5480 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22346 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6372 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19543 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5087 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20497 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5295 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36397 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6300 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27026 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5420 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18628 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12151 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 51443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4884 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 17950 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10750 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6112 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24672 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6372 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19543 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13124 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5074 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22714 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5282 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 48605 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5081 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23273 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5294 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 48545 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13612 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12551 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5706 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15526 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5136 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12768 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 49679 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5084 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19688 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5459 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22083 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5481 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22234 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7726 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53426 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8885 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4832 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20471 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7816 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 43349 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5634 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 40030 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7345 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 50280 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5558 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 61780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5510 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24381 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7328 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 76678 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5420 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18628 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5772 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29862 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3552 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5413 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5411 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21373 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3690 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5774 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3743 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6042 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5033 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27564 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5032 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29436 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4722 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13659 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5161 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15533 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6024 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 37596 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 3685 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6374 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24988 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12298 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20758 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21371 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 39719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24421 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4974 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14762 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5097 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21877 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13455 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 92560 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5056 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24822 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21882 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5101 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13008 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5157 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 34488 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5295 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36397 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5087 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20497 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22137 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5458 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5084 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19688 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5136 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12768 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 49679 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5706 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15526 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00098.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12592 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00098_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5302 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00101.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33233 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00101_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5094 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19557 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5480 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22346 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5481 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22234 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5459 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22083 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 3743 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6042 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5097 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24421 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4974 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14762 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5387 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00128.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21870 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00128_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5379 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21826 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14326 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23898 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12196 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26143 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13540 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 111999 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5192 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20750 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5767 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19908 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21371 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5399 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21861 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21877 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21882 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13186 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20659 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5179 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 51961 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9090 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 35933 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 44949 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5396 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21980 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5056 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24822 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 92560 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13455 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20758 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12298 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24988 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12096 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5355 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21676 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 39719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5039 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00218.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18773 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00218_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5178 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 31461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13242 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5055 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18626 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4987 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14834 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12283 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5176 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24626 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23946 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5175 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 90389 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5396 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21980 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5222 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 111999 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13540 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26143 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5399 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21861 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5379 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21826 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5767 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19908 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20659 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5179 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 51961 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13186 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5355 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21676 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21877 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4952 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12196 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23898 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4886 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14326 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5387 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21870 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5713 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 44949 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21397 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5623 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53709 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11955 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 102022 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5192 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20750 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9090 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 35933 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12096 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6300 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 27026 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5614 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 67252 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5146 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9133 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6989 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 151739 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5463 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 62830 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5507 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 75861 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12445 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 132014 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4995 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 24188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6522 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 47195 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5498 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 118523 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4902 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 11585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4871 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18990 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13305 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 109519 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6238 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23786 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5500 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 100782 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5258 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20256 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4984 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 14586 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7158 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5060 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 9360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7361 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 42593 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5062 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33499 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4737 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13102 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 25783 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12418 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5006 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22751 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5296 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29357 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12403 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 16231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5717 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 41173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12151 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6789 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 51443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4884 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 17950 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6921 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 45373 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5836 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 29091 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5309 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21390 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5111 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13285 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5363 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21377 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6739 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 119956 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7277 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 45329 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23866 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6487 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 42105 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4035 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5071 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15839 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4172 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5444 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5359 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36065 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5187 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12768 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5537 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 36523 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5879 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 17595 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 52932 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21997 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 60166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5591 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 57996 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 53843 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20134 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 8588 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 189046 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 22245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 279939 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6315 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 96771 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12583 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 103633 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5535 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 30826 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6002 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 47050 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5604 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 35784 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5213 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 10364 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4782 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18490 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6688 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 60061 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5272 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 41301 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4781 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 15327 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 6850 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 54922 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5254 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5194 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20870 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5180 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 21610 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5334 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7305 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4741 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 19582 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5157 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 34488 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5101 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13008 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5178 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 31461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5055 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18626 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13242 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 102022 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11955 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5623 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53709 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12283 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5176 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24626 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4987 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14834 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5388 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21877 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5461 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21397 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5109 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13454 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5175 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 90389 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5052 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23946 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5187 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12768 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5772 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29862 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15839 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29357 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 16231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12403 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5006 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22751 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5717 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 41173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5296 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20460 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12418 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4737 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13102 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5148 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25783 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6850 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 54922 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5254 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5334 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7305 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5194 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20870 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4781 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15327 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5272 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 41301 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6688 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 60061 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4782 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18490 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5180 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21610 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 3690 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5774 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21997 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 60166 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6400 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 52932 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6315 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 96771 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8588 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 189046 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12583 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 103633 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6002 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 47050 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5535 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 30826 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5537 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36523 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5604 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 35784 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5879 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 17595 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 22245 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 279939 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5591 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 57996 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53843 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5443 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20134 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 3552 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5413 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5231 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23866 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6487 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 42105 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5411 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21373 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6024 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 37596 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5213 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 10364 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 3685 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6374 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4741 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 19582 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5359 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 36065 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4035 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5071 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5500 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 100782 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5365 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13305 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5173 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12445 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 109519 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4871 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18990 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4902 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 11292 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7158 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 25188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4984 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 14586 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6522 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 47195 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4995 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24188 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6238 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23786 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5060 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5258 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20256 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7361 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 42593 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5498 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 118523 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5585 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 132014 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5062 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33499 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6142 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26360 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5507 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 75861 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5146 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9133 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5614 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 67252 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6989 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 151739 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5463 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 62830 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5161 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 9897 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5032 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29436 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5078 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 15533 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5107 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13659 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5033 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 27564 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 3900 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4722 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7345 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 50280 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7726 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 53426 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5634 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 40030 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7816 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 43349 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5510 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 24381 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5558 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 61780 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 8885 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4832 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20471 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7328 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 76678 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4172 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5444 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7277 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 45329 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5363 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21377 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5309 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 21390 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5836 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 29091 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5111 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13285 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6921 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 45373 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 6739 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 119956 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 20048 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00551.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11892 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00552.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 50323 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00552.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4902 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00553.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5249 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00553.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4381 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00554.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5396 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00554.png │ │ │ │ @@ -1276,46 +1276,46 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4197 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03003.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 58803 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03005.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11051 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03006.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4496 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03007.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 30748 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03009.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12117 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03010.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3239 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04536.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5287 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5045 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 7093 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 62200 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 4799 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 12223 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5307 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 26433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 7093 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 62200 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 4799 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 12223 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5307 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 26433 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5287 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18512 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5045 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13141 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5439 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04553.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 39074 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04553_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4165 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04556.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 11666 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04556_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5082 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04559.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 13282 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04559_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5297 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 20103 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5546 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 23257 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 41303 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5057 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13906 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5183 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 13536 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5215 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 33312 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5064 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 16940 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580_source.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 5082 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583.html │ │ │ │ --rw-r--r-- 0 root (0) root (0) 18005 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5546 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 23257 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5918 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 41303 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5057 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13906 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5183 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 13536 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5215 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 33312 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5064 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 16940 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5082 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 18005 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580_source.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 5297 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583.html │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 20103 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7068 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04586.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 43907 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04586_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5617 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04589.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 18893 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04589_source.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 127915 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/annotated.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 676 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/bc_s.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 635 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/bc_sd.png │ │ │ │ @@ -1545,15 +1545,15 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5719 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_efe9c42b7995a789e2e3a3951e68c4dc.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4683 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_efe9c42b7995a789e2e3a3951e68c4dc_dep.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5171 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_f2cea2550179f5ef9eb9f9aa69c380e8.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3986 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_f2cea2550179f5ef9eb9f9aa69c380e8_dep.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 5591 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_fae6c31a68fd74edf8214423c164f0b4.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 4291 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_fae6c31a68fd74edf8214423c164f0b4_dep.png │ │ │ │ -rw-r--r-- 0 root (0) root (0) 45631 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/doxygen.css │ │ │ │ --rw-r--r-- 0 root (0) root (0) 88371 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dune-localfunctions.tag.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 88380 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dune-localfunctions.tag.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 7704 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/dynsections.js │ │ │ │ -rw-r--r-- 0 root (0) root (0) 87570 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/files.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 10520 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/functions.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 19917 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/functions_b.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 12586 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/functions_c.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 15015 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/functions_d.html │ │ │ │ -rw-r--r-- 0 root (0) root (0) 17302 2024-11-14 20:15:37.000000 ./usr/share/doc/libdune-localfunctions-doc/doxygen/functions_e.html │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: edges0.5.hh File Reference │ │ │ │ +dune-localfunctions: power.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
edges0.5.hh File Reference
│ │ │ │ +
power.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/basis.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/coefficients.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/interpolation.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <memory>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/meta/power/basis.hh>
│ │ │ │ +#include <dune/localfunctions/meta/power/coefficients.hh>
│ │ │ │ +#include <dune/localfunctions/meta/power/interpolation.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::EdgeS0_5FiniteElement< Geometry, RF >
 FiniteElement for lowest order edge elements on simplices. More...
class  Dune::PowerFiniteElement< Backend, dimR >
 Meta-finite element turning a scalar finite element into vector-valued one. More...
 
struct  Dune::EdgeS0_5FiniteElement< Geometry, RF >::Traits
struct  Dune::PowerFiniteElement< Backend, dimR >::Traits
 types of component objects More...
 
struct  Dune::EdgeS0_5FiniteElementFactory< Geometry, RF >
 Factory for EdgeS0_5FiniteElement objects. More...
class  Dune::PowerFiniteElementFactory< BackendFiniteElement, dimR >
 Factory for meta-finite elements turning scalar finite elements into vector-valued ones. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,33 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -edges0.5.hh File Reference │ │ │ │ │ +power.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ -  FiniteElement for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _> │ │ │ │ │ +  Meta-finite element turning a scalar finite element into vector-valued │ │ │ │ │ + one. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +struct   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  types of component objects _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ -  Factory for _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _B_a_c_k_e_n_d_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _d_i_m_R_ _> │ │ │ │ │ +  Factory for meta-finite elements turning scalar finite elements into │ │ │ │ │ + vector-valued ones. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00011_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: edges0.5.hh Source File │ │ │ │ +dune-localfunctions: power.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,132 +70,144 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
edges0.5.hh
│ │ │ │ +
power.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │
8
│ │ │ │ -
9#include <dune/geometry/type.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune {
│ │ │ │ -
16
│ │ │ │ -
18 //
│ │ │ │ -
19 // FiniteElement
│ │ │ │ -
20 //
│ │ │ │ -
21
│ │ │ │ -
23
│ │ │ │ -
41 template<class Geometry, class RF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
43 public:
│ │ │ │ -
│ │ │ │ -
47 struct Traits {
│ │ │ │ - │ │ │ │ -
49 typedef EdgeS0_5Interpolation<Geometry,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
52 };
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54 private:
│ │ │ │ -
55 typename Traits::Basis basis_;
│ │ │ │ -
56 typename Traits::Interpolation interpolation_;
│ │ │ │ -
57 static const typename Traits::Coefficients& coefficients_;
│ │ │ │ -
58
│ │ │ │ -
59 public:
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <memory>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/geometry/type.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
17
│ │ │ │ +
18namespace Dune {
│ │ │ │ +
19
│ │ │ │ +
22
│ │ │ │ +
28 template<class Backend, std::size_t dimR>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 public:
│ │ │ │ +
│ │ │ │ +
32 struct Traits {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
38 typedef PowerInterpolation<typename Backend::Traits::Interpolation,
│ │ │ │ +
39 typename Basis::Traits> Interpolation;
│ │ │ │ +
40 };
│ │ │ │ +
│ │ │ │ +
41 private:
│ │ │ │ +
42 std::shared_ptr<const Backend> backend;
│ │ │ │ +
43 typename Traits::Basis basis_;
│ │ │ │ +
44 typename Traits::Coefficients coefficients_;
│ │ │ │ +
45 typename Traits::Interpolation interpolation_;
│ │ │ │ +
46
│ │ │ │ +
47 public:
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
53 PowerFiniteElement(const Backend &backend_) :
│ │ │ │ +
54 backend(new Backend(backend_)),
│ │ │ │ +
55 basis_(backend->basis()),
│ │ │ │ +
56 coefficients_(backend->coefficients(), dimR),
│ │ │ │ +
57 interpolation_(backend->interpolation())
│ │ │ │ +
58 { }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │
61
│ │ │ │ -
64 template<class VertexOrder>
│ │ │ │
│ │ │ │ -
65 EdgeS0_5FiniteElement(const Geometry& geo,
│ │ │ │ -
66 const VertexOrder& vertexOrder) :
│ │ │ │ -
67 basis_(geo, vertexOrder), interpolation_(geo, vertexOrder)
│ │ │ │ -
68 { }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
71 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
│ │ │ │ -
73 const typename Traits::Interpolation& interpolation() const
│ │ │ │ -
74 { return interpolation_; }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
76 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
77 { return coefficients_; }
│ │ │ │ -
│ │ │ │ -
79 static constexpr GeometryType type() { return GeometryTypes::simplex(Geometry::mydimension); }
│ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
82 template<class Geometry, class RF>
│ │ │ │ - │ │ │ │ -
84 EdgeS0_5FiniteElement<Geometry, RF>::coefficients_ =
│ │ │ │ -
85 typename Traits::Coefficients();
│ │ │ │ +
65 PowerFiniteElement(const std::shared_ptr<const Backend> &backendSPtr) :
│ │ │ │ +
66 backend(backendSPtr),
│ │ │ │ +
67 basis_(backend->basis()),
│ │ │ │ +
68 coefficients_(backend->coefficients(), dimR),
│ │ │ │ +
69 interpolation_(backend->interpolation())
│ │ │ │ +
70 { }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
73
│ │ │ │ +
77 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ +
79
│ │ │ │ +
│ │ │ │ +
83 const typename Traits::Coefficients& coefficients() const
│ │ │ │ +
84 { return coefficients_; }
│ │ │ │ +
│ │ │ │
86
│ │ │ │ -
88 //
│ │ │ │ -
89 // Factory
│ │ │ │ -
90 //
│ │ │ │ -
91
│ │ │ │ -
93
│ │ │ │ -
102 template<class Geometry, class RF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
105
│ │ │ │ -
107
│ │ │ │ -
121 template<class VertexOrder>
│ │ │ │ -
│ │ │ │ -
122 const FiniteElement make(const Geometry& geometry,
│ │ │ │ -
123 const VertexOrder& vertexOrder)
│ │ │ │ -
124 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ -
│ │ │ │ -
125 };
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
127} // namespace Dune
│ │ │ │ -
128
│ │ │ │ -
129#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ +
│ │ │ │ +
90 const typename Traits::Interpolation& interpolation() const
│ │ │ │ +
91 { return interpolation_; }
│ │ │ │ +
│ │ │ │ +
93 GeometryType type() const { return backend->type(); }
│ │ │ │ +
94 };
│ │ │ │ +
│ │ │ │ +
95
│ │ │ │ +
98
│ │ │ │ +
105 template<class BackendFiniteElement, std::size_t dimR>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
107 {
│ │ │ │ +
108 public:
│ │ │ │ + │ │ │ │ +
111
│ │ │ │ +
113
│ │ │ │ +
│ │ │ │ +
117 const FiniteElement make(const BackendFiniteElement &backend) const
│ │ │ │ +
118 { return FiniteElement(backend); }
│ │ │ │ +
│ │ │ │ +
120
│ │ │ │ +
124 const FiniteElement
│ │ │ │ +
│ │ │ │ +
125 make(const std::shared_ptr<const BackendFiniteElement> &backendSPtr) const
│ │ │ │ +
126 { return FiniteElement(backendSPtr); }
│ │ │ │ +
│ │ │ │ +
127
│ │ │ │ +
128 };
│ │ │ │ +
│ │ │ │ +
129
│ │ │ │ +
130} // namespace Dune
│ │ │ │ +
131
│ │ │ │ +
132#endif // DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
FiniteElement for lowest order edge elements on simplices.
Definition edges0.5.hh:42
│ │ │ │ -
EdgeS0_5FiniteElement(const Geometry &geo, const VertexOrder &vertexOrder)
Constructor.
Definition edges0.5.hh:65
│ │ │ │ -
static constexpr GeometryType type()
return geometry type of this element
Definition edges0.5.hh:79
│ │ │ │ -
const Traits::Basis & basis() const
return reference to the basis object
Definition edges0.5.hh:71
│ │ │ │ -
const Traits::Interpolation & interpolation() const
return reference to the interpolation object
Definition edges0.5.hh:73
│ │ │ │ -
const Traits::Coefficients & coefficients() const
return reference to the coefficients object
Definition edges0.5.hh:76
│ │ │ │ -
Definition edges0.5.hh:47
│ │ │ │ -
EdgeS0_5Coefficients< Geometry::mydimension > Coefficients
Definition edges0.5.hh:51
│ │ │ │ -
EdgeS0_5Interpolation< Geometry, typename Basis::Traits > Interpolation
Definition edges0.5.hh:50
│ │ │ │ -
EdgeS0_5Basis< Geometry, RF > Basis
Definition edges0.5.hh:48
│ │ │ │ -
Factory for EdgeS0_5FiniteElement objects.
Definition edges0.5.hh:103
│ │ │ │ -
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct the factory
Definition edges0.5.hh:122
│ │ │ │ -
EdgeS0_5FiniteElement< Geometry, RF > FiniteElement
Definition edges0.5.hh:104
│ │ │ │ -
Basis for order 0.5 (lowest order) edge elements on simplices.
Definition whitney/edges0.5/basis.hh:38
│ │ │ │ -
export type traits for function signature
Definition whitney/edges0.5/basis.hh:41
│ │ │ │ -
Coefficients for lowest order edge elements on simplices.
Definition whitney/edges0.5/coefficients.hh:31
│ │ │ │ -
Interpolation for lowest order edge elements on simplices.
Definition whitney/edges0.5/interpolation.hh:33
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
│ │ │ │ +
Meta-finite element turning a scalar finite element into vector-valued one.
Definition power.hh:29
│ │ │ │ +
const Traits::Basis & basis() const
Extract basis of this finite element.
Definition power.hh:77
│ │ │ │ +
GeometryType type() const
Extract geometry type of this finite element.
Definition power.hh:93
│ │ │ │ +
const Traits::Interpolation & interpolation() const
Extract interpolation of this finite element.
Definition power.hh:90
│ │ │ │ +
PowerFiniteElement(const Backend &backend_)
Construct a finite element.
Definition power.hh:53
│ │ │ │ +
PowerFiniteElement(const std::shared_ptr< const Backend > &backendSPtr)
Construct a finite element.
Definition power.hh:65
│ │ │ │ +
const Traits::Coefficients & coefficients() const
Extract coefficients of this finite element.
Definition power.hh:83
│ │ │ │ +
types of component objects
Definition power.hh:32
│ │ │ │ +
PowerBasis< typename Backend::Traits::Basis, dimR > Basis
type of the Basis
Definition power.hh:34
│ │ │ │ +
PowerCoefficients Coefficients
type of the Coefficients
Definition power.hh:36
│ │ │ │ +
PowerInterpolation< typename Backend::Traits::Interpolation, typename Basis::Traits > Interpolation
type of the Interpolation
Definition power.hh:39
│ │ │ │ +
Factory for meta-finite elements turning scalar finite elements into vector-valued ones.
Definition power.hh:107
│ │ │ │ +
const FiniteElement make(const std::shared_ptr< const BackendFiniteElement > &backendSPtr) const
create a finite element
Definition power.hh:125
│ │ │ │ +
const FiniteElement make(const BackendFiniteElement &backend) const
create a finite element
Definition power.hh:117
│ │ │ │ +
PowerFiniteElement< BackendFiniteElement, dimR > FiniteElement
Type of the finite element.
Definition power.hh:110
│ │ │ │ +
Meta-basis turning a scalar basis into vector-valued basis.
Definition meta/power/basis.hh:26
│ │ │ │ +
Meta-coefficients turning a scalar coefficients into vector-valued coefficients.
Definition meta/power/coefficients.hh:23
│ │ │ │ +
Meta-interpolation turning a scalar interpolation into vector-valued interpolation.
Definition meta/power/interpolation.hh:26
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,151 +1,171 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ -edges0.5.hh │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ +power.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ 5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ 8 │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_b_a_s_i_s_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e { │ │ │ │ │ -16 │ │ │ │ │ -18 // │ │ │ │ │ -19 // FiniteElement │ │ │ │ │ -20 // │ │ │ │ │ -21 │ │ │ │ │ -23 │ │ │ │ │ -41 template │ │ │ │ │ -_4_2 class _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ -43 public: │ │ │ │ │ -_4_7 struct _T_r_a_i_t_s { │ │ │ │ │ -_4_8 typedef _E_d_g_e_S_0___5_B_a_s_i_s_<_G_e_o_m_e_t_r_y_,_ _R_F_> _B_a_s_i_s; │ │ │ │ │ -49 typedef _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_5_1 typedef _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_<_G_e_o_m_e_t_r_y_:_:_m_y_d_i_m_e_n_s_i_o_n_> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -52 }; │ │ │ │ │ -53 │ │ │ │ │ -54 private: │ │ │ │ │ -55 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ -56 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ -57 static const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& coefficients_; │ │ │ │ │ -58 │ │ │ │ │ -59 public: │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_b_a_s_i_s_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +17 │ │ │ │ │ +18namespace _D_u_n_e { │ │ │ │ │ +19 │ │ │ │ │ +22 │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ +30 public: │ │ │ │ │ +_3_2 struct _T_r_a_i_t_s { │ │ │ │ │ +_3_4 typedef _P_o_w_e_r_B_a_s_i_s_<_t_y_p_e_n_a_m_e_ _B_a_c_k_e_n_d_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s_,_ _d_i_m_R_> _B_a_s_i_s; │ │ │ │ │ +_3_6 typedef _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +38 typedef _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +40 }; │ │ │ │ │ +41 private: │ │ │ │ │ +42 std::shared_ptr backend; │ │ │ │ │ +43 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ +44 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ +45 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +46 │ │ │ │ │ +47 public: │ │ │ │ │ +49 │ │ │ │ │ +_5_3 _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t(const Backend &backend_) : │ │ │ │ │ +54 backend(new Backend(backend_)), │ │ │ │ │ +55 basis_(backend->_b_a_s_i_s()), │ │ │ │ │ +56 coefficients_(backend->_c_o_e_f_f_i_c_i_e_n_t_s(), dimR), │ │ │ │ │ +57 interpolation_(backend->_i_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ +58 { } │ │ │ │ │ +59 │ │ │ │ │ 61 │ │ │ │ │ -64 template │ │ │ │ │ -_6_5 _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry& geo, │ │ │ │ │ -66 const VertexOrder& vertexOrder) : │ │ │ │ │ -67 basis_(geo, vertexOrder), interpolation_(geo, vertexOrder) │ │ │ │ │ -68 { } │ │ │ │ │ -69 │ │ │ │ │ -_7_1 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ -_7_3 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -74 { return interpolation_; } │ │ │ │ │ -_7_6 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -77 { return coefficients_; } │ │ │ │ │ -_7_9 static constexpr GeometryType _t_y_p_e() { return GeometryTypes::simplex │ │ │ │ │ -(Geometry::mydimension); } │ │ │ │ │ -80 }; │ │ │ │ │ -81 │ │ │ │ │ -82 template │ │ │ │ │ -83 const typename _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_>_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& │ │ │ │ │ -84 EdgeS0_5FiniteElement::coefficients_ = │ │ │ │ │ -85 typename Traits::Coefficients(); │ │ │ │ │ +_6_5 _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t(const std::shared_ptr &backendSPtr) : │ │ │ │ │ +66 backend(backendSPtr), │ │ │ │ │ +67 basis_(backend->_b_a_s_i_s()), │ │ │ │ │ +68 coefficients_(backend->_c_o_e_f_f_i_c_i_e_n_t_s(), dimR), │ │ │ │ │ +69 interpolation_(backend->_i_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ +70 { } │ │ │ │ │ +71 │ │ │ │ │ +73 │ │ │ │ │ +_7_7 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ +79 │ │ │ │ │ +_8_3 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +84 { return coefficients_; } │ │ │ │ │ 86 │ │ │ │ │ -88 // │ │ │ │ │ -89 // Factory │ │ │ │ │ -90 // │ │ │ │ │ -91 │ │ │ │ │ -93 │ │ │ │ │ -102 template │ │ │ │ │ -_1_0_3 struct _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ -_1_0_4 typedef _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -105 │ │ │ │ │ -107 │ │ │ │ │ -121 template │ │ │ │ │ -_1_2_2 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ -123 const VertexOrder& vertexOrder) │ │ │ │ │ -124 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ -125 }; │ │ │ │ │ -126 │ │ │ │ │ -127} // namespace Dune │ │ │ │ │ -128 │ │ │ │ │ -129#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ +_9_0 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +91 { return interpolation_; } │ │ │ │ │ +_9_3 GeometryType _t_y_p_e() const { return backend->type(); } │ │ │ │ │ +94 }; │ │ │ │ │ +95 │ │ │ │ │ +98 │ │ │ │ │ +105 template │ │ │ │ │ +_1_0_6 class _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +107 { │ │ │ │ │ +108 public: │ │ │ │ │ +_1_1_0 typedef _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_B_a_c_k_e_n_d_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _d_i_m_R_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +111 │ │ │ │ │ +113 │ │ │ │ │ +_1_1_7 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const BackendFiniteElement &backend) const │ │ │ │ │ +118 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(backend); } │ │ │ │ │ +120 │ │ │ │ │ +124 const _F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +_1_2_5 _m_a_k_e(const std::shared_ptr &backendSPtr) const │ │ │ │ │ +126 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(backendSPtr); } │ │ │ │ │ +127 │ │ │ │ │ +128 }; │ │ │ │ │ +129 │ │ │ │ │ +130} // namespace Dune │ │ │ │ │ +131 │ │ │ │ │ +132#endif // DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -FiniteElement for lowest order edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -EdgeS0_5FiniteElement(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ -Constructor. │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -return geometry type of this element │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Meta-finite element turning a scalar finite element into vector-valued one. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ const Traits::Basis & basis() const │ │ │ │ │ -return reference to the basis object │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Extract basis of this finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:77 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +Extract geometry type of this finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:93 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ const Traits::Interpolation & interpolation() const │ │ │ │ │ -return reference to the interpolation object │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Extract interpolation of this finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +PowerFiniteElement(const Backend &backend_) │ │ │ │ │ +Construct a finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +PowerFiniteElement(const std::shared_ptr< const Backend > &backendSPtr) │ │ │ │ │ +Construct a finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ const Traits::Coefficients & coefficients() const │ │ │ │ │ -return reference to the coefficients object │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -EdgeS0_5Coefficients< Geometry::mydimension > Coefficients │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -EdgeS0_5Interpolation< Geometry, typename Basis::Traits > Interpolation │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -EdgeS0_5Basis< Geometry, RF > Basis │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory for EdgeS0_5FiniteElement objects. │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:103 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ -&vertexOrder) │ │ │ │ │ -construct the factory │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:122 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -EdgeS0_5FiniteElement< Geometry, RF > FiniteElement │ │ │ │ │ -DDeeffiinniittiioonn edges0.5.hh:104 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ -Basis for order 0.5 (lowest order) edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Coefficients for lowest order edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Interpolation for lowest order edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:33 │ │ │ │ │ +Extract coefficients of this finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +types of component objects │ │ │ │ │ +DDeeffiinniittiioonn power.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +PowerBasis< typename Backend::Traits::Basis, dimR > Basis │ │ │ │ │ +type of the Basis │ │ │ │ │ +DDeeffiinniittiioonn power.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +PowerCoefficients Coefficients │ │ │ │ │ +type of the Coefficients │ │ │ │ │ +DDeeffiinniittiioonn power.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +PowerInterpolation< typename Backend::Traits::Interpolation, typename Basis:: │ │ │ │ │ +Traits > Interpolation │ │ │ │ │ +type of the Interpolation │ │ │ │ │ +DDeeffiinniittiioonn power.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for meta-finite elements turning scalar finite elements into vector- │ │ │ │ │ +valued ones. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const std::shared_ptr< const BackendFiniteElement > │ │ │ │ │ +&backendSPtr) const │ │ │ │ │ +create a finite element │ │ │ │ │ +DDeeffiinniittiioonn power.hh:125 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const BackendFiniteElement &backend) const │ │ │ │ │ +create a finite element │ │ │ │ │ +DDeeffiinniittiioonn power.hh:117 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +PowerFiniteElement< BackendFiniteElement, dimR > FiniteElement │ │ │ │ │ +Type of the finite element. │ │ │ │ │ +DDeeffiinniittiioonn power.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ +Meta-basis turning a scalar basis into vector-valued basis. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ +coefficients. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/coefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ +interpolation. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/interpolation.hh:26 │ │ │ │ │ _b_a_s_i_s_._h_h │ │ │ │ │ _c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: bdfmcube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2dlocalbasis.hh File Reference
│ │ │ │ +
bdfmcube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
class  Dune::BDFMCubeLocalFiniteElement< D, R, dim, order >
 Brezzi-Douglas-Fortin-Marini finite elements for cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +bdfmcube.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ +_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ +_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ +  Brezzi-Douglas-Fortin-Marini finite elements for cubes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00032_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: bdfmcube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,320 +70,95 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2dlocalbasis.hh
│ │ │ │ +
bdfmcube.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include "../../common/localbasis.hh"
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │
16
│ │ │ │ -
17namespace Dune
│ │ │ │ +
│ │ │ │ +
17namespace Dune
│ │ │ │
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ - │ │ │ │ -
34 R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
35 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {
│ │ │ │ -
40 for (size_t i=0; i<4; i++)
│ │ │ │ -
41 sign_[i] = 1.0;
│ │ │ │ -
42 }
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
49 BDM2Cube2DLocalBasis(std::bitset<4> s)
│ │ │ │ -
50 {
│ │ │ │ -
51 for (size_t i=0; i<4; i++)
│ │ │ │ -
52 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
56 unsigned int size() const
│ │ │ │ -
57 {
│ │ │ │ -
58 return 14;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
67 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
69 {
│ │ │ │ -
70 out.resize(size());
│ │ │ │ -
71
│ │ │ │ -
72 out[0][0] = sign_[0]*(-2.25 + 5.25*in[0] + 7.5*in[1] - 7.5*in[0]*in[1] - 3.0*in[0]*in[0] - 7.5*in[1]*in[1] + 7.5*in[0]*in[1]*in[1]);
│ │ │ │ -
73 out[0][1] = sign_[0]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in[1]);
│ │ │ │ -
74 out[1][0] = 3.0 - 3.0*in[0]-6.0*in[1] + 6.0*in[0]*in[1];
│ │ │ │ -
75 out[1][1] = 0.0;
│ │ │ │ -
76 out[2][0] = sign_[0]*(-3.75 + 3.75*in[0] + 22.5*in[1] - 22.5*in[0]*in[1] - 22.5*in[1]*in[1] + 22.5*in[0]*in[1]*in[1]);
│ │ │ │ -
77 out[2][1] = sign_[0]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in[1]);
│ │ │ │ -
78 out[3][0] = sign_[1]*(-0.75*in[0] - 7.5*in[0]*in[1] + 3.0*in[0]*in[0] + 7.5*in[0]*in[1]*in[1]);
│ │ │ │ -
79 out[3][1] = sign_[1]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in[1]);
│ │ │ │ -
80 out[4][0] = 3.0*in[0] - 6.0*in[0]*in[1];
│ │ │ │ -
81 out[4][1] = 0.0;
│ │ │ │ -
82 out[5][0] = sign_[1]*(+3.75*in[0] - 22.5*in[0]*in[1] + 22.5*in[0]*in[1]*in[1]);
│ │ │ │ -
83 out[5][1] = sign_[1]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in[1]);
│ │ │ │ -
84 out[6][0] = sign_[2]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in[0]);
│ │ │ │ -
85 out[6][1] = sign_[2]*(-2.25 + 7.5*in[0] + 5.25*in[1] - 7.5*in[0]*in[1] - 7.5*in[0]*in[0] - 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]);
│ │ │ │ -
86 out[7][0] = 0.0;
│ │ │ │ -
87 out[7][1] = -3.0 + 6.0*in[0] + 3.0*in[1] - 6.0*in[0]*in[1];
│ │ │ │ -
88 out[8][0] = sign_[2]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in[0]);
│ │ │ │ -
89 out[8][1] = sign_[2]*(-3.75 + 22.5*in[0] + 3.75*in[1] - 22.5*in[0]*in[1] - 22.5*in[0]*in[0] + 22.5*in[0]*in[0]*in[1]);
│ │ │ │ -
90 out[9][0] = sign_[3]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in[0]);
│ │ │ │ -
91 out[9][1] = sign_[3]*(-0.75*in[1] - 7.5*in[0]*in[1] + 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]);
│ │ │ │ -
92 out[10][0] = 0.0;
│ │ │ │ -
93 out[10][1] = -3.0*in[1] + 6.0*in[0]*in[1];
│ │ │ │ -
94 out[11][0] = sign_[3]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in[0]);
│ │ │ │ -
95 out[11][1] = sign_[3]*(3.75*in[1] - 22.5*in[0]*in[1] + 22.5*in[0]*in[0]*in[1]);
│ │ │ │ -
96 out[12][0] = 6.0*in[0] - 6.0*in[0]*in[0];
│ │ │ │ -
97 out[12][1] = 0.0;
│ │ │ │ -
98 out[13][0] = 0.0;
│ │ │ │ -
99 out[13][1] = 6.0*in[1] - 6.0*in[1]*in[1];
│ │ │ │ -
100 }
│ │ │ │ -
│ │ │ │ -
101
│ │ │ │ -
│ │ │ │ -
108 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
109 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
110 {
│ │ │ │ -
111 out.resize(size());
│ │ │ │ -
112
│ │ │ │ -
113 out[0][0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ -
114 out[0][0][1] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ -
115 out[0][1][0] = 0.0;
│ │ │ │ -
116 out[0][1][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ -
117
│ │ │ │ -
118 out[1][0][0] = -3.0 + 6.0*in[1];
│ │ │ │ -
119 out[1][0][1] = -6.0 + 6.0*in[0];
│ │ │ │ -
120 out[1][1][0] = 0.0;
│ │ │ │ -
121 out[1][1][1] = 0.0;
│ │ │ │ -
122
│ │ │ │ -
123 out[2][0][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ -
124 out[2][0][1] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]);
│ │ │ │ -
125 out[2][1][0] = 0.0;
│ │ │ │ -
126 out[2][1][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ -
127
│ │ │ │ -
128 out[3][0][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ -
129 out[3][0][1] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ -
130 out[3][1][0] = 0.0;
│ │ │ │ -
131 out[3][1][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ -
132
│ │ │ │ -
133 out[4][0][0] = 3.0 - 6.0*in[1];
│ │ │ │ -
134 out[4][0][1] = -6.0*in[0];
│ │ │ │ -
135 out[4][1][0] = 0.0;
│ │ │ │ -
136 out[4][1][1] = 0.0;
│ │ │ │ -
137
│ │ │ │ -
138 out[5][0][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ -
139 out[5][0][1] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ -
140 out[5][1][0] = 0.0;
│ │ │ │ -
141 out[5][1][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ -
142
│ │ │ │ -
143 out[6][0][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ -
144 out[6][0][1] = 0.0;
│ │ │ │ -
145 out[6][1][0] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ -
146 out[6][1][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ -
147
│ │ │ │ -
148 out[7][0][0] = 0.0;
│ │ │ │ -
149 out[7][0][1] = 0.0;
│ │ │ │ -
150 out[7][1][0] = 6.0 - 6.0*in[1];
│ │ │ │ -
151 out[7][1][1] = 3.0 - 6.0*in[0];
│ │ │ │ -
152
│ │ │ │ -
153 out[8][0][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ -
154 out[8][0][1] = 0.0;
│ │ │ │ -
155 out[8][1][0] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ -
156 out[8][1][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ -
157
│ │ │ │ -
158 out[9][0][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ -
159 out[9][0][1] = 0.0;
│ │ │ │ -
160 out[9][1][0] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ -
161 out[9][1][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ -
162
│ │ │ │ -
163 out[10][0][0] = 0.0;
│ │ │ │ -
164 out[10][0][1] = 0.0;
│ │ │ │ -
165 out[10][1][0] = 6.0*in[1];
│ │ │ │ -
166 out[10][1][1] = -3.0 + 6.0*in[0];
│ │ │ │ -
167
│ │ │ │ -
168 out[11][0][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ -
169 out[11][0][1] = 0.0;
│ │ │ │ -
170 out[11][1][0] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]);
│ │ │ │ -
171 out[11][1][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ -
172
│ │ │ │ -
173 out[12][0][0] = 6.0 - 12.0*in[0];
│ │ │ │ -
174 out[12][0][1] = 0.0;
│ │ │ │ -
175 out[12][1][0] = 0.0;
│ │ │ │ -
176 out[12][1][1] = 0.0;
│ │ │ │ -
177
│ │ │ │ -
178 out[13][0][0] = 0.0;
│ │ │ │ -
179 out[13][0][1] = 0.0;
│ │ │ │ -
180 out[13][1][0] = 0.0;
│ │ │ │ -
181 out[13][1][1] = 6.0 - 12.0*in[1];
│ │ │ │ -
182 }
│ │ │ │ -
│ │ │ │ -
183
│ │ │ │ -
│ │ │ │ -
185 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
186 const typename Traits::DomainType& in, // position
│ │ │ │ -
187 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
188 {
│ │ │ │ -
189 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
190 if (totalOrder == 0) {
│ │ │ │ -
191 evaluateFunction(in, out);
│ │ │ │ -
192 } else if (totalOrder == 1) {
│ │ │ │ -
193 out.resize(size());
│ │ │ │ -
194 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
195
│ │ │ │ -
196 switch (direction) {
│ │ │ │ -
197 case 0:
│ │ │ │ -
198 out[0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ -
199 out[0][1] = 0.0;
│ │ │ │ -
200
│ │ │ │ -
201 out[1][0] = -3.0 + 6.0*in[1];
│ │ │ │ -
202 out[1][1] = 0.0;
│ │ │ │ -
203
│ │ │ │ -
204 out[2][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ -
205 out[2][1] = 0.0;
│ │ │ │ -
206
│ │ │ │ -
207 out[3][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ -
208 out[3][1] = 0.0;
│ │ │ │ -
209
│ │ │ │ -
210 out[4][0] = 3.0 - 6.0*in[1];
│ │ │ │ -
211 out[4][1] = 0.0;
│ │ │ │ -
212
│ │ │ │ -
213 out[5][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ -
214 out[5][1] = 0.0;
│ │ │ │ -
215
│ │ │ │ -
216 out[6][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ -
217 out[6][1] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ -
218
│ │ │ │ -
219 out[7][0] = 0.0;
│ │ │ │ -
220 out[7][1] = 6.0 - 6.0*in[1];
│ │ │ │ -
221
│ │ │ │ -
222 out[8][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ -
223 out[8][1] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ -
224
│ │ │ │ -
225 out[9][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ -
226 out[9][1] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ -
227
│ │ │ │ -
228 out[10][0] = 0.0;
│ │ │ │ -
229 out[10][1] = 6.0*in[1];
│ │ │ │ -
230
│ │ │ │ -
231 out[11][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ -
232 out[11][1] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]);
│ │ │ │ -
233
│ │ │ │ -
234 out[12][0] = 6.0 - 12.0*in[0];
│ │ │ │ -
235 out[12][1] = 0.0;
│ │ │ │ -
236
│ │ │ │ -
237 out[13][0] = 0.0;
│ │ │ │ -
238 out[13][1] = 0.0;
│ │ │ │ -
239 break;
│ │ │ │ -
240 case 1:
│ │ │ │ -
241 out[0][0] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ -
242 out[0][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ -
243
│ │ │ │ -
244 out[1][0] = -6.0 + 6.0*in[0];
│ │ │ │ -
245 out[1][1] = 0.0;
│ │ │ │ -
246
│ │ │ │ -
247 out[2][0] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]);
│ │ │ │ -
248 out[2][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ -
249
│ │ │ │ -
250 out[3][0] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ -
251 out[3][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ -
252
│ │ │ │ -
253 out[4][0] = -6.0*in[0];
│ │ │ │ -
254 out[4][1] = 0.0;
│ │ │ │ -
255
│ │ │ │ -
256 out[5][0] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ -
257 out[5][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ -
258
│ │ │ │ -
259 out[6][0] = 0.0;
│ │ │ │ -
260 out[6][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ -
261
│ │ │ │ -
262 out[7][0] = 0.0;
│ │ │ │ -
263 out[7][1] = 3.0 - 6.0*in[0];
│ │ │ │ -
264
│ │ │ │ -
265 out[8][0] = 0.0;
│ │ │ │ -
266 out[8][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ -
267
│ │ │ │ -
268 out[9][0] = 0.0;
│ │ │ │ -
269 out[9][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ -
270
│ │ │ │ -
271 out[10][0] = 0.0;
│ │ │ │ -
272 out[10][1] = -3.0 + 6.0*in[0];
│ │ │ │ -
273
│ │ │ │ -
274 out[11][0] = 0.0;
│ │ │ │ -
275 out[11][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ -
276
│ │ │ │ -
277 out[12][0] = 0.0;
│ │ │ │ -
278 out[12][1] = 0.0;
│ │ │ │ -
279
│ │ │ │ -
280 out[13][0] = 0.0;
│ │ │ │ -
281 out[13][1] = 6.0 - 12.0*in[1];
│ │ │ │ -
282 break;
│ │ │ │ -
283 default:
│ │ │ │ -
284 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
285 }
│ │ │ │ -
286 } else {
│ │ │ │ -
287 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
288 }
│ │ │ │ -
289 }
│ │ │ │ -
│ │ │ │ -
290
│ │ │ │ -
│ │ │ │ -
292 unsigned int order() const
│ │ │ │ -
293 {
│ │ │ │ -
294 return 3;
│ │ │ │ -
295 }
│ │ │ │ -
│ │ │ │ -
296
│ │ │ │ -
297 private:
│ │ │ │ -
298 std::array<R,4> sign_;
│ │ │ │ -
299 };
│ │ │ │ -
│ │ │ │ -
300} // end namespace Dune
│ │ │ │ -
301#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
19
│ │ │ │ +
43 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
49
│ │ │ │ +
50 public:
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ + │ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
61 BDFMCubeLocalFiniteElement (std::bitset<2*dim> s)
│ │ │ │ +
62 : basis( s ), interpolation( s )
│ │ │ │ +
63 {}
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
65 auto localBasis () const -> const LocalBasis& { return basis; }
│ │ │ │ +
66 auto localCoefficients () const -> const LocalCoefficients& { return coefficients; }
│ │ │ │ +
67 auto localInterpolation () const -> const LocalInterpolation& { return interpolation; }
│ │ │ │ +
68
│ │ │ │ +
70 unsigned int size () const { return basis.size(); }
│ │ │ │ +
71 static constexpr auto type () -> GeometryType { return GeometryTypes::cube(dim); }
│ │ │ │ +
72
│ │ │ │ +
73 private:
│ │ │ │ +
74 LocalBasis basis;
│ │ │ │ +
75 LocalCoefficients coefficients;
│ │ │ │ +
76 LocalInterpolation interpolation;
│ │ │ │ +
77 };
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79} // namespace Dune
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
81#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:30
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:185
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:292
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:67
│ │ │ │ -
BDM2Cube2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:38
│ │ │ │ -
BDM2Cube2DLocalBasis(std::bitset< 4 > s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:49
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini2cube2dlocalbasis.hh:35
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini2cube2dlocalbasis.hh:56
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:108
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Brezzi-Douglas-Fortin-Marini finite elements for cubes.
Definition bdfmcube.hh:45
│ │ │ │ +
auto localCoefficients() const -> const LocalCoefficients &
Definition bdfmcube.hh:66
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition bdfmcube.hh:70
│ │ │ │ +
BDFMCubeLocalFiniteElement()
Standard constructor.
Definition bdfmcube.hh:54
│ │ │ │ +
auto localBasis() const -> const LocalBasis &
Definition bdfmcube.hh:65
│ │ │ │ +
static constexpr auto type() -> GeometryType
Definition bdfmcube.hh:71
│ │ │ │ +
auto localInterpolation() const -> const LocalInterpolation &
Definition bdfmcube.hh:67
│ │ │ │ +
BDFMCubeLocalFiniteElement(std::bitset< 2 *dim > s)
Make set number s, where 0 <= s < 2^(2*dim)
Definition bdfmcube.hh:61
│ │ │ │ +
Brezzi-Douglas-Fortin-Marini shape functions on a reference cube.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:37
│ │ │ │ +
Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:33
│ │ │ │ +
Interpolation for Brezzi-Douglas-Fortin-Marini shape functions on cubes.
Definition brezzidouglasfortinmarini/cube/localinterpolation.hh:36
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,350 +1,114 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ -brezzidouglasmarini2cube2dlocalbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ +bdfmcube.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include "../../common/localbasis.hh" │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ +_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ +_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +15 │ │ │ │ │ 16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ +_1_7namespace _D_u_n_e │ │ │ │ │ 18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>, │ │ │ │ │ -34 R,2,Dune::FieldVector, │ │ │ │ │ -_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ -39 { │ │ │ │ │ -40 for (size_t i=0; i<4; i++) │ │ │ │ │ -41 sign_[i] = 1.0; │ │ │ │ │ -42 } │ │ │ │ │ -43 │ │ │ │ │ -_4_9 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s(std::bitset<4> s) │ │ │ │ │ -50 { │ │ │ │ │ -51 for (size_t i=0; i<4; i++) │ │ │ │ │ -52 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 unsigned int _s_i_z_e() const │ │ │ │ │ -57 { │ │ │ │ │ -58 return 14; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -68 std::vector& out) const │ │ │ │ │ -69 { │ │ │ │ │ -70 out.resize(_s_i_z_e()); │ │ │ │ │ -71 │ │ │ │ │ -72 out[0][0] = sign_[0]*(-2.25 + 5.25*in[0] + 7.5*in[1] - 7.5*in[0]*in[1] - │ │ │ │ │ -3.0*in[0]*in[0] - 7.5*in[1]*in[1] + 7.5*in[0]*in[1]*in[1]); │ │ │ │ │ -73 out[0][1] = sign_[0]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -74 out[1][0] = 3.0 - 3.0*in[0]-6.0*in[1] + 6.0*in[0]*in[1]; │ │ │ │ │ -75 out[1][1] = 0.0; │ │ │ │ │ -76 out[2][0] = sign_[0]*(-3.75 + 3.75*in[0] + 22.5*in[1] - 22.5*in[0]*in[1] - │ │ │ │ │ -22.5*in[1]*in[1] + 22.5*in[0]*in[1]*in[1]); │ │ │ │ │ -77 out[2][1] = sign_[0]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -78 out[3][0] = sign_[1]*(-0.75*in[0] - 7.5*in[0]*in[1] + 3.0*in[0]*in[0] + │ │ │ │ │ -7.5*in[0]*in[1]*in[1]); │ │ │ │ │ -79 out[3][1] = sign_[1]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -80 out[4][0] = 3.0*in[0] - 6.0*in[0]*in[1]; │ │ │ │ │ -81 out[4][1] = 0.0; │ │ │ │ │ -82 out[5][0] = sign_[1]*(+3.75*in[0] - 22.5*in[0]*in[1] + 22.5*in[0]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -83 out[5][1] = sign_[1]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -84 out[6][0] = sign_[2]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in │ │ │ │ │ -[0]); │ │ │ │ │ -85 out[6][1] = sign_[2]*(-2.25 + 7.5*in[0] + 5.25*in[1] - 7.5*in[0]*in[1] - │ │ │ │ │ -7.5*in[0]*in[0] - 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]); │ │ │ │ │ -86 out[7][0] = 0.0; │ │ │ │ │ -87 out[7][1] = -3.0 + 6.0*in[0] + 3.0*in[1] - 6.0*in[0]*in[1]; │ │ │ │ │ -88 out[8][0] = sign_[2]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in │ │ │ │ │ -[0]); │ │ │ │ │ -89 out[8][1] = sign_[2]*(-3.75 + 22.5*in[0] + 3.75*in[1] - 22.5*in[0]*in[1] - │ │ │ │ │ -22.5*in[0]*in[0] + 22.5*in[0]*in[0]*in[1]); │ │ │ │ │ -90 out[9][0] = sign_[3]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in │ │ │ │ │ -[0]); │ │ │ │ │ -91 out[9][1] = sign_[3]*(-0.75*in[1] - 7.5*in[0]*in[1] + 3.0*in[1]*in[1] + │ │ │ │ │ -7.5*in[0]*in[0]*in[1]); │ │ │ │ │ -92 out[10][0] = 0.0; │ │ │ │ │ -93 out[10][1] = -3.0*in[1] + 6.0*in[0]*in[1]; │ │ │ │ │ -94 out[11][0] = sign_[3]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in │ │ │ │ │ -[0]); │ │ │ │ │ -95 out[11][1] = sign_[3]*(3.75*in[1] - 22.5*in[0]*in[1] + 22.5*in[0]*in[0]*in │ │ │ │ │ -[1]); │ │ │ │ │ -96 out[12][0] = 6.0*in[0] - 6.0*in[0]*in[0]; │ │ │ │ │ -97 out[12][1] = 0.0; │ │ │ │ │ -98 out[13][0] = 0.0; │ │ │ │ │ -99 out[13][1] = 6.0*in[1] - 6.0*in[1]*in[1]; │ │ │ │ │ -100 } │ │ │ │ │ -101 │ │ │ │ │ -_1_0_8 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -109 std::vector& out) const │ │ │ │ │ -110 { │ │ │ │ │ -111 out.resize(_s_i_z_e()); │ │ │ │ │ -112 │ │ │ │ │ -113 out[0][0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ -114 out[0][0][1] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ -115 out[0][1][0] = 0.0; │ │ │ │ │ -116 out[0][1][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ -117 │ │ │ │ │ -118 out[1][0][0] = -3.0 + 6.0*in[1]; │ │ │ │ │ -119 out[1][0][1] = -6.0 + 6.0*in[0]; │ │ │ │ │ -120 out[1][1][0] = 0.0; │ │ │ │ │ -121 out[1][1][1] = 0.0; │ │ │ │ │ -122 │ │ │ │ │ -123 out[2][0][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ -124 out[2][0][1] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in │ │ │ │ │ -[1]); │ │ │ │ │ -125 out[2][1][0] = 0.0; │ │ │ │ │ -126 out[2][1][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ -127 │ │ │ │ │ -128 out[3][0][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ -129 out[3][0][1] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ -130 out[3][1][0] = 0.0; │ │ │ │ │ -131 out[3][1][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ -132 │ │ │ │ │ -133 out[4][0][0] = 3.0 - 6.0*in[1]; │ │ │ │ │ -134 out[4][0][1] = -6.0*in[0]; │ │ │ │ │ -135 out[4][1][0] = 0.0; │ │ │ │ │ -136 out[4][1][1] = 0.0; │ │ │ │ │ -137 │ │ │ │ │ -138 out[5][0][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ -139 out[5][0][1] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ -140 out[5][1][0] = 0.0; │ │ │ │ │ -141 out[5][1][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ -142 │ │ │ │ │ -143 out[6][0][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ -144 out[6][0][1] = 0.0; │ │ │ │ │ -145 out[6][1][0] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ -146 out[6][1][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ -147 │ │ │ │ │ -148 out[7][0][0] = 0.0; │ │ │ │ │ -149 out[7][0][1] = 0.0; │ │ │ │ │ -150 out[7][1][0] = 6.0 - 6.0*in[1]; │ │ │ │ │ -151 out[7][1][1] = 3.0 - 6.0*in[0]; │ │ │ │ │ -152 │ │ │ │ │ -153 out[8][0][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ -154 out[8][0][1] = 0.0; │ │ │ │ │ -155 out[8][1][0] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in │ │ │ │ │ -[1]); │ │ │ │ │ -156 out[8][1][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ -157 │ │ │ │ │ -158 out[9][0][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ -159 out[9][0][1] = 0.0; │ │ │ │ │ -160 out[9][1][0] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ -161 out[9][1][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ -162 │ │ │ │ │ -163 out[10][0][0] = 0.0; │ │ │ │ │ -164 out[10][0][1] = 0.0; │ │ │ │ │ -165 out[10][1][0] = 6.0*in[1]; │ │ │ │ │ -166 out[10][1][1] = -3.0 + 6.0*in[0]; │ │ │ │ │ -167 │ │ │ │ │ -168 out[11][0][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ -169 out[11][0][1] = 0.0; │ │ │ │ │ -170 out[11][1][0] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]); │ │ │ │ │ -171 out[11][1][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ -172 │ │ │ │ │ -173 out[12][0][0] = 6.0 - 12.0*in[0]; │ │ │ │ │ -174 out[12][0][1] = 0.0; │ │ │ │ │ -175 out[12][1][0] = 0.0; │ │ │ │ │ -176 out[12][1][1] = 0.0; │ │ │ │ │ -177 │ │ │ │ │ -178 out[13][0][0] = 0.0; │ │ │ │ │ -179 out[13][0][1] = 0.0; │ │ │ │ │ -180 out[13][1][0] = 0.0; │ │ │ │ │ -181 out[13][1][1] = 6.0 - 12.0*in[1]; │ │ │ │ │ -182 } │ │ │ │ │ -183 │ │ │ │ │ -_1_8_5 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -186 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -187 std::vector& out) const // return value │ │ │ │ │ -188 { │ │ │ │ │ -189 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -190 if (totalOrder == 0) { │ │ │ │ │ -191 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -192 } else if (totalOrder == 1) { │ │ │ │ │ -193 out.resize(_s_i_z_e()); │ │ │ │ │ -194 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -195 │ │ │ │ │ -196 switch (direction) { │ │ │ │ │ -197 case 0: │ │ │ │ │ -198 out[0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ -199 out[0][1] = 0.0; │ │ │ │ │ -200 │ │ │ │ │ -201 out[1][0] = -3.0 + 6.0*in[1]; │ │ │ │ │ -202 out[1][1] = 0.0; │ │ │ │ │ -203 │ │ │ │ │ -204 out[2][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ -205 out[2][1] = 0.0; │ │ │ │ │ -206 │ │ │ │ │ -207 out[3][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ -208 out[3][1] = 0.0; │ │ │ │ │ -209 │ │ │ │ │ -210 out[4][0] = 3.0 - 6.0*in[1]; │ │ │ │ │ -211 out[4][1] = 0.0; │ │ │ │ │ -212 │ │ │ │ │ -213 out[5][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ -214 out[5][1] = 0.0; │ │ │ │ │ -215 │ │ │ │ │ -216 out[6][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ -217 out[6][1] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ -218 │ │ │ │ │ -219 out[7][0] = 0.0; │ │ │ │ │ -220 out[7][1] = 6.0 - 6.0*in[1]; │ │ │ │ │ -221 │ │ │ │ │ -222 out[8][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ -223 out[8][1] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ -224 │ │ │ │ │ -225 out[9][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ -226 out[9][1] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ -227 │ │ │ │ │ -228 out[10][0] = 0.0; │ │ │ │ │ -229 out[10][1] = 6.0*in[1]; │ │ │ │ │ -230 │ │ │ │ │ -231 out[11][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ -232 out[11][1] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]); │ │ │ │ │ -233 │ │ │ │ │ -234 out[12][0] = 6.0 - 12.0*in[0]; │ │ │ │ │ -235 out[12][1] = 0.0; │ │ │ │ │ -236 │ │ │ │ │ -237 out[13][0] = 0.0; │ │ │ │ │ -238 out[13][1] = 0.0; │ │ │ │ │ -239 break; │ │ │ │ │ -240 case 1: │ │ │ │ │ -241 out[0][0] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ -242 out[0][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ -243 │ │ │ │ │ -244 out[1][0] = -6.0 + 6.0*in[0]; │ │ │ │ │ -245 out[1][1] = 0.0; │ │ │ │ │ -246 │ │ │ │ │ -247 out[2][0] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]); │ │ │ │ │ -248 out[2][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ -249 │ │ │ │ │ -250 out[3][0] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ -251 out[3][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ -252 │ │ │ │ │ -253 out[4][0] = -6.0*in[0]; │ │ │ │ │ -254 out[4][1] = 0.0; │ │ │ │ │ -255 │ │ │ │ │ -256 out[5][0] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ -257 out[5][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ -258 │ │ │ │ │ -259 out[6][0] = 0.0; │ │ │ │ │ -260 out[6][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ -261 │ │ │ │ │ -262 out[7][0] = 0.0; │ │ │ │ │ -263 out[7][1] = 3.0 - 6.0*in[0]; │ │ │ │ │ -264 │ │ │ │ │ -265 out[8][0] = 0.0; │ │ │ │ │ -266 out[8][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ -267 │ │ │ │ │ -268 out[9][0] = 0.0; │ │ │ │ │ -269 out[9][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ -270 │ │ │ │ │ -271 out[10][0] = 0.0; │ │ │ │ │ -272 out[10][1] = -3.0 + 6.0*in[0]; │ │ │ │ │ -273 │ │ │ │ │ -274 out[11][0] = 0.0; │ │ │ │ │ -275 out[11][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ -276 │ │ │ │ │ -277 out[12][0] = 0.0; │ │ │ │ │ -278 out[12][1] = 0.0; │ │ │ │ │ -279 │ │ │ │ │ -280 out[13][0] = 0.0; │ │ │ │ │ -281 out[13][1] = 6.0 - 12.0*in[1]; │ │ │ │ │ -282 break; │ │ │ │ │ -283 default: │ │ │ │ │ -284 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -285 } │ │ │ │ │ -286 } else { │ │ │ │ │ -287 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -288 } │ │ │ │ │ -289 } │ │ │ │ │ -290 │ │ │ │ │ -_2_9_2 unsigned int _o_r_d_e_r() const │ │ │ │ │ -293 { │ │ │ │ │ -294 return 3; │ │ │ │ │ -295 } │ │ │ │ │ -296 │ │ │ │ │ -297 private: │ │ │ │ │ -298 std::array sign_; │ │ │ │ │ -299 }; │ │ │ │ │ -300} // end namespace Dune │ │ │ │ │ -301#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +19 │ │ │ │ │ +43 template │ │ │ │ │ +_4_4 class _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +45 { │ │ │ │ │ +46 using _L_o_c_a_l_B_a_s_i_s = _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ +47 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s = _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ +48 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n = _B_D_F_M_C_u_b_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ +49 │ │ │ │ │ +50 public: │ │ │ │ │ +_5_1 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_,_ _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_, │ │ │ │ │ +_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_ _>; │ │ │ │ │ +52 │ │ │ │ │ +_5_4 _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () {} │ │ │ │ │ +55 │ │ │ │ │ +_6_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<2*dim> s) │ │ │ │ │ +62 : basis( s ), interpolation( s ) │ │ │ │ │ +63 {} │ │ │ │ │ +64 │ │ │ │ │ +_6_5 auto _l_o_c_a_l_B_a_s_i_s () const -> const _L_o_c_a_l_B_a_s_i_s& { return basis; } │ │ │ │ │ +_6_6 auto _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const -> const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s& { return │ │ │ │ │ +coefficients; } │ │ │ │ │ +_6_7 auto _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const -> const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n& { return │ │ │ │ │ +interpolation; } │ │ │ │ │ +68 │ │ │ │ │ +_7_0 unsigned int _s_i_z_e () const { return basis.size(); } │ │ │ │ │ +_7_1 static constexpr auto _t_y_p_e () -> GeometryType { return GeometryTypes::cube │ │ │ │ │ +(dim); } │ │ │ │ │ +72 │ │ │ │ │ +73 private: │ │ │ │ │ +74 LocalBasis basis; │ │ │ │ │ +75 LocalCoefficients coefficients; │ │ │ │ │ +76 LocalInterpolation interpolation; │ │ │ │ │ +77 }; │ │ │ │ │ +78 │ │ │ │ │ +79} // namespace Dune │ │ │ │ │ +80 │ │ │ │ │ +81#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:185 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:292 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM2Cube2DLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM2Cube2DLocalBasis(std::bitset< 4 > s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Brezzi-Douglas-Fortin-Marini finite elements for cubes. │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +auto localCoefficients() const -> const LocalCoefficients & │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:108 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDFMCubeLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +auto localBasis() const -> const LocalBasis & │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr auto type() -> GeometryType │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +auto localInterpolation() const -> const LocalInterpolation & │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDFMCubeLocalFiniteElement(std::bitset< 2 *dim > s) │ │ │ │ │ +Make set number s, where 0 <= s < 2^(2*dim) │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Interpolation for Brezzi-Douglas-Fortin-Marini shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localinterpolation.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2d.hh File Reference
│ │ │ │ +
monomiallocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
class  Dune::MonomialLocalCoefficients< static_size >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,21 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +monomiallocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _s_t_a_t_i_c___s_i_z_e_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00035_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2d.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,77 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2d.hh
│ │ │ │ +
monomiallocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
23 template<int static_size>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 : index(static_size, LocalKey(0,0,0))
│ │ │ │ +
30 {
│ │ │ │ +
31 for(int i = 0; i < static_size; ++i)
│ │ │ │ +
32 index[i].index(i);
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │
34
│ │ │ │
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::quadrilateral;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 BDM1Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
36 std::size_t size () const
│ │ │ │ +
37 {
│ │ │ │ +
38 return static_size;
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
42 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
43 {
│ │ │ │ +
44 return index[i];
│ │ │ │ +
45 }
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47 private:
│ │ │ │ +
48 std::vector<LocalKey> index;
│ │ │ │ +
49 };
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
51}
│ │ │ │ +
52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini1cube2d.hh:27
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1cube2d.hh:49
│ │ │ │ -
LocalFiniteElementTraits< BDM1Cube2DLocalBasis< D, R >, BDM1Cube2DLocalCoefficients, BDM1Cube2DLocalInterpolation< BDM1Cube2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1cube2d.hh:33
│ │ │ │ -
static constexpr GeometryType type()
Definition brezzidouglasmarini1cube2d.hh:70
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1cube2d.hh:54
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1cube2d.hh:65
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1cube2d.hh:59
│ │ │ │ -
BDM1Cube2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1cube2d.hh:36
│ │ │ │ -
BDM1Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2d.hh:44
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:30
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:24
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:25
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition monomiallocalcoefficients.hh:25
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition monomiallocalcoefficients.hh:36
│ │ │ │ +
MonomialLocalCoefficients()
Standard constructor.
Definition monomiallocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition monomiallocalcoefficients.hh:42
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,141 +1,73 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini1cube2d.hh │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ +monomiallocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ +29 : index(static_size, _L_o_c_a_l_K_e_y(0,0,0)) │ │ │ │ │ +30 { │ │ │ │ │ +31 for(int i = 0; i < static_size; ++i) │ │ │ │ │ +32 index[i].index(i); │ │ │ │ │ +33 } │ │ │ │ │ 34 │ │ │ │ │ -_3_6 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::quadrilateral; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_3_6 std::size_t _s_i_z_e () const │ │ │ │ │ +37 { │ │ │ │ │ +38 return static_size; │ │ │ │ │ +39 } │ │ │ │ │ +40 │ │ │ │ │ +_4_2 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +43 { │ │ │ │ │ +44 return index[i]; │ │ │ │ │ +45 } │ │ │ │ │ +46 │ │ │ │ │ +47 private: │ │ │ │ │ +48 std::vector index; │ │ │ │ │ +49 }; │ │ │ │ │ +50 │ │ │ │ │ +51} │ │ │ │ │ +52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< BDM1Cube2DLocalBasis< D, R >, │ │ │ │ │ -BDM1Cube2DLocalCoefficients, BDM1Cube2DLocalInterpolation< │ │ │ │ │ -BDM1Cube2DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Cube2DLocalFiniteElement() │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalcoefficients.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +MonomialLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ -quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ -quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalcoefficients.hh:42 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference
│ │ │ │ +
monomiallocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <array>
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include "../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Simplex2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on triangles. More...
class  Dune::MonomImp::EvalAccess< Traits >
 Access output vector of evaluateFunction() and evaluate() More...
 
class  Dune::MonomImp::JacobianAccess< Traits >
 Access output vector of evaluateJacobian() More...
 
struct  Dune::MonomImp::Evaluate< Traits, c >
 
struct  Dune::MonomImp::Evaluate< Traits, 1 >
 
class  Dune::MonomialLocalBasis< D, R, d, p >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
namespace  Dune::MonomImp
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,36 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +monomiallocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Brezzi-Douglas-Marini-2 elements on triangles. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_ _T_r_a_i_t_s_ _> │ │ │ │ │ +  Access output vector of evaluateFunction() and evaluate() _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_<_ _T_r_a_i_t_s_ _> │ │ │ │ │ +  Access output vector of evaluateJacobian() _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _c_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _1_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_,_ _p_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +namespace   _D_u_n_e_:_:_M_o_n_o_m_I_m_p │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00038_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,84 +70,304 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalcoefficients.hh
│ │ │ │ +
monomiallocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <cassert>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13#include <dune/common/math.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include "../common/localbasis.hh"
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
│ │ │ │ +
19 namespace MonomImp
│ │ │ │ +
20 {
│ │ │ │ +
22 template <typename Traits>
│ │ │ │
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i = 0; i < 3; ++i)
│ │ │ │ -
31 {
│ │ │ │ -
32 li[3 * i] = LocalKey(i,1,0);
│ │ │ │ -
33 li[3 * i + 1] = LocalKey(i,1,1);
│ │ │ │ -
34 li[3 * i + 2] = LocalKey(i,1,2);
│ │ │ │ -
35 }
│ │ │ │ -
36
│ │ │ │ -
37 // last DOFs are associated with the cell (codim=0)
│ │ │ │ -
38 li[9] = LocalKey(0,0,0);
│ │ │ │ -
39 li[10] = LocalKey(0,0,1);
│ │ │ │ -
40 li[11] = LocalKey(0,0,2);
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 std::size_t size() const
│ │ │ │ -
45 {
│ │ │ │ -
46 return 12;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
50 const LocalKey& localKey(std::size_t i) const
│ │ │ │ -
51 {
│ │ │ │ -
52 return li[i];
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 private:
│ │ │ │ -
56 std::vector<LocalKey> li;
│ │ │ │ -
57 };
│ │ │ │ -
│ │ │ │ -
58} // end namespace Dune
│ │ │ │ -
59#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
23 class EvalAccess {
│ │ │ │ +
24 std::vector<typename Traits::RangeType> &out;
│ │ │ │ +
25#ifndef NDEBUG
│ │ │ │ +
26 unsigned int first_unused_index;
│ │ │ │ +
27#endif
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ +
│ │ │ │ +
30 EvalAccess(std::vector<typename Traits::RangeType> &out_)
│ │ │ │ +
31 : out(out_)
│ │ │ │ +
32#ifndef NDEBUG
│ │ │ │ +
33 , first_unused_index(0)
│ │ │ │ +
34#endif
│ │ │ │ +
35 { }
│ │ │ │ +
│ │ │ │ +
36#ifndef NDEBUG
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 assert(first_unused_index == out.size());
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40#endif
│ │ │ │ +
│ │ │ │ +
41 typename Traits::RangeFieldType &operator[](unsigned int index)
│ │ │ │ +
42 {
│ │ │ │ +
43 assert(index < out.size());
│ │ │ │ +
44#ifndef NDEBUG
│ │ │ │ +
45 if(first_unused_index <= index)
│ │ │ │ +
46 first_unused_index = index+1;
│ │ │ │ +
47#endif
│ │ │ │ +
48 return out[index][0];
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50 };
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
53 template <typename Traits>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 std::vector<typename Traits::JacobianType> &out;
│ │ │ │ +
56 unsigned int row;
│ │ │ │ +
57#ifndef NDEBUG
│ │ │ │ +
58 unsigned int first_unused_index;
│ │ │ │ +
59#endif
│ │ │ │ +
60
│ │ │ │ +
61 public:
│ │ │ │ +
│ │ │ │ +
62 JacobianAccess(std::vector<typename Traits::JacobianType> &out_,
│ │ │ │ +
63 unsigned int row_)
│ │ │ │ +
64 : out(out_), row(row_)
│ │ │ │ +
65#ifndef NDEBUG
│ │ │ │ +
66 , first_unused_index(0)
│ │ │ │ +
67#endif
│ │ │ │ +
68 { }
│ │ │ │ +
│ │ │ │ +
69#ifndef NDEBUG
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
71 assert(first_unused_index == out.size());
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
73#endif
│ │ │ │ +
│ │ │ │ +
74 typename Traits::RangeFieldType &operator[](unsigned int index)
│ │ │ │ +
75 {
│ │ │ │ +
76 assert(index < out.size());
│ │ │ │ +
77#ifndef NDEBUG
│ │ │ │ +
78 if(first_unused_index <= index)
│ │ │ │ +
79 first_unused_index = index+1;
│ │ │ │ +
80#endif
│ │ │ │ +
81 return out[index][0][row];
│ │ │ │ +
82 }
│ │ │ │ +
│ │ │ │ +
83 };
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
97 template <typename Traits, int c>
│ │ │ │ +
│ │ │ │ +
98 struct Evaluate
│ │ │ │ +
99 {
│ │ │ │ +
101 constexpr static int d = Traits::dimDomain - c;
│ │ │ │ +
102
│ │ │ │ +
109 template <typename Access>
│ │ │ │ +
│ │ │ │ +
110 static void eval (
│ │ │ │ +
111 const typename Traits::DomainType &in,
│ │ │ │ +
114 const std::array<unsigned int, Traits::dimDomain> &derivatives,
│ │ │ │ +
117 typename Traits::RangeFieldType prod,
│ │ │ │ +
119 int bound,
│ │ │ │ +
121 int& index,
│ │ │ │ +
123 Access &access)
│ │ │ │ +
124 {
│ │ │ │ +
125 // start with the highest exponent for this dimension, then work down
│ │ │ │ +
126 for (int e = bound; e >= 0; --e)
│ │ │ │ +
127 {
│ │ │ │ +
128 // the rest of the available exponents, to be used by the other
│ │ │ │ +
129 // dimensions
│ │ │ │ +
130 int newbound = bound - e;
│ │ │ │ +
131 if(e < (int)derivatives[d])
│ │ │ │ + │ │ │ │ +
133 eval(in, derivatives, 0, newbound, index, access);
│ │ │ │ +
134 else {
│ │ │ │ +
135 int coeff = 1;
│ │ │ │ +
136 for(int i = e - derivatives[d] + 1; i <= e; ++i)
│ │ │ │ +
137 coeff *= i;
│ │ │ │ +
138 // call the evaluator for the next dimension
│ │ │ │ + │ │ │ │ +
140 eval( // pass the coordinate and the derivatives unchanged
│ │ │ │ +
141 in, derivatives,
│ │ │ │ +
142 // also pass the product accumulated so far, but also
│ │ │ │ +
143 // include the current dimension
│ │ │ │ +
144 prod * power(in[d], e-derivatives[d]) * coeff,
│ │ │ │ +
145 // pass the number of remaining exponents to the next
│ │ │ │ +
146 // dimension
│ │ │ │ +
147 newbound,
│ │ │ │ +
148 // pass the next index to fill and the output access
│ │ │ │ +
149 // wrapper
│ │ │ │ +
150 index, access);
│ │ │ │ +
151 }
│ │ │ │ +
152 }
│ │ │ │ +
153 }
│ │ │ │ +
│ │ │ │ +
154 };
│ │ │ │ +
│ │ │ │ +
155
│ │ │ │ +
160 template <typename Traits>
│ │ │ │ +
│ │ │ │ +
161 struct Evaluate<Traits, 1>
│ │ │ │ +
162 {
│ │ │ │ +
163 constexpr static int d = Traits::dimDomain-1;
│ │ │ │ +
165 template <typename Access>
│ │ │ │ +
│ │ │ │ +
166 static void eval (const typename Traits::DomainType &in,
│ │ │ │ +
167 const std::array<unsigned int, Traits::dimDomain> &derivatives,
│ │ │ │ +
168 typename Traits::RangeFieldType prod,
│ │ │ │ +
169 int bound, int& index, Access &access)
│ │ │ │ +
170 {
│ │ │ │ +
171 if(bound < (int)derivatives[d])
│ │ │ │ +
172 prod = 0;
│ │ │ │ +
173 else {
│ │ │ │ +
174 int coeff = 1;
│ │ │ │ +
175 for(int i = bound - derivatives[d] + 1; i <= bound; ++i)
│ │ │ │ +
176 coeff *= i;
│ │ │ │ +
177 prod *= power(in[d], bound-derivatives[d]) * coeff;
│ │ │ │ +
178 }
│ │ │ │ +
179 access[index] = prod;
│ │ │ │ +
180 ++index;
│ │ │ │ +
181 }
│ │ │ │ +
│ │ │ │ +
182 };
│ │ │ │ +
│ │ │ │ +
183
│ │ │ │ +
184 } //namespace MonomImp
│ │ │ │ +
│ │ │ │ +
185
│ │ │ │ +
200 template<class D, class R, unsigned int d, unsigned int p>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
202 {
│ │ │ │ +
203 // Helper: Number of shape functions for a k-th order element in dimension dd
│ │ │ │ +
204 static constexpr unsigned int size (int dd, int k)
│ │ │ │ +
205 {
│ │ │ │ +
206 if (dd==0 || k==0)
│ │ │ │ +
207 return 1;
│ │ │ │ +
208 return size(dd,k-1) + size(dd-1,k);
│ │ │ │ +
209 }
│ │ │ │ +
210
│ │ │ │ +
211 public:
│ │ │ │ +
213 typedef LocalBasisTraits<D,d,Dune::FieldVector<D,d>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
214 Dune::FieldMatrix<R,1,d> > Traits;
│ │ │ │ +
215
│ │ │ │ +
│ │ │ │ +
217 static constexpr unsigned int size ()
│ │ │ │ +
218 {
│ │ │ │ +
219 return size(d,p);
│ │ │ │ +
220 }
│ │ │ │ +
│ │ │ │ +
221
│ │ │ │ +
│ │ │ │ +
223 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
224 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
225 {
│ │ │ │ +
226 out.resize(size());
│ │ │ │ +
227 int index = 0;
│ │ │ │ +
228 std::array<unsigned int, d> derivatives;
│ │ │ │ +
229 std::fill(derivatives.begin(), derivatives.end(), 0);
│ │ │ │ + │ │ │ │ +
231 for (unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ +
232 MonomImp::Evaluate<Traits, d>::eval(in, derivatives, 1, lp, index, access);
│ │ │ │ +
233 }
│ │ │ │ +
│ │ │ │ +
234
│ │ │ │ +
│ │ │ │ +
240 inline void partial(const std::array<unsigned int,d>& order,
│ │ │ │ +
241 const typename Traits::DomainType& in,
│ │ │ │ +
242 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
243 {
│ │ │ │ +
244 out.resize(size());
│ │ │ │ +
245 int index = 0;
│ │ │ │ + │ │ │ │ +
247 for (unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ +
248 MonomImp::Evaluate<Traits, d>::eval(in, order, 1, lp, index, access);
│ │ │ │ +
249 }
│ │ │ │ +
│ │ │ │ +
250
│ │ │ │ +
252 inline void
│ │ │ │ +
│ │ │ │ +
253 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
254 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
255 {
│ │ │ │ +
256 out.resize(size());
│ │ │ │ +
257 std::array<unsigned int, d> derivatives;
│ │ │ │ +
258 for(unsigned int i = 0; i < d; ++i)
│ │ │ │ +
259 derivatives[i] = 0;
│ │ │ │ +
260 for(unsigned int i = 0; i < d; ++i)
│ │ │ │ +
261 {
│ │ │ │ +
262 derivatives[i] = 1;
│ │ │ │ +
263 int index = 0;
│ │ │ │ + │ │ │ │ +
265 for(unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ +
266 MonomImp::Evaluate<Traits, d>::eval(in, derivatives, 1, lp, index, access);
│ │ │ │ +
267 derivatives[i] = 0;
│ │ │ │ +
268 }
│ │ │ │ +
269 }
│ │ │ │ +
│ │ │ │ +
270
│ │ │ │ +
│ │ │ │ +
272 unsigned int order () const
│ │ │ │ +
273 {
│ │ │ │ +
274 return p;
│ │ │ │ +
275 }
│ │ │ │ +
│ │ │ │ +
276 };
│ │ │ │ +
│ │ │ │ +
277
│ │ │ │ +
278}
│ │ │ │ +
279
│ │ │ │ +
280#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-2 elements on triangles.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:24
│ │ │ │ -
BDM2Simplex2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:50
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:44
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Access output vector of evaluateFunction() and evaluate()
Definition monomiallocalbasis.hh:23
│ │ │ │ +
Traits::RangeFieldType & operator[](unsigned int index)
Definition monomiallocalbasis.hh:41
│ │ │ │ +
~EvalAccess()
Definition monomiallocalbasis.hh:37
│ │ │ │ +
EvalAccess(std::vector< typename Traits::RangeType > &out_)
Definition monomiallocalbasis.hh:30
│ │ │ │ +
Access output vector of evaluateJacobian()
Definition monomiallocalbasis.hh:54
│ │ │ │ +
~JacobianAccess()
Definition monomiallocalbasis.hh:70
│ │ │ │ +
Traits::RangeFieldType & operator[](unsigned int index)
Definition monomiallocalbasis.hh:74
│ │ │ │ +
JacobianAccess(std::vector< typename Traits::JacobianType > &out_, unsigned int row_)
Definition monomiallocalbasis.hh:62
│ │ │ │ +
Definition monomiallocalbasis.hh:99
│ │ │ │ +
static constexpr int d
The next dimension to try for factors.
Definition monomiallocalbasis.hh:101
│ │ │ │ +
static void eval(const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
Definition monomiallocalbasis.hh:110
│ │ │ │ +
static void eval(const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
Definition monomiallocalbasis.hh:166
│ │ │ │ +
Definition monomiallocalbasis.hh:202
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition monomiallocalbasis.hh:272
│ │ │ │ +
void partial(const std::array< unsigned int, d > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition monomiallocalbasis.hh:240
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition monomiallocalbasis.hh:253
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition monomiallocalbasis.hh:223
│ │ │ │ +
LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
export type traits for function signature
Definition monomiallocalbasis.hh:214
│ │ │ │ +
static constexpr unsigned int size()
Number of shape functions.
Definition monomiallocalbasis.hh:217
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,85 +1,317 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalcoefficients.hh │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ +monomiallocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_3 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() : li(12) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i = 0; i < 3; ++i) │ │ │ │ │ -31 { │ │ │ │ │ -32 li[3 * i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -33 li[3 * i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -34 li[3 * i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -35 } │ │ │ │ │ -36 │ │ │ │ │ -37 // last DOFs are associated with the cell (codim=0) │ │ │ │ │ -38 li[9] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ -39 li[10] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ -40 li[11] = _L_o_c_a_l_K_e_y(0,0,2); │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 std::size_t _s_i_z_e() const │ │ │ │ │ -45 { │ │ │ │ │ -46 return 12; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const │ │ │ │ │ -51 { │ │ │ │ │ -52 return li[i]; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -55 private: │ │ │ │ │ -56 std::vector li; │ │ │ │ │ -57 }; │ │ │ │ │ -58} // end namespace Dune │ │ │ │ │ -59#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include "../common/localbasis.hh" │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +_1_9 namespace MonomImp │ │ │ │ │ +20 { │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _E_v_a_l_A_c_c_e_s_s { │ │ │ │ │ +24 std::vector &out; │ │ │ │ │ +25#ifndef NDEBUG │ │ │ │ │ +26 unsigned int first_unused_index; │ │ │ │ │ +27#endif │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +_3_0 _E_v_a_l_A_c_c_e_s_s(std::vector &out_) │ │ │ │ │ +31 : out(out_) │ │ │ │ │ +32#ifndef NDEBUG │ │ │ │ │ +33 , first_unused_index(0) │ │ │ │ │ +34#endif │ │ │ │ │ +35 { } │ │ │ │ │ +36#ifndef NDEBUG │ │ │ │ │ +_3_7 _~_E_v_a_l_A_c_c_e_s_s() { │ │ │ │ │ +38 assert(first_unused_index == out.size()); │ │ │ │ │ +39 } │ │ │ │ │ +40#endif │ │ │ │ │ +_4_1 typename Traits::RangeFieldType &_o_p_e_r_a_t_o_r_[_](unsigned int index) │ │ │ │ │ +42 { │ │ │ │ │ +43 assert(index < out.size()); │ │ │ │ │ +44#ifndef NDEBUG │ │ │ │ │ +45 if(first_unused_index <= index) │ │ │ │ │ +46 first_unused_index = index+1; │ │ │ │ │ +47#endif │ │ │ │ │ +48 return out[index][0]; │ │ │ │ │ +49 } │ │ │ │ │ +50 }; │ │ │ │ │ +51 │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 class _J_a_c_o_b_i_a_n_A_c_c_e_s_s { │ │ │ │ │ +55 std::vector &out; │ │ │ │ │ +56 unsigned int row; │ │ │ │ │ +57#ifndef NDEBUG │ │ │ │ │ +58 unsigned int first_unused_index; │ │ │ │ │ +59#endif │ │ │ │ │ +60 │ │ │ │ │ +61 public: │ │ │ │ │ +_6_2 _J_a_c_o_b_i_a_n_A_c_c_e_s_s(std::vector &out_, │ │ │ │ │ +63 unsigned int row_) │ │ │ │ │ +64 : out(out_), row(row_) │ │ │ │ │ +65#ifndef NDEBUG │ │ │ │ │ +66 , first_unused_index(0) │ │ │ │ │ +67#endif │ │ │ │ │ +68 { } │ │ │ │ │ +69#ifndef NDEBUG │ │ │ │ │ +_7_0 _~_J_a_c_o_b_i_a_n_A_c_c_e_s_s() { │ │ │ │ │ +71 assert(first_unused_index == out.size()); │ │ │ │ │ +72 } │ │ │ │ │ +73#endif │ │ │ │ │ +_7_4 typename Traits::RangeFieldType &_o_p_e_r_a_t_o_r_[_](unsigned int index) │ │ │ │ │ +75 { │ │ │ │ │ +76 assert(index < out.size()); │ │ │ │ │ +77#ifndef NDEBUG │ │ │ │ │ +78 if(first_unused_index <= index) │ │ │ │ │ +79 first_unused_index = index+1; │ │ │ │ │ +80#endif │ │ │ │ │ +81 return out[index][0][row]; │ │ │ │ │ +82 } │ │ │ │ │ +83 }; │ │ │ │ │ +84 │ │ │ │ │ +97 template │ │ │ │ │ +_9_8 struct _E_v_a_l_u_a_t_e │ │ │ │ │ +99 { │ │ │ │ │ +_1_0_1 constexpr static int _d = Traits::dimDomain - c; │ │ │ │ │ +102 │ │ │ │ │ +109 template │ │ │ │ │ +_1_1_0 static void _e_v_a_l ( │ │ │ │ │ +111 const typename Traits::DomainType &in, │ │ │ │ │ +114 const std::array &derivatives, │ │ │ │ │ +117 typename Traits::RangeFieldType prod, │ │ │ │ │ +119 int bound, │ │ │ │ │ +121 int& index, │ │ │ │ │ +123 Access &access) │ │ │ │ │ +124 { │ │ │ │ │ +125 // start with the highest exponent for this dimension, then work down │ │ │ │ │ +126 for (int e = bound; e >= 0; --e) │ │ │ │ │ +127 { │ │ │ │ │ +128 // the rest of the available exponents, to be used by the other │ │ │ │ │ +129 // dimensions │ │ │ │ │ +130 int newbound = bound - e; │ │ │ │ │ +131 if(e < (int)derivatives[_d]) │ │ │ │ │ +132 _E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_c_-_1_>_:_: │ │ │ │ │ +133_ _e_v_a_l(in, derivatives, 0, newbound, index, access); │ │ │ │ │ +134 else { │ │ │ │ │ +135 int coeff = 1; │ │ │ │ │ +136 for(int i = e - derivatives[_d] + 1; i <= e; ++i) │ │ │ │ │ +137 coeff *= i; │ │ │ │ │ +138 // call the evaluator for the next dimension │ │ │ │ │ +139 _E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_c_-_1_>_:_: │ │ │ │ │ +140_ _e_v_a_l( // pass the coordinate and the derivatives unchanged │ │ │ │ │ +141 in, derivatives, │ │ │ │ │ +142 // also pass the product accumulated so far, but also │ │ │ │ │ +143 // include the current dimension │ │ │ │ │ +144 prod * power(in[_d], e-derivatives[_d]) * coeff, │ │ │ │ │ +145 // pass the number of remaining exponents to the next │ │ │ │ │ +146 // dimension │ │ │ │ │ +147 newbound, │ │ │ │ │ +148 // pass the next index to fill and the output access │ │ │ │ │ +149 // wrapper │ │ │ │ │ +150 index, access); │ │ │ │ │ +151 } │ │ │ │ │ +152 } │ │ │ │ │ +153 } │ │ │ │ │ +154 }; │ │ │ │ │ +155 │ │ │ │ │ +160 template │ │ │ │ │ +_1_6_1 struct _E_v_a_l_u_a_t_e │ │ │ │ │ +162 { │ │ │ │ │ +_1_6_3 constexpr static int _d = Traits::dimDomain-1; │ │ │ │ │ +165 template │ │ │ │ │ +_1_6_6 static void _e_v_a_l (const typename Traits::DomainType &in, │ │ │ │ │ +167 const std::array &derivatives, │ │ │ │ │ +168 typename Traits::RangeFieldType prod, │ │ │ │ │ +169 int bound, int& index, Access &access) │ │ │ │ │ +170 { │ │ │ │ │ +171 if(bound < (int)derivatives[_d]) │ │ │ │ │ +172 prod = 0; │ │ │ │ │ +173 else { │ │ │ │ │ +174 int coeff = 1; │ │ │ │ │ +175 for(int i = bound - derivatives[_d] + 1; i <= bound; ++i) │ │ │ │ │ +176 coeff *= i; │ │ │ │ │ +177 prod *= power(in[_d], bound-derivatives[_d]) * coeff; │ │ │ │ │ +178 } │ │ │ │ │ +179 access[index] = prod; │ │ │ │ │ +180 ++index; │ │ │ │ │ +181 } │ │ │ │ │ +182 }; │ │ │ │ │ +183 │ │ │ │ │ +184 } //namespace MonomImp │ │ │ │ │ +185 │ │ │ │ │ +200 template │ │ │ │ │ +_2_0_1 class _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +202 { │ │ │ │ │ +203 // Helper: Number of shape functions for a k-th order element in dimension │ │ │ │ │ +dd │ │ │ │ │ +204 static constexpr unsigned int _s_i_z_e (int dd, int k) │ │ │ │ │ +205 { │ │ │ │ │ +206 if (dd==0 || k==0) │ │ │ │ │ +207 return 1; │ │ │ │ │ +208 return _s_i_z_e(dd,k-1) + _s_i_z_e(dd-1,k); │ │ │ │ │ +209 } │ │ │ │ │ +210 │ │ │ │ │ +211 public: │ │ │ │ │ +213 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_2_1_4 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +215 │ │ │ │ │ +_2_1_7 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +218 { │ │ │ │ │ +219 return _s_i_z_e(d,p); │ │ │ │ │ +220 } │ │ │ │ │ +221 │ │ │ │ │ +_2_2_3 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +224 std::vector& out) const │ │ │ │ │ +225 { │ │ │ │ │ +226 out.resize(_s_i_z_e()); │ │ │ │ │ +227 int index = 0; │ │ │ │ │ +228 std::array derivatives; │ │ │ │ │ +229 std::fill(derivatives.begin(), derivatives.end(), 0); │ │ │ │ │ +230 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out); │ │ │ │ │ +231 for (unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ +232 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, derivatives, 1, lp, index, access); │ │ │ │ │ +233 } │ │ │ │ │ +234 │ │ │ │ │ +_2_4_0 inline void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ +241 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +242 std::vector& out) const │ │ │ │ │ +243 { │ │ │ │ │ +244 out.resize(_s_i_z_e()); │ │ │ │ │ +245 int index = 0; │ │ │ │ │ +246 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out); │ │ │ │ │ +247 for (unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ +248 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, _o_r_d_e_r, 1, lp, index, access); │ │ │ │ │ +249 } │ │ │ │ │ +250 │ │ │ │ │ +252 inline void │ │ │ │ │ +_2_5_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +254 std::vector& out) const // return value │ │ │ │ │ +255 { │ │ │ │ │ +256 out.resize(_s_i_z_e()); │ │ │ │ │ +257 std::array derivatives; │ │ │ │ │ +258 for(unsigned int i = 0; i < d; ++i) │ │ │ │ │ +259 derivatives[i] = 0; │ │ │ │ │ +260 for(unsigned int i = 0; i < d; ++i) │ │ │ │ │ +261 { │ │ │ │ │ +262 derivatives[i] = 1; │ │ │ │ │ +263 int index = 0; │ │ │ │ │ +264 _M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out, i); │ │ │ │ │ +265 for(unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ +266 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, derivatives, 1, lp, index, access); │ │ │ │ │ +267 derivatives[i] = 0; │ │ │ │ │ +268 } │ │ │ │ │ +269 } │ │ │ │ │ +270 │ │ │ │ │ +_2_7_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ +273 { │ │ │ │ │ +274 return p; │ │ │ │ │ +275 } │ │ │ │ │ +276 }; │ │ │ │ │ +277 │ │ │ │ │ +278} │ │ │ │ │ +279 │ │ │ │ │ +280#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-2 elements on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -BDM2Simplex2DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ +Access output vector of evaluateFunction() and evaluate() │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +Traits::RangeFieldType & operator[](unsigned int index) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_~_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ +~EvalAccess() │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ +EvalAccess(std::vector< typename Traits::RangeType > &out_) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ +Access output vector of evaluateJacobian() │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_~_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ +~JacobianAccess() │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +Traits::RangeFieldType & operator[](unsigned int index) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ +JacobianAccess(std::vector< typename Traits::JacobianType > &out_, unsigned int │ │ │ │ │ +row_) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:99 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_:_:_d │ │ │ │ │ +static constexpr int d │ │ │ │ │ +The next dimension to try for factors. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:101 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_:_:_e_v_a_l │ │ │ │ │ +static void eval(const typename Traits::DomainType &in, const std::array< │ │ │ │ │ +unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType │ │ │ │ │ +prod, int bound, int &index, Access &access) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _1_ _>_:_:_e_v_a_l │ │ │ │ │ +static void eval(const typename Traits::DomainType &in, const std::array< │ │ │ │ │ +unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType │ │ │ │ │ +prod, int bound, int &index, Access &access) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:166 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:202 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:272 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, d > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:253 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:223 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, d > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:214 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:217 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: monomiallocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference
│ │ │ │ +
monomiallocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ #include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on triangles. More...
class  Dune::MonomialLocalInterpolation< LB, size >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ +monomiallocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_,_ _s_i_z_e_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00041_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: monomiallocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,155 +70,114 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │ +
monomiallocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
22 template<class LB, unsigned int size>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 typedef typename LB::Traits::DomainType D;
│ │ │ │ +
26 typedef typename LB::Traits::DomainFieldType DF;
│ │ │ │ +
27 static const int dimD=LB::Traits::dimDomain;
│ │ │ │ +
28 typedef typename LB::Traits::RangeType R;
│ │ │ │ +
29 typedef typename LB::Traits::RangeFieldType RF;
│ │ │ │ +
30
│ │ │ │ +
31 typedef QuadratureRule<DF,dimD> QR;
│ │ │ │ +
32 typedef typename QR::iterator QRiterator;
│ │ │ │
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {
│ │ │ │ -
41 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ -
42 if (s & 1)
│ │ │ │ -
43 {
│ │ │ │ -
44 sign0 = -1.0;
│ │ │ │ -
45 }
│ │ │ │ -
46 if (s & 2)
│ │ │ │ -
47 {
│ │ │ │ -
48 sign1 = -1.0;
│ │ │ │ -
49 }
│ │ │ │ -
50 if (s & 4)
│ │ │ │ -
51 {
│ │ │ │ -
52 sign2 = -1.0;
│ │ │ │ +
34 public:
│ │ │ │ +
│ │ │ │ +
35 MonomialLocalInterpolation (const GeometryType &gt_,
│ │ │ │ +
36 const LB &lb_)
│ │ │ │ +
37 : gt(gt_), lb(lb_), Minv(0)
│ │ │ │ +
38 , qr(QuadratureRules<DF,dimD>::rule(gt, 2*lb.order()))
│ │ │ │ +
39 {
│ │ │ │ +
40 // Compute inverse of the mass matrix of the local basis, and store it in Minv
│ │ │ │ +
41 if(size != lb.size())
│ │ │ │ +
42 DUNE_THROW(Exception, "size template parameter does not match size of "
│ │ │ │ +
43 "local basis");
│ │ │ │ +
44
│ │ │ │ +
45 const QRiterator qrend = qr.end();
│ │ │ │ +
46 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) {
│ │ │ │ +
47 std::vector<R> base;
│ │ │ │ +
48 lb.evaluateFunction(qrit->position(),base);
│ │ │ │ +
49
│ │ │ │ +
50 for(unsigned int i = 0; i < size; ++i)
│ │ │ │ +
51 for(unsigned int j = 0; j < size; ++j)
│ │ │ │ +
52 Minv[i][j] += qrit->weight() * base[i] * base[j];
│ │ │ │
53 }
│ │ │ │ -
54
│ │ │ │ -
55 m0[0] = 0.5;
│ │ │ │ -
56 m0[1] = 0.0;
│ │ │ │ -
57 m1[0] = 0.0;
│ │ │ │ -
58 m1[1] = 0.5;
│ │ │ │ -
59 m2[0] = 0.5;
│ │ │ │ -
60 m2[1] = 0.5;
│ │ │ │ -
61 n0[0] = 0.0;
│ │ │ │ -
62 n0[1] = -1.0;
│ │ │ │ -
63 n1[0] = -1.0;
│ │ │ │ -
64 n1[1] = 0.0;
│ │ │ │ -
65 n2[0] = 1.0/sqrt(2.0);
│ │ │ │ -
66 n2[1] = 1.0/sqrt(2.0);
│ │ │ │ -
67 c0 = 0.5*n0[0] - 1.0*n0[1];
│ │ │ │ -
68 c1 = -1.0*n1[0] + 0.5*n1[1];
│ │ │ │ -
69 c2 = 0.5*n2[0] + 0.5*n2[1];
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
80 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
81 void interpolate(const F& f, std::vector<C>& out) const
│ │ │ │ -
82 {
│ │ │ │ -
83 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
84 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
85 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
86
│ │ │ │ -
87 out.resize(12);
│ │ │ │ -
88 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
89
│ │ │ │ -
90 const int qOrder = 4;
│ │ │ │ -
91 const Dune::QuadratureRule<Scalar,1>& rule = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder);
│ │ │ │ -
92
│ │ │ │ -
93 for (typename Dune::QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ -
94 {
│ │ │ │ -
95 Scalar qPos = it->position();
│ │ │ │ -
96
│ │ │ │ -
97 typename LB::Traits::DomainType localPos;
│ │ │ │ -
98
│ │ │ │ -
99 localPos[0] = qPos;
│ │ │ │ -
100 localPos[1] = 0.0;
│ │ │ │ -
101 auto y = f(localPos);
│ │ │ │ -
102 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0;
│ │ │ │ -
103 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(1.0 - 2.0*qPos)*it->weight()/c0;
│ │ │ │ -
104 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign0/c0;
│ │ │ │ -
105
│ │ │ │ -
106 localPos[0] = 0.0;
│ │ │ │ -
107 localPos[1] = qPos;
│ │ │ │ -
108 y = f(localPos);
│ │ │ │ -
109 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1/c1;
│ │ │ │ -
110 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(2.0*qPos-1.0)*it->weight()/c1;
│ │ │ │ -
111 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign1/c1;
│ │ │ │ -
112
│ │ │ │ -
113 localPos[0] = 1.0 - qPos;
│ │ │ │ -
114 localPos[1] = qPos;
│ │ │ │ -
115 y = f(localPos);
│ │ │ │ -
116 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2;
│ │ │ │ -
117 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight()/c2;
│ │ │ │ -
118 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign2/c2;
│ │ │ │ -
119 }
│ │ │ │ -
120
│ │ │ │ -
121 // a volume part is needed here for dofs: 9 10 11
│ │ │ │ -
122 const QuadratureRule<Vector,2>& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::simplex(2), qOrder);
│ │ │ │ -
123
│ │ │ │ -
124 for (typename QuadratureRule<Vector,2>::const_iterator it=rule2.begin(); it!=rule2.end(); ++it)
│ │ │ │ -
125 {
│ │ │ │ -
126 typename LB::Traits::DomainType localPos = it->position();
│ │ │ │ -
127 auto y = f(localPos);
│ │ │ │ -
128
│ │ │ │ -
129 out[9] += y[0]*it->weight();
│ │ │ │ -
130 out[10] += y[1]*it->weight();
│ │ │ │ -
131 out[11] += (y[0]*(localPos[0]-2.0*localPos[0]*localPos[1]-localPos[0]*localPos[0])
│ │ │ │ -
132 +y[1]*(-localPos[1]+2.0*localPos[0]*localPos[1]+localPos[1]*localPos[1]))*it->weight();
│ │ │ │ -
133 }
│ │ │ │ -
134 }
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
136 private:
│ │ │ │ -
137 typename LB::Traits::RangeFieldType sign0, sign1, sign2;
│ │ │ │ -
138 typename LB::Traits::DomainType m0, m1, m2;
│ │ │ │ -
139 typename LB::Traits::DomainType n0, n1, n2;
│ │ │ │ -
140 typename LB::Traits::RangeFieldType c0, c1, c2;
│ │ │ │ -
141 };
│ │ │ │ +
54 Minv.invert();
│ │ │ │ +
55 }
│ │ │ │
│ │ │ │ -
142} // end namespace Dune
│ │ │ │ -
143#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
56
│ │ │ │ +
64 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
65 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
66 {
│ │ │ │ +
67 out.clear();
│ │ │ │ +
68 out.resize(size, 0);
│ │ │ │ +
69
│ │ │ │ +
70 const QRiterator qrend = qr.end();
│ │ │ │ +
71 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) {
│ │ │ │ +
72 //TODO: mass matrix
│ │ │ │ +
73 R y = f(qrit->position());
│ │ │ │ +
74
│ │ │ │ +
75 std::vector<R> base;
│ │ │ │ +
76 lb.evaluateFunction(qrit->position(),base);
│ │ │ │ +
77
│ │ │ │ +
78 for(unsigned int i = 0; i < size; ++i)
│ │ │ │ +
79 for(unsigned int j = 0; j < size; ++j)
│ │ │ │ +
80 out[i] += Minv[i][j] * qrit->weight() * y * base[j];
│ │ │ │ +
81 }
│ │ │ │ +
82 }
│ │ │ │ +
│ │ │ │ +
83
│ │ │ │ +
84 private:
│ │ │ │ +
85 GeometryType gt;
│ │ │ │ +
86 const LB &lb;
│ │ │ │ +
87 FieldMatrix<RF, size, size> Minv;
│ │ │ │ +
88 const QR &qr;
│ │ │ │ +
89 };
│ │ │ │ +
│ │ │ │ +
90
│ │ │ │ +
91}
│ │ │ │ +
92
│ │ │ │ +
93#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:25
│ │ │ │ -
BDM2Simplex2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:29
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:81
│ │ │ │ -
BDM2Simplex2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:39
│ │ │ │ +
Definition monomiallocalinterpolation.hh:24
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
Definition monomiallocalinterpolation.hh:65
│ │ │ │ +
MonomialLocalInterpolation(const GeometryType &gt_, const LB &lb_)
Definition monomiallocalinterpolation.hh:35
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,163 +1,107 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalinterpolation.hh │ │ │ │ │ + * _m_o_n_o_m_i_a_l │ │ │ │ │ +monomiallocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -25 { │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -_2_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ -30 { │ │ │ │ │ -31 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ -32 } │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +24 { │ │ │ │ │ +25 typedef typename LB::Traits::DomainType D; │ │ │ │ │ +26 typedef typename LB::Traits::DomainFieldType DF; │ │ │ │ │ +27 static const int dimD=LB::Traits::dimDomain; │ │ │ │ │ +28 typedef typename LB::Traits::RangeType R; │ │ │ │ │ +29 typedef typename LB::Traits::RangeFieldType RF; │ │ │ │ │ +30 │ │ │ │ │ +31 typedef QuadratureRule QR; │ │ │ │ │ +32 typedef typename QR::iterator QRiterator; │ │ │ │ │ 33 │ │ │ │ │ -_3_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(unsigned int s) │ │ │ │ │ -40 { │ │ │ │ │ -41 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ -42 if (s & 1) │ │ │ │ │ -43 { │ │ │ │ │ -44 sign0 = -1.0; │ │ │ │ │ -45 } │ │ │ │ │ -46 if (s & 2) │ │ │ │ │ -47 { │ │ │ │ │ -48 sign1 = -1.0; │ │ │ │ │ -49 } │ │ │ │ │ -50 if (s & 4) │ │ │ │ │ -51 { │ │ │ │ │ -52 sign2 = -1.0; │ │ │ │ │ +34 public: │ │ │ │ │ +_3_5 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (const GeometryType >_, │ │ │ │ │ +36 const LB &lb_) │ │ │ │ │ +37 : gt(gt_), lb(lb_), Minv(0) │ │ │ │ │ +38 , qr(QuadratureRules::rule(gt, 2*lb.order())) │ │ │ │ │ +39 { │ │ │ │ │ +40 // Compute inverse of the mass matrix of the local basis, and store it in │ │ │ │ │ +Minv │ │ │ │ │ +41 if(size != lb.size()) │ │ │ │ │ +42 DUNE_THROW(Exception, "size template parameter does not match size of " │ │ │ │ │ +43 "local basis"); │ │ │ │ │ +44 │ │ │ │ │ +45 const QRiterator qrend = qr.end(); │ │ │ │ │ +46 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) { │ │ │ │ │ +47 std::vector base; │ │ │ │ │ +48 lb.evaluateFunction(qrit->position(),base); │ │ │ │ │ +49 │ │ │ │ │ +50 for(unsigned int i = 0; i < size; ++i) │ │ │ │ │ +51 for(unsigned int j = 0; j < size; ++j) │ │ │ │ │ +52 Minv[i][j] += qrit->weight() * base[i] * base[j]; │ │ │ │ │ 53 } │ │ │ │ │ -54 │ │ │ │ │ -55 m0[0] = 0.5; │ │ │ │ │ -56 m0[1] = 0.0; │ │ │ │ │ -57 m1[0] = 0.0; │ │ │ │ │ -58 m1[1] = 0.5; │ │ │ │ │ -59 m2[0] = 0.5; │ │ │ │ │ -60 m2[1] = 0.5; │ │ │ │ │ -61 n0[0] = 0.0; │ │ │ │ │ -62 n0[1] = -1.0; │ │ │ │ │ -63 n1[0] = -1.0; │ │ │ │ │ -64 n1[1] = 0.0; │ │ │ │ │ -65 n2[0] = 1.0/sqrt(2.0); │ │ │ │ │ -66 n2[1] = 1.0/sqrt(2.0); │ │ │ │ │ -67 c0 = 0.5*n0[0] - 1.0*n0[1]; │ │ │ │ │ -68 c1 = -1.0*n1[0] + 0.5*n1[1]; │ │ │ │ │ -69 c2 = 0.5*n2[0] + 0.5*n2[1]; │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -80 template │ │ │ │ │ -_8_1 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const │ │ │ │ │ -82 { │ │ │ │ │ -83 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -84 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -85 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -86 │ │ │ │ │ -87 out.resize(12); │ │ │ │ │ -88 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -89 │ │ │ │ │ -90 const int qOrder = 4; │ │ │ │ │ -91 const Dune::QuadratureRule& rule = Dune:: │ │ │ │ │ -QuadratureRules::rule(Dune::GeometryTypes::simplex(1), qOrder); │ │ │ │ │ +54 Minv.invert(); │ │ │ │ │ +55 } │ │ │ │ │ +56 │ │ │ │ │ +64 template │ │ │ │ │ +_6_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +66 { │ │ │ │ │ +67 out.clear(); │ │ │ │ │ +68 out.resize(size, 0); │ │ │ │ │ +69 │ │ │ │ │ +70 const QRiterator qrend = qr.end(); │ │ │ │ │ +71 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) { │ │ │ │ │ +72 //TODO: mass matrix │ │ │ │ │ +73 R y = f(qrit->position()); │ │ │ │ │ +74 │ │ │ │ │ +75 std::vector base; │ │ │ │ │ +76 lb.evaluateFunction(qrit->position(),base); │ │ │ │ │ +77 │ │ │ │ │ +78 for(unsigned int i = 0; i < size; ++i) │ │ │ │ │ +79 for(unsigned int j = 0; j < size; ++j) │ │ │ │ │ +80 out[i] += Minv[i][j] * qrit->weight() * y * base[j]; │ │ │ │ │ +81 } │ │ │ │ │ +82 } │ │ │ │ │ +83 │ │ │ │ │ +84 private: │ │ │ │ │ +85 GeometryType gt; │ │ │ │ │ +86 const LB &lb; │ │ │ │ │ +87 FieldMatrix Minv; │ │ │ │ │ +88 const QR &qr; │ │ │ │ │ +89 }; │ │ │ │ │ +90 │ │ │ │ │ +91} │ │ │ │ │ 92 │ │ │ │ │ -93 for (typename Dune::QuadratureRule::const_iterator it=rule.begin │ │ │ │ │ -(); it!=rule.end(); ++it) │ │ │ │ │ -94 { │ │ │ │ │ -95 Scalar qPos = it->position(); │ │ │ │ │ -96 │ │ │ │ │ -97 typename LB::Traits::DomainType localPos; │ │ │ │ │ -98 │ │ │ │ │ -99 localPos[0] = qPos; │ │ │ │ │ -100 localPos[1] = 0.0; │ │ │ │ │ -101 auto y = f(localPos); │ │ │ │ │ -102 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0; │ │ │ │ │ -103 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(1.0 - 2.0*qPos)*it->weight()/c0; │ │ │ │ │ -104 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign0/c0; │ │ │ │ │ -105 │ │ │ │ │ -106 localPos[0] = 0.0; │ │ │ │ │ -107 localPos[1] = qPos; │ │ │ │ │ -108 y = f(localPos); │ │ │ │ │ -109 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1/c1; │ │ │ │ │ -110 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(2.0*qPos-1.0)*it->weight()/c1; │ │ │ │ │ -111 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign1/c1; │ │ │ │ │ -112 │ │ │ │ │ -113 localPos[0] = 1.0 - qPos; │ │ │ │ │ -114 localPos[1] = qPos; │ │ │ │ │ -115 y = f(localPos); │ │ │ │ │ -116 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2; │ │ │ │ │ -117 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight()/c2; │ │ │ │ │ -118 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign2/c2; │ │ │ │ │ -119 } │ │ │ │ │ -120 │ │ │ │ │ -121 // a volume part is needed here for dofs: 9 10 11 │ │ │ │ │ -122 const QuadratureRule& rule2 = QuadratureRules::rule │ │ │ │ │ -(GeometryTypes::simplex(2), qOrder); │ │ │ │ │ -123 │ │ │ │ │ -124 for (typename QuadratureRule::const_iterator it=rule2.begin(); │ │ │ │ │ -it!=rule2.end(); ++it) │ │ │ │ │ -125 { │ │ │ │ │ -126 typename LB::Traits::DomainType localPos = it->position(); │ │ │ │ │ -127 auto y = f(localPos); │ │ │ │ │ -128 │ │ │ │ │ -129 out[9] += y[0]*it->weight(); │ │ │ │ │ -130 out[10] += y[1]*it->weight(); │ │ │ │ │ -131 out[11] += (y[0]*(localPos[0]-2.0*localPos[0]*localPos[1]-localPos │ │ │ │ │ -[0]*localPos[0]) │ │ │ │ │ -132 +y[1]*(-localPos[1]+2.0*localPos[0]*localPos[1]+localPos[1]*localPos │ │ │ │ │ -[1]))*it->weight(); │ │ │ │ │ -133 } │ │ │ │ │ -134 } │ │ │ │ │ -135 │ │ │ │ │ -136 private: │ │ │ │ │ -137 typename LB::Traits::RangeFieldType sign0, sign1, sign2; │ │ │ │ │ -138 typename LB::Traits::DomainType m0, m1, m2; │ │ │ │ │ -139 typename LB::Traits::DomainType n0, n1, n2; │ │ │ │ │ -140 typename LB::Traits::RangeFieldType c0, c1, c2; │ │ │ │ │ -141 }; │ │ │ │ │ -142} // end namespace Dune │ │ │ │ │ -143#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +93#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM2Simplex2DLocalInterpolation() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalinterpolation.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:81 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM2Simplex2DLocalInterpolation(unsigned int s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:39 │ │ │ │ │ +Determine coefficients interpolating a given function. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalinterpolation.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +MonomialLocalInterpolation(const GeometryType >_, const LB &lb_) │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalinterpolation.hh:35 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: common.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalbasis.hh File Reference
│ │ │ │ +
common.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <dune/geometry/dimension.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
struct  Dune::EdgeS0_5Common< dim, DF >
 Common base class for edge elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +common.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_<_ _d_i_m_,_ _D_F_ _> │ │ │ │ │ +  Common base class for edge elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00044_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: common.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,334 +70,60 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2dlocalbasis.hh
│ │ │ │ +
common.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/dimension.hh>
│ │ │ │ +
12#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │
14
│ │ │ │ -
15#include "../../common/localbasis.hh"
│ │ │ │ +
15namespace Dune {
│ │ │ │
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ - │ │ │ │ -
34 R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
35 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {
│ │ │ │ -
40 for (size_t i=0; i<3; i++)
│ │ │ │ -
41 sign_[i] = 1.0;
│ │ │ │ -
42 }
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
49 BDM2Simplex2DLocalBasis(std::bitset<3> s)
│ │ │ │ -
50 {
│ │ │ │ -
51 for (size_t i=0; i<3; i++)
│ │ │ │ -
52 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
56 unsigned int size() const
│ │ │ │ -
57 {
│ │ │ │ -
58 return 12;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
67 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
69 {
│ │ │ │ -
70 out.resize(size());
│ │ │ │ -
71
│ │ │ │ -
72 out[0][0] = sign_[0]*(-2*in[0]*in[1] + in[0]*in[0]);
│ │ │ │ -
73 out[0][1] = sign_[0]*(-1 + 6*in[1] -2*in[0]*in[1] - 5*in[1]*in[1]);
│ │ │ │ -
74
│ │ │ │ -
75 out[1][0] = 1.5*in[0] + 3*in[0]*in[1] - 4.5*in[0]*in[0];
│ │ │ │ -
76 out[1][1] = -3 + 6*in[0] + 10.5*in[1] - 15*in[0]*in[1] - 7.5*in[1]*in[1];
│ │ │ │ -
77
│ │ │ │ -
78 out[2][0] = sign_[0]*(-7.5*in[0] + 5*in[0]*in[1] + 12.5*in[0]*in[0]);
│ │ │ │ -
79 out[2][1] = sign_[0]*(-5 + 30*in[0] + 7.5*in[1] - 25*in[0]*in[1] - 30*in[0]*in[0] - 2.5*in[1]*in[1]);
│ │ │ │ -
80
│ │ │ │ -
81
│ │ │ │ -
82
│ │ │ │ -
83 out[3][0] = sign_[1]*(-1 + 6*in[0] - 2*in[0]*in[1] - 5*in[0]*in[0]);
│ │ │ │ -
84 out[3][1] = sign_[1]*(-2*in[0]*in[1] + in[1]*in[1]);
│ │ │ │ -
85
│ │ │ │ -
86 out[4][0] = 3 - 10.5*in[0] - 6*in[1] + 15*in[0]*in[1] + 7.5*in[0]*in[0];
│ │ │ │ -
87 out[4][1] = -1.5*in[1] - 3*in[0]*in[1] + 4.5*in[1]*in[1];
│ │ │ │ -
88
│ │ │ │ -
89 out[5][0] = sign_[1]*(-5 + 7.5*in[0] + 30*in[1] - 25*in[0]*in[1] - 2.5*in[0]*in[0] - 30*in[1]*in[1]);
│ │ │ │ -
90 out[5][1] = sign_[1]*(-7.5*in[1] + 5*in[0]*in[1] + 12.5*in[1]*in[1]);
│ │ │ │ -
91
│ │ │ │ -
92
│ │ │ │ -
93
│ │ │ │ -
94 out[6][0] = sign_[2]*(-3*in[0] + 4*in[0]*in[1] + 4*in[0]*in[0]);
│ │ │ │ -
95 out[6][1] = sign_[2]*(-3*in[1] + 4*in[0]*in[1] + 4*in[1]*in[1]);
│ │ │ │ -
96
│ │ │ │ -
97 out[7][0] = -3*in[0] + 6*in[0]*in[0];
│ │ │ │ -
98 out[7][1] = 3*in[1] - 6*in[1]*in[1];
│ │ │ │ -
99
│ │ │ │ -
100 out[8][0] = sign_[2]*(-10*in[0]*in[1] + 5*in[0]*in[0]);
│ │ │ │ -
101 out[8][1] = sign_[2]*(-10*in[0]*in[1] + 5*in[1]*in[1]);
│ │ │ │ -
102
│ │ │ │ -
103
│ │ │ │ -
104
│ │ │ │ -
105 out[9][0] = 18*in[0] - 12*in[0]*in[1] - 18*in[0]*in[0];
│ │ │ │ -
106 out[9][1] = 6*in[1] - 12*in[0]*in[1] - 6*in[1]*in[1];
│ │ │ │ -
107
│ │ │ │ -
108 out[10][0] = 6*in[0] - 12*in[0]*in[1] - 6*in[0]*in[0];
│ │ │ │ -
109 out[10][1] = 18*in[1] - 12*in[0]*in[1] - 18*in[1]*in[1];
│ │ │ │ -
110
│ │ │ │ -
111 out[11][0] = 90*in[0] - 180*in[0]*in[1] - 90*in[0]*in[0];
│ │ │ │ -
112 out[11][1] = -90*in[1] + 180*in[0]*in[1] + 90*in[1]*in[1];
│ │ │ │ -
113 }
│ │ │ │ -
│ │ │ │ -
114
│ │ │ │ -
│ │ │ │ -
121 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
122 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
123 {
│ │ │ │ -
124 out.resize(size());
│ │ │ │ -
125
│ │ │ │ -
126 out[0][0][0] = sign_[0]*(-2*in[1] + 2*in[0]);
│ │ │ │ -
127 out[0][0][1] = sign_[0]*(-2*in[0]);
│ │ │ │ -
128
│ │ │ │ -
129 out[0][1][0] = sign_[0]*(-2*in[1]);
│ │ │ │ -
130 out[0][1][1] = sign_[0]*(6 -2*in[0] - 10*in[1]);
│ │ │ │ -
131
│ │ │ │ -
132
│ │ │ │ -
133 out[1][0][0] = 1.5 + 3*in[1] - 9*in[0];
│ │ │ │ -
134 out[1][0][1] = 3*in[0];
│ │ │ │ -
135
│ │ │ │ -
136 out[1][1][0] = 6 - 15*in[1];
│ │ │ │ -
137 out[1][1][1] = 10.5 - 15*in[0] - 15*in[1];
│ │ │ │ -
138
│ │ │ │ -
139
│ │ │ │ -
140 out[2][0][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]);
│ │ │ │ -
141 out[2][0][1] = sign_[0]*(5*in[0]);
│ │ │ │ -
142
│ │ │ │ -
143 out[2][1][0] = sign_[0]*(30 - 25*in[1] - 60*in[0]);
│ │ │ │ -
144 out[2][1][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]);
│ │ │ │ -
145
│ │ │ │ -
146
│ │ │ │ -
147
│ │ │ │ -
148 out[3][0][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]);
│ │ │ │ -
149 out[3][0][1] = sign_[1]*(-2*in[0]);
│ │ │ │ -
150
│ │ │ │ -
151 out[3][1][0] = sign_[1]*(-2*in[1]);
│ │ │ │ -
152 out[3][1][1] = sign_[1]*(-2*in[0] + 2*in[1]);
│ │ │ │ -
153
│ │ │ │ -
154
│ │ │ │ -
155 out[4][0][0] = -10.5 + 15*in[1] + 15*in[0];
│ │ │ │ -
156 out[4][0][1] = -6 + 15*in[0];
│ │ │ │ -
157
│ │ │ │ -
158 out[4][1][0] = -3*in[1];
│ │ │ │ -
159 out[4][1][1] = -1.5 - 3*in[0] + 9*in[1];
│ │ │ │ -
160
│ │ │ │ -
161
│ │ │ │ -
162 out[5][0][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]);
│ │ │ │ -
163 out[5][0][1] = sign_[1]*(30 - 25*in[0] - 60*in[1]);
│ │ │ │ -
164
│ │ │ │ -
165 out[5][1][0] = sign_[1]*(5*in[1]);
│ │ │ │ -
166 out[5][1][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]);
│ │ │ │ -
167
│ │ │ │ -
168
│ │ │ │ -
169
│ │ │ │ -
170 out[6][0][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]);
│ │ │ │ -
171 out[6][0][1] = sign_[2]*(4*in[0]);
│ │ │ │ -
172
│ │ │ │ -
173 out[6][1][0] = sign_[2]*(4*in[1]);
│ │ │ │ -
174 out[6][1][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]);
│ │ │ │ -
175
│ │ │ │ -
176
│ │ │ │ -
177 out[7][0][0] = -3 + 12*in[0];
│ │ │ │ -
178 out[7][0][1] = 0;
│ │ │ │ -
179
│ │ │ │ -
180 out[7][1][0] = 0;
│ │ │ │ -
181 out[7][1][1] = 3 - 12*in[1];
│ │ │ │ -
182
│ │ │ │ -
183
│ │ │ │ -
184 out[8][0][0] = sign_[2]*(-10*in[1] + 10*in[0]);
│ │ │ │ -
185 out[8][0][1] = sign_[2]*(-10*in[0]);
│ │ │ │ -
186
│ │ │ │ -
187 out[8][1][0] = sign_[2]*(-10*in[1]);
│ │ │ │ -
188 out[8][1][1] = sign_[2]*(-10*in[0] + 10*in[1]);
│ │ │ │ -
189
│ │ │ │ -
190
│ │ │ │ -
191 out[9][0][0] = 18 - 12*in[1] - 36*in[0];
│ │ │ │ -
192 out[9][0][1] = -12*in[0];
│ │ │ │ -
193
│ │ │ │ -
194 out[9][1][0] = -12*in[1];
│ │ │ │ -
195 out[9][1][1] = 6 - 12*in[0] - 12*in[1];
│ │ │ │ -
196
│ │ │ │ -
197 out[10][0][0] = 6 - 12*in[1] - 12*in[0];
│ │ │ │ -
198 out[10][0][1] = -12*in[0];
│ │ │ │ -
199
│ │ │ │ -
200 out[10][1][0] = -12*in[1];
│ │ │ │ -
201 out[10][1][1] = 18 - 12*in[0] - 36*in[1];
│ │ │ │ -
202
│ │ │ │ -
203 out[11][0][0] = 90 - 180*in[1] - 180*in[0];
│ │ │ │ -
204 out[11][0][1] = -180*in[0];
│ │ │ │ -
205
│ │ │ │ -
206 out[11][1][0] = 180*in[1];
│ │ │ │ -
207 out[11][1][1] = -90 + 180*in[0] + 180*in[1];
│ │ │ │ -
208 }
│ │ │ │ -
│ │ │ │ -
209
│ │ │ │ -
│ │ │ │ -
211 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
212 const typename Traits::DomainType& in, // position
│ │ │ │ -
213 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
214 {
│ │ │ │ -
215 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
216 if (totalOrder == 0) {
│ │ │ │ -
217 evaluateFunction(in, out);
│ │ │ │ -
218 } else if (totalOrder == 1) {
│ │ │ │ -
219 out.resize(size());
│ │ │ │ -
220 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
221
│ │ │ │ -
222 switch (direction) {
│ │ │ │ -
223 case 0:
│ │ │ │ -
224 out[0][0] = sign_[0]*(-2*in[1] + 2*in[0]);
│ │ │ │ -
225 out[0][1] = sign_[0]*(-2*in[1]);
│ │ │ │ -
226
│ │ │ │ -
227 out[1][0] = 1.5 + 3*in[1] - 9*in[0];
│ │ │ │ -
228 out[1][1] = 6 - 15*in[1];
│ │ │ │ -
229
│ │ │ │ -
230 out[2][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]);
│ │ │ │ -
231 out[2][1] = sign_[0]*(30 - 25*in[1] - 60*in[0]);
│ │ │ │ -
232
│ │ │ │ -
233 out[3][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]);
│ │ │ │ -
234 out[3][1] = sign_[1]*(-2*in[1]);
│ │ │ │ -
235
│ │ │ │ -
236 out[4][0] = -10.5 + 15*in[1] + 15*in[0];
│ │ │ │ -
237 out[4][1] = -3*in[1];
│ │ │ │ -
238
│ │ │ │ -
239 out[5][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]);
│ │ │ │ -
240 out[5][1] = sign_[1]*(5*in[1]);
│ │ │ │ -
241
│ │ │ │ -
242 out[6][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]);
│ │ │ │ -
243 out[6][1] = sign_[2]*(4*in[1]);
│ │ │ │ -
244
│ │ │ │ -
245 out[7][0] = -3 + 12*in[0];
│ │ │ │ -
246 out[7][1] = 0;
│ │ │ │ -
247
│ │ │ │ -
248 out[8][0] = sign_[2]*(-10*in[1] + 10*in[0]);
│ │ │ │ -
249 out[8][1] = sign_[2]*(-10*in[1]);
│ │ │ │ -
250
│ │ │ │ -
251 out[9][0] = 18 - 12*in[1] - 36*in[0];
│ │ │ │ -
252 out[9][1] = -12*in[1];
│ │ │ │ -
253
│ │ │ │ -
254 out[10][0] = 6 - 12*in[1] - 12*in[0];
│ │ │ │ -
255 out[10][1] = -12*in[1];
│ │ │ │ -
256
│ │ │ │ -
257 out[11][0] = 90 - 180*in[1] - 180*in[0];
│ │ │ │ -
258 out[11][1] = 180*in[1];
│ │ │ │ -
259 break;
│ │ │ │ -
260 case 1:
│ │ │ │ -
261 out[0][0] = sign_[0]*(-2*in[0]);
│ │ │ │ -
262 out[0][1] = sign_[0]*(6 -2*in[0] - 10*in[1]);
│ │ │ │ -
263
│ │ │ │ -
264 out[1][0] = 3*in[0];
│ │ │ │ -
265 out[1][1] = 10.5 - 15*in[0] - 15*in[1];
│ │ │ │ -
266
│ │ │ │ -
267 out[2][0] = sign_[0]*(5*in[0]);
│ │ │ │ -
268 out[2][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]);
│ │ │ │ -
269
│ │ │ │ -
270 out[3][0] = sign_[1]*(-2*in[0]);
│ │ │ │ -
271 out[3][1] = sign_[1]*(-2*in[0] + 2*in[1]);
│ │ │ │ -
272
│ │ │ │ -
273 out[4][0] = -6 + 15*in[0];
│ │ │ │ -
274 out[4][1] = -1.5 - 3*in[0] + 9*in[1];
│ │ │ │ -
275
│ │ │ │ -
276 out[5][0] = sign_[1]*(30 - 25*in[0] - 60*in[1]);
│ │ │ │ -
277 out[5][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]);
│ │ │ │ -
278
│ │ │ │ -
279 out[6][0] = sign_[2]*(4*in[0]);
│ │ │ │ -
280 out[6][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]);
│ │ │ │ -
281
│ │ │ │ -
282 out[7][0] = 0;
│ │ │ │ -
283 out[7][1] = 3 - 12*in[1];
│ │ │ │ -
284
│ │ │ │ -
285 out[8][0] = sign_[2]*(-10*in[0]);
│ │ │ │ -
286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]);
│ │ │ │ -
287
│ │ │ │ -
288 out[9][0] = -12*in[0];
│ │ │ │ -
289 out[9][1] = 6 - 12*in[0] - 12*in[1];
│ │ │ │ -
290
│ │ │ │ -
291 out[10][0] = -12*in[0];
│ │ │ │ -
292 out[10][1] = 18 - 12*in[0] - 36*in[1];
│ │ │ │ -
293
│ │ │ │ -
294 out[11][0] = -180*in[0];
│ │ │ │ -
295 out[11][1] = -90 + 180*in[0] + 180*in[1];
│ │ │ │ -
296 break;
│ │ │ │ -
297 default:
│ │ │ │ -
298 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
299 }
│ │ │ │ -
300 } else {
│ │ │ │ -
301 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
302 }
│ │ │ │ -
303 }
│ │ │ │ -
│ │ │ │ -
304
│ │ │ │ -
│ │ │ │ -
306 unsigned int order() const
│ │ │ │ -
307 {
│ │ │ │ -
308 return 2; // TODO: check whether this is not order 3
│ │ │ │ -
309 }
│ │ │ │ -
│ │ │ │ -
310
│ │ │ │ -
311 private:
│ │ │ │ -
312 std::array<R,3> sign_;
│ │ │ │ -
313 };
│ │ │ │ -
│ │ │ │ -
314} // end namespace Dune
│ │ │ │ -
315#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
22 template<std::size_t dim, class DF = double>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 using RefElem =
│ │ │ │ +
26 decltype(referenceElement(DF{}, GeometryTypes::simplex(dim),
│ │ │ │ +
27 Dim<dim>{}));
│ │ │ │ +
28
│ │ │ │ +
30 RefElem refelem = referenceElement(DF{}, GeometryTypes::simplex(dim),
│ │ │ │ +
31 Dim<dim>{});
│ │ │ │ +
32
│ │ │ │ +
34
│ │ │ │ +
38 std::size_t s = refelem.size(dim-1);
│ │ │ │ +
39 };
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
41} // namespace Dune
│ │ │ │ +
42
│ │ │ │ +
43#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:30
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:121
│ │ │ │ -
BDM2Simplex2DLocalBasis(std::bitset< 3 > s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:49
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:211
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:56
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:35
│ │ │ │ -
BDM2Simplex2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:38
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:67
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:306
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ +
RefElem refelem
The reference element for this edge element.
Definition common.hh:30
│ │ │ │ +
decltype(referenceElement(DF{}, GeometryTypes::simplex(dim), Dim< dim >{})) RefElem
The type of the referenceElement.
Definition common.hh:27
│ │ │ │ +
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,348 +1,63 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini2simplex2dlocalbasis.hh │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ +common.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -15#include "../../common/localbasis.hh" │ │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ │ 16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>, │ │ │ │ │ -34 R,2,Dune::FieldVector, │ │ │ │ │ -_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ -39 { │ │ │ │ │ -40 for (size_t i=0; i<3; i++) │ │ │ │ │ -41 sign_[i] = 1.0; │ │ │ │ │ -42 } │ │ │ │ │ -43 │ │ │ │ │ -_4_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s(std::bitset<3> s) │ │ │ │ │ -50 { │ │ │ │ │ -51 for (size_t i=0; i<3; i++) │ │ │ │ │ -52 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 unsigned int _s_i_z_e() const │ │ │ │ │ -57 { │ │ │ │ │ -58 return 12; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -68 std::vector& out) const │ │ │ │ │ -69 { │ │ │ │ │ -70 out.resize(_s_i_z_e()); │ │ │ │ │ -71 │ │ │ │ │ -72 out[0][0] = sign_[0]*(-2*in[0]*in[1] + in[0]*in[0]); │ │ │ │ │ -73 out[0][1] = sign_[0]*(-1 + 6*in[1] -2*in[0]*in[1] - 5*in[1]*in[1]); │ │ │ │ │ -74 │ │ │ │ │ -75 out[1][0] = 1.5*in[0] + 3*in[0]*in[1] - 4.5*in[0]*in[0]; │ │ │ │ │ -76 out[1][1] = -3 + 6*in[0] + 10.5*in[1] - 15*in[0]*in[1] - 7.5*in[1]*in[1]; │ │ │ │ │ -77 │ │ │ │ │ -78 out[2][0] = sign_[0]*(-7.5*in[0] + 5*in[0]*in[1] + 12.5*in[0]*in[0]); │ │ │ │ │ -79 out[2][1] = sign_[0]*(-5 + 30*in[0] + 7.5*in[1] - 25*in[0]*in[1] - 30*in │ │ │ │ │ -[0]*in[0] - 2.5*in[1]*in[1]); │ │ │ │ │ -80 │ │ │ │ │ -81 │ │ │ │ │ -82 │ │ │ │ │ -83 out[3][0] = sign_[1]*(-1 + 6*in[0] - 2*in[0]*in[1] - 5*in[0]*in[0]); │ │ │ │ │ -84 out[3][1] = sign_[1]*(-2*in[0]*in[1] + in[1]*in[1]); │ │ │ │ │ -85 │ │ │ │ │ -86 out[4][0] = 3 - 10.5*in[0] - 6*in[1] + 15*in[0]*in[1] + 7.5*in[0]*in[0]; │ │ │ │ │ -87 out[4][1] = -1.5*in[1] - 3*in[0]*in[1] + 4.5*in[1]*in[1]; │ │ │ │ │ -88 │ │ │ │ │ -89 out[5][0] = sign_[1]*(-5 + 7.5*in[0] + 30*in[1] - 25*in[0]*in[1] - 2.5*in │ │ │ │ │ -[0]*in[0] - 30*in[1]*in[1]); │ │ │ │ │ -90 out[5][1] = sign_[1]*(-7.5*in[1] + 5*in[0]*in[1] + 12.5*in[1]*in[1]); │ │ │ │ │ -91 │ │ │ │ │ -92 │ │ │ │ │ -93 │ │ │ │ │ -94 out[6][0] = sign_[2]*(-3*in[0] + 4*in[0]*in[1] + 4*in[0]*in[0]); │ │ │ │ │ -95 out[6][1] = sign_[2]*(-3*in[1] + 4*in[0]*in[1] + 4*in[1]*in[1]); │ │ │ │ │ -96 │ │ │ │ │ -97 out[7][0] = -3*in[0] + 6*in[0]*in[0]; │ │ │ │ │ -98 out[7][1] = 3*in[1] - 6*in[1]*in[1]; │ │ │ │ │ -99 │ │ │ │ │ -100 out[8][0] = sign_[2]*(-10*in[0]*in[1] + 5*in[0]*in[0]); │ │ │ │ │ -101 out[8][1] = sign_[2]*(-10*in[0]*in[1] + 5*in[1]*in[1]); │ │ │ │ │ -102 │ │ │ │ │ -103 │ │ │ │ │ -104 │ │ │ │ │ -105 out[9][0] = 18*in[0] - 12*in[0]*in[1] - 18*in[0]*in[0]; │ │ │ │ │ -106 out[9][1] = 6*in[1] - 12*in[0]*in[1] - 6*in[1]*in[1]; │ │ │ │ │ -107 │ │ │ │ │ -108 out[10][0] = 6*in[0] - 12*in[0]*in[1] - 6*in[0]*in[0]; │ │ │ │ │ -109 out[10][1] = 18*in[1] - 12*in[0]*in[1] - 18*in[1]*in[1]; │ │ │ │ │ -110 │ │ │ │ │ -111 out[11][0] = 90*in[0] - 180*in[0]*in[1] - 90*in[0]*in[0]; │ │ │ │ │ -112 out[11][1] = -90*in[1] + 180*in[0]*in[1] + 90*in[1]*in[1]; │ │ │ │ │ -113 } │ │ │ │ │ -114 │ │ │ │ │ -_1_2_1 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -122 std::vector& out) const │ │ │ │ │ -123 { │ │ │ │ │ -124 out.resize(_s_i_z_e()); │ │ │ │ │ -125 │ │ │ │ │ -126 out[0][0][0] = sign_[0]*(-2*in[1] + 2*in[0]); │ │ │ │ │ -127 out[0][0][1] = sign_[0]*(-2*in[0]); │ │ │ │ │ -128 │ │ │ │ │ -129 out[0][1][0] = sign_[0]*(-2*in[1]); │ │ │ │ │ -130 out[0][1][1] = sign_[0]*(6 -2*in[0] - 10*in[1]); │ │ │ │ │ -131 │ │ │ │ │ -132 │ │ │ │ │ -133 out[1][0][0] = 1.5 + 3*in[1] - 9*in[0]; │ │ │ │ │ -134 out[1][0][1] = 3*in[0]; │ │ │ │ │ -135 │ │ │ │ │ -136 out[1][1][0] = 6 - 15*in[1]; │ │ │ │ │ -137 out[1][1][1] = 10.5 - 15*in[0] - 15*in[1]; │ │ │ │ │ -138 │ │ │ │ │ -139 │ │ │ │ │ -140 out[2][0][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]); │ │ │ │ │ -141 out[2][0][1] = sign_[0]*(5*in[0]); │ │ │ │ │ -142 │ │ │ │ │ -143 out[2][1][0] = sign_[0]*(30 - 25*in[1] - 60*in[0]); │ │ │ │ │ -144 out[2][1][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]); │ │ │ │ │ -145 │ │ │ │ │ -146 │ │ │ │ │ -147 │ │ │ │ │ -148 out[3][0][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]); │ │ │ │ │ -149 out[3][0][1] = sign_[1]*(-2*in[0]); │ │ │ │ │ -150 │ │ │ │ │ -151 out[3][1][0] = sign_[1]*(-2*in[1]); │ │ │ │ │ -152 out[3][1][1] = sign_[1]*(-2*in[0] + 2*in[1]); │ │ │ │ │ -153 │ │ │ │ │ -154 │ │ │ │ │ -155 out[4][0][0] = -10.5 + 15*in[1] + 15*in[0]; │ │ │ │ │ -156 out[4][0][1] = -6 + 15*in[0]; │ │ │ │ │ -157 │ │ │ │ │ -158 out[4][1][0] = -3*in[1]; │ │ │ │ │ -159 out[4][1][1] = -1.5 - 3*in[0] + 9*in[1]; │ │ │ │ │ -160 │ │ │ │ │ -161 │ │ │ │ │ -162 out[5][0][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]); │ │ │ │ │ -163 out[5][0][1] = sign_[1]*(30 - 25*in[0] - 60*in[1]); │ │ │ │ │ -164 │ │ │ │ │ -165 out[5][1][0] = sign_[1]*(5*in[1]); │ │ │ │ │ -166 out[5][1][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]); │ │ │ │ │ -167 │ │ │ │ │ -168 │ │ │ │ │ -169 │ │ │ │ │ -170 out[6][0][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]); │ │ │ │ │ -171 out[6][0][1] = sign_[2]*(4*in[0]); │ │ │ │ │ -172 │ │ │ │ │ -173 out[6][1][0] = sign_[2]*(4*in[1]); │ │ │ │ │ -174 out[6][1][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]); │ │ │ │ │ -175 │ │ │ │ │ -176 │ │ │ │ │ -177 out[7][0][0] = -3 + 12*in[0]; │ │ │ │ │ -178 out[7][0][1] = 0; │ │ │ │ │ -179 │ │ │ │ │ -180 out[7][1][0] = 0; │ │ │ │ │ -181 out[7][1][1] = 3 - 12*in[1]; │ │ │ │ │ -182 │ │ │ │ │ -183 │ │ │ │ │ -184 out[8][0][0] = sign_[2]*(-10*in[1] + 10*in[0]); │ │ │ │ │ -185 out[8][0][1] = sign_[2]*(-10*in[0]); │ │ │ │ │ -186 │ │ │ │ │ -187 out[8][1][0] = sign_[2]*(-10*in[1]); │ │ │ │ │ -188 out[8][1][1] = sign_[2]*(-10*in[0] + 10*in[1]); │ │ │ │ │ -189 │ │ │ │ │ -190 │ │ │ │ │ -191 out[9][0][0] = 18 - 12*in[1] - 36*in[0]; │ │ │ │ │ -192 out[9][0][1] = -12*in[0]; │ │ │ │ │ -193 │ │ │ │ │ -194 out[9][1][0] = -12*in[1]; │ │ │ │ │ -195 out[9][1][1] = 6 - 12*in[0] - 12*in[1]; │ │ │ │ │ -196 │ │ │ │ │ -197 out[10][0][0] = 6 - 12*in[1] - 12*in[0]; │ │ │ │ │ -198 out[10][0][1] = -12*in[0]; │ │ │ │ │ -199 │ │ │ │ │ -200 out[10][1][0] = -12*in[1]; │ │ │ │ │ -201 out[10][1][1] = 18 - 12*in[0] - 36*in[1]; │ │ │ │ │ -202 │ │ │ │ │ -203 out[11][0][0] = 90 - 180*in[1] - 180*in[0]; │ │ │ │ │ -204 out[11][0][1] = -180*in[0]; │ │ │ │ │ -205 │ │ │ │ │ -206 out[11][1][0] = 180*in[1]; │ │ │ │ │ -207 out[11][1][1] = -90 + 180*in[0] + 180*in[1]; │ │ │ │ │ -208 } │ │ │ │ │ -209 │ │ │ │ │ -_2_1_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -212 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -213 std::vector& out) const // return value │ │ │ │ │ -214 { │ │ │ │ │ -215 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -216 if (totalOrder == 0) { │ │ │ │ │ -217 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -218 } else if (totalOrder == 1) { │ │ │ │ │ -219 out.resize(_s_i_z_e()); │ │ │ │ │ -220 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -221 │ │ │ │ │ -222 switch (direction) { │ │ │ │ │ -223 case 0: │ │ │ │ │ -224 out[0][0] = sign_[0]*(-2*in[1] + 2*in[0]); │ │ │ │ │ -225 out[0][1] = sign_[0]*(-2*in[1]); │ │ │ │ │ -226 │ │ │ │ │ -227 out[1][0] = 1.5 + 3*in[1] - 9*in[0]; │ │ │ │ │ -228 out[1][1] = 6 - 15*in[1]; │ │ │ │ │ -229 │ │ │ │ │ -230 out[2][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]); │ │ │ │ │ -231 out[2][1] = sign_[0]*(30 - 25*in[1] - 60*in[0]); │ │ │ │ │ -232 │ │ │ │ │ -233 out[3][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]); │ │ │ │ │ -234 out[3][1] = sign_[1]*(-2*in[1]); │ │ │ │ │ -235 │ │ │ │ │ -236 out[4][0] = -10.5 + 15*in[1] + 15*in[0]; │ │ │ │ │ -237 out[4][1] = -3*in[1]; │ │ │ │ │ -238 │ │ │ │ │ -239 out[5][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]); │ │ │ │ │ -240 out[5][1] = sign_[1]*(5*in[1]); │ │ │ │ │ -241 │ │ │ │ │ -242 out[6][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]); │ │ │ │ │ -243 out[6][1] = sign_[2]*(4*in[1]); │ │ │ │ │ -244 │ │ │ │ │ -245 out[7][0] = -3 + 12*in[0]; │ │ │ │ │ -246 out[7][1] = 0; │ │ │ │ │ -247 │ │ │ │ │ -248 out[8][0] = sign_[2]*(-10*in[1] + 10*in[0]); │ │ │ │ │ -249 out[8][1] = sign_[2]*(-10*in[1]); │ │ │ │ │ -250 │ │ │ │ │ -251 out[9][0] = 18 - 12*in[1] - 36*in[0]; │ │ │ │ │ -252 out[9][1] = -12*in[1]; │ │ │ │ │ -253 │ │ │ │ │ -254 out[10][0] = 6 - 12*in[1] - 12*in[0]; │ │ │ │ │ -255 out[10][1] = -12*in[1]; │ │ │ │ │ -256 │ │ │ │ │ -257 out[11][0] = 90 - 180*in[1] - 180*in[0]; │ │ │ │ │ -258 out[11][1] = 180*in[1]; │ │ │ │ │ -259 break; │ │ │ │ │ -260 case 1: │ │ │ │ │ -261 out[0][0] = sign_[0]*(-2*in[0]); │ │ │ │ │ -262 out[0][1] = sign_[0]*(6 -2*in[0] - 10*in[1]); │ │ │ │ │ -263 │ │ │ │ │ -264 out[1][0] = 3*in[0]; │ │ │ │ │ -265 out[1][1] = 10.5 - 15*in[0] - 15*in[1]; │ │ │ │ │ -266 │ │ │ │ │ -267 out[2][0] = sign_[0]*(5*in[0]); │ │ │ │ │ -268 out[2][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]); │ │ │ │ │ -269 │ │ │ │ │ -270 out[3][0] = sign_[1]*(-2*in[0]); │ │ │ │ │ -271 out[3][1] = sign_[1]*(-2*in[0] + 2*in[1]); │ │ │ │ │ -272 │ │ │ │ │ -273 out[4][0] = -6 + 15*in[0]; │ │ │ │ │ -274 out[4][1] = -1.5 - 3*in[0] + 9*in[1]; │ │ │ │ │ -275 │ │ │ │ │ -276 out[5][0] = sign_[1]*(30 - 25*in[0] - 60*in[1]); │ │ │ │ │ -277 out[5][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]); │ │ │ │ │ -278 │ │ │ │ │ -279 out[6][0] = sign_[2]*(4*in[0]); │ │ │ │ │ -280 out[6][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]); │ │ │ │ │ -281 │ │ │ │ │ -282 out[7][0] = 0; │ │ │ │ │ -283 out[7][1] = 3 - 12*in[1]; │ │ │ │ │ -284 │ │ │ │ │ -285 out[8][0] = sign_[2]*(-10*in[0]); │ │ │ │ │ -286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]); │ │ │ │ │ -287 │ │ │ │ │ -288 out[9][0] = -12*in[0]; │ │ │ │ │ -289 out[9][1] = 6 - 12*in[0] - 12*in[1]; │ │ │ │ │ -290 │ │ │ │ │ -291 out[10][0] = -12*in[0]; │ │ │ │ │ -292 out[10][1] = 18 - 12*in[0] - 36*in[1]; │ │ │ │ │ -293 │ │ │ │ │ -294 out[11][0] = -180*in[0]; │ │ │ │ │ -295 out[11][1] = -90 + 180*in[0] + 180*in[1]; │ │ │ │ │ -296 break; │ │ │ │ │ -297 default: │ │ │ │ │ -298 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -299 } │ │ │ │ │ -300 } else { │ │ │ │ │ -301 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -302 } │ │ │ │ │ -303 } │ │ │ │ │ -304 │ │ │ │ │ -_3_0_6 unsigned int _o_r_d_e_r() const │ │ │ │ │ -307 { │ │ │ │ │ -308 return 2; // TODO: check whether this is not order 3 │ │ │ │ │ -309 } │ │ │ │ │ -310 │ │ │ │ │ -311 private: │ │ │ │ │ -312 std::array sign_; │ │ │ │ │ -313 }; │ │ │ │ │ -314} // end namespace Dune │ │ │ │ │ -315#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 struct _E_d_g_e_S_0___5_C_o_m_m_o_n { │ │ │ │ │ +_2_5 using _R_e_f_E_l_e_m = │ │ │ │ │ +26 decltype(referenceElement(DF{}, GeometryTypes::simplex(dim), │ │ │ │ │ +27 Dim{})); │ │ │ │ │ +28 │ │ │ │ │ +_3_0 _R_e_f_E_l_e_m _r_e_f_e_l_e_m = referenceElement(DF{}, GeometryTypes::simplex(dim), │ │ │ │ │ +31 Dim{}); │ │ │ │ │ +32 │ │ │ │ │ +34 │ │ │ │ │ +_3_8 std::size_t _s = _r_e_f_e_l_e_m.size(dim-1); │ │ │ │ │ +39 }; │ │ │ │ │ +40 │ │ │ │ │ +41} // namespace Dune │ │ │ │ │ +42 │ │ │ │ │ +43#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COMMON_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:121 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM2Simplex2DLocalBasis(std::bitset< 3 > s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:211 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM2Simplex2DLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:306 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +Common base class for edge elements. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_r_e_f_e_l_e_m │ │ │ │ │ +RefElem refelem │ │ │ │ │ +The reference element for this edge element. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_R_e_f_E_l_e_m │ │ │ │ │ +decltype(referenceElement(DF{}, GeometryTypes::simplex(dim), Dim< dim >{})) │ │ │ │ │ +RefElem │ │ │ │ │ +The type of the referenceElement. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ +std::size_t s │ │ │ │ │ +The number of base functions. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ +dune-localfunctions: edges0.5.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3d.hh File Reference
│ │ │ │ +
edges0.5.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube3DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on hexahedron. More...
class  Dune::EdgeS0_5FiniteElement< Geometry, RF >
 FiniteElement for lowest order edge elements on simplices. More...
 
struct  Dune::EdgeS0_5FiniteElement< Geometry, RF >::Traits
 
struct  Dune::EdgeS0_5FiniteElementFactory< Geometry, RF >
 Factory for EdgeS0_5FiniteElement objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ │ +edges0.5.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ +  FiniteElement for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ +  Factory for _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00047_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3d.hh Source File │ │ │ │ +dune-localfunctions: edges0.5.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,132 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3d.hh
│ │ │ │ +
edges0.5.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <dune/geometry/type.hh>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 : basis(s)
│ │ │ │ -
46 , interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ +
15namespace Dune {
│ │ │ │ +
16
│ │ │ │ +
18 //
│ │ │ │ +
19 // FiniteElement
│ │ │ │ +
20 //
│ │ │ │ +
21
│ │ │ │ +
23
│ │ │ │ +
41 template<class Geometry, class RF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
43 public:
│ │ │ │ +
│ │ │ │ +
47 struct Traits {
│ │ │ │ + │ │ │ │ +
49 typedef EdgeS0_5Interpolation<Geometry,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
52 };
│ │ │ │
│ │ │ │
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ +
54 private:
│ │ │ │ +
55 typename Traits::Basis basis_;
│ │ │ │ +
56 typename Traits::Interpolation interpolation_;
│ │ │ │ +
57 static const typename Traits::Coefficients& coefficients_;
│ │ │ │
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ +
59 public:
│ │ │ │ +
61
│ │ │ │ +
64 template<class VertexOrder>
│ │ │ │
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ +
65 EdgeS0_5FiniteElement(const Geometry& geo,
│ │ │ │ +
66 const VertexOrder& vertexOrder) :
│ │ │ │ +
67 basis_(geo, vertexOrder), interpolation_(geo, vertexOrder)
│ │ │ │ +
68 { }
│ │ │ │
│ │ │ │
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::hexahedron;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 BDM1Cube3DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80} // end namespace Dune
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
71 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ +
│ │ │ │ +
73 const typename Traits::Interpolation& interpolation() const
│ │ │ │ +
74 { return interpolation_; }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
76 const typename Traits::Coefficients& coefficients() const
│ │ │ │ +
77 { return coefficients_; }
│ │ │ │ +
│ │ │ │ +
79 static constexpr GeometryType type() { return GeometryTypes::simplex(Geometry::mydimension); }
│ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
82 template<class Geometry, class RF>
│ │ │ │ + │ │ │ │ +
84 EdgeS0_5FiniteElement<Geometry, RF>::coefficients_ =
│ │ │ │ +
85 typename Traits::Coefficients();
│ │ │ │ +
86
│ │ │ │ +
88 //
│ │ │ │ +
89 // Factory
│ │ │ │ +
90 //
│ │ │ │ +
91
│ │ │ │ +
93
│ │ │ │ +
102 template<class Geometry, class RF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
105
│ │ │ │ +
107
│ │ │ │ +
121 template<class VertexOrder>
│ │ │ │ +
│ │ │ │ +
122 const FiniteElement make(const Geometry& geometry,
│ │ │ │ +
123 const VertexOrder& vertexOrder)
│ │ │ │ +
124 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ +
│ │ │ │ +
125 };
│ │ │ │ +
│ │ │ │ +
126
│ │ │ │ +
127} // namespace Dune
│ │ │ │ +
128
│ │ │ │ +
129#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on hexahedron.
Definition brezzidouglasmarini1cube3d.hh:27
│ │ │ │ -
BDM1Cube3DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1cube3d.hh:36
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1cube3d.hh:65
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1cube3d.hh:54
│ │ │ │ -
static constexpr GeometryType type()
Definition brezzidouglasmarini1cube3d.hh:70
│ │ │ │ -
LocalFiniteElementTraits< BDM1Cube3DLocalBasis< D, R >, BDM1Cube3DLocalCoefficients, BDM1Cube3DLocalInterpolation< BDM1Cube3DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1cube3d.hh:33
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1cube3d.hh:59
│ │ │ │ -
BDM1Cube3DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3d.hh:44
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1cube3d.hh:49
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:31
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:24
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:26
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
FiniteElement for lowest order edge elements on simplices.
Definition edges0.5.hh:42
│ │ │ │ +
EdgeS0_5FiniteElement(const Geometry &geo, const VertexOrder &vertexOrder)
Constructor.
Definition edges0.5.hh:65
│ │ │ │ +
static constexpr GeometryType type()
return geometry type of this element
Definition edges0.5.hh:79
│ │ │ │ +
const Traits::Basis & basis() const
return reference to the basis object
Definition edges0.5.hh:71
│ │ │ │ +
const Traits::Interpolation & interpolation() const
return reference to the interpolation object
Definition edges0.5.hh:73
│ │ │ │ +
const Traits::Coefficients & coefficients() const
return reference to the coefficients object
Definition edges0.5.hh:76
│ │ │ │ +
Definition edges0.5.hh:47
│ │ │ │ +
EdgeS0_5Coefficients< Geometry::mydimension > Coefficients
Definition edges0.5.hh:51
│ │ │ │ +
EdgeS0_5Interpolation< Geometry, typename Basis::Traits > Interpolation
Definition edges0.5.hh:50
│ │ │ │ +
EdgeS0_5Basis< Geometry, RF > Basis
Definition edges0.5.hh:48
│ │ │ │ +
Factory for EdgeS0_5FiniteElement objects.
Definition edges0.5.hh:103
│ │ │ │ +
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct the factory
Definition edges0.5.hh:122
│ │ │ │ +
EdgeS0_5FiniteElement< Geometry, RF > FiniteElement
Definition edges0.5.hh:104
│ │ │ │ +
Basis for order 0.5 (lowest order) edge elements on simplices.
Definition whitney/edges0.5/basis.hh:38
│ │ │ │ +
export type traits for function signature
Definition whitney/edges0.5/basis.hh:41
│ │ │ │ +
Coefficients for lowest order edge elements on simplices.
Definition whitney/edges0.5/coefficients.hh:31
│ │ │ │ +
Interpolation for lowest order edge elements on simplices.
Definition whitney/edges0.5/interpolation.hh:33
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,139 +1,151 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini1cube3d.hh │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ +edges0.5.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_b_a_s_i_s_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -45 : basis(s) │ │ │ │ │ -46 , interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ │ +16 │ │ │ │ │ +18 // │ │ │ │ │ +19 // FiniteElement │ │ │ │ │ +20 // │ │ │ │ │ +21 │ │ │ │ │ +23 │ │ │ │ │ +41 template │ │ │ │ │ +_4_2 class _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ +43 public: │ │ │ │ │ +_4_7 struct _T_r_a_i_t_s { │ │ │ │ │ +_4_8 typedef _E_d_g_e_S_0___5_B_a_s_i_s_<_G_e_o_m_e_t_r_y_,_ _R_F_> _B_a_s_i_s; │ │ │ │ │ +49 typedef _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_5_1 typedef _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_<_G_e_o_m_e_t_r_y_:_:_m_y_d_i_m_e_n_s_i_o_n_> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +52 }; │ │ │ │ │ 53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ +54 private: │ │ │ │ │ +55 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ +56 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +57 static const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& coefficients_; │ │ │ │ │ 58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ +59 public: │ │ │ │ │ +61 │ │ │ │ │ +64 template │ │ │ │ │ +_6_5 _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry& geo, │ │ │ │ │ +66 const VertexOrder& vertexOrder) : │ │ │ │ │ +67 basis_(geo, vertexOrder), interpolation_(geo, vertexOrder) │ │ │ │ │ +68 { } │ │ │ │ │ 69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e() │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::hexahedron; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} // end namespace Dune │ │ │ │ │ -81#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_7_1 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ +_7_3 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +74 { return interpolation_; } │ │ │ │ │ +_7_6 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +77 { return coefficients_; } │ │ │ │ │ +_7_9 static constexpr GeometryType _t_y_p_e() { return GeometryTypes::simplex │ │ │ │ │ +(Geometry::mydimension); } │ │ │ │ │ +80 }; │ │ │ │ │ +81 │ │ │ │ │ +82 template │ │ │ │ │ +83 const typename _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_>_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& │ │ │ │ │ +84 EdgeS0_5FiniteElement::coefficients_ = │ │ │ │ │ +85 typename Traits::Coefficients(); │ │ │ │ │ +86 │ │ │ │ │ +88 // │ │ │ │ │ +89 // Factory │ │ │ │ │ +90 // │ │ │ │ │ +91 │ │ │ │ │ +93 │ │ │ │ │ +102 template │ │ │ │ │ +_1_0_3 struct _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ +_1_0_4 typedef _E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +105 │ │ │ │ │ +107 │ │ │ │ │ +121 template │ │ │ │ │ +_1_2_2 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ +123 const VertexOrder& vertexOrder) │ │ │ │ │ +124 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ +125 }; │ │ │ │ │ +126 │ │ │ │ │ +127} // namespace Dune │ │ │ │ │ +128 │ │ │ │ │ +129#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Cube3DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +FiniteElement for lowest order edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +EdgeS0_5FiniteElement(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ +Constructor. │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< BDM1Cube3DLocalBasis< D, R >, │ │ │ │ │ -BDM1Cube3DLocalCoefficients, BDM1Cube3DLocalInterpolation< │ │ │ │ │ -BDM1Cube3DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Cube3DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +return geometry type of this element │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ +const Traits::Basis & basis() const │ │ │ │ │ +return reference to the basis object │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::Interpolation & interpolation() const │ │ │ │ │ +return reference to the interpolation object │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::Coefficients & coefficients() const │ │ │ │ │ +return reference to the coefficients object │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +EdgeS0_5Coefficients< Geometry::mydimension > Coefficients │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +EdgeS0_5Interpolation< Geometry, typename Basis::Traits > Interpolation │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +EdgeS0_5Basis< Geometry, RF > Basis │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for EdgeS0_5FiniteElement objects. │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:103 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ +&vertexOrder) │ │ │ │ │ +construct the factory │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:122 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +EdgeS0_5FiniteElement< Geometry, RF > FiniteElement │ │ │ │ │ +DDeeffiinniittiioonn edges0.5.hh:104 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ +Basis for order 0.5 (lowest order) edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Coefficients for lowest order edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Interpolation for lowest order edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:33 │ │ │ │ │ +_b_a_s_i_s_._h_h │ │ │ │ │ +_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarinicube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,40 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalcoefficients.hh File Reference
│ │ │ │ +
brezzidouglasmarinicube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Simplex2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on triangles. More...
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 1 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 1. More...
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 2 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 2. More...
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 3, 1 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 and order 1. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,34 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +brezzidouglasmarinicube.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Brezzi-Douglas-Marini-1 elements on triangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ +  Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 │ │ │ │ │ + and order 1. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ +  Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 │ │ │ │ │ + and order 2. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _> │ │ │ │ │ +  Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 │ │ │ │ │ + and order 1. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00050_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarinicube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalcoefficients.hh
│ │ │ │ +
brezzidouglasmarinicube.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
11
│ │ │ │
12
│ │ │ │
13namespace Dune
│ │ │ │
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ +
23 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ + │ │ │ │
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i=0; i<3; i++)
│ │ │ │ -
31 {
│ │ │ │ -
32 li[i] = LocalKey(i,1,0);
│ │ │ │ -
33 li[3 + i] = LocalKey(i,1,1);
│ │ │ │ -
34 }
│ │ │ │ -
35 }
│ │ │ │ -
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ -
38 std::size_t size () const
│ │ │ │ -
39 {
│ │ │ │ -
40 return 6;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
45 {
│ │ │ │ -
46 return li[i];
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
49 private:
│ │ │ │ -
50 std::vector<LocalKey> li;
│ │ │ │ -
51 };
│ │ │ │ -
│ │ │ │ -
52}
│ │ │ │ -
53#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
29 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 : public BDM1Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
32 {
│ │ │ │ +
33 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 {}
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
45 {}
│ │ │ │ +
│ │ │ │ +
46 };
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
51 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
53 : public BDM2Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
54 {
│ │ │ │ +
55 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
58 {}
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
67 {}
│ │ │ │ +
│ │ │ │ +
68 };
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
73 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
75 : public BDM1Cube3DLocalFiniteElement<D, R>
│ │ │ │ +
76 {
│ │ │ │ +
77 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
80 {}
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
89 {}
│ │ │ │ +
│ │ │ │ +
90 };
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
92} // namespace Dune
│ │ │ │ +
93
│ │ │ │ +
94#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on triangles.
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:24
│ │ │ │ -
BDM1Simplex2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:44
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:38
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini1cube2d.hh:27
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on hexahedron.
Definition brezzidouglasmarini1cube3d.hh:27
│ │ │ │ +
Second order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2d.hh:27
│ │ │ │ +
Brezzi-Douglas-Marini local finite element for cubes.
Definition brezzidouglasmarinicube.hh:24
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:43
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:35
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:57
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:65
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:79
│ │ │ │ +
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:87
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,79 +1,122 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalcoefficients.hh │ │ │ │ │ +brezzidouglasmarinicube.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ +11 │ │ │ │ │ 12 │ │ │ │ │ 13namespace _D_u_n_e │ │ │ │ │ 14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_3 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ 25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(6) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i=0; i<3; i++) │ │ │ │ │ -31 { │ │ │ │ │ -32 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -33 li[3 + i] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -34 } │ │ │ │ │ -35 } │ │ │ │ │ -36 │ │ │ │ │ -_3_8 std::size_t _s_i_z_e () const │ │ │ │ │ -39 { │ │ │ │ │ -40 return 6; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -45 { │ │ │ │ │ -46 return li[i]; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -49 private: │ │ │ │ │ -50 std::vector li; │ │ │ │ │ -51 }; │ │ │ │ │ -52} │ │ │ │ │ -53#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +31 : public _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +32 { │ │ │ │ │ +33 public: │ │ │ │ │ +_3_5 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +36 {} │ │ │ │ │ +37 │ │ │ │ │ +_4_3 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +44 : _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +45 {} │ │ │ │ │ +46 }; │ │ │ │ │ +47 │ │ │ │ │ +51 template │ │ │ │ │ +_5_2 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +53 : public _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +54 { │ │ │ │ │ +55 public: │ │ │ │ │ +_5_7 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +58 {} │ │ │ │ │ +59 │ │ │ │ │ +_6_5 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +66 : _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +67 {} │ │ │ │ │ +68 }; │ │ │ │ │ +69 │ │ │ │ │ +73 template │ │ │ │ │ +_7_4 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +75 : public _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +76 { │ │ │ │ │ +77 public: │ │ │ │ │ +_7_9 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +80 {} │ │ │ │ │ +81 │ │ │ │ │ +_8_7 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +88 : _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +89 {} │ │ │ │ │ +90 }; │ │ │ │ │ +91 │ │ │ │ │ +92} // namespace Dune │ │ │ │ │ +93 │ │ │ │ │ +94#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-1 elements on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -BDM1Simplex2DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Brezzi-Douglas-Marini local finite element for cubes. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinicube.hh:87 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
class  Dune::BDM2Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - triangle. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00053_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,215 +70,81 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalbasis.hh
│ │ │ │ +
brezzidouglasmarini2cube2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include "../../common/localbasis.hh"
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ -
33 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
34 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {
│ │ │ │ -
39 for (size_t i=0; i<3; i++)
│ │ │ │ -
40 sign_[i] = 1.0;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
48 BDM1Simplex2DLocalBasis (std::bitset<3> s)
│ │ │ │ -
49 {
│ │ │ │ -
50 for (size_t i=0; i<3; i++)
│ │ │ │ -
51 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
55 unsigned int size () const
│ │ │ │ -
56 {
│ │ │ │ -
57 return 6;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
66 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
67 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
68 {
│ │ │ │ -
69 out.resize(6);
│ │ │ │ -
70
│ │ │ │ -
71 out[0][0] = sign_[0]*in[0];
│ │ │ │ -
72 out[0][1] = sign_[0]*(in[1] - 1.0);
│ │ │ │ -
73 out[1][0] = sign_[1]*(in[0] - 1.0);
│ │ │ │ -
74 out[1][1] = sign_[1]*in[1];
│ │ │ │ -
75 out[2][0] = sign_[2]*in[0];
│ │ │ │ -
76 out[2][1] = sign_[2]*in[1];
│ │ │ │ -
77 out[3][0] = 3.0*in[0];
│ │ │ │ -
78 out[3][1] = 3.0 - 6.0*in[0] - 3.0*in[1];
│ │ │ │ -
79 out[4][0] = -3.0 + 3.0*in[0] + 6.0*in[1];
│ │ │ │ -
80 out[4][1] = -3.0*in[1];
│ │ │ │ -
81 out[5][0] = -3.0*in[0];
│ │ │ │ -
82 out[5][1] = 3.0*in[1];
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
│ │ │ │ -
91 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
92 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
93 {
│ │ │ │ -
94 out.resize(6);
│ │ │ │ -
95
│ │ │ │ -
96 out[0][0][0] = sign_[0];
│ │ │ │ -
97 out[0][0][1] = 0.0;
│ │ │ │ -
98 out[0][1][0] = 0.0;
│ │ │ │ -
99 out[0][1][1] = sign_[0];
│ │ │ │ -
100
│ │ │ │ -
101 out[1][0][0] = sign_[1];
│ │ │ │ -
102 out[1][0][1] = 0.0;
│ │ │ │ -
103 out[1][1][0] = 0.0;
│ │ │ │ -
104 out[1][1][1] = sign_[1];
│ │ │ │ -
105
│ │ │ │ -
106 out[2][0][0] = sign_[2];
│ │ │ │ -
107 out[2][0][1] = 0.0;
│ │ │ │ -
108 out[2][1][0] = 0.0;
│ │ │ │ -
109 out[2][1][1] = sign_[2];
│ │ │ │ -
110
│ │ │ │ -
111 out[3][0][0] = 3.0;
│ │ │ │ -
112 out[3][0][1] = 0.0;
│ │ │ │ -
113 out[3][1][0] = -6.0;
│ │ │ │ -
114 out[3][1][1] = -3.0;
│ │ │ │ -
115
│ │ │ │ -
116 out[4][0][0] = 3.0;
│ │ │ │ -
117 out[4][0][1] = 6.0;
│ │ │ │ -
118 out[4][1][0] = 0.0;
│ │ │ │ -
119 out[4][1][1] = -3.0;
│ │ │ │ -
120
│ │ │ │ -
121 out[5][0][0] = -3.0;
│ │ │ │ -
122 out[5][0][1] = 0.0;
│ │ │ │ -
123 out[5][1][0] = 0.0;
│ │ │ │ -
124 out[5][1][1] = 3.0;
│ │ │ │ -
125 }
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
│ │ │ │ -
128 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
129 const typename Traits::DomainType& in, // position
│ │ │ │ -
130 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
131 {
│ │ │ │ -
132 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
133 if (totalOrder == 0) {
│ │ │ │ -
134 evaluateFunction(in, out);
│ │ │ │ -
135 } else if (totalOrder == 1) {
│ │ │ │ -
136 out.resize(size());
│ │ │ │ -
137 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
138
│ │ │ │ -
139 switch (direction) {
│ │ │ │ -
140 case 0:
│ │ │ │ -
141 out[0][0] = sign_[0];
│ │ │ │ -
142 out[0][1] = 0.0;
│ │ │ │ -
143
│ │ │ │ -
144 out[1][0] = sign_[1];
│ │ │ │ -
145 out[1][1] = 0.0;
│ │ │ │ -
146
│ │ │ │ -
147 out[2][0] = sign_[2];
│ │ │ │ -
148 out[2][1] = 0.0;
│ │ │ │ -
149
│ │ │ │ -
150 out[3][0] = 3.0;
│ │ │ │ -
151 out[3][1] = -6.0;
│ │ │ │ -
152
│ │ │ │ -
153 out[4][0] = 3.0;
│ │ │ │ -
154 out[4][1] = 0.0;
│ │ │ │ -
155
│ │ │ │ -
156 out[5][0] = -3.0;
│ │ │ │ -
157 out[5][1] = 0.0;
│ │ │ │ -
158 break;
│ │ │ │ -
159 case 1:
│ │ │ │ -
160 out[0][0] = 0.0;
│ │ │ │ -
161 out[0][1] = sign_[0];
│ │ │ │ -
162
│ │ │ │ -
163 out[1][0] = 0.0;
│ │ │ │ -
164 out[1][1] = sign_[1];
│ │ │ │ -
165
│ │ │ │ -
166 out[2][0] = 0.0;
│ │ │ │ -
167 out[2][1] = sign_[2];
│ │ │ │ -
168
│ │ │ │ -
169 out[3][0] = 0.0;
│ │ │ │ -
170 out[3][1] = -3.0;
│ │ │ │ -
171
│ │ │ │ -
172 out[4][0] = 6.0;
│ │ │ │ -
173 out[4][1] = -3.0;
│ │ │ │ -
174
│ │ │ │ -
175 out[5][0] = 0.0;
│ │ │ │ -
176 out[5][1] = 3.0;
│ │ │ │ -
177 break;
│ │ │ │ -
178 default:
│ │ │ │ -
179 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
180 }
│ │ │ │ -
181 } else {
│ │ │ │ -
182 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
183 }
│ │ │ │ -
184 }
│ │ │ │ -
│ │ │ │ -
185
│ │ │ │ -
│ │ │ │ -
187 unsigned int order () const
│ │ │ │ -
188 {
│ │ │ │ -
189 return 1;
│ │ │ │ -
190 }
│ │ │ │ -
│ │ │ │ -
191
│ │ │ │ -
192 private:
│ │ │ │ -
193 std::array<R,3> sign_;
│ │ │ │ -
194 };
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i = 0; i < 4; ++i)
│ │ │ │ +
31 {
│ │ │ │ +
32 li[3 * i] = LocalKey(i,1,0);
│ │ │ │ +
33 li[3 * i + 1] = LocalKey(i,1,1);
│ │ │ │ +
34 li[3 * i + 2] = LocalKey(i,1,2);
│ │ │ │ +
35 }
│ │ │ │ +
36 li[12] = LocalKey(0,0,0);
│ │ │ │ +
37 li[13] = LocalKey(0,0,1);
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 std::size_t size() const
│ │ │ │ +
42 {
│ │ │ │ +
43 return 14;
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
47 const LocalKey& localKey(std::size_t i) const
│ │ │ │ +
48 {
│ │ │ │ +
49 return li[i];
│ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
52 private:
│ │ │ │ +
53 std::vector<LocalKey> li;
│ │ │ │ +
54 };
│ │ │ │
│ │ │ │ -
195}
│ │ │ │ -
196#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
55} // end namespace Dune
│ │ │ │ +
56#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:30
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:91
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:55
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:66
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:34
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:128
│ │ │ │ -
BDM1Simplex2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:37
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:187
│ │ │ │ -
BDM1Simplex2DLocalBasis(std::bitset< 3 > s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:48
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:24
│ │ │ │ +
BDM2Cube2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:47
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:41
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,228 +1,80 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ +brezzidouglasmarini2cube2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include "../../common/localbasis.hh" │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_4 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -_3_7 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -38 { │ │ │ │ │ -39 for (size_t i=0; i<3; i++) │ │ │ │ │ -40 sign_[i] = 1.0; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<3> s) │ │ │ │ │ -49 { │ │ │ │ │ -50 for (size_t i=0; i<3; i++) │ │ │ │ │ -51 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_5 unsigned int _s_i_z_e () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return 6; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -67 std::vector& out) const │ │ │ │ │ -68 { │ │ │ │ │ -69 out.resize(6); │ │ │ │ │ -70 │ │ │ │ │ -71 out[0][0] = sign_[0]*in[0]; │ │ │ │ │ -72 out[0][1] = sign_[0]*(in[1] - 1.0); │ │ │ │ │ -73 out[1][0] = sign_[1]*(in[0] - 1.0); │ │ │ │ │ -74 out[1][1] = sign_[1]*in[1]; │ │ │ │ │ -75 out[2][0] = sign_[2]*in[0]; │ │ │ │ │ -76 out[2][1] = sign_[2]*in[1]; │ │ │ │ │ -77 out[3][0] = 3.0*in[0]; │ │ │ │ │ -78 out[3][1] = 3.0 - 6.0*in[0] - 3.0*in[1]; │ │ │ │ │ -79 out[4][0] = -3.0 + 3.0*in[0] + 6.0*in[1]; │ │ │ │ │ -80 out[4][1] = -3.0*in[1]; │ │ │ │ │ -81 out[5][0] = -3.0*in[0]; │ │ │ │ │ -82 out[5][1] = 3.0*in[1]; │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_9_1 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -92 std::vector& out) const │ │ │ │ │ -93 { │ │ │ │ │ -94 out.resize(6); │ │ │ │ │ -95 │ │ │ │ │ -96 out[0][0][0] = sign_[0]; │ │ │ │ │ -97 out[0][0][1] = 0.0; │ │ │ │ │ -98 out[0][1][0] = 0.0; │ │ │ │ │ -99 out[0][1][1] = sign_[0]; │ │ │ │ │ -100 │ │ │ │ │ -101 out[1][0][0] = sign_[1]; │ │ │ │ │ -102 out[1][0][1] = 0.0; │ │ │ │ │ -103 out[1][1][0] = 0.0; │ │ │ │ │ -104 out[1][1][1] = sign_[1]; │ │ │ │ │ -105 │ │ │ │ │ -106 out[2][0][0] = sign_[2]; │ │ │ │ │ -107 out[2][0][1] = 0.0; │ │ │ │ │ -108 out[2][1][0] = 0.0; │ │ │ │ │ -109 out[2][1][1] = sign_[2]; │ │ │ │ │ -110 │ │ │ │ │ -111 out[3][0][0] = 3.0; │ │ │ │ │ -112 out[3][0][1] = 0.0; │ │ │ │ │ -113 out[3][1][0] = -6.0; │ │ │ │ │ -114 out[3][1][1] = -3.0; │ │ │ │ │ -115 │ │ │ │ │ -116 out[4][0][0] = 3.0; │ │ │ │ │ -117 out[4][0][1] = 6.0; │ │ │ │ │ -118 out[4][1][0] = 0.0; │ │ │ │ │ -119 out[4][1][1] = -3.0; │ │ │ │ │ -120 │ │ │ │ │ -121 out[5][0][0] = -3.0; │ │ │ │ │ -122 out[5][0][1] = 0.0; │ │ │ │ │ -123 out[5][1][0] = 0.0; │ │ │ │ │ -124 out[5][1][1] = 3.0; │ │ │ │ │ -125 } │ │ │ │ │ -126 │ │ │ │ │ -_1_2_8 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -129 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -130 std::vector& out) const // return value │ │ │ │ │ -131 { │ │ │ │ │ -132 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -133 if (totalOrder == 0) { │ │ │ │ │ -134 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -135 } else if (totalOrder == 1) { │ │ │ │ │ -136 out.resize(_s_i_z_e()); │ │ │ │ │ -137 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -138 │ │ │ │ │ -139 switch (direction) { │ │ │ │ │ -140 case 0: │ │ │ │ │ -141 out[0][0] = sign_[0]; │ │ │ │ │ -142 out[0][1] = 0.0; │ │ │ │ │ -143 │ │ │ │ │ -144 out[1][0] = sign_[1]; │ │ │ │ │ -145 out[1][1] = 0.0; │ │ │ │ │ -146 │ │ │ │ │ -147 out[2][0] = sign_[2]; │ │ │ │ │ -148 out[2][1] = 0.0; │ │ │ │ │ -149 │ │ │ │ │ -150 out[3][0] = 3.0; │ │ │ │ │ -151 out[3][1] = -6.0; │ │ │ │ │ -152 │ │ │ │ │ -153 out[4][0] = 3.0; │ │ │ │ │ -154 out[4][1] = 0.0; │ │ │ │ │ -155 │ │ │ │ │ -156 out[5][0] = -3.0; │ │ │ │ │ -157 out[5][1] = 0.0; │ │ │ │ │ -158 break; │ │ │ │ │ -159 case 1: │ │ │ │ │ -160 out[0][0] = 0.0; │ │ │ │ │ -161 out[0][1] = sign_[0]; │ │ │ │ │ -162 │ │ │ │ │ -163 out[1][0] = 0.0; │ │ │ │ │ -164 out[1][1] = sign_[1]; │ │ │ │ │ -165 │ │ │ │ │ -166 out[2][0] = 0.0; │ │ │ │ │ -167 out[2][1] = sign_[2]; │ │ │ │ │ -168 │ │ │ │ │ -169 out[3][0] = 0.0; │ │ │ │ │ -170 out[3][1] = -3.0; │ │ │ │ │ -171 │ │ │ │ │ -172 out[4][0] = 6.0; │ │ │ │ │ -173 out[4][1] = -3.0; │ │ │ │ │ -174 │ │ │ │ │ -175 out[5][0] = 0.0; │ │ │ │ │ -176 out[5][1] = 3.0; │ │ │ │ │ -177 break; │ │ │ │ │ -178 default: │ │ │ │ │ -179 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -180 } │ │ │ │ │ -181 } else { │ │ │ │ │ -182 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -183 } │ │ │ │ │ -184 } │ │ │ │ │ -185 │ │ │ │ │ -_1_8_7 unsigned int _o_r_d_e_r () const │ │ │ │ │ -188 { │ │ │ │ │ -189 return 1; │ │ │ │ │ -190 } │ │ │ │ │ -191 │ │ │ │ │ -192 private: │ │ │ │ │ -193 std::array sign_; │ │ │ │ │ -194 }; │ │ │ │ │ -195} │ │ │ │ │ -196#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() : li(14) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i = 0; i < 4; ++i) │ │ │ │ │ +31 { │ │ │ │ │ +32 li[3 * i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +33 li[3 * i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +34 li[3 * i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +35 } │ │ │ │ │ +36 li[12] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ +37 li[13] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 std::size_t _s_i_z_e() const │ │ │ │ │ +42 { │ │ │ │ │ +43 return 14; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const │ │ │ │ │ +48 { │ │ │ │ │ +49 return li[i]; │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +52 private: │ │ │ │ │ +53 std::vector li; │ │ │ │ │ +54 }; │ │ │ │ │ +55} // end namespace Dune │ │ │ │ │ +56#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:91 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:128 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Simplex2DLocalBasis() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +BDM2Cube2DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Simplex2DLocalBasis(std::bitset< 3 > s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ #include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
class  Dune::BDM2Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ +brezzidouglasmarini2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - triangle. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00056_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,130 +70,153 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2dlocalinterpolation.hh
│ │ │ │ +
brezzidouglasmarini2cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │
11
│ │ │ │
12namespace Dune
│ │ │ │
13{
│ │ │ │ -
22 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ -
31 }
│ │ │ │ -
│ │ │ │ -
32
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {
│ │ │ │ -
40 using std::sqrt;
│ │ │ │ -
41 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │
42 if (s & 1)
│ │ │ │
43 {
│ │ │ │
44 sign0 = -1.0;
│ │ │ │
45 }
│ │ │ │
46 if (s & 2)
│ │ │ │
47 {
│ │ │ │
48 sign1 = -1.0;
│ │ │ │
49 }
│ │ │ │
50 if (s & 4)
│ │ │ │
51 {
│ │ │ │
52 sign2 = -1.0;
│ │ │ │
53 }
│ │ │ │ -
54
│ │ │ │ -
55 n0[0] = 0.0;
│ │ │ │ -
56 n0[1] = -1.0;
│ │ │ │ -
57 n1[0] = -1.0;
│ │ │ │ -
58 n1[1] = 0.0;
│ │ │ │ -
59 n2[0] = 1.0/sqrt(2.0);
│ │ │ │ -
60 n2[1] = 1.0/sqrt(2.0);
│ │ │ │ -
61 c0 = 0.5*n0[0] - 1.0*n0[1];
│ │ │ │ -
62 c1 = -1.0*n1[0] + 0.5*n1[1];
│ │ │ │ -
63 c2 = 0.5*n2[0] + 0.5*n2[1];
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
74 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
75 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
76 {
│ │ │ │ -
77 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
78 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
79
│ │ │ │ -
80 out.resize(6);
│ │ │ │ -
81 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
82
│ │ │ │ -
83 const int qOrder = 4;
│ │ │ │ -
84 const Dune::QuadratureRule<Scalar,1>& rule = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder);
│ │ │ │ -
85
│ │ │ │ -
86 for (typename Dune::QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ -
87 {
│ │ │ │ -
88 Scalar qPos = it->position();
│ │ │ │ -
89 typename LB::Traits::DomainType localPos;
│ │ │ │ -
90
│ │ │ │ -
91 localPos[0] = qPos;
│ │ │ │ -
92 localPos[1] = 0.0;
│ │ │ │ -
93 auto y = f(localPos);
│ │ │ │ -
94 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0;
│ │ │ │ -
95 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight()/c0;
│ │ │ │ +
54 if (s & 8)
│ │ │ │ +
55 {
│ │ │ │ +
56 sign3 = -1.0;
│ │ │ │ +
57 }
│ │ │ │ +
58
│ │ │ │ +
59 n0[0] = -1.0;
│ │ │ │ +
60 n0[1] = 0.0;
│ │ │ │ +
61 n1[0] = 1.0;
│ │ │ │ +
62 n1[1] = 0.0;
│ │ │ │ +
63 n2[0] = 0.0;
│ │ │ │ +
64 n2[1] = -1.0;
│ │ │ │ +
65 n3[0] = 0.0;
│ │ │ │ +
66 n3[1] = 1.0;
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │ +
68
│ │ │ │ +
77 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
78 void interpolate(const F& f, std::vector<C>& out) const
│ │ │ │ +
79 {
│ │ │ │ +
80 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
81 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
82 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
83
│ │ │ │ +
84 out.resize(14);
│ │ │ │ +
85 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
86
│ │ │ │ +
87 const int qOrder = 4;
│ │ │ │ +
88 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
89
│ │ │ │ +
90 for (typename QuadratureRule<Scalar,1>::const_iterator it = rule.begin();
│ │ │ │ +
91 it != rule.end(); ++it)
│ │ │ │ +
92 {
│ │ │ │ +
93 Scalar qPos = it->position();
│ │ │ │ +
94
│ │ │ │ +
95 typename LB::Traits::DomainType localPos;
│ │ │ │
96
│ │ │ │
97 localPos[0] = 0.0;
│ │ │ │
98 localPos[1] = qPos;
│ │ │ │ -
99 y = f(localPos);
│ │ │ │ -
100 out[1] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1/c1;
│ │ │ │ -
101 out[4] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight()/c1;
│ │ │ │ -
102
│ │ │ │ -
103 localPos[0] = 1.0 - qPos;
│ │ │ │ -
104 localPos[1] = qPos;
│ │ │ │ -
105 y = f(localPos);
│ │ │ │ -
106 out[2] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2;
│ │ │ │ -
107 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(2.0*qPos - 1.0)*it->weight()/c2;
│ │ │ │ -
108 }
│ │ │ │ -
109 }
│ │ │ │ -
│ │ │ │ +
99 auto y = f(localPos);
│ │ │ │ +
100 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0;
│ │ │ │ +
101 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
102 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it->weight()*sign0;
│ │ │ │ +
103
│ │ │ │ +
104 localPos[0] = 1.0;
│ │ │ │ +
105 localPos[1] = qPos;
│ │ │ │ +
106 y = f(localPos);
│ │ │ │ +
107 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1;
│ │ │ │ +
108 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
109 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it->weight()*sign1;
│ │ │ │
110
│ │ │ │ -
111 private:
│ │ │ │ -
112 typename LB::Traits::RangeFieldType sign0,sign1,sign2;
│ │ │ │ -
113 typename LB::Traits::DomainType n0,n1,n2;
│ │ │ │ -
114 typename LB::Traits::RangeFieldType c0,c1,c2;
│ │ │ │ -
115 };
│ │ │ │ -
│ │ │ │ -
116}
│ │ │ │ +
111 localPos[0] = qPos;
│ │ │ │ +
112 localPos[1] = 0.0;
│ │ │ │ +
113 y = f(localPos);
│ │ │ │ +
114 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2;
│ │ │ │ +
115 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
116 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it->weight()*sign2;
│ │ │ │
117
│ │ │ │ -
118#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
118 localPos[0] = qPos;
│ │ │ │ +
119 localPos[1] = 1.0;
│ │ │ │ +
120 y = f(localPos);
│ │ │ │ +
121 out[9] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3;
│ │ │ │ +
122 out[10] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
123 out[11] += (y[0]*n3[0] + y[1]*n3[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it->weight()*sign3;
│ │ │ │ +
124 }
│ │ │ │ +
125
│ │ │ │ +
126 const QuadratureRule<Vector,2>& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
127
│ │ │ │ +
128 for (typename QuadratureRule<Vector,2>::const_iterator it=rule2.begin(); it!=rule2.end(); ++it)
│ │ │ │ +
129 {
│ │ │ │ +
130 auto y = f(it->position());
│ │ │ │ +
131 out[12] += y[0]*it->weight();
│ │ │ │ +
132 out[13] += y[1]*it->weight();
│ │ │ │ +
133 }
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
136 private:
│ │ │ │ +
137 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3;
│ │ │ │ +
138 typename LB::Traits::DomainType n0, n1, n2, n3;
│ │ │ │ +
139 };
│ │ │ │ +
│ │ │ │ +
140} // end namespace Dune
│ │ │ │ +
141#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:24
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:75
│ │ │ │ -
BDM1Simplex2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:38
│ │ │ │ -
BDM1Simplex2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:28
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:25
│ │ │ │ +
BDM2Cube2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:39
│ │ │ │ +
BDM2Cube2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:29
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:78
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,131 +1,157 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ -brezzidouglasmarini1simplex2dlocalinterpolation.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ +brezzidouglasmarini2cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ 10#include │ │ │ │ │ 11 │ │ │ │ │ 12namespace _D_u_n_e │ │ │ │ │ 13{ │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () │ │ │ │ │ -29 { │ │ │ │ │ -30 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ -31 } │ │ │ │ │ -32 │ │ │ │ │ -_3_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s) │ │ │ │ │ -39 { │ │ │ │ │ -40 using std::sqrt; │ │ │ │ │ -41 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +_2_9 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ +30 { │ │ │ │ │ +31 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(unsigned int s) │ │ │ │ │ +40 { │ │ │ │ │ +41 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ 42 if (s & 1) │ │ │ │ │ 43 { │ │ │ │ │ 44 sign0 = -1.0; │ │ │ │ │ 45 } │ │ │ │ │ 46 if (s & 2) │ │ │ │ │ 47 { │ │ │ │ │ 48 sign1 = -1.0; │ │ │ │ │ 49 } │ │ │ │ │ 50 if (s & 4) │ │ │ │ │ 51 { │ │ │ │ │ 52 sign2 = -1.0; │ │ │ │ │ 53 } │ │ │ │ │ -54 │ │ │ │ │ -55 n0[0] = 0.0; │ │ │ │ │ -56 n0[1] = -1.0; │ │ │ │ │ -57 n1[0] = -1.0; │ │ │ │ │ -58 n1[1] = 0.0; │ │ │ │ │ -59 n2[0] = 1.0/sqrt(2.0); │ │ │ │ │ -60 n2[1] = 1.0/sqrt(2.0); │ │ │ │ │ -61 c0 = 0.5*n0[0] - 1.0*n0[1]; │ │ │ │ │ -62 c1 = -1.0*n1[0] + 0.5*n1[1]; │ │ │ │ │ -63 c2 = 0.5*n2[0] + 0.5*n2[1]; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -74 template │ │ │ │ │ -_7_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -76 { │ │ │ │ │ -77 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -78 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -79 │ │ │ │ │ -80 out.resize(6); │ │ │ │ │ -81 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -82 │ │ │ │ │ -83 const int qOrder = 4; │ │ │ │ │ -84 const Dune::QuadratureRule& rule = Dune:: │ │ │ │ │ -QuadratureRules::rule(Dune::GeometryTypes::simplex(1), qOrder); │ │ │ │ │ -85 │ │ │ │ │ -86 for (typename Dune::QuadratureRule::const_iterator it=rule.begin │ │ │ │ │ -(); it!=rule.end(); ++it) │ │ │ │ │ -87 { │ │ │ │ │ -88 Scalar qPos = it->position(); │ │ │ │ │ -89 typename LB::Traits::DomainType localPos; │ │ │ │ │ -90 │ │ │ │ │ -91 localPos[0] = qPos; │ │ │ │ │ -92 localPos[1] = 0.0; │ │ │ │ │ -93 auto y = f(localPos); │ │ │ │ │ -94 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0; │ │ │ │ │ -95 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight()/c0; │ │ │ │ │ +54 if (s & 8) │ │ │ │ │ +55 { │ │ │ │ │ +56 sign3 = -1.0; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 n0[0] = -1.0; │ │ │ │ │ +60 n0[1] = 0.0; │ │ │ │ │ +61 n1[0] = 1.0; │ │ │ │ │ +62 n1[1] = 0.0; │ │ │ │ │ +63 n2[0] = 0.0; │ │ │ │ │ +64 n2[1] = -1.0; │ │ │ │ │ +65 n3[0] = 0.0; │ │ │ │ │ +66 n3[1] = 1.0; │ │ │ │ │ +67 } │ │ │ │ │ +68 │ │ │ │ │ +77 template │ │ │ │ │ +_7_8 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const │ │ │ │ │ +79 { │ │ │ │ │ +80 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +81 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +82 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +83 │ │ │ │ │ +84 out.resize(14); │ │ │ │ │ +85 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +86 │ │ │ │ │ +87 const int qOrder = 4; │ │ │ │ │ +88 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(1), qOrder); │ │ │ │ │ +89 │ │ │ │ │ +90 for (typename QuadratureRule::const_iterator it = rule.begin(); │ │ │ │ │ +91 it != rule.end(); ++it) │ │ │ │ │ +92 { │ │ │ │ │ +93 Scalar qPos = it->position(); │ │ │ │ │ +94 │ │ │ │ │ +95 typename LB::Traits::DomainType localPos; │ │ │ │ │ 96 │ │ │ │ │ 97 localPos[0] = 0.0; │ │ │ │ │ 98 localPos[1] = qPos; │ │ │ │ │ -99 y = f(localPos); │ │ │ │ │ -100 out[1] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1/c1; │ │ │ │ │ -101 out[4] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight()/c1; │ │ │ │ │ -102 │ │ │ │ │ -103 localPos[0] = 1.0 - qPos; │ │ │ │ │ -104 localPos[1] = qPos; │ │ │ │ │ -105 y = f(localPos); │ │ │ │ │ -106 out[2] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2; │ │ │ │ │ -107 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(2.0*qPos - 1.0)*it->weight()/c2; │ │ │ │ │ -108 } │ │ │ │ │ -109 } │ │ │ │ │ +99 auto y = f(localPos); │ │ │ │ │ +100 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0; │ │ │ │ │ +101 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +102 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign0; │ │ │ │ │ +103 │ │ │ │ │ +104 localPos[0] = 1.0; │ │ │ │ │ +105 localPos[1] = qPos; │ │ │ │ │ +106 y = f(localPos); │ │ │ │ │ +107 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1; │ │ │ │ │ +108 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +109 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign1; │ │ │ │ │ 110 │ │ │ │ │ -111 private: │ │ │ │ │ -112 typename LB::Traits::RangeFieldType sign0,sign1,sign2; │ │ │ │ │ -113 typename LB::Traits::DomainType n0,n1,n2; │ │ │ │ │ -114 typename LB::Traits::RangeFieldType c0,c1,c2; │ │ │ │ │ -115 }; │ │ │ │ │ -116} │ │ │ │ │ +111 localPos[0] = qPos; │ │ │ │ │ +112 localPos[1] = 0.0; │ │ │ │ │ +113 y = f(localPos); │ │ │ │ │ +114 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2; │ │ │ │ │ +115 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +116 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign2; │ │ │ │ │ 117 │ │ │ │ │ -118#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +118 localPos[0] = qPos; │ │ │ │ │ +119 localPos[1] = 1.0; │ │ │ │ │ +120 y = f(localPos); │ │ │ │ │ +121 out[9] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3; │ │ │ │ │ +122 out[10] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +123 out[11] += (y[0]*n3[0] + y[1]*n3[1])*(8.0*qPos*qPos - 8.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign3; │ │ │ │ │ +124 } │ │ │ │ │ +125 │ │ │ │ │ +126 const QuadratureRule& rule2 = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(2), qOrder); │ │ │ │ │ +127 │ │ │ │ │ +128 for (typename QuadratureRule::const_iterator it=rule2.begin(); │ │ │ │ │ +it!=rule2.end(); ++it) │ │ │ │ │ +129 { │ │ │ │ │ +130 auto y = f(it->position()); │ │ │ │ │ +131 out[12] += y[0]*it->weight(); │ │ │ │ │ +132 out[13] += y[1]*it->weight(); │ │ │ │ │ +133 } │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +136 private: │ │ │ │ │ +137 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3; │ │ │ │ │ +138 typename LB::Traits::DomainType n0, n1, n2, n3; │ │ │ │ │ +139 }; │ │ │ │ │ +140} // end namespace Dune │ │ │ │ │ +141#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM2Cube2DLocalInterpolation(unsigned int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM2Cube2DLocalInterpolation() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Simplex2DLocalInterpolation(unsigned int s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Simplex2DLocalInterpolation() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:28 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:78 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1simplex2d.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalinterpolation.hh"
│ │ │ │ +
#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Simplex2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on triangles. More...
class  Dune::BDM2Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +brezzidouglasmarini2cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00059_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1simplex2d.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,320 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1simplex2d.hh
│ │ │ │ +
brezzidouglasmarini2cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 basis(s),
│ │ │ │ -
47 interpolation(s)
│ │ │ │ -
48 {}
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
51 {
│ │ │ │ -
52 return basis;
│ │ │ │ +
15#include "../../common/localbasis.hh"
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
28 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31
│ │ │ │ +
32 public:
│ │ │ │ + │ │ │ │ +
34 R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
35 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {
│ │ │ │ +
40 for (size_t i=0; i<4; i++)
│ │ │ │ +
41 sign_[i] = 1.0;
│ │ │ │ +
42 }
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
49 BDM2Cube2DLocalBasis(std::bitset<4> s)
│ │ │ │ +
50 {
│ │ │ │ +
51 for (size_t i=0; i<4; i++)
│ │ │ │ +
52 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │
53 }
│ │ │ │
│ │ │ │
54
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ -
57 return coefficients;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
61 {
│ │ │ │ -
62 return interpolation;
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ -
66 unsigned int size () const
│ │ │ │ -
67 {
│ │ │ │ -
68 return basis.size();
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ -
71 static constexpr GeometryType type ()
│ │ │ │ -
72 {
│ │ │ │ -
73 return GeometryTypes::triangle;
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
76 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81}
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
56 unsigned int size() const
│ │ │ │ +
57 {
│ │ │ │ +
58 return 14;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ +
67 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
69 {
│ │ │ │ +
70 out.resize(size());
│ │ │ │ +
71
│ │ │ │ +
72 out[0][0] = sign_[0]*(-2.25 + 5.25*in[0] + 7.5*in[1] - 7.5*in[0]*in[1] - 3.0*in[0]*in[0] - 7.5*in[1]*in[1] + 7.5*in[0]*in[1]*in[1]);
│ │ │ │ +
73 out[0][1] = sign_[0]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in[1]);
│ │ │ │ +
74 out[1][0] = 3.0 - 3.0*in[0]-6.0*in[1] + 6.0*in[0]*in[1];
│ │ │ │ +
75 out[1][1] = 0.0;
│ │ │ │ +
76 out[2][0] = sign_[0]*(-3.75 + 3.75*in[0] + 22.5*in[1] - 22.5*in[0]*in[1] - 22.5*in[1]*in[1] + 22.5*in[0]*in[1]*in[1]);
│ │ │ │ +
77 out[2][1] = sign_[0]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in[1]);
│ │ │ │ +
78 out[3][0] = sign_[1]*(-0.75*in[0] - 7.5*in[0]*in[1] + 3.0*in[0]*in[0] + 7.5*in[0]*in[1]*in[1]);
│ │ │ │ +
79 out[3][1] = sign_[1]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in[1]);
│ │ │ │ +
80 out[4][0] = 3.0*in[0] - 6.0*in[0]*in[1];
│ │ │ │ +
81 out[4][1] = 0.0;
│ │ │ │ +
82 out[5][0] = sign_[1]*(+3.75*in[0] - 22.5*in[0]*in[1] + 22.5*in[0]*in[1]*in[1]);
│ │ │ │ +
83 out[5][1] = sign_[1]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in[1]);
│ │ │ │ +
84 out[6][0] = sign_[2]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in[0]);
│ │ │ │ +
85 out[6][1] = sign_[2]*(-2.25 + 7.5*in[0] + 5.25*in[1] - 7.5*in[0]*in[1] - 7.5*in[0]*in[0] - 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]);
│ │ │ │ +
86 out[7][0] = 0.0;
│ │ │ │ +
87 out[7][1] = -3.0 + 6.0*in[0] + 3.0*in[1] - 6.0*in[0]*in[1];
│ │ │ │ +
88 out[8][0] = sign_[2]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in[0]);
│ │ │ │ +
89 out[8][1] = sign_[2]*(-3.75 + 22.5*in[0] + 3.75*in[1] - 22.5*in[0]*in[1] - 22.5*in[0]*in[0] + 22.5*in[0]*in[0]*in[1]);
│ │ │ │ +
90 out[9][0] = sign_[3]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in[0]);
│ │ │ │ +
91 out[9][1] = sign_[3]*(-0.75*in[1] - 7.5*in[0]*in[1] + 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]);
│ │ │ │ +
92 out[10][0] = 0.0;
│ │ │ │ +
93 out[10][1] = -3.0*in[1] + 6.0*in[0]*in[1];
│ │ │ │ +
94 out[11][0] = sign_[3]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in[0]);
│ │ │ │ +
95 out[11][1] = sign_[3]*(3.75*in[1] - 22.5*in[0]*in[1] + 22.5*in[0]*in[0]*in[1]);
│ │ │ │ +
96 out[12][0] = 6.0*in[0] - 6.0*in[0]*in[0];
│ │ │ │ +
97 out[12][1] = 0.0;
│ │ │ │ +
98 out[13][0] = 0.0;
│ │ │ │ +
99 out[13][1] = 6.0*in[1] - 6.0*in[1]*in[1];
│ │ │ │ +
100 }
│ │ │ │ +
│ │ │ │ +
101
│ │ │ │ +
│ │ │ │ +
108 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
109 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
110 {
│ │ │ │ +
111 out.resize(size());
│ │ │ │ +
112
│ │ │ │ +
113 out[0][0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ +
114 out[0][0][1] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ +
115 out[0][1][0] = 0.0;
│ │ │ │ +
116 out[0][1][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ +
117
│ │ │ │ +
118 out[1][0][0] = -3.0 + 6.0*in[1];
│ │ │ │ +
119 out[1][0][1] = -6.0 + 6.0*in[0];
│ │ │ │ +
120 out[1][1][0] = 0.0;
│ │ │ │ +
121 out[1][1][1] = 0.0;
│ │ │ │ +
122
│ │ │ │ +
123 out[2][0][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ +
124 out[2][0][1] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]);
│ │ │ │ +
125 out[2][1][0] = 0.0;
│ │ │ │ +
126 out[2][1][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ +
127
│ │ │ │ +
128 out[3][0][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ +
129 out[3][0][1] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ +
130 out[3][1][0] = 0.0;
│ │ │ │ +
131 out[3][1][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ +
132
│ │ │ │ +
133 out[4][0][0] = 3.0 - 6.0*in[1];
│ │ │ │ +
134 out[4][0][1] = -6.0*in[0];
│ │ │ │ +
135 out[4][1][0] = 0.0;
│ │ │ │ +
136 out[4][1][1] = 0.0;
│ │ │ │ +
137
│ │ │ │ +
138 out[5][0][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ +
139 out[5][0][1] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ +
140 out[5][1][0] = 0.0;
│ │ │ │ +
141 out[5][1][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ +
142
│ │ │ │ +
143 out[6][0][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ +
144 out[6][0][1] = 0.0;
│ │ │ │ +
145 out[6][1][0] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ +
146 out[6][1][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ +
147
│ │ │ │ +
148 out[7][0][0] = 0.0;
│ │ │ │ +
149 out[7][0][1] = 0.0;
│ │ │ │ +
150 out[7][1][0] = 6.0 - 6.0*in[1];
│ │ │ │ +
151 out[7][1][1] = 3.0 - 6.0*in[0];
│ │ │ │ +
152
│ │ │ │ +
153 out[8][0][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ +
154 out[8][0][1] = 0.0;
│ │ │ │ +
155 out[8][1][0] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ +
156 out[8][1][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ +
157
│ │ │ │ +
158 out[9][0][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ +
159 out[9][0][1] = 0.0;
│ │ │ │ +
160 out[9][1][0] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ +
161 out[9][1][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ +
162
│ │ │ │ +
163 out[10][0][0] = 0.0;
│ │ │ │ +
164 out[10][0][1] = 0.0;
│ │ │ │ +
165 out[10][1][0] = 6.0*in[1];
│ │ │ │ +
166 out[10][1][1] = -3.0 + 6.0*in[0];
│ │ │ │ +
167
│ │ │ │ +
168 out[11][0][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ +
169 out[11][0][1] = 0.0;
│ │ │ │ +
170 out[11][1][0] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]);
│ │ │ │ +
171 out[11][1][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ +
172
│ │ │ │ +
173 out[12][0][0] = 6.0 - 12.0*in[0];
│ │ │ │ +
174 out[12][0][1] = 0.0;
│ │ │ │ +
175 out[12][1][0] = 0.0;
│ │ │ │ +
176 out[12][1][1] = 0.0;
│ │ │ │ +
177
│ │ │ │ +
178 out[13][0][0] = 0.0;
│ │ │ │ +
179 out[13][0][1] = 0.0;
│ │ │ │ +
180 out[13][1][0] = 0.0;
│ │ │ │ +
181 out[13][1][1] = 6.0 - 12.0*in[1];
│ │ │ │ +
182 }
│ │ │ │ +
│ │ │ │ +
183
│ │ │ │ +
│ │ │ │ +
185 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
186 const typename Traits::DomainType& in, // position
│ │ │ │ +
187 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
188 {
│ │ │ │ +
189 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
190 if (totalOrder == 0) {
│ │ │ │ +
191 evaluateFunction(in, out);
│ │ │ │ +
192 } else if (totalOrder == 1) {
│ │ │ │ +
193 out.resize(size());
│ │ │ │ +
194 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
195
│ │ │ │ +
196 switch (direction) {
│ │ │ │ +
197 case 0:
│ │ │ │ +
198 out[0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ +
199 out[0][1] = 0.0;
│ │ │ │ +
200
│ │ │ │ +
201 out[1][0] = -3.0 + 6.0*in[1];
│ │ │ │ +
202 out[1][1] = 0.0;
│ │ │ │ +
203
│ │ │ │ +
204 out[2][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ +
205 out[2][1] = 0.0;
│ │ │ │ +
206
│ │ │ │ +
207 out[3][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]);
│ │ │ │ +
208 out[3][1] = 0.0;
│ │ │ │ +
209
│ │ │ │ +
210 out[4][0] = 3.0 - 6.0*in[1];
│ │ │ │ +
211 out[4][1] = 0.0;
│ │ │ │ +
212
│ │ │ │ +
213 out[5][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]);
│ │ │ │ +
214 out[5][1] = 0.0;
│ │ │ │ +
215
│ │ │ │ +
216 out[6][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ +
217 out[6][1] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ +
218
│ │ │ │ +
219 out[7][0] = 0.0;
│ │ │ │ +
220 out[7][1] = 6.0 - 6.0*in[1];
│ │ │ │ +
221
│ │ │ │ +
222 out[8][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ +
223 out[8][1] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ +
224
│ │ │ │ +
225 out[9][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]);
│ │ │ │ +
226 out[9][1] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ +
227
│ │ │ │ +
228 out[10][0] = 0.0;
│ │ │ │ +
229 out[10][1] = 6.0*in[1];
│ │ │ │ +
230
│ │ │ │ +
231 out[11][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]);
│ │ │ │ +
232 out[11][1] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]);
│ │ │ │ +
233
│ │ │ │ +
234 out[12][0] = 6.0 - 12.0*in[0];
│ │ │ │ +
235 out[12][1] = 0.0;
│ │ │ │ +
236
│ │ │ │ +
237 out[13][0] = 0.0;
│ │ │ │ +
238 out[13][1] = 0.0;
│ │ │ │ +
239 break;
│ │ │ │ +
240 case 1:
│ │ │ │ +
241 out[0][0] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]);
│ │ │ │ +
242 out[0][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ +
243
│ │ │ │ +
244 out[1][0] = -6.0 + 6.0*in[0];
│ │ │ │ +
245 out[1][1] = 0.0;
│ │ │ │ +
246
│ │ │ │ +
247 out[2][0] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]);
│ │ │ │ +
248 out[2][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ +
249
│ │ │ │ +
250 out[3][0] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]);
│ │ │ │ +
251 out[3][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]);
│ │ │ │ +
252
│ │ │ │ +
253 out[4][0] = -6.0*in[0];
│ │ │ │ +
254 out[4][1] = 0.0;
│ │ │ │ +
255
│ │ │ │ +
256 out[5][0] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]);
│ │ │ │ +
257 out[5][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]);
│ │ │ │ +
258
│ │ │ │ +
259 out[6][0] = 0.0;
│ │ │ │ +
260 out[6][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ +
261
│ │ │ │ +
262 out[7][0] = 0.0;
│ │ │ │ +
263 out[7][1] = 3.0 - 6.0*in[0];
│ │ │ │ +
264
│ │ │ │ +
265 out[8][0] = 0.0;
│ │ │ │ +
266 out[8][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ +
267
│ │ │ │ +
268 out[9][0] = 0.0;
│ │ │ │ +
269 out[9][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]);
│ │ │ │ +
270
│ │ │ │ +
271 out[10][0] = 0.0;
│ │ │ │ +
272 out[10][1] = -3.0 + 6.0*in[0];
│ │ │ │ +
273
│ │ │ │ +
274 out[11][0] = 0.0;
│ │ │ │ +
275 out[11][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]);
│ │ │ │ +
276
│ │ │ │ +
277 out[12][0] = 0.0;
│ │ │ │ +
278 out[12][1] = 0.0;
│ │ │ │ +
279
│ │ │ │ +
280 out[13][0] = 0.0;
│ │ │ │ +
281 out[13][1] = 6.0 - 12.0*in[1];
│ │ │ │ +
282 break;
│ │ │ │ +
283 default:
│ │ │ │ +
284 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
285 }
│ │ │ │ +
286 } else {
│ │ │ │ +
287 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
288 }
│ │ │ │ +
289 }
│ │ │ │ +
│ │ │ │ +
290
│ │ │ │ +
│ │ │ │ +
292 unsigned int order() const
│ │ │ │ +
293 {
│ │ │ │ +
294 return 3;
│ │ │ │ +
295 }
│ │ │ │ +
│ │ │ │ +
296
│ │ │ │ +
297 private:
│ │ │ │ +
298 std::array<R,4> sign_;
│ │ │ │ +
299 };
│ │ │ │ +
│ │ │ │ +
300} // end namespace Dune
│ │ │ │ +
301#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini1simplex2d.hh:28
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1simplex2d.hh:50
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1simplex2d.hh:55
│ │ │ │ -
static constexpr GeometryType type()
Definition brezzidouglasmarini1simplex2d.hh:71
│ │ │ │ -
BDM1Simplex2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1simplex2d.hh:37
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1simplex2d.hh:60
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1simplex2d.hh:66
│ │ │ │ -
BDM1Simplex2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini1simplex2d.hh:45
│ │ │ │ -
LocalFiniteElementTraits< BDM1Simplex2DLocalBasis< D, R >, BDM1Simplex2DLocalCoefficients, BDM1Simplex2DLocalInterpolation< BDM1Simplex2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1simplex2d.hh:34
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:30
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on triangles.
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:24
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:24
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:30
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:185
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:292
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:67
│ │ │ │ +
BDM2Cube2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:38
│ │ │ │ +
BDM2Cube2DLocalBasis(std::bitset< 4 > s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:49
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini2cube2dlocalbasis.hh:35
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini2cube2dlocalbasis.hh:56
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:108
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,144 +1,350 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini1simplex2d.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d │ │ │ │ │ +brezzidouglasmarini2cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -32 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -33 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_4 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -_3_7 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -38 {} │ │ │ │ │ -39 │ │ │ │ │ -_4_5 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -46 basis(s), │ │ │ │ │ -47 interpolation(s) │ │ │ │ │ -48 {} │ │ │ │ │ -49 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return basis; │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +30 { │ │ │ │ │ +31 │ │ │ │ │ +32 public: │ │ │ │ │ +33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>, │ │ │ │ │ +34 R,2,Dune::FieldVector, │ │ │ │ │ +_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +_3_8 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +39 { │ │ │ │ │ +40 for (size_t i=0; i<4; i++) │ │ │ │ │ +41 sign_[i] = 1.0; │ │ │ │ │ +42 } │ │ │ │ │ +43 │ │ │ │ │ +_4_9 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s(std::bitset<4> s) │ │ │ │ │ +50 { │ │ │ │ │ +51 for (size_t i=0; i<4; i++) │ │ │ │ │ +52 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ 53 } │ │ │ │ │ 54 │ │ │ │ │ -_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return coefficients; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return interpolation; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ -67 { │ │ │ │ │ -68 return basis.size(); │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -72 { │ │ │ │ │ -73 return GeometryTypes::triangle; │ │ │ │ │ -74 } │ │ │ │ │ -75 │ │ │ │ │ -76 private: │ │ │ │ │ -77 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -78 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -79 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ -interpolation; │ │ │ │ │ -80 }; │ │ │ │ │ -81} │ │ │ │ │ -82#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_5_6 unsigned int _s_i_z_e() const │ │ │ │ │ +57 { │ │ │ │ │ +58 return 14; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +68 std::vector& out) const │ │ │ │ │ +69 { │ │ │ │ │ +70 out.resize(_s_i_z_e()); │ │ │ │ │ +71 │ │ │ │ │ +72 out[0][0] = sign_[0]*(-2.25 + 5.25*in[0] + 7.5*in[1] - 7.5*in[0]*in[1] - │ │ │ │ │ +3.0*in[0]*in[0] - 7.5*in[1]*in[1] + 7.5*in[0]*in[1]*in[1]); │ │ │ │ │ +73 out[0][1] = sign_[0]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +74 out[1][0] = 3.0 - 3.0*in[0]-6.0*in[1] + 6.0*in[0]*in[1]; │ │ │ │ │ +75 out[1][1] = 0.0; │ │ │ │ │ +76 out[2][0] = sign_[0]*(-3.75 + 3.75*in[0] + 22.5*in[1] - 22.5*in[0]*in[1] - │ │ │ │ │ +22.5*in[1]*in[1] + 22.5*in[0]*in[1]*in[1]); │ │ │ │ │ +77 out[2][1] = sign_[0]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +78 out[3][0] = sign_[1]*(-0.75*in[0] - 7.5*in[0]*in[1] + 3.0*in[0]*in[0] + │ │ │ │ │ +7.5*in[0]*in[1]*in[1]); │ │ │ │ │ +79 out[3][1] = sign_[1]*(-1.25*in[1] + 3.75*in[1]*in[1] - 2.5*in[1]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +80 out[4][0] = 3.0*in[0] - 6.0*in[0]*in[1]; │ │ │ │ │ +81 out[4][1] = 0.0; │ │ │ │ │ +82 out[5][0] = sign_[1]*(+3.75*in[0] - 22.5*in[0]*in[1] + 22.5*in[0]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +83 out[5][1] = sign_[1]*(-3.75*in[1] + 11.25*in[1]*in[1] - 7.5*in[1]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +84 out[6][0] = sign_[2]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in │ │ │ │ │ +[0]); │ │ │ │ │ +85 out[6][1] = sign_[2]*(-2.25 + 7.5*in[0] + 5.25*in[1] - 7.5*in[0]*in[1] - │ │ │ │ │ +7.5*in[0]*in[0] - 3.0*in[1]*in[1] + 7.5*in[0]*in[0]*in[1]); │ │ │ │ │ +86 out[7][0] = 0.0; │ │ │ │ │ +87 out[7][1] = -3.0 + 6.0*in[0] + 3.0*in[1] - 6.0*in[0]*in[1]; │ │ │ │ │ +88 out[8][0] = sign_[2]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in │ │ │ │ │ +[0]); │ │ │ │ │ +89 out[8][1] = sign_[2]*(-3.75 + 22.5*in[0] + 3.75*in[1] - 22.5*in[0]*in[1] - │ │ │ │ │ +22.5*in[0]*in[0] + 22.5*in[0]*in[0]*in[1]); │ │ │ │ │ +90 out[9][0] = sign_[3]*(-1.25*in[0] + 3.75*in[0]*in[0] - 2.5*in[0]*in[0]*in │ │ │ │ │ +[0]); │ │ │ │ │ +91 out[9][1] = sign_[3]*(-0.75*in[1] - 7.5*in[0]*in[1] + 3.0*in[1]*in[1] + │ │ │ │ │ +7.5*in[0]*in[0]*in[1]); │ │ │ │ │ +92 out[10][0] = 0.0; │ │ │ │ │ +93 out[10][1] = -3.0*in[1] + 6.0*in[0]*in[1]; │ │ │ │ │ +94 out[11][0] = sign_[3]*(-3.75*in[0] + 11.25*in[0]*in[0] - 7.5*in[0]*in[0]*in │ │ │ │ │ +[0]); │ │ │ │ │ +95 out[11][1] = sign_[3]*(3.75*in[1] - 22.5*in[0]*in[1] + 22.5*in[0]*in[0]*in │ │ │ │ │ +[1]); │ │ │ │ │ +96 out[12][0] = 6.0*in[0] - 6.0*in[0]*in[0]; │ │ │ │ │ +97 out[12][1] = 0.0; │ │ │ │ │ +98 out[13][0] = 0.0; │ │ │ │ │ +99 out[13][1] = 6.0*in[1] - 6.0*in[1]*in[1]; │ │ │ │ │ +100 } │ │ │ │ │ +101 │ │ │ │ │ +_1_0_8 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +109 std::vector& out) const │ │ │ │ │ +110 { │ │ │ │ │ +111 out.resize(_s_i_z_e()); │ │ │ │ │ +112 │ │ │ │ │ +113 out[0][0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ +114 out[0][0][1] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ +115 out[0][1][0] = 0.0; │ │ │ │ │ +116 out[0][1][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ +117 │ │ │ │ │ +118 out[1][0][0] = -3.0 + 6.0*in[1]; │ │ │ │ │ +119 out[1][0][1] = -6.0 + 6.0*in[0]; │ │ │ │ │ +120 out[1][1][0] = 0.0; │ │ │ │ │ +121 out[1][1][1] = 0.0; │ │ │ │ │ +122 │ │ │ │ │ +123 out[2][0][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ +124 out[2][0][1] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in │ │ │ │ │ +[1]); │ │ │ │ │ +125 out[2][1][0] = 0.0; │ │ │ │ │ +126 out[2][1][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ +127 │ │ │ │ │ +128 out[3][0][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ +129 out[3][0][1] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ +130 out[3][1][0] = 0.0; │ │ │ │ │ +131 out[3][1][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ +132 │ │ │ │ │ +133 out[4][0][0] = 3.0 - 6.0*in[1]; │ │ │ │ │ +134 out[4][0][1] = -6.0*in[0]; │ │ │ │ │ +135 out[4][1][0] = 0.0; │ │ │ │ │ +136 out[4][1][1] = 0.0; │ │ │ │ │ +137 │ │ │ │ │ +138 out[5][0][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ +139 out[5][0][1] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ +140 out[5][1][0] = 0.0; │ │ │ │ │ +141 out[5][1][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ +142 │ │ │ │ │ +143 out[6][0][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ +144 out[6][0][1] = 0.0; │ │ │ │ │ +145 out[6][1][0] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ +146 out[6][1][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ +147 │ │ │ │ │ +148 out[7][0][0] = 0.0; │ │ │ │ │ +149 out[7][0][1] = 0.0; │ │ │ │ │ +150 out[7][1][0] = 6.0 - 6.0*in[1]; │ │ │ │ │ +151 out[7][1][1] = 3.0 - 6.0*in[0]; │ │ │ │ │ +152 │ │ │ │ │ +153 out[8][0][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ +154 out[8][0][1] = 0.0; │ │ │ │ │ +155 out[8][1][0] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in │ │ │ │ │ +[1]); │ │ │ │ │ +156 out[8][1][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ +157 │ │ │ │ │ +158 out[9][0][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ +159 out[9][0][1] = 0.0; │ │ │ │ │ +160 out[9][1][0] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ +161 out[9][1][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ +162 │ │ │ │ │ +163 out[10][0][0] = 0.0; │ │ │ │ │ +164 out[10][0][1] = 0.0; │ │ │ │ │ +165 out[10][1][0] = 6.0*in[1]; │ │ │ │ │ +166 out[10][1][1] = -3.0 + 6.0*in[0]; │ │ │ │ │ +167 │ │ │ │ │ +168 out[11][0][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ +169 out[11][0][1] = 0.0; │ │ │ │ │ +170 out[11][1][0] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]); │ │ │ │ │ +171 out[11][1][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ +172 │ │ │ │ │ +173 out[12][0][0] = 6.0 - 12.0*in[0]; │ │ │ │ │ +174 out[12][0][1] = 0.0; │ │ │ │ │ +175 out[12][1][0] = 0.0; │ │ │ │ │ +176 out[12][1][1] = 0.0; │ │ │ │ │ +177 │ │ │ │ │ +178 out[13][0][0] = 0.0; │ │ │ │ │ +179 out[13][0][1] = 0.0; │ │ │ │ │ +180 out[13][1][0] = 0.0; │ │ │ │ │ +181 out[13][1][1] = 6.0 - 12.0*in[1]; │ │ │ │ │ +182 } │ │ │ │ │ +183 │ │ │ │ │ +_1_8_5 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +186 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +187 std::vector& out) const // return value │ │ │ │ │ +188 { │ │ │ │ │ +189 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +190 if (totalOrder == 0) { │ │ │ │ │ +191 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +192 } else if (totalOrder == 1) { │ │ │ │ │ +193 out.resize(_s_i_z_e()); │ │ │ │ │ +194 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +195 │ │ │ │ │ +196 switch (direction) { │ │ │ │ │ +197 case 0: │ │ │ │ │ +198 out[0][0] = sign_[0]*(5.25 - 7.5*in[1] - 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ +199 out[0][1] = 0.0; │ │ │ │ │ +200 │ │ │ │ │ +201 out[1][0] = -3.0 + 6.0*in[1]; │ │ │ │ │ +202 out[1][1] = 0.0; │ │ │ │ │ +203 │ │ │ │ │ +204 out[2][0] = sign_[0]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ +205 out[2][1] = 0.0; │ │ │ │ │ +206 │ │ │ │ │ +207 out[3][0] = sign_[1]*(-0.75 - 7.5*in[1] + 6.0*in[0] + 7.5*in[1]*in[1]); │ │ │ │ │ +208 out[3][1] = 0.0; │ │ │ │ │ +209 │ │ │ │ │ +210 out[4][0] = 3.0 - 6.0*in[1]; │ │ │ │ │ +211 out[4][1] = 0.0; │ │ │ │ │ +212 │ │ │ │ │ +213 out[5][0] = sign_[1]*(3.75 - 22.5*in[1] + 22.5*in[1]*in[1]); │ │ │ │ │ +214 out[5][1] = 0.0; │ │ │ │ │ +215 │ │ │ │ │ +216 out[6][0] = sign_[2]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ +217 out[6][1] = sign_[2]*(7.5 - 7.5*in[1] - 15.0*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ +218 │ │ │ │ │ +219 out[7][0] = 0.0; │ │ │ │ │ +220 out[7][1] = 6.0 - 6.0*in[1]; │ │ │ │ │ +221 │ │ │ │ │ +222 out[8][0] = sign_[2]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ +223 out[8][1] = sign_[2]*(22.5 - 22.5*in[1] - 45.0*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ +224 │ │ │ │ │ +225 out[9][0] = sign_[3]*(-1.25 + 7.5*in[0] - 7.5*in[0]*in[0]); │ │ │ │ │ +226 out[9][1] = sign_[3]*(-7.5*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ +227 │ │ │ │ │ +228 out[10][0] = 0.0; │ │ │ │ │ +229 out[10][1] = 6.0*in[1]; │ │ │ │ │ +230 │ │ │ │ │ +231 out[11][0] = sign_[3]*(-3.75 + 22.5*in[0] - 22.5*in[0]*in[0]); │ │ │ │ │ +232 out[11][1] = sign_[3]*(-22.5*in[1] + 45*in[0]*in[1]); │ │ │ │ │ +233 │ │ │ │ │ +234 out[12][0] = 6.0 - 12.0*in[0]; │ │ │ │ │ +235 out[12][1] = 0.0; │ │ │ │ │ +236 │ │ │ │ │ +237 out[13][0] = 0.0; │ │ │ │ │ +238 out[13][1] = 0.0; │ │ │ │ │ +239 break; │ │ │ │ │ +240 case 1: │ │ │ │ │ +241 out[0][0] = sign_[0]*(7.5 - 7.5*in[0] - 15.0*in[1] + 15.0*in[0]*in[1]); │ │ │ │ │ +242 out[0][1] = sign_[0]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ +243 │ │ │ │ │ +244 out[1][0] = -6.0 + 6.0*in[0]; │ │ │ │ │ +245 out[1][1] = 0.0; │ │ │ │ │ +246 │ │ │ │ │ +247 out[2][0] = sign_[0]*(22.5 - 22.5*in[0] - 45.0*in[1] + 45.0*in[0]*in[1]); │ │ │ │ │ +248 out[2][1] = sign_[0]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ +249 │ │ │ │ │ +250 out[3][0] = sign_[1]*(-7.5*in[0] + 15.0*in[0]*in[1]); │ │ │ │ │ +251 out[3][1] = sign_[1]*(-1.25 + 7.5*in[1] - 7.5*in[1]*in[1]); │ │ │ │ │ +252 │ │ │ │ │ +253 out[4][0] = -6.0*in[0]; │ │ │ │ │ +254 out[4][1] = 0.0; │ │ │ │ │ +255 │ │ │ │ │ +256 out[5][0] = sign_[1]*(-22.5*in[0] + 45.0*in[0]*in[1]); │ │ │ │ │ +257 out[5][1] = sign_[1]*(-3.75 + 22.5*in[1] - 22.5*in[1]*in[1]); │ │ │ │ │ +258 │ │ │ │ │ +259 out[6][0] = 0.0; │ │ │ │ │ +260 out[6][1] = sign_[2]*(5.25 - 7.5*in[0]- 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ +261 │ │ │ │ │ +262 out[7][0] = 0.0; │ │ │ │ │ +263 out[7][1] = 3.0 - 6.0*in[0]; │ │ │ │ │ +264 │ │ │ │ │ +265 out[8][0] = 0.0; │ │ │ │ │ +266 out[8][1] = sign_[2]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ +267 │ │ │ │ │ +268 out[9][0] = 0.0; │ │ │ │ │ +269 out[9][1] = sign_[3]*(-0.75 - 7.5*in[0] + 6.0*in[1] + 7.5*in[0]*in[0]); │ │ │ │ │ +270 │ │ │ │ │ +271 out[10][0] = 0.0; │ │ │ │ │ +272 out[10][1] = -3.0 + 6.0*in[0]; │ │ │ │ │ +273 │ │ │ │ │ +274 out[11][0] = 0.0; │ │ │ │ │ +275 out[11][1] = sign_[3]*(3.75 - 22.5*in[0] + 22.5*in[0]*in[0]); │ │ │ │ │ +276 │ │ │ │ │ +277 out[12][0] = 0.0; │ │ │ │ │ +278 out[12][1] = 0.0; │ │ │ │ │ +279 │ │ │ │ │ +280 out[13][0] = 0.0; │ │ │ │ │ +281 out[13][1] = 6.0 - 12.0*in[1]; │ │ │ │ │ +282 break; │ │ │ │ │ +283 default: │ │ │ │ │ +284 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +285 } │ │ │ │ │ +286 } else { │ │ │ │ │ +287 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +288 } │ │ │ │ │ +289 } │ │ │ │ │ +290 │ │ │ │ │ +_2_9_2 unsigned int _o_r_d_e_r() const │ │ │ │ │ +293 { │ │ │ │ │ +294 return 3; │ │ │ │ │ +295 } │ │ │ │ │ +296 │ │ │ │ │ +297 private: │ │ │ │ │ +298 std::array sign_; │ │ │ │ │ +299 }; │ │ │ │ │ +300} // end namespace Dune │ │ │ │ │ +301#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Simplex2DLocalFiniteElement() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:185 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:292 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM2Cube2DLocalBasis() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM2Cube2DLocalBasis(std::bitset< 4 > s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM1Simplex2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< BDM1Simplex2DLocalBasis< D, R >, │ │ │ │ │ -BDM1Simplex2DLocalCoefficients, BDM1Simplex2DLocalInterpolation< │ │ │ │ │ -BDM1Simplex2DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-1 elements on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:108 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinicube.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarinicube.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 1 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 1. More...
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 2 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 2. More...
 
class  Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 3, 1 >
 Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 and order 1. More...
class  Dune::BDM2Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,34 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarinicube.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ -  Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 │ │ │ │ │ - and order 1. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ -  Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 │ │ │ │ │ - and order 2. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _> │ │ │ │ │ -  Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 │ │ │ │ │ - and order 1. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00062_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinicube.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,155 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarinicube.hh
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │
11
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
23 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ - │ │ │ │ -
25
│ │ │ │ -
29 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 : public BDM1Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
32 {
│ │ │ │ -
33 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 {}
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
45 {}
│ │ │ │ -
│ │ │ │ -
46 };
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
51 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
53 : public BDM2Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
54 {
│ │ │ │ -
55 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
58 {}
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
67 {}
│ │ │ │ -
│ │ │ │ -
68 };
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
73 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
75 : public BDM1Cube3DLocalFiniteElement<D, R>
│ │ │ │ -
76 {
│ │ │ │ -
77 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
80 {}
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
89 {}
│ │ │ │ -
│ │ │ │ -
90 };
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
92} // namespace Dune
│ │ │ │ -
93
│ │ │ │ -
94#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ +
42 if (s & 1)
│ │ │ │ +
43 {
│ │ │ │ +
44 sign0 = -1.0;
│ │ │ │ +
45 }
│ │ │ │ +
46 if (s & 2)
│ │ │ │ +
47 {
│ │ │ │ +
48 sign1 = -1.0;
│ │ │ │ +
49 }
│ │ │ │ +
50 if (s & 4)
│ │ │ │ +
51 {
│ │ │ │ +
52 sign2 = -1.0;
│ │ │ │ +
53 }
│ │ │ │ +
54
│ │ │ │ +
55 m0[0] = 0.5;
│ │ │ │ +
56 m0[1] = 0.0;
│ │ │ │ +
57 m1[0] = 0.0;
│ │ │ │ +
58 m1[1] = 0.5;
│ │ │ │ +
59 m2[0] = 0.5;
│ │ │ │ +
60 m2[1] = 0.5;
│ │ │ │ +
61 n0[0] = 0.0;
│ │ │ │ +
62 n0[1] = -1.0;
│ │ │ │ +
63 n1[0] = -1.0;
│ │ │ │ +
64 n1[1] = 0.0;
│ │ │ │ +
65 n2[0] = 1.0/sqrt(2.0);
│ │ │ │ +
66 n2[1] = 1.0/sqrt(2.0);
│ │ │ │ +
67 c0 = 0.5*n0[0] - 1.0*n0[1];
│ │ │ │ +
68 c1 = -1.0*n1[0] + 0.5*n1[1];
│ │ │ │ +
69 c2 = 0.5*n2[0] + 0.5*n2[1];
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
80 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
81 void interpolate(const F& f, std::vector<C>& out) const
│ │ │ │ +
82 {
│ │ │ │ +
83 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
84 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
85 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
86
│ │ │ │ +
87 out.resize(12);
│ │ │ │ +
88 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
89
│ │ │ │ +
90 const int qOrder = 4;
│ │ │ │ +
91 const Dune::QuadratureRule<Scalar,1>& rule = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder);
│ │ │ │ +
92
│ │ │ │ +
93 for (typename Dune::QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ +
94 {
│ │ │ │ +
95 Scalar qPos = it->position();
│ │ │ │ +
96
│ │ │ │ +
97 typename LB::Traits::DomainType localPos;
│ │ │ │ +
98
│ │ │ │ +
99 localPos[0] = qPos;
│ │ │ │ +
100 localPos[1] = 0.0;
│ │ │ │ +
101 auto y = f(localPos);
│ │ │ │ +
102 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0;
│ │ │ │ +
103 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(1.0 - 2.0*qPos)*it->weight()/c0;
│ │ │ │ +
104 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign0/c0;
│ │ │ │ +
105
│ │ │ │ +
106 localPos[0] = 0.0;
│ │ │ │ +
107 localPos[1] = qPos;
│ │ │ │ +
108 y = f(localPos);
│ │ │ │ +
109 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1/c1;
│ │ │ │ +
110 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(2.0*qPos-1.0)*it->weight()/c1;
│ │ │ │ +
111 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign1/c1;
│ │ │ │ +
112
│ │ │ │ +
113 localPos[0] = 1.0 - qPos;
│ │ │ │ +
114 localPos[1] = qPos;
│ │ │ │ +
115 y = f(localPos);
│ │ │ │ +
116 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2;
│ │ │ │ +
117 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight()/c2;
│ │ │ │ +
118 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign2/c2;
│ │ │ │ +
119 }
│ │ │ │ +
120
│ │ │ │ +
121 // a volume part is needed here for dofs: 9 10 11
│ │ │ │ +
122 const QuadratureRule<Vector,2>& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::simplex(2), qOrder);
│ │ │ │ +
123
│ │ │ │ +
124 for (typename QuadratureRule<Vector,2>::const_iterator it=rule2.begin(); it!=rule2.end(); ++it)
│ │ │ │ +
125 {
│ │ │ │ +
126 typename LB::Traits::DomainType localPos = it->position();
│ │ │ │ +
127 auto y = f(localPos);
│ │ │ │ +
128
│ │ │ │ +
129 out[9] += y[0]*it->weight();
│ │ │ │ +
130 out[10] += y[1]*it->weight();
│ │ │ │ +
131 out[11] += (y[0]*(localPos[0]-2.0*localPos[0]*localPos[1]-localPos[0]*localPos[0])
│ │ │ │ +
132 +y[1]*(-localPos[1]+2.0*localPos[0]*localPos[1]+localPos[1]*localPos[1]))*it->weight();
│ │ │ │ +
133 }
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
136 private:
│ │ │ │ +
137 typename LB::Traits::RangeFieldType sign0, sign1, sign2;
│ │ │ │ +
138 typename LB::Traits::DomainType m0, m1, m2;
│ │ │ │ +
139 typename LB::Traits::DomainType n0, n1, n2;
│ │ │ │ +
140 typename LB::Traits::RangeFieldType c0, c1, c2;
│ │ │ │ +
141 };
│ │ │ │ +
│ │ │ │ +
142} // end namespace Dune
│ │ │ │ +
143#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini1cube2d.hh:27
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on hexahedron.
Definition brezzidouglasmarini1cube3d.hh:27
│ │ │ │ -
Second order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2d.hh:27
│ │ │ │ -
Brezzi-Douglas-Marini local finite element for cubes.
Definition brezzidouglasmarinicube.hh:24
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:43
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:35
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:57
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:65
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinicube.hh:79
│ │ │ │ -
BrezziDouglasMariniCubeLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinicube.hh:87
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:25
│ │ │ │ +
BDM2Simplex2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:29
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:81
│ │ │ │ +
BDM2Simplex2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:39
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,122 +1,163 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarinicube.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -25 │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -31 : public _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -32 { │ │ │ │ │ -33 public: │ │ │ │ │ -_3_5 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -36 {} │ │ │ │ │ -37 │ │ │ │ │ -_4_3 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -44 : _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -45 {} │ │ │ │ │ -46 }; │ │ │ │ │ -47 │ │ │ │ │ -51 template │ │ │ │ │ -_5_2 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -53 : public _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -54 { │ │ │ │ │ -55 public: │ │ │ │ │ -_5_7 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -58 {} │ │ │ │ │ -59 │ │ │ │ │ -_6_5 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -66 : _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -67 {} │ │ │ │ │ -68 }; │ │ │ │ │ -69 │ │ │ │ │ -73 template │ │ │ │ │ -_7_4 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -75 : public _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -76 { │ │ │ │ │ -77 public: │ │ │ │ │ -_7_9 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -80 {} │ │ │ │ │ -81 │ │ │ │ │ -_8_7 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -88 : _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -89 {} │ │ │ │ │ -90 }; │ │ │ │ │ -91 │ │ │ │ │ -92} // namespace Dune │ │ │ │ │ -93 │ │ │ │ │ -94#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINICUBE_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_._h_h │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +_2_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ +30 { │ │ │ │ │ +31 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(unsigned int s) │ │ │ │ │ +40 { │ │ │ │ │ +41 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ +42 if (s & 1) │ │ │ │ │ +43 { │ │ │ │ │ +44 sign0 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 if (s & 2) │ │ │ │ │ +47 { │ │ │ │ │ +48 sign1 = -1.0; │ │ │ │ │ +49 } │ │ │ │ │ +50 if (s & 4) │ │ │ │ │ +51 { │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 m0[0] = 0.5; │ │ │ │ │ +56 m0[1] = 0.0; │ │ │ │ │ +57 m1[0] = 0.0; │ │ │ │ │ +58 m1[1] = 0.5; │ │ │ │ │ +59 m2[0] = 0.5; │ │ │ │ │ +60 m2[1] = 0.5; │ │ │ │ │ +61 n0[0] = 0.0; │ │ │ │ │ +62 n0[1] = -1.0; │ │ │ │ │ +63 n1[0] = -1.0; │ │ │ │ │ +64 n1[1] = 0.0; │ │ │ │ │ +65 n2[0] = 1.0/sqrt(2.0); │ │ │ │ │ +66 n2[1] = 1.0/sqrt(2.0); │ │ │ │ │ +67 c0 = 0.5*n0[0] - 1.0*n0[1]; │ │ │ │ │ +68 c1 = -1.0*n1[0] + 0.5*n1[1]; │ │ │ │ │ +69 c2 = 0.5*n2[0] + 0.5*n2[1]; │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +80 template │ │ │ │ │ +_8_1 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const │ │ │ │ │ +82 { │ │ │ │ │ +83 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +84 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +85 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +86 │ │ │ │ │ +87 out.resize(12); │ │ │ │ │ +88 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +89 │ │ │ │ │ +90 const int qOrder = 4; │ │ │ │ │ +91 const Dune::QuadratureRule& rule = Dune:: │ │ │ │ │ +QuadratureRules::rule(Dune::GeometryTypes::simplex(1), qOrder); │ │ │ │ │ +92 │ │ │ │ │ +93 for (typename Dune::QuadratureRule::const_iterator it=rule.begin │ │ │ │ │ +(); it!=rule.end(); ++it) │ │ │ │ │ +94 { │ │ │ │ │ +95 Scalar qPos = it->position(); │ │ │ │ │ +96 │ │ │ │ │ +97 typename LB::Traits::DomainType localPos; │ │ │ │ │ +98 │ │ │ │ │ +99 localPos[0] = qPos; │ │ │ │ │ +100 localPos[1] = 0.0; │ │ │ │ │ +101 auto y = f(localPos); │ │ │ │ │ +102 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0; │ │ │ │ │ +103 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(1.0 - 2.0*qPos)*it->weight()/c0; │ │ │ │ │ +104 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign0/c0; │ │ │ │ │ +105 │ │ │ │ │ +106 localPos[0] = 0.0; │ │ │ │ │ +107 localPos[1] = qPos; │ │ │ │ │ +108 y = f(localPos); │ │ │ │ │ +109 out[3] += (y[0]*n1[0]+y[1]*n1[1])*it->weight()*sign1/c1; │ │ │ │ │ +110 out[4] += (y[0]*n1[0]+y[1]*n1[1])*(2.0*qPos-1.0)*it->weight()/c1; │ │ │ │ │ +111 out[5] += (y[0]*n1[0]+y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign1/c1; │ │ │ │ │ +112 │ │ │ │ │ +113 localPos[0] = 1.0 - qPos; │ │ │ │ │ +114 localPos[1] = qPos; │ │ │ │ │ +115 y = f(localPos); │ │ │ │ │ +116 out[6] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2; │ │ │ │ │ +117 out[7] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight()/c2; │ │ │ │ │ +118 out[8] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign2/c2; │ │ │ │ │ +119 } │ │ │ │ │ +120 │ │ │ │ │ +121 // a volume part is needed here for dofs: 9 10 11 │ │ │ │ │ +122 const QuadratureRule& rule2 = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::simplex(2), qOrder); │ │ │ │ │ +123 │ │ │ │ │ +124 for (typename QuadratureRule::const_iterator it=rule2.begin(); │ │ │ │ │ +it!=rule2.end(); ++it) │ │ │ │ │ +125 { │ │ │ │ │ +126 typename LB::Traits::DomainType localPos = it->position(); │ │ │ │ │ +127 auto y = f(localPos); │ │ │ │ │ +128 │ │ │ │ │ +129 out[9] += y[0]*it->weight(); │ │ │ │ │ +130 out[10] += y[1]*it->weight(); │ │ │ │ │ +131 out[11] += (y[0]*(localPos[0]-2.0*localPos[0]*localPos[1]-localPos │ │ │ │ │ +[0]*localPos[0]) │ │ │ │ │ +132 +y[1]*(-localPos[1]+2.0*localPos[0]*localPos[1]+localPos[1]*localPos │ │ │ │ │ +[1]))*it->weight(); │ │ │ │ │ +133 } │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +136 private: │ │ │ │ │ +137 typename LB::Traits::RangeFieldType sign0, sign1, sign2; │ │ │ │ │ +138 typename LB::Traits::DomainType m0, m1, m2; │ │ │ │ │ +139 typename LB::Traits::DomainType n0, n1, n2; │ │ │ │ │ +140 typename LB::Traits::RangeFieldType c0, c1, c2; │ │ │ │ │ +141 }; │ │ │ │ │ +142} // end namespace Dune │ │ │ │ │ +143#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Brezzi-Douglas-Marini local finite element for cubes. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniCubeLocalFiniteElement(int s) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinicube.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM2Simplex2DLocalInterpolation() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:81 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM2Simplex2DLocalInterpolation(unsigned int s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:39 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. More...
class  Dune::BDM2Simplex2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00065_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,139 +70,334 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2dlocalinterpolation.hh
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {
│ │ │ │ -
41 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ -
42 if (s & 1)
│ │ │ │ -
43 {
│ │ │ │ -
44 sign0 = -1.0;
│ │ │ │ -
45 }
│ │ │ │ -
46 if (s & 2)
│ │ │ │ -
47 {
│ │ │ │ -
48 sign1 = -1.0;
│ │ │ │ -
49 }
│ │ │ │ -
50 if (s & 4)
│ │ │ │ -
51 {
│ │ │ │ -
52 sign2 = -1.0;
│ │ │ │ -
53 }
│ │ │ │ -
54 if (s & 8)
│ │ │ │ -
55 {
│ │ │ │ -
56 sign3 = -1.0;
│ │ │ │ -
57 }
│ │ │ │ -
58
│ │ │ │ -
59 n0[0] = -1.0;
│ │ │ │ -
60 n0[1] = 0.0;
│ │ │ │ -
61 n1[0] = 1.0;
│ │ │ │ -
62 n1[1] = 0.0;
│ │ │ │ -
63 n2[0] = 0.0;
│ │ │ │ -
64 n2[1] = -1.0;
│ │ │ │ -
65 n3[0] = 0.0;
│ │ │ │ -
66 n3[1] = 1.0;
│ │ │ │ -
67 }
│ │ │ │ -
│ │ │ │ -
68
│ │ │ │ -
77 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
78 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
79 {
│ │ │ │ -
80 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
81 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
82 //typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
83
│ │ │ │ -
84 out.resize(8);
│ │ │ │ -
85 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
86
│ │ │ │ -
87 const int qOrder = 4;
│ │ │ │ -
88 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
89
│ │ │ │ -
90 for (typename QuadratureRule<Scalar,1>::const_iterator it = rule.begin();
│ │ │ │ -
91 it != rule.end(); ++it)
│ │ │ │ -
92 {
│ │ │ │ -
93 Scalar qPos = it->position();
│ │ │ │ -
94 typename LB::Traits::DomainType localPos;
│ │ │ │ -
95
│ │ │ │ -
96 localPos[0] = 0.0;
│ │ │ │ -
97 localPos[1] = qPos;
│ │ │ │ -
98 auto y = f(localPos);
│ │ │ │ -
99 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0;
│ │ │ │ -
100 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ -
101
│ │ │ │ -
102 localPos[0] = 1.0;
│ │ │ │ -
103 localPos[1] = qPos;
│ │ │ │ -
104 y = f(localPos);
│ │ │ │ -
105 out[2] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1;
│ │ │ │ -
106 out[3] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
15#include "../../common/localbasis.hh"
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
28 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31
│ │ │ │ +
32 public:
│ │ │ │ + │ │ │ │ +
34 R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
35 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {
│ │ │ │ +
40 for (size_t i=0; i<3; i++)
│ │ │ │ +
41 sign_[i] = 1.0;
│ │ │ │ +
42 }
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
49 BDM2Simplex2DLocalBasis(std::bitset<3> s)
│ │ │ │ +
50 {
│ │ │ │ +
51 for (size_t i=0; i<3; i++)
│ │ │ │ +
52 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ +
56 unsigned int size() const
│ │ │ │ +
57 {
│ │ │ │ +
58 return 12;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ +
67 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
69 {
│ │ │ │ +
70 out.resize(size());
│ │ │ │ +
71
│ │ │ │ +
72 out[0][0] = sign_[0]*(-2*in[0]*in[1] + in[0]*in[0]);
│ │ │ │ +
73 out[0][1] = sign_[0]*(-1 + 6*in[1] -2*in[0]*in[1] - 5*in[1]*in[1]);
│ │ │ │ +
74
│ │ │ │ +
75 out[1][0] = 1.5*in[0] + 3*in[0]*in[1] - 4.5*in[0]*in[0];
│ │ │ │ +
76 out[1][1] = -3 + 6*in[0] + 10.5*in[1] - 15*in[0]*in[1] - 7.5*in[1]*in[1];
│ │ │ │ +
77
│ │ │ │ +
78 out[2][0] = sign_[0]*(-7.5*in[0] + 5*in[0]*in[1] + 12.5*in[0]*in[0]);
│ │ │ │ +
79 out[2][1] = sign_[0]*(-5 + 30*in[0] + 7.5*in[1] - 25*in[0]*in[1] - 30*in[0]*in[0] - 2.5*in[1]*in[1]);
│ │ │ │ +
80
│ │ │ │ +
81
│ │ │ │ +
82
│ │ │ │ +
83 out[3][0] = sign_[1]*(-1 + 6*in[0] - 2*in[0]*in[1] - 5*in[0]*in[0]);
│ │ │ │ +
84 out[3][1] = sign_[1]*(-2*in[0]*in[1] + in[1]*in[1]);
│ │ │ │ +
85
│ │ │ │ +
86 out[4][0] = 3 - 10.5*in[0] - 6*in[1] + 15*in[0]*in[1] + 7.5*in[0]*in[0];
│ │ │ │ +
87 out[4][1] = -1.5*in[1] - 3*in[0]*in[1] + 4.5*in[1]*in[1];
│ │ │ │ +
88
│ │ │ │ +
89 out[5][0] = sign_[1]*(-5 + 7.5*in[0] + 30*in[1] - 25*in[0]*in[1] - 2.5*in[0]*in[0] - 30*in[1]*in[1]);
│ │ │ │ +
90 out[5][1] = sign_[1]*(-7.5*in[1] + 5*in[0]*in[1] + 12.5*in[1]*in[1]);
│ │ │ │ +
91
│ │ │ │ +
92
│ │ │ │ +
93
│ │ │ │ +
94 out[6][0] = sign_[2]*(-3*in[0] + 4*in[0]*in[1] + 4*in[0]*in[0]);
│ │ │ │ +
95 out[6][1] = sign_[2]*(-3*in[1] + 4*in[0]*in[1] + 4*in[1]*in[1]);
│ │ │ │ +
96
│ │ │ │ +
97 out[7][0] = -3*in[0] + 6*in[0]*in[0];
│ │ │ │ +
98 out[7][1] = 3*in[1] - 6*in[1]*in[1];
│ │ │ │ +
99
│ │ │ │ +
100 out[8][0] = sign_[2]*(-10*in[0]*in[1] + 5*in[0]*in[0]);
│ │ │ │ +
101 out[8][1] = sign_[2]*(-10*in[0]*in[1] + 5*in[1]*in[1]);
│ │ │ │ +
102
│ │ │ │ +
103
│ │ │ │ +
104
│ │ │ │ +
105 out[9][0] = 18*in[0] - 12*in[0]*in[1] - 18*in[0]*in[0];
│ │ │ │ +
106 out[9][1] = 6*in[1] - 12*in[0]*in[1] - 6*in[1]*in[1];
│ │ │ │
107
│ │ │ │ -
108 localPos[0] = qPos;
│ │ │ │ -
109 localPos[1] = 0.0;
│ │ │ │ -
110 y = f(localPos);
│ │ │ │ -
111 out[4] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2;
│ │ │ │ -
112 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ -
113
│ │ │ │ -
114 localPos[0] = qPos;
│ │ │ │ -
115 localPos[1] = 1.0;
│ │ │ │ -
116 y = f(localPos);
│ │ │ │ -
117 out[6] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3;
│ │ │ │ -
118 out[7] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ -
119 }
│ │ │ │ -
120 }
│ │ │ │ -
│ │ │ │ -
121
│ │ │ │ -
122 private:
│ │ │ │ -
123 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3;
│ │ │ │ -
124 typename LB::Traits::DomainType n0, n1, n2, n3;
│ │ │ │ -
125 };
│ │ │ │ +
108 out[10][0] = 6*in[0] - 12*in[0]*in[1] - 6*in[0]*in[0];
│ │ │ │ +
109 out[10][1] = 18*in[1] - 12*in[0]*in[1] - 18*in[1]*in[1];
│ │ │ │ +
110
│ │ │ │ +
111 out[11][0] = 90*in[0] - 180*in[0]*in[1] - 90*in[0]*in[0];
│ │ │ │ +
112 out[11][1] = -90*in[1] + 180*in[0]*in[1] + 90*in[1]*in[1];
│ │ │ │ +
113 }
│ │ │ │ +
│ │ │ │ +
114
│ │ │ │ +
│ │ │ │ +
121 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
122 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
123 {
│ │ │ │ +
124 out.resize(size());
│ │ │ │ +
125
│ │ │ │ +
126 out[0][0][0] = sign_[0]*(-2*in[1] + 2*in[0]);
│ │ │ │ +
127 out[0][0][1] = sign_[0]*(-2*in[0]);
│ │ │ │ +
128
│ │ │ │ +
129 out[0][1][0] = sign_[0]*(-2*in[1]);
│ │ │ │ +
130 out[0][1][1] = sign_[0]*(6 -2*in[0] - 10*in[1]);
│ │ │ │ +
131
│ │ │ │ +
132
│ │ │ │ +
133 out[1][0][0] = 1.5 + 3*in[1] - 9*in[0];
│ │ │ │ +
134 out[1][0][1] = 3*in[0];
│ │ │ │ +
135
│ │ │ │ +
136 out[1][1][0] = 6 - 15*in[1];
│ │ │ │ +
137 out[1][1][1] = 10.5 - 15*in[0] - 15*in[1];
│ │ │ │ +
138
│ │ │ │ +
139
│ │ │ │ +
140 out[2][0][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]);
│ │ │ │ +
141 out[2][0][1] = sign_[0]*(5*in[0]);
│ │ │ │ +
142
│ │ │ │ +
143 out[2][1][0] = sign_[0]*(30 - 25*in[1] - 60*in[0]);
│ │ │ │ +
144 out[2][1][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]);
│ │ │ │ +
145
│ │ │ │ +
146
│ │ │ │ +
147
│ │ │ │ +
148 out[3][0][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]);
│ │ │ │ +
149 out[3][0][1] = sign_[1]*(-2*in[0]);
│ │ │ │ +
150
│ │ │ │ +
151 out[3][1][0] = sign_[1]*(-2*in[1]);
│ │ │ │ +
152 out[3][1][1] = sign_[1]*(-2*in[0] + 2*in[1]);
│ │ │ │ +
153
│ │ │ │ +
154
│ │ │ │ +
155 out[4][0][0] = -10.5 + 15*in[1] + 15*in[0];
│ │ │ │ +
156 out[4][0][1] = -6 + 15*in[0];
│ │ │ │ +
157
│ │ │ │ +
158 out[4][1][0] = -3*in[1];
│ │ │ │ +
159 out[4][1][1] = -1.5 - 3*in[0] + 9*in[1];
│ │ │ │ +
160
│ │ │ │ +
161
│ │ │ │ +
162 out[5][0][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]);
│ │ │ │ +
163 out[5][0][1] = sign_[1]*(30 - 25*in[0] - 60*in[1]);
│ │ │ │ +
164
│ │ │ │ +
165 out[5][1][0] = sign_[1]*(5*in[1]);
│ │ │ │ +
166 out[5][1][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]);
│ │ │ │ +
167
│ │ │ │ +
168
│ │ │ │ +
169
│ │ │ │ +
170 out[6][0][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]);
│ │ │ │ +
171 out[6][0][1] = sign_[2]*(4*in[0]);
│ │ │ │ +
172
│ │ │ │ +
173 out[6][1][0] = sign_[2]*(4*in[1]);
│ │ │ │ +
174 out[6][1][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]);
│ │ │ │ +
175
│ │ │ │ +
176
│ │ │ │ +
177 out[7][0][0] = -3 + 12*in[0];
│ │ │ │ +
178 out[7][0][1] = 0;
│ │ │ │ +
179
│ │ │ │ +
180 out[7][1][0] = 0;
│ │ │ │ +
181 out[7][1][1] = 3 - 12*in[1];
│ │ │ │ +
182
│ │ │ │ +
183
│ │ │ │ +
184 out[8][0][0] = sign_[2]*(-10*in[1] + 10*in[0]);
│ │ │ │ +
185 out[8][0][1] = sign_[2]*(-10*in[0]);
│ │ │ │ +
186
│ │ │ │ +
187 out[8][1][0] = sign_[2]*(-10*in[1]);
│ │ │ │ +
188 out[8][1][1] = sign_[2]*(-10*in[0] + 10*in[1]);
│ │ │ │ +
189
│ │ │ │ +
190
│ │ │ │ +
191 out[9][0][0] = 18 - 12*in[1] - 36*in[0];
│ │ │ │ +
192 out[9][0][1] = -12*in[0];
│ │ │ │ +
193
│ │ │ │ +
194 out[9][1][0] = -12*in[1];
│ │ │ │ +
195 out[9][1][1] = 6 - 12*in[0] - 12*in[1];
│ │ │ │ +
196
│ │ │ │ +
197 out[10][0][0] = 6 - 12*in[1] - 12*in[0];
│ │ │ │ +
198 out[10][0][1] = -12*in[0];
│ │ │ │ +
199
│ │ │ │ +
200 out[10][1][0] = -12*in[1];
│ │ │ │ +
201 out[10][1][1] = 18 - 12*in[0] - 36*in[1];
│ │ │ │ +
202
│ │ │ │ +
203 out[11][0][0] = 90 - 180*in[1] - 180*in[0];
│ │ │ │ +
204 out[11][0][1] = -180*in[0];
│ │ │ │ +
205
│ │ │ │ +
206 out[11][1][0] = 180*in[1];
│ │ │ │ +
207 out[11][1][1] = -90 + 180*in[0] + 180*in[1];
│ │ │ │ +
208 }
│ │ │ │ +
│ │ │ │ +
209
│ │ │ │ +
│ │ │ │ +
211 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
212 const typename Traits::DomainType& in, // position
│ │ │ │ +
213 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
214 {
│ │ │ │ +
215 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
216 if (totalOrder == 0) {
│ │ │ │ +
217 evaluateFunction(in, out);
│ │ │ │ +
218 } else if (totalOrder == 1) {
│ │ │ │ +
219 out.resize(size());
│ │ │ │ +
220 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
221
│ │ │ │ +
222 switch (direction) {
│ │ │ │ +
223 case 0:
│ │ │ │ +
224 out[0][0] = sign_[0]*(-2*in[1] + 2*in[0]);
│ │ │ │ +
225 out[0][1] = sign_[0]*(-2*in[1]);
│ │ │ │ +
226
│ │ │ │ +
227 out[1][0] = 1.5 + 3*in[1] - 9*in[0];
│ │ │ │ +
228 out[1][1] = 6 - 15*in[1];
│ │ │ │ +
229
│ │ │ │ +
230 out[2][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]);
│ │ │ │ +
231 out[2][1] = sign_[0]*(30 - 25*in[1] - 60*in[0]);
│ │ │ │ +
232
│ │ │ │ +
233 out[3][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]);
│ │ │ │ +
234 out[3][1] = sign_[1]*(-2*in[1]);
│ │ │ │ +
235
│ │ │ │ +
236 out[4][0] = -10.5 + 15*in[1] + 15*in[0];
│ │ │ │ +
237 out[4][1] = -3*in[1];
│ │ │ │ +
238
│ │ │ │ +
239 out[5][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]);
│ │ │ │ +
240 out[5][1] = sign_[1]*(5*in[1]);
│ │ │ │ +
241
│ │ │ │ +
242 out[6][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]);
│ │ │ │ +
243 out[6][1] = sign_[2]*(4*in[1]);
│ │ │ │ +
244
│ │ │ │ +
245 out[7][0] = -3 + 12*in[0];
│ │ │ │ +
246 out[7][1] = 0;
│ │ │ │ +
247
│ │ │ │ +
248 out[8][0] = sign_[2]*(-10*in[1] + 10*in[0]);
│ │ │ │ +
249 out[8][1] = sign_[2]*(-10*in[1]);
│ │ │ │ +
250
│ │ │ │ +
251 out[9][0] = 18 - 12*in[1] - 36*in[0];
│ │ │ │ +
252 out[9][1] = -12*in[1];
│ │ │ │ +
253
│ │ │ │ +
254 out[10][0] = 6 - 12*in[1] - 12*in[0];
│ │ │ │ +
255 out[10][1] = -12*in[1];
│ │ │ │ +
256
│ │ │ │ +
257 out[11][0] = 90 - 180*in[1] - 180*in[0];
│ │ │ │ +
258 out[11][1] = 180*in[1];
│ │ │ │ +
259 break;
│ │ │ │ +
260 case 1:
│ │ │ │ +
261 out[0][0] = sign_[0]*(-2*in[0]);
│ │ │ │ +
262 out[0][1] = sign_[0]*(6 -2*in[0] - 10*in[1]);
│ │ │ │ +
263
│ │ │ │ +
264 out[1][0] = 3*in[0];
│ │ │ │ +
265 out[1][1] = 10.5 - 15*in[0] - 15*in[1];
│ │ │ │ +
266
│ │ │ │ +
267 out[2][0] = sign_[0]*(5*in[0]);
│ │ │ │ +
268 out[2][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]);
│ │ │ │ +
269
│ │ │ │ +
270 out[3][0] = sign_[1]*(-2*in[0]);
│ │ │ │ +
271 out[3][1] = sign_[1]*(-2*in[0] + 2*in[1]);
│ │ │ │ +
272
│ │ │ │ +
273 out[4][0] = -6 + 15*in[0];
│ │ │ │ +
274 out[4][1] = -1.5 - 3*in[0] + 9*in[1];
│ │ │ │ +
275
│ │ │ │ +
276 out[5][0] = sign_[1]*(30 - 25*in[0] - 60*in[1]);
│ │ │ │ +
277 out[5][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]);
│ │ │ │ +
278
│ │ │ │ +
279 out[6][0] = sign_[2]*(4*in[0]);
│ │ │ │ +
280 out[6][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]);
│ │ │ │ +
281
│ │ │ │ +
282 out[7][0] = 0;
│ │ │ │ +
283 out[7][1] = 3 - 12*in[1];
│ │ │ │ +
284
│ │ │ │ +
285 out[8][0] = sign_[2]*(-10*in[0]);
│ │ │ │ +
286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]);
│ │ │ │ +
287
│ │ │ │ +
288 out[9][0] = -12*in[0];
│ │ │ │ +
289 out[9][1] = 6 - 12*in[0] - 12*in[1];
│ │ │ │ +
290
│ │ │ │ +
291 out[10][0] = -12*in[0];
│ │ │ │ +
292 out[10][1] = 18 - 12*in[0] - 36*in[1];
│ │ │ │ +
293
│ │ │ │ +
294 out[11][0] = -180*in[0];
│ │ │ │ +
295 out[11][1] = -90 + 180*in[0] + 180*in[1];
│ │ │ │ +
296 break;
│ │ │ │ +
297 default:
│ │ │ │ +
298 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
299 }
│ │ │ │ +
300 } else {
│ │ │ │ +
301 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
302 }
│ │ │ │ +
303 }
│ │ │ │ +
│ │ │ │ +
304
│ │ │ │ +
│ │ │ │ +
306 unsigned int order() const
│ │ │ │ +
307 {
│ │ │ │ +
308 return 2; // TODO: check whether this is not order 3
│ │ │ │ +
309 }
│ │ │ │ +
│ │ │ │ +
310
│ │ │ │ +
311 private:
│ │ │ │ +
312 std::array<R,3> sign_;
│ │ │ │ +
313 };
│ │ │ │
│ │ │ │ -
126}
│ │ │ │ -
127#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
314} // end namespace Dune
│ │ │ │ +
315#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:25
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:78
│ │ │ │ -
BDM1Cube2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:39
│ │ │ │ -
BDM1Cube2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:29
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:30
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:121
│ │ │ │ +
BDM2Simplex2DLocalBasis(std::bitset< 3 > s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:49
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:211
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:56
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:35
│ │ │ │ +
BDM2Simplex2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:38
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:67
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:306
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,138 +1,348 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ -brezzidouglasmarini1cube2dlocalinterpolation.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -25 { │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -_2_9 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ 30 { │ │ │ │ │ -31 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_9 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s) │ │ │ │ │ -40 { │ │ │ │ │ -41 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ -42 if (s & 1) │ │ │ │ │ -43 { │ │ │ │ │ -44 sign0 = -1.0; │ │ │ │ │ -45 } │ │ │ │ │ -46 if (s & 2) │ │ │ │ │ -47 { │ │ │ │ │ -48 sign1 = -1.0; │ │ │ │ │ -49 } │ │ │ │ │ -50 if (s & 4) │ │ │ │ │ -51 { │ │ │ │ │ -52 sign2 = -1.0; │ │ │ │ │ +31 │ │ │ │ │ +32 public: │ │ │ │ │ +33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>, │ │ │ │ │ +34 R,2,Dune::FieldVector, │ │ │ │ │ +_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +_3_8 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +39 { │ │ │ │ │ +40 for (size_t i=0; i<3; i++) │ │ │ │ │ +41 sign_[i] = 1.0; │ │ │ │ │ +42 } │ │ │ │ │ +43 │ │ │ │ │ +_4_9 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s(std::bitset<3> s) │ │ │ │ │ +50 { │ │ │ │ │ +51 for (size_t i=0; i<3; i++) │ │ │ │ │ +52 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ 53 } │ │ │ │ │ -54 if (s & 8) │ │ │ │ │ -55 { │ │ │ │ │ -56 sign3 = -1.0; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -59 n0[0] = -1.0; │ │ │ │ │ -60 n0[1] = 0.0; │ │ │ │ │ -61 n1[0] = 1.0; │ │ │ │ │ -62 n1[1] = 0.0; │ │ │ │ │ -63 n2[0] = 0.0; │ │ │ │ │ -64 n2[1] = -1.0; │ │ │ │ │ -65 n3[0] = 0.0; │ │ │ │ │ -66 n3[1] = 1.0; │ │ │ │ │ -67 } │ │ │ │ │ -68 │ │ │ │ │ -77 template │ │ │ │ │ -_7_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -79 { │ │ │ │ │ -80 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -81 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -82 //typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -83 │ │ │ │ │ -84 out.resize(8); │ │ │ │ │ -85 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -86 │ │ │ │ │ -87 const int qOrder = 4; │ │ │ │ │ -88 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ -(GeometryTypes::cube(1), qOrder); │ │ │ │ │ -89 │ │ │ │ │ -90 for (typename QuadratureRule::const_iterator it = rule.begin(); │ │ │ │ │ -91 it != rule.end(); ++it) │ │ │ │ │ -92 { │ │ │ │ │ -93 Scalar qPos = it->position(); │ │ │ │ │ -94 typename LB::Traits::DomainType localPos; │ │ │ │ │ -95 │ │ │ │ │ -96 localPos[0] = 0.0; │ │ │ │ │ -97 localPos[1] = qPos; │ │ │ │ │ -98 auto y = f(localPos); │ │ │ │ │ -99 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0; │ │ │ │ │ -100 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -101 │ │ │ │ │ -102 localPos[0] = 1.0; │ │ │ │ │ -103 localPos[1] = qPos; │ │ │ │ │ -104 y = f(localPos); │ │ │ │ │ -105 out[2] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1; │ │ │ │ │ -106 out[3] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +54 │ │ │ │ │ +_5_6 unsigned int _s_i_z_e() const │ │ │ │ │ +57 { │ │ │ │ │ +58 return 12; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +68 std::vector& out) const │ │ │ │ │ +69 { │ │ │ │ │ +70 out.resize(_s_i_z_e()); │ │ │ │ │ +71 │ │ │ │ │ +72 out[0][0] = sign_[0]*(-2*in[0]*in[1] + in[0]*in[0]); │ │ │ │ │ +73 out[0][1] = sign_[0]*(-1 + 6*in[1] -2*in[0]*in[1] - 5*in[1]*in[1]); │ │ │ │ │ +74 │ │ │ │ │ +75 out[1][0] = 1.5*in[0] + 3*in[0]*in[1] - 4.5*in[0]*in[0]; │ │ │ │ │ +76 out[1][1] = -3 + 6*in[0] + 10.5*in[1] - 15*in[0]*in[1] - 7.5*in[1]*in[1]; │ │ │ │ │ +77 │ │ │ │ │ +78 out[2][0] = sign_[0]*(-7.5*in[0] + 5*in[0]*in[1] + 12.5*in[0]*in[0]); │ │ │ │ │ +79 out[2][1] = sign_[0]*(-5 + 30*in[0] + 7.5*in[1] - 25*in[0]*in[1] - 30*in │ │ │ │ │ +[0]*in[0] - 2.5*in[1]*in[1]); │ │ │ │ │ +80 │ │ │ │ │ +81 │ │ │ │ │ +82 │ │ │ │ │ +83 out[3][0] = sign_[1]*(-1 + 6*in[0] - 2*in[0]*in[1] - 5*in[0]*in[0]); │ │ │ │ │ +84 out[3][1] = sign_[1]*(-2*in[0]*in[1] + in[1]*in[1]); │ │ │ │ │ +85 │ │ │ │ │ +86 out[4][0] = 3 - 10.5*in[0] - 6*in[1] + 15*in[0]*in[1] + 7.5*in[0]*in[0]; │ │ │ │ │ +87 out[4][1] = -1.5*in[1] - 3*in[0]*in[1] + 4.5*in[1]*in[1]; │ │ │ │ │ +88 │ │ │ │ │ +89 out[5][0] = sign_[1]*(-5 + 7.5*in[0] + 30*in[1] - 25*in[0]*in[1] - 2.5*in │ │ │ │ │ +[0]*in[0] - 30*in[1]*in[1]); │ │ │ │ │ +90 out[5][1] = sign_[1]*(-7.5*in[1] + 5*in[0]*in[1] + 12.5*in[1]*in[1]); │ │ │ │ │ +91 │ │ │ │ │ +92 │ │ │ │ │ +93 │ │ │ │ │ +94 out[6][0] = sign_[2]*(-3*in[0] + 4*in[0]*in[1] + 4*in[0]*in[0]); │ │ │ │ │ +95 out[6][1] = sign_[2]*(-3*in[1] + 4*in[0]*in[1] + 4*in[1]*in[1]); │ │ │ │ │ +96 │ │ │ │ │ +97 out[7][0] = -3*in[0] + 6*in[0]*in[0]; │ │ │ │ │ +98 out[7][1] = 3*in[1] - 6*in[1]*in[1]; │ │ │ │ │ +99 │ │ │ │ │ +100 out[8][0] = sign_[2]*(-10*in[0]*in[1] + 5*in[0]*in[0]); │ │ │ │ │ +101 out[8][1] = sign_[2]*(-10*in[0]*in[1] + 5*in[1]*in[1]); │ │ │ │ │ +102 │ │ │ │ │ +103 │ │ │ │ │ +104 │ │ │ │ │ +105 out[9][0] = 18*in[0] - 12*in[0]*in[1] - 18*in[0]*in[0]; │ │ │ │ │ +106 out[9][1] = 6*in[1] - 12*in[0]*in[1] - 6*in[1]*in[1]; │ │ │ │ │ 107 │ │ │ │ │ -108 localPos[0] = qPos; │ │ │ │ │ -109 localPos[1] = 0.0; │ │ │ │ │ -110 y = f(localPos); │ │ │ │ │ -111 out[4] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2; │ │ │ │ │ -112 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ -113 │ │ │ │ │ -114 localPos[0] = qPos; │ │ │ │ │ -115 localPos[1] = 1.0; │ │ │ │ │ -116 y = f(localPos); │ │ │ │ │ -117 out[6] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3; │ │ │ │ │ -118 out[7] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -119 } │ │ │ │ │ -120 } │ │ │ │ │ -121 │ │ │ │ │ -122 private: │ │ │ │ │ -123 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3; │ │ │ │ │ -124 typename LB::Traits::DomainType n0, n1, n2, n3; │ │ │ │ │ -125 }; │ │ │ │ │ -126} │ │ │ │ │ -127#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +108 out[10][0] = 6*in[0] - 12*in[0]*in[1] - 6*in[0]*in[0]; │ │ │ │ │ +109 out[10][1] = 18*in[1] - 12*in[0]*in[1] - 18*in[1]*in[1]; │ │ │ │ │ +110 │ │ │ │ │ +111 out[11][0] = 90*in[0] - 180*in[0]*in[1] - 90*in[0]*in[0]; │ │ │ │ │ +112 out[11][1] = -90*in[1] + 180*in[0]*in[1] + 90*in[1]*in[1]; │ │ │ │ │ +113 } │ │ │ │ │ +114 │ │ │ │ │ +_1_2_1 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +122 std::vector& out) const │ │ │ │ │ +123 { │ │ │ │ │ +124 out.resize(_s_i_z_e()); │ │ │ │ │ +125 │ │ │ │ │ +126 out[0][0][0] = sign_[0]*(-2*in[1] + 2*in[0]); │ │ │ │ │ +127 out[0][0][1] = sign_[0]*(-2*in[0]); │ │ │ │ │ +128 │ │ │ │ │ +129 out[0][1][0] = sign_[0]*(-2*in[1]); │ │ │ │ │ +130 out[0][1][1] = sign_[0]*(6 -2*in[0] - 10*in[1]); │ │ │ │ │ +131 │ │ │ │ │ +132 │ │ │ │ │ +133 out[1][0][0] = 1.5 + 3*in[1] - 9*in[0]; │ │ │ │ │ +134 out[1][0][1] = 3*in[0]; │ │ │ │ │ +135 │ │ │ │ │ +136 out[1][1][0] = 6 - 15*in[1]; │ │ │ │ │ +137 out[1][1][1] = 10.5 - 15*in[0] - 15*in[1]; │ │ │ │ │ +138 │ │ │ │ │ +139 │ │ │ │ │ +140 out[2][0][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]); │ │ │ │ │ +141 out[2][0][1] = sign_[0]*(5*in[0]); │ │ │ │ │ +142 │ │ │ │ │ +143 out[2][1][0] = sign_[0]*(30 - 25*in[1] - 60*in[0]); │ │ │ │ │ +144 out[2][1][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]); │ │ │ │ │ +145 │ │ │ │ │ +146 │ │ │ │ │ +147 │ │ │ │ │ +148 out[3][0][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]); │ │ │ │ │ +149 out[3][0][1] = sign_[1]*(-2*in[0]); │ │ │ │ │ +150 │ │ │ │ │ +151 out[3][1][0] = sign_[1]*(-2*in[1]); │ │ │ │ │ +152 out[3][1][1] = sign_[1]*(-2*in[0] + 2*in[1]); │ │ │ │ │ +153 │ │ │ │ │ +154 │ │ │ │ │ +155 out[4][0][0] = -10.5 + 15*in[1] + 15*in[0]; │ │ │ │ │ +156 out[4][0][1] = -6 + 15*in[0]; │ │ │ │ │ +157 │ │ │ │ │ +158 out[4][1][0] = -3*in[1]; │ │ │ │ │ +159 out[4][1][1] = -1.5 - 3*in[0] + 9*in[1]; │ │ │ │ │ +160 │ │ │ │ │ +161 │ │ │ │ │ +162 out[5][0][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]); │ │ │ │ │ +163 out[5][0][1] = sign_[1]*(30 - 25*in[0] - 60*in[1]); │ │ │ │ │ +164 │ │ │ │ │ +165 out[5][1][0] = sign_[1]*(5*in[1]); │ │ │ │ │ +166 out[5][1][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]); │ │ │ │ │ +167 │ │ │ │ │ +168 │ │ │ │ │ +169 │ │ │ │ │ +170 out[6][0][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]); │ │ │ │ │ +171 out[6][0][1] = sign_[2]*(4*in[0]); │ │ │ │ │ +172 │ │ │ │ │ +173 out[6][1][0] = sign_[2]*(4*in[1]); │ │ │ │ │ +174 out[6][1][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]); │ │ │ │ │ +175 │ │ │ │ │ +176 │ │ │ │ │ +177 out[7][0][0] = -3 + 12*in[0]; │ │ │ │ │ +178 out[7][0][1] = 0; │ │ │ │ │ +179 │ │ │ │ │ +180 out[7][1][0] = 0; │ │ │ │ │ +181 out[7][1][1] = 3 - 12*in[1]; │ │ │ │ │ +182 │ │ │ │ │ +183 │ │ │ │ │ +184 out[8][0][0] = sign_[2]*(-10*in[1] + 10*in[0]); │ │ │ │ │ +185 out[8][0][1] = sign_[2]*(-10*in[0]); │ │ │ │ │ +186 │ │ │ │ │ +187 out[8][1][0] = sign_[2]*(-10*in[1]); │ │ │ │ │ +188 out[8][1][1] = sign_[2]*(-10*in[0] + 10*in[1]); │ │ │ │ │ +189 │ │ │ │ │ +190 │ │ │ │ │ +191 out[9][0][0] = 18 - 12*in[1] - 36*in[0]; │ │ │ │ │ +192 out[9][0][1] = -12*in[0]; │ │ │ │ │ +193 │ │ │ │ │ +194 out[9][1][0] = -12*in[1]; │ │ │ │ │ +195 out[9][1][1] = 6 - 12*in[0] - 12*in[1]; │ │ │ │ │ +196 │ │ │ │ │ +197 out[10][0][0] = 6 - 12*in[1] - 12*in[0]; │ │ │ │ │ +198 out[10][0][1] = -12*in[0]; │ │ │ │ │ +199 │ │ │ │ │ +200 out[10][1][0] = -12*in[1]; │ │ │ │ │ +201 out[10][1][1] = 18 - 12*in[0] - 36*in[1]; │ │ │ │ │ +202 │ │ │ │ │ +203 out[11][0][0] = 90 - 180*in[1] - 180*in[0]; │ │ │ │ │ +204 out[11][0][1] = -180*in[0]; │ │ │ │ │ +205 │ │ │ │ │ +206 out[11][1][0] = 180*in[1]; │ │ │ │ │ +207 out[11][1][1] = -90 + 180*in[0] + 180*in[1]; │ │ │ │ │ +208 } │ │ │ │ │ +209 │ │ │ │ │ +_2_1_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +212 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +213 std::vector& out) const // return value │ │ │ │ │ +214 { │ │ │ │ │ +215 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +216 if (totalOrder == 0) { │ │ │ │ │ +217 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +218 } else if (totalOrder == 1) { │ │ │ │ │ +219 out.resize(_s_i_z_e()); │ │ │ │ │ +220 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +221 │ │ │ │ │ +222 switch (direction) { │ │ │ │ │ +223 case 0: │ │ │ │ │ +224 out[0][0] = sign_[0]*(-2*in[1] + 2*in[0]); │ │ │ │ │ +225 out[0][1] = sign_[0]*(-2*in[1]); │ │ │ │ │ +226 │ │ │ │ │ +227 out[1][0] = 1.5 + 3*in[1] - 9*in[0]; │ │ │ │ │ +228 out[1][1] = 6 - 15*in[1]; │ │ │ │ │ +229 │ │ │ │ │ +230 out[2][0] = sign_[0]*(-7.5 + 5*in[1] + 25*in[0]); │ │ │ │ │ +231 out[2][1] = sign_[0]*(30 - 25*in[1] - 60*in[0]); │ │ │ │ │ +232 │ │ │ │ │ +233 out[3][0] = sign_[1]*(6 - 2*in[1] - 10*in[0]); │ │ │ │ │ +234 out[3][1] = sign_[1]*(-2*in[1]); │ │ │ │ │ +235 │ │ │ │ │ +236 out[4][0] = -10.5 + 15*in[1] + 15*in[0]; │ │ │ │ │ +237 out[4][1] = -3*in[1]; │ │ │ │ │ +238 │ │ │ │ │ +239 out[5][0] = sign_[1]*(7.5 - 25*in[1] - 5*in[0]); │ │ │ │ │ +240 out[5][1] = sign_[1]*(5*in[1]); │ │ │ │ │ +241 │ │ │ │ │ +242 out[6][0] = sign_[2]*(-3 + 4*in[1] + 8*in[0]); │ │ │ │ │ +243 out[6][1] = sign_[2]*(4*in[1]); │ │ │ │ │ +244 │ │ │ │ │ +245 out[7][0] = -3 + 12*in[0]; │ │ │ │ │ +246 out[7][1] = 0; │ │ │ │ │ +247 │ │ │ │ │ +248 out[8][0] = sign_[2]*(-10*in[1] + 10*in[0]); │ │ │ │ │ +249 out[8][1] = sign_[2]*(-10*in[1]); │ │ │ │ │ +250 │ │ │ │ │ +251 out[9][0] = 18 - 12*in[1] - 36*in[0]; │ │ │ │ │ +252 out[9][1] = -12*in[1]; │ │ │ │ │ +253 │ │ │ │ │ +254 out[10][0] = 6 - 12*in[1] - 12*in[0]; │ │ │ │ │ +255 out[10][1] = -12*in[1]; │ │ │ │ │ +256 │ │ │ │ │ +257 out[11][0] = 90 - 180*in[1] - 180*in[0]; │ │ │ │ │ +258 out[11][1] = 180*in[1]; │ │ │ │ │ +259 break; │ │ │ │ │ +260 case 1: │ │ │ │ │ +261 out[0][0] = sign_[0]*(-2*in[0]); │ │ │ │ │ +262 out[0][1] = sign_[0]*(6 -2*in[0] - 10*in[1]); │ │ │ │ │ +263 │ │ │ │ │ +264 out[1][0] = 3*in[0]; │ │ │ │ │ +265 out[1][1] = 10.5 - 15*in[0] - 15*in[1]; │ │ │ │ │ +266 │ │ │ │ │ +267 out[2][0] = sign_[0]*(5*in[0]); │ │ │ │ │ +268 out[2][1] = sign_[0]*(7.5 - 25*in[0] - 5*in[1]); │ │ │ │ │ +269 │ │ │ │ │ +270 out[3][0] = sign_[1]*(-2*in[0]); │ │ │ │ │ +271 out[3][1] = sign_[1]*(-2*in[0] + 2*in[1]); │ │ │ │ │ +272 │ │ │ │ │ +273 out[4][0] = -6 + 15*in[0]; │ │ │ │ │ +274 out[4][1] = -1.5 - 3*in[0] + 9*in[1]; │ │ │ │ │ +275 │ │ │ │ │ +276 out[5][0] = sign_[1]*(30 - 25*in[0] - 60*in[1]); │ │ │ │ │ +277 out[5][1] = sign_[1]*(-7.5 + 5*in[0] + 25*in[1]); │ │ │ │ │ +278 │ │ │ │ │ +279 out[6][0] = sign_[2]*(4*in[0]); │ │ │ │ │ +280 out[6][1] = sign_[2]*(-3 + 4*in[0] + 8*in[1]); │ │ │ │ │ +281 │ │ │ │ │ +282 out[7][0] = 0; │ │ │ │ │ +283 out[7][1] = 3 - 12*in[1]; │ │ │ │ │ +284 │ │ │ │ │ +285 out[8][0] = sign_[2]*(-10*in[0]); │ │ │ │ │ +286 out[8][1] = sign_[2]*(-10*in[0] + 10*in[1]); │ │ │ │ │ +287 │ │ │ │ │ +288 out[9][0] = -12*in[0]; │ │ │ │ │ +289 out[9][1] = 6 - 12*in[0] - 12*in[1]; │ │ │ │ │ +290 │ │ │ │ │ +291 out[10][0] = -12*in[0]; │ │ │ │ │ +292 out[10][1] = 18 - 12*in[0] - 36*in[1]; │ │ │ │ │ +293 │ │ │ │ │ +294 out[11][0] = -180*in[0]; │ │ │ │ │ +295 out[11][1] = -90 + 180*in[0] + 180*in[1]; │ │ │ │ │ +296 break; │ │ │ │ │ +297 default: │ │ │ │ │ +298 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +299 } │ │ │ │ │ +300 } else { │ │ │ │ │ +301 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +302 } │ │ │ │ │ +303 } │ │ │ │ │ +304 │ │ │ │ │ +_3_0_6 unsigned int _o_r_d_e_r() const │ │ │ │ │ +307 { │ │ │ │ │ +308 return 2; // TODO: check whether this is not order 3 │ │ │ │ │ +309 } │ │ │ │ │ +310 │ │ │ │ │ +311 private: │ │ │ │ │ +312 std::array sign_; │ │ │ │ │ +313 }; │ │ │ │ │ +314} // end namespace Dune │ │ │ │ │ +315#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ -quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Cube2DLocalInterpolation(unsigned int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Cube2DLocalInterpolation() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:121 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM2Simplex2DLocalBasis(std::bitset< 3 > s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:211 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM2Simplex2DLocalBasis() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:29 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:306 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube2dlocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. More...
class  Dune::BDM2Simplex2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-2 elements on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Brezzi-Douglas-Marini-2 elements on triangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00068_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,241 +70,84 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube2dlocalbasis.hh
│ │ │ │ +
brezzidouglasmarini2simplex2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include "../../common/localbasis.hh"
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ -
33 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
34 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {
│ │ │ │ -
39 for (size_t i=0; i<4; i++)
│ │ │ │ -
40 sign_[i] = 1.0;
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i = 0; i < 3; ++i)
│ │ │ │ +
31 {
│ │ │ │ +
32 li[3 * i] = LocalKey(i,1,0);
│ │ │ │ +
33 li[3 * i + 1] = LocalKey(i,1,1);
│ │ │ │ +
34 li[3 * i + 2] = LocalKey(i,1,2);
│ │ │ │ +
35 }
│ │ │ │ +
36
│ │ │ │ +
37 // last DOFs are associated with the cell (codim=0)
│ │ │ │ +
38 li[9] = LocalKey(0,0,0);
│ │ │ │ +
39 li[10] = LocalKey(0,0,1);
│ │ │ │ +
40 li[11] = LocalKey(0,0,2);
│ │ │ │
41 }
│ │ │ │
│ │ │ │
42
│ │ │ │ -
│ │ │ │ -
48 BDM1Cube2DLocalBasis (std::bitset<4> s)
│ │ │ │ -
49 {
│ │ │ │ -
50 for (size_t i=0; i<4; i++)
│ │ │ │ -
51 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
55 unsigned int size () const
│ │ │ │ -
56 {
│ │ │ │ -
57 return 8;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
66 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
67 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
68 {
│ │ │ │ -
69 out.resize(8);
│ │ │ │ -
70
│ │ │ │ -
71 out[0][0] = sign_[0]*(in[0] - 1.0);
│ │ │ │ -
72 out[0][1] = 0.0;
│ │ │ │ -
73 out[1][0] = 6.0*in[0]*in[1] - 3.0*in[0]-6*in[1] + 3.0;
│ │ │ │ -
74 out[1][1] = -3.0*in[1]*in[1] + 3.0*in[1];
│ │ │ │ -
75 out[2][0] = sign_[1]*(in[0]);
│ │ │ │ -
76 out[2][1] = 0.0;
│ │ │ │ -
77 out[3][0] = -6.0*in[0]*in[1] + 3.0*in[0];
│ │ │ │ -
78 out[3][1] = 3.0*in[1]*in[1] - 3.0*in[1];
│ │ │ │ -
79 out[4][0] = 0.0;
│ │ │ │ -
80 out[4][1] = sign_[2]*(in[1] - 1.0);
│ │ │ │ -
81 out[5][0] = 3.0*in[0]*in[0] - 3.0*in[0];
│ │ │ │ -
82 out[5][1] = -6.0*in[0]*in[1] + 6.0*in[0] + 3.0*in[1] - 3.0;
│ │ │ │ -
83 out[6][0] = 0.0;
│ │ │ │ -
84 out[6][1] = sign_[3]*(in[1]);
│ │ │ │ -
85 out[7][0] = -3.0*in[0]*in[0] + 3.0*in[0];
│ │ │ │ -
86 out[7][1] = 6.0*in[0]*in[1] - 3.0*in[1];
│ │ │ │ -
87 }
│ │ │ │ -
│ │ │ │ -
88
│ │ │ │ -
│ │ │ │ -
95 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
96 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
97 {
│ │ │ │ -
98 out.resize(8);
│ │ │ │ -
99
│ │ │ │ -
100 out[0][0][0] = sign_[0];
│ │ │ │ -
101 out[0][0][1] = 0.0;
│ │ │ │ -
102 out[0][1][0] = 0.0;
│ │ │ │ -
103 out[0][1][1] = 0.0;
│ │ │ │ -
104
│ │ │ │ -
105 out[1][0][0] = 6.0*in[1] - 3.0;
│ │ │ │ -
106 out[1][0][1] = 6.0*in[0] - 6.0;
│ │ │ │ -
107 out[1][1][0] = 0.0;
│ │ │ │ -
108 out[1][1][1] = -6.0*in[1] + 3.0;
│ │ │ │ -
109
│ │ │ │ -
110 out[2][0][0] = sign_[1];
│ │ │ │ -
111 out[2][0][1] = 0.0;
│ │ │ │ -
112 out[2][1][0] = 0.0;
│ │ │ │ -
113 out[2][1][1] = 0.0;
│ │ │ │ -
114
│ │ │ │ -
115 out[3][0][0] = -6.0*in[1] + 3.0;
│ │ │ │ -
116 out[3][0][1] = -6.0*in[0];
│ │ │ │ -
117 out[3][1][0] = 0.0;
│ │ │ │ -
118 out[3][1][1] = 6.0*in[1] - 3.0;
│ │ │ │ -
119
│ │ │ │ -
120 out[4][0][0] = 0.0;
│ │ │ │ -
121 out[4][0][1] = 0.0;
│ │ │ │ -
122 out[4][1][0] = 0.0;
│ │ │ │ -
123 out[4][1][1] = sign_[2];
│ │ │ │ -
124
│ │ │ │ -
125 out[5][0][0] = 6.0*in[0] - 3.0;
│ │ │ │ -
126 out[5][0][1] = 0.0;
│ │ │ │ -
127 out[5][1][0] = -6.0*in[1] + 6.0;
│ │ │ │ -
128 out[5][1][1] = -6.0*in[0] + 3.0;
│ │ │ │ -
129
│ │ │ │ -
130 out[6][0][0] = 0.0;
│ │ │ │ -
131 out[6][0][1] = 0.0;
│ │ │ │ -
132 out[6][1][0] = 0.0;
│ │ │ │ -
133 out[6][1][1] = sign_[3];
│ │ │ │ -
134
│ │ │ │ -
135 out[7][0][0] = -6.0*in[0] + 3.0;
│ │ │ │ -
136 out[7][0][1] = 0.0;
│ │ │ │ -
137 out[7][1][0] = 6.0*in[1];
│ │ │ │ -
138 out[7][1][1] = 6.0*in[0] - 3.0;
│ │ │ │ -
139 }
│ │ │ │ -
│ │ │ │ -
140
│ │ │ │ -
│ │ │ │ -
142 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
143 const typename Traits::DomainType& in, // position
│ │ │ │ -
144 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
145 {
│ │ │ │ -
146 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
147 if (totalOrder == 0) {
│ │ │ │ -
148 evaluateFunction(in, out);
│ │ │ │ -
149 } else if (totalOrder == 1) {
│ │ │ │ -
150 out.resize(size());
│ │ │ │ -
151 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
152
│ │ │ │ -
153 switch (direction) {
│ │ │ │ -
154 case 0:
│ │ │ │ -
155 out[0][0] = sign_[0];
│ │ │ │ -
156 out[0][1] = 0.0;
│ │ │ │ -
157
│ │ │ │ -
158 out[1][0] = 6.0*in[1] - 3.0;
│ │ │ │ -
159 out[1][1] = 0.0;
│ │ │ │ -
160
│ │ │ │ -
161 out[2][0] = sign_[1];
│ │ │ │ -
162 out[2][1] = 0.0;
│ │ │ │ -
163
│ │ │ │ -
164 out[3][0] = -6.0*in[1] + 3.0;
│ │ │ │ -
165 out[3][1] = 0.0;
│ │ │ │ -
166
│ │ │ │ -
167 out[4][0] = 0.0;
│ │ │ │ -
168 out[4][1] = 0.0;
│ │ │ │ -
169
│ │ │ │ -
170 out[5][0] = 6.0*in[0] - 3.0;
│ │ │ │ -
171 out[5][1] = -6.0*in[1] + 6.0;
│ │ │ │ -
172
│ │ │ │ -
173 out[6][0] = 0.0;
│ │ │ │ -
174 out[6][1] = 0.0;
│ │ │ │ -
175
│ │ │ │ -
176 out[7][0] = -6.0*in[0] + 3.0;
│ │ │ │ -
177 out[7][1] = 6.0*in[1];
│ │ │ │ -
178 break;
│ │ │ │ -
179 case 1:
│ │ │ │ -
180 out[0][0] = 0.0;
│ │ │ │ -
181 out[0][1] = 0.0;
│ │ │ │ -
182
│ │ │ │ -
183 out[1][0] = 6.0*in[0] - 6.0;
│ │ │ │ -
184 out[1][1] = -6.0*in[1] + 3.0;
│ │ │ │ -
185
│ │ │ │ -
186 out[2][0] = 0.0;
│ │ │ │ -
187 out[2][1] = 0.0;
│ │ │ │ -
188
│ │ │ │ -
189 out[3][0] = -6.0*in[0];
│ │ │ │ -
190 out[3][1] = 6.0*in[1] - 3.0;
│ │ │ │ -
191
│ │ │ │ -
192 out[4][0] = 0.0;
│ │ │ │ -
193 out[4][1] = sign_[2];
│ │ │ │ -
194
│ │ │ │ -
195 out[5][0] = 0.0;
│ │ │ │ -
196 out[5][1] = -6.0*in[0] + 3.0;
│ │ │ │ -
197
│ │ │ │ -
198 out[6][0] = 0.0;
│ │ │ │ -
199 out[6][1] = sign_[3];
│ │ │ │ -
200
│ │ │ │ -
201 out[7][0] = 0.0;
│ │ │ │ -
202 out[7][1] = 6.0*in[0] - 3.0;
│ │ │ │ -
203 break;
│ │ │ │ -
204 default:
│ │ │ │ -
205 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
206 }
│ │ │ │ -
207 } else {
│ │ │ │ -
208 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
209 }
│ │ │ │ -
210 }
│ │ │ │ -
│ │ │ │ -
211
│ │ │ │ -
│ │ │ │ -
213 unsigned int order () const
│ │ │ │ -
214 {
│ │ │ │ -
215 return 2;
│ │ │ │ -
216 }
│ │ │ │ -
│ │ │ │ -
217
│ │ │ │ -
218 private:
│ │ │ │ -
219 std::array<R,4> sign_;
│ │ │ │ -
220 };
│ │ │ │ +
│ │ │ │ +
44 std::size_t size() const
│ │ │ │ +
45 {
│ │ │ │ +
46 return 12;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
50 const LocalKey& localKey(std::size_t i) const
│ │ │ │ +
51 {
│ │ │ │ +
52 return li[i];
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 private:
│ │ │ │ +
56 std::vector<LocalKey> li;
│ │ │ │ +
57 };
│ │ │ │
│ │ │ │ -
221}
│ │ │ │ -
222#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
58} // end namespace Dune
│ │ │ │ +
59#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:30
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:95
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:142
│ │ │ │ -
BDM1Cube2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:37
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini1cube2dlocalbasis.hh:34
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini1cube2dlocalbasis.hh:55
│ │ │ │ -
BDM1Cube2DLocalBasis(std::bitset< 4 > s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:48
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:213
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:66
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-2 elements on triangles.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:24
│ │ │ │ +
BDM2Simplex2DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:50
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:44
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,255 +1,85 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ -brezzidouglasmarini1cube2dlocalbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d │ │ │ │ │ +brezzidouglasmarini2simplex2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include "../../common/localbasis.hh" │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_4 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -_3_7 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -38 { │ │ │ │ │ -39 for (size_t i=0; i<4; i++) │ │ │ │ │ -40 sign_[i] = 1.0; │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() : li(12) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i = 0; i < 3; ++i) │ │ │ │ │ +31 { │ │ │ │ │ +32 li[3 * i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +33 li[3 * i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +34 li[3 * i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +35 } │ │ │ │ │ +36 │ │ │ │ │ +37 // last DOFs are associated with the cell (codim=0) │ │ │ │ │ +38 li[9] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ +39 li[10] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ +40 li[11] = _L_o_c_a_l_K_e_y(0,0,2); │ │ │ │ │ 41 } │ │ │ │ │ 42 │ │ │ │ │ -_4_8 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ -49 { │ │ │ │ │ -50 for (size_t i=0; i<4; i++) │ │ │ │ │ -51 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_5 unsigned int _s_i_z_e () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return 8; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -67 std::vector& out) const │ │ │ │ │ -68 { │ │ │ │ │ -69 out.resize(8); │ │ │ │ │ -70 │ │ │ │ │ -71 out[0][0] = sign_[0]*(in[0] - 1.0); │ │ │ │ │ -72 out[0][1] = 0.0; │ │ │ │ │ -73 out[1][0] = 6.0*in[0]*in[1] - 3.0*in[0]-6*in[1] + 3.0; │ │ │ │ │ -74 out[1][1] = -3.0*in[1]*in[1] + 3.0*in[1]; │ │ │ │ │ -75 out[2][0] = sign_[1]*(in[0]); │ │ │ │ │ -76 out[2][1] = 0.0; │ │ │ │ │ -77 out[3][0] = -6.0*in[0]*in[1] + 3.0*in[0]; │ │ │ │ │ -78 out[3][1] = 3.0*in[1]*in[1] - 3.0*in[1]; │ │ │ │ │ -79 out[4][0] = 0.0; │ │ │ │ │ -80 out[4][1] = sign_[2]*(in[1] - 1.0); │ │ │ │ │ -81 out[5][0] = 3.0*in[0]*in[0] - 3.0*in[0]; │ │ │ │ │ -82 out[5][1] = -6.0*in[0]*in[1] + 6.0*in[0] + 3.0*in[1] - 3.0; │ │ │ │ │ -83 out[6][0] = 0.0; │ │ │ │ │ -84 out[6][1] = sign_[3]*(in[1]); │ │ │ │ │ -85 out[7][0] = -3.0*in[0]*in[0] + 3.0*in[0]; │ │ │ │ │ -86 out[7][1] = 6.0*in[0]*in[1] - 3.0*in[1]; │ │ │ │ │ -87 } │ │ │ │ │ -88 │ │ │ │ │ -_9_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -96 std::vector& out) const │ │ │ │ │ -97 { │ │ │ │ │ -98 out.resize(8); │ │ │ │ │ -99 │ │ │ │ │ -100 out[0][0][0] = sign_[0]; │ │ │ │ │ -101 out[0][0][1] = 0.0; │ │ │ │ │ -102 out[0][1][0] = 0.0; │ │ │ │ │ -103 out[0][1][1] = 0.0; │ │ │ │ │ -104 │ │ │ │ │ -105 out[1][0][0] = 6.0*in[1] - 3.0; │ │ │ │ │ -106 out[1][0][1] = 6.0*in[0] - 6.0; │ │ │ │ │ -107 out[1][1][0] = 0.0; │ │ │ │ │ -108 out[1][1][1] = -6.0*in[1] + 3.0; │ │ │ │ │ -109 │ │ │ │ │ -110 out[2][0][0] = sign_[1]; │ │ │ │ │ -111 out[2][0][1] = 0.0; │ │ │ │ │ -112 out[2][1][0] = 0.0; │ │ │ │ │ -113 out[2][1][1] = 0.0; │ │ │ │ │ -114 │ │ │ │ │ -115 out[3][0][0] = -6.0*in[1] + 3.0; │ │ │ │ │ -116 out[3][0][1] = -6.0*in[0]; │ │ │ │ │ -117 out[3][1][0] = 0.0; │ │ │ │ │ -118 out[3][1][1] = 6.0*in[1] - 3.0; │ │ │ │ │ -119 │ │ │ │ │ -120 out[4][0][0] = 0.0; │ │ │ │ │ -121 out[4][0][1] = 0.0; │ │ │ │ │ -122 out[4][1][0] = 0.0; │ │ │ │ │ -123 out[4][1][1] = sign_[2]; │ │ │ │ │ -124 │ │ │ │ │ -125 out[5][0][0] = 6.0*in[0] - 3.0; │ │ │ │ │ -126 out[5][0][1] = 0.0; │ │ │ │ │ -127 out[5][1][0] = -6.0*in[1] + 6.0; │ │ │ │ │ -128 out[5][1][1] = -6.0*in[0] + 3.0; │ │ │ │ │ -129 │ │ │ │ │ -130 out[6][0][0] = 0.0; │ │ │ │ │ -131 out[6][0][1] = 0.0; │ │ │ │ │ -132 out[6][1][0] = 0.0; │ │ │ │ │ -133 out[6][1][1] = sign_[3]; │ │ │ │ │ -134 │ │ │ │ │ -135 out[7][0][0] = -6.0*in[0] + 3.0; │ │ │ │ │ -136 out[7][0][1] = 0.0; │ │ │ │ │ -137 out[7][1][0] = 6.0*in[1]; │ │ │ │ │ -138 out[7][1][1] = 6.0*in[0] - 3.0; │ │ │ │ │ -139 } │ │ │ │ │ -140 │ │ │ │ │ -_1_4_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -143 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -144 std::vector& out) const // return value │ │ │ │ │ -145 { │ │ │ │ │ -146 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -147 if (totalOrder == 0) { │ │ │ │ │ -148 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -149 } else if (totalOrder == 1) { │ │ │ │ │ -150 out.resize(_s_i_z_e()); │ │ │ │ │ -151 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -152 │ │ │ │ │ -153 switch (direction) { │ │ │ │ │ -154 case 0: │ │ │ │ │ -155 out[0][0] = sign_[0]; │ │ │ │ │ -156 out[0][1] = 0.0; │ │ │ │ │ -157 │ │ │ │ │ -158 out[1][0] = 6.0*in[1] - 3.0; │ │ │ │ │ -159 out[1][1] = 0.0; │ │ │ │ │ -160 │ │ │ │ │ -161 out[2][0] = sign_[1]; │ │ │ │ │ -162 out[2][1] = 0.0; │ │ │ │ │ -163 │ │ │ │ │ -164 out[3][0] = -6.0*in[1] + 3.0; │ │ │ │ │ -165 out[3][1] = 0.0; │ │ │ │ │ -166 │ │ │ │ │ -167 out[4][0] = 0.0; │ │ │ │ │ -168 out[4][1] = 0.0; │ │ │ │ │ -169 │ │ │ │ │ -170 out[5][0] = 6.0*in[0] - 3.0; │ │ │ │ │ -171 out[5][1] = -6.0*in[1] + 6.0; │ │ │ │ │ -172 │ │ │ │ │ -173 out[6][0] = 0.0; │ │ │ │ │ -174 out[6][1] = 0.0; │ │ │ │ │ -175 │ │ │ │ │ -176 out[7][0] = -6.0*in[0] + 3.0; │ │ │ │ │ -177 out[7][1] = 6.0*in[1]; │ │ │ │ │ -178 break; │ │ │ │ │ -179 case 1: │ │ │ │ │ -180 out[0][0] = 0.0; │ │ │ │ │ -181 out[0][1] = 0.0; │ │ │ │ │ -182 │ │ │ │ │ -183 out[1][0] = 6.0*in[0] - 6.0; │ │ │ │ │ -184 out[1][1] = -6.0*in[1] + 3.0; │ │ │ │ │ -185 │ │ │ │ │ -186 out[2][0] = 0.0; │ │ │ │ │ -187 out[2][1] = 0.0; │ │ │ │ │ -188 │ │ │ │ │ -189 out[3][0] = -6.0*in[0]; │ │ │ │ │ -190 out[3][1] = 6.0*in[1] - 3.0; │ │ │ │ │ -191 │ │ │ │ │ -192 out[4][0] = 0.0; │ │ │ │ │ -193 out[4][1] = sign_[2]; │ │ │ │ │ -194 │ │ │ │ │ -195 out[5][0] = 0.0; │ │ │ │ │ -196 out[5][1] = -6.0*in[0] + 3.0; │ │ │ │ │ -197 │ │ │ │ │ -198 out[6][0] = 0.0; │ │ │ │ │ -199 out[6][1] = sign_[3]; │ │ │ │ │ -200 │ │ │ │ │ -201 out[7][0] = 0.0; │ │ │ │ │ -202 out[7][1] = 6.0*in[0] - 3.0; │ │ │ │ │ -203 break; │ │ │ │ │ -204 default: │ │ │ │ │ -205 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -206 } │ │ │ │ │ -207 } else { │ │ │ │ │ -208 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -209 } │ │ │ │ │ -210 } │ │ │ │ │ -211 │ │ │ │ │ -_2_1_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ -214 { │ │ │ │ │ -215 return 2; │ │ │ │ │ -216 } │ │ │ │ │ -217 │ │ │ │ │ -218 private: │ │ │ │ │ -219 std::array sign_; │ │ │ │ │ -220 }; │ │ │ │ │ -221} │ │ │ │ │ -222#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +_4_4 std::size_t _s_i_z_e() const │ │ │ │ │ +45 { │ │ │ │ │ +46 return 12; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +_5_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const │ │ │ │ │ +51 { │ │ │ │ │ +52 return li[i]; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 private: │ │ │ │ │ +56 std::vector li; │ │ │ │ │ +57 }; │ │ │ │ │ +58} // end namespace Dune │ │ │ │ │ +59#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ -quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:142 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Cube2DLocalBasis() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-2 elements on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +BDM2Simplex2DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Cube2DLocalBasis(std::bitset< 4 > s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:213 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00071.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
brezzidouglasmarini1cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinisimplex.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarinisimplex.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube2DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals. More...
│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 1 >
 Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 1. More...
 
class  Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 2 >
 Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 2. More...
class  Dune::BDM1Cube2DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarinisimplex.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ +brezzidouglasmarini1cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ -  Brezzi-Douglas-Marini local finite elements for simplices with │ │ │ │ │ - dimension 2 and order 1. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ -  Brezzi-Douglas-Marini local finite elements for simplices with │ │ │ │ │ - dimension 2 and order 2. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00074_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarinisimplex.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,88 +70,241 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarinisimplex.hh
│ │ │ │ +
brezzidouglasmarini1cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ -
10
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
22 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ - │ │ │ │ -
24
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include "../../common/localbasis.hh"
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │
28 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31
│ │ │ │
32 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {}
│ │ │ │ -
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
44 {}
│ │ │ │ -
│ │ │ │ -
45 };
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
50 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
53 {
│ │ │ │ -
54 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
57 {}
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
66 {}
│ │ │ │ -
│ │ │ │ -
67 };
│ │ │ │ -
│ │ │ │ -
68
│ │ │ │ -
69} // namespace Dune
│ │ │ │ +
33 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
34 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
35
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {
│ │ │ │ +
39 for (size_t i=0; i<4; i++)
│ │ │ │ +
40 sign_[i] = 1.0;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
│ │ │ │ +
48 BDM1Cube2DLocalBasis (std::bitset<4> s)
│ │ │ │ +
49 {
│ │ │ │ +
50 for (size_t i=0; i<4; i++)
│ │ │ │ +
51 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
55 unsigned int size () const
│ │ │ │ +
56 {
│ │ │ │ +
57 return 8;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
66 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
67 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
68 {
│ │ │ │ +
69 out.resize(8);
│ │ │ │
70
│ │ │ │ -
71#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
71 out[0][0] = sign_[0]*(in[0] - 1.0);
│ │ │ │ +
72 out[0][1] = 0.0;
│ │ │ │ +
73 out[1][0] = 6.0*in[0]*in[1] - 3.0*in[0]-6*in[1] + 3.0;
│ │ │ │ +
74 out[1][1] = -3.0*in[1]*in[1] + 3.0*in[1];
│ │ │ │ +
75 out[2][0] = sign_[1]*(in[0]);
│ │ │ │ +
76 out[2][1] = 0.0;
│ │ │ │ +
77 out[3][0] = -6.0*in[0]*in[1] + 3.0*in[0];
│ │ │ │ +
78 out[3][1] = 3.0*in[1]*in[1] - 3.0*in[1];
│ │ │ │ +
79 out[4][0] = 0.0;
│ │ │ │ +
80 out[4][1] = sign_[2]*(in[1] - 1.0);
│ │ │ │ +
81 out[5][0] = 3.0*in[0]*in[0] - 3.0*in[0];
│ │ │ │ +
82 out[5][1] = -6.0*in[0]*in[1] + 6.0*in[0] + 3.0*in[1] - 3.0;
│ │ │ │ +
83 out[6][0] = 0.0;
│ │ │ │ +
84 out[6][1] = sign_[3]*(in[1]);
│ │ │ │ +
85 out[7][0] = -3.0*in[0]*in[0] + 3.0*in[0];
│ │ │ │ +
86 out[7][1] = 6.0*in[0]*in[1] - 3.0*in[1];
│ │ │ │ +
87 }
│ │ │ │ +
│ │ │ │ +
88
│ │ │ │ +
│ │ │ │ +
95 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
96 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
97 {
│ │ │ │ +
98 out.resize(8);
│ │ │ │ +
99
│ │ │ │ +
100 out[0][0][0] = sign_[0];
│ │ │ │ +
101 out[0][0][1] = 0.0;
│ │ │ │ +
102 out[0][1][0] = 0.0;
│ │ │ │ +
103 out[0][1][1] = 0.0;
│ │ │ │ +
104
│ │ │ │ +
105 out[1][0][0] = 6.0*in[1] - 3.0;
│ │ │ │ +
106 out[1][0][1] = 6.0*in[0] - 6.0;
│ │ │ │ +
107 out[1][1][0] = 0.0;
│ │ │ │ +
108 out[1][1][1] = -6.0*in[1] + 3.0;
│ │ │ │ +
109
│ │ │ │ +
110 out[2][0][0] = sign_[1];
│ │ │ │ +
111 out[2][0][1] = 0.0;
│ │ │ │ +
112 out[2][1][0] = 0.0;
│ │ │ │ +
113 out[2][1][1] = 0.0;
│ │ │ │ +
114
│ │ │ │ +
115 out[3][0][0] = -6.0*in[1] + 3.0;
│ │ │ │ +
116 out[3][0][1] = -6.0*in[0];
│ │ │ │ +
117 out[3][1][0] = 0.0;
│ │ │ │ +
118 out[3][1][1] = 6.0*in[1] - 3.0;
│ │ │ │ +
119
│ │ │ │ +
120 out[4][0][0] = 0.0;
│ │ │ │ +
121 out[4][0][1] = 0.0;
│ │ │ │ +
122 out[4][1][0] = 0.0;
│ │ │ │ +
123 out[4][1][1] = sign_[2];
│ │ │ │ +
124
│ │ │ │ +
125 out[5][0][0] = 6.0*in[0] - 3.0;
│ │ │ │ +
126 out[5][0][1] = 0.0;
│ │ │ │ +
127 out[5][1][0] = -6.0*in[1] + 6.0;
│ │ │ │ +
128 out[5][1][1] = -6.0*in[0] + 3.0;
│ │ │ │ +
129
│ │ │ │ +
130 out[6][0][0] = 0.0;
│ │ │ │ +
131 out[6][0][1] = 0.0;
│ │ │ │ +
132 out[6][1][0] = 0.0;
│ │ │ │ +
133 out[6][1][1] = sign_[3];
│ │ │ │ +
134
│ │ │ │ +
135 out[7][0][0] = -6.0*in[0] + 3.0;
│ │ │ │ +
136 out[7][0][1] = 0.0;
│ │ │ │ +
137 out[7][1][0] = 6.0*in[1];
│ │ │ │ +
138 out[7][1][1] = 6.0*in[0] - 3.0;
│ │ │ │ +
139 }
│ │ │ │ +
│ │ │ │ +
140
│ │ │ │ +
│ │ │ │ +
142 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
143 const typename Traits::DomainType& in, // position
│ │ │ │ +
144 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
145 {
│ │ │ │ +
146 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
147 if (totalOrder == 0) {
│ │ │ │ +
148 evaluateFunction(in, out);
│ │ │ │ +
149 } else if (totalOrder == 1) {
│ │ │ │ +
150 out.resize(size());
│ │ │ │ +
151 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
152
│ │ │ │ +
153 switch (direction) {
│ │ │ │ +
154 case 0:
│ │ │ │ +
155 out[0][0] = sign_[0];
│ │ │ │ +
156 out[0][1] = 0.0;
│ │ │ │ +
157
│ │ │ │ +
158 out[1][0] = 6.0*in[1] - 3.0;
│ │ │ │ +
159 out[1][1] = 0.0;
│ │ │ │ +
160
│ │ │ │ +
161 out[2][0] = sign_[1];
│ │ │ │ +
162 out[2][1] = 0.0;
│ │ │ │ +
163
│ │ │ │ +
164 out[3][0] = -6.0*in[1] + 3.0;
│ │ │ │ +
165 out[3][1] = 0.0;
│ │ │ │ +
166
│ │ │ │ +
167 out[4][0] = 0.0;
│ │ │ │ +
168 out[4][1] = 0.0;
│ │ │ │ +
169
│ │ │ │ +
170 out[5][0] = 6.0*in[0] - 3.0;
│ │ │ │ +
171 out[5][1] = -6.0*in[1] + 6.0;
│ │ │ │ +
172
│ │ │ │ +
173 out[6][0] = 0.0;
│ │ │ │ +
174 out[6][1] = 0.0;
│ │ │ │ +
175
│ │ │ │ +
176 out[7][0] = -6.0*in[0] + 3.0;
│ │ │ │ +
177 out[7][1] = 6.0*in[1];
│ │ │ │ +
178 break;
│ │ │ │ +
179 case 1:
│ │ │ │ +
180 out[0][0] = 0.0;
│ │ │ │ +
181 out[0][1] = 0.0;
│ │ │ │ +
182
│ │ │ │ +
183 out[1][0] = 6.0*in[0] - 6.0;
│ │ │ │ +
184 out[1][1] = -6.0*in[1] + 3.0;
│ │ │ │ +
185
│ │ │ │ +
186 out[2][0] = 0.0;
│ │ │ │ +
187 out[2][1] = 0.0;
│ │ │ │ +
188
│ │ │ │ +
189 out[3][0] = -6.0*in[0];
│ │ │ │ +
190 out[3][1] = 6.0*in[1] - 3.0;
│ │ │ │ +
191
│ │ │ │ +
192 out[4][0] = 0.0;
│ │ │ │ +
193 out[4][1] = sign_[2];
│ │ │ │ +
194
│ │ │ │ +
195 out[5][0] = 0.0;
│ │ │ │ +
196 out[5][1] = -6.0*in[0] + 3.0;
│ │ │ │ +
197
│ │ │ │ +
198 out[6][0] = 0.0;
│ │ │ │ +
199 out[6][1] = sign_[3];
│ │ │ │ +
200
│ │ │ │ +
201 out[7][0] = 0.0;
│ │ │ │ +
202 out[7][1] = 6.0*in[0] - 3.0;
│ │ │ │ +
203 break;
│ │ │ │ +
204 default:
│ │ │ │ +
205 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
206 }
│ │ │ │ +
207 } else {
│ │ │ │ +
208 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
209 }
│ │ │ │ +
210 }
│ │ │ │ +
│ │ │ │ +
211
│ │ │ │ +
│ │ │ │ +
213 unsigned int order () const
│ │ │ │ +
214 {
│ │ │ │ +
215 return 2;
│ │ │ │ +
216 }
│ │ │ │ +
│ │ │ │ +
217
│ │ │ │ +
218 private:
│ │ │ │ +
219 std::array<R,4> sign_;
│ │ │ │ +
220 };
│ │ │ │ +
│ │ │ │ +
221}
│ │ │ │ +
222#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini1simplex2d.hh:28
│ │ │ │ -
Second order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2d.hh:27
│ │ │ │ -
Brezzi-Douglas-Marini local finite element for simplices.
Definition brezzidouglasmarinisimplex.hh:23
│ │ │ │ -
BrezziDouglasMariniSimplexLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinisimplex.hh:42
│ │ │ │ -
BrezziDouglasMariniSimplexLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinisimplex.hh:34
│ │ │ │ -
BrezziDouglasMariniSimplexLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinisimplex.hh:64
│ │ │ │ -
BrezziDouglasMariniSimplexLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinisimplex.hh:56
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:30
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:95
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:142
│ │ │ │ +
BDM1Cube2DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:37
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition brezzidouglasmarini1cube2dlocalbasis.hh:34
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini1cube2dlocalbasis.hh:55
│ │ │ │ +
BDM1Cube2DLocalBasis(std::bitset< 4 > s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:48
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:213
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:66
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,93 +1,255 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarinisimplex.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ +brezzidouglasmarini1cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ -10 │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -24 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ 28 template │ │ │ │ │ -_2_9 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -30 : public _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -31 { │ │ │ │ │ +_2_9 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +30 { │ │ │ │ │ +31 │ │ │ │ │ 32 public: │ │ │ │ │ -_3_4 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -35 {} │ │ │ │ │ -36 │ │ │ │ │ -_4_2 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -43 : _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -44 {} │ │ │ │ │ -45 }; │ │ │ │ │ -46 │ │ │ │ │ -50 template │ │ │ │ │ -_5_1 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -52 : public _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -53 { │ │ │ │ │ -54 public: │ │ │ │ │ -_5_6 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -57 {} │ │ │ │ │ -58 │ │ │ │ │ -_6_4 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -65 : _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -66 {} │ │ │ │ │ -67 }; │ │ │ │ │ -68 │ │ │ │ │ -69} // namespace Dune │ │ │ │ │ +33 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_4 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +35 │ │ │ │ │ +_3_7 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ +38 { │ │ │ │ │ +39 for (size_t i=0; i<4; i++) │ │ │ │ │ +40 sign_[i] = 1.0; │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ +_4_8 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ +49 { │ │ │ │ │ +50 for (size_t i=0; i<4; i++) │ │ │ │ │ +51 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_5 unsigned int _s_i_z_e () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return 8; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +67 std::vector& out) const │ │ │ │ │ +68 { │ │ │ │ │ +69 out.resize(8); │ │ │ │ │ 70 │ │ │ │ │ -71#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h │ │ │ │ │ +71 out[0][0] = sign_[0]*(in[0] - 1.0); │ │ │ │ │ +72 out[0][1] = 0.0; │ │ │ │ │ +73 out[1][0] = 6.0*in[0]*in[1] - 3.0*in[0]-6*in[1] + 3.0; │ │ │ │ │ +74 out[1][1] = -3.0*in[1]*in[1] + 3.0*in[1]; │ │ │ │ │ +75 out[2][0] = sign_[1]*(in[0]); │ │ │ │ │ +76 out[2][1] = 0.0; │ │ │ │ │ +77 out[3][0] = -6.0*in[0]*in[1] + 3.0*in[0]; │ │ │ │ │ +78 out[3][1] = 3.0*in[1]*in[1] - 3.0*in[1]; │ │ │ │ │ +79 out[4][0] = 0.0; │ │ │ │ │ +80 out[4][1] = sign_[2]*(in[1] - 1.0); │ │ │ │ │ +81 out[5][0] = 3.0*in[0]*in[0] - 3.0*in[0]; │ │ │ │ │ +82 out[5][1] = -6.0*in[0]*in[1] + 6.0*in[0] + 3.0*in[1] - 3.0; │ │ │ │ │ +83 out[6][0] = 0.0; │ │ │ │ │ +84 out[6][1] = sign_[3]*(in[1]); │ │ │ │ │ +85 out[7][0] = -3.0*in[0]*in[0] + 3.0*in[0]; │ │ │ │ │ +86 out[7][1] = 6.0*in[0]*in[1] - 3.0*in[1]; │ │ │ │ │ +87 } │ │ │ │ │ +88 │ │ │ │ │ +_9_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +96 std::vector& out) const │ │ │ │ │ +97 { │ │ │ │ │ +98 out.resize(8); │ │ │ │ │ +99 │ │ │ │ │ +100 out[0][0][0] = sign_[0]; │ │ │ │ │ +101 out[0][0][1] = 0.0; │ │ │ │ │ +102 out[0][1][0] = 0.0; │ │ │ │ │ +103 out[0][1][1] = 0.0; │ │ │ │ │ +104 │ │ │ │ │ +105 out[1][0][0] = 6.0*in[1] - 3.0; │ │ │ │ │ +106 out[1][0][1] = 6.0*in[0] - 6.0; │ │ │ │ │ +107 out[1][1][0] = 0.0; │ │ │ │ │ +108 out[1][1][1] = -6.0*in[1] + 3.0; │ │ │ │ │ +109 │ │ │ │ │ +110 out[2][0][0] = sign_[1]; │ │ │ │ │ +111 out[2][0][1] = 0.0; │ │ │ │ │ +112 out[2][1][0] = 0.0; │ │ │ │ │ +113 out[2][1][1] = 0.0; │ │ │ │ │ +114 │ │ │ │ │ +115 out[3][0][0] = -6.0*in[1] + 3.0; │ │ │ │ │ +116 out[3][0][1] = -6.0*in[0]; │ │ │ │ │ +117 out[3][1][0] = 0.0; │ │ │ │ │ +118 out[3][1][1] = 6.0*in[1] - 3.0; │ │ │ │ │ +119 │ │ │ │ │ +120 out[4][0][0] = 0.0; │ │ │ │ │ +121 out[4][0][1] = 0.0; │ │ │ │ │ +122 out[4][1][0] = 0.0; │ │ │ │ │ +123 out[4][1][1] = sign_[2]; │ │ │ │ │ +124 │ │ │ │ │ +125 out[5][0][0] = 6.0*in[0] - 3.0; │ │ │ │ │ +126 out[5][0][1] = 0.0; │ │ │ │ │ +127 out[5][1][0] = -6.0*in[1] + 6.0; │ │ │ │ │ +128 out[5][1][1] = -6.0*in[0] + 3.0; │ │ │ │ │ +129 │ │ │ │ │ +130 out[6][0][0] = 0.0; │ │ │ │ │ +131 out[6][0][1] = 0.0; │ │ │ │ │ +132 out[6][1][0] = 0.0; │ │ │ │ │ +133 out[6][1][1] = sign_[3]; │ │ │ │ │ +134 │ │ │ │ │ +135 out[7][0][0] = -6.0*in[0] + 3.0; │ │ │ │ │ +136 out[7][0][1] = 0.0; │ │ │ │ │ +137 out[7][1][0] = 6.0*in[1]; │ │ │ │ │ +138 out[7][1][1] = 6.0*in[0] - 3.0; │ │ │ │ │ +139 } │ │ │ │ │ +140 │ │ │ │ │ +_1_4_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +143 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +144 std::vector& out) const // return value │ │ │ │ │ +145 { │ │ │ │ │ +146 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +147 if (totalOrder == 0) { │ │ │ │ │ +148 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +149 } else if (totalOrder == 1) { │ │ │ │ │ +150 out.resize(_s_i_z_e()); │ │ │ │ │ +151 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +152 │ │ │ │ │ +153 switch (direction) { │ │ │ │ │ +154 case 0: │ │ │ │ │ +155 out[0][0] = sign_[0]; │ │ │ │ │ +156 out[0][1] = 0.0; │ │ │ │ │ +157 │ │ │ │ │ +158 out[1][0] = 6.0*in[1] - 3.0; │ │ │ │ │ +159 out[1][1] = 0.0; │ │ │ │ │ +160 │ │ │ │ │ +161 out[2][0] = sign_[1]; │ │ │ │ │ +162 out[2][1] = 0.0; │ │ │ │ │ +163 │ │ │ │ │ +164 out[3][0] = -6.0*in[1] + 3.0; │ │ │ │ │ +165 out[3][1] = 0.0; │ │ │ │ │ +166 │ │ │ │ │ +167 out[4][0] = 0.0; │ │ │ │ │ +168 out[4][1] = 0.0; │ │ │ │ │ +169 │ │ │ │ │ +170 out[5][0] = 6.0*in[0] - 3.0; │ │ │ │ │ +171 out[5][1] = -6.0*in[1] + 6.0; │ │ │ │ │ +172 │ │ │ │ │ +173 out[6][0] = 0.0; │ │ │ │ │ +174 out[6][1] = 0.0; │ │ │ │ │ +175 │ │ │ │ │ +176 out[7][0] = -6.0*in[0] + 3.0; │ │ │ │ │ +177 out[7][1] = 6.0*in[1]; │ │ │ │ │ +178 break; │ │ │ │ │ +179 case 1: │ │ │ │ │ +180 out[0][0] = 0.0; │ │ │ │ │ +181 out[0][1] = 0.0; │ │ │ │ │ +182 │ │ │ │ │ +183 out[1][0] = 6.0*in[0] - 6.0; │ │ │ │ │ +184 out[1][1] = -6.0*in[1] + 3.0; │ │ │ │ │ +185 │ │ │ │ │ +186 out[2][0] = 0.0; │ │ │ │ │ +187 out[2][1] = 0.0; │ │ │ │ │ +188 │ │ │ │ │ +189 out[3][0] = -6.0*in[0]; │ │ │ │ │ +190 out[3][1] = 6.0*in[1] - 3.0; │ │ │ │ │ +191 │ │ │ │ │ +192 out[4][0] = 0.0; │ │ │ │ │ +193 out[4][1] = sign_[2]; │ │ │ │ │ +194 │ │ │ │ │ +195 out[5][0] = 0.0; │ │ │ │ │ +196 out[5][1] = -6.0*in[0] + 3.0; │ │ │ │ │ +197 │ │ │ │ │ +198 out[6][0] = 0.0; │ │ │ │ │ +199 out[6][1] = sign_[3]; │ │ │ │ │ +200 │ │ │ │ │ +201 out[7][0] = 0.0; │ │ │ │ │ +202 out[7][1] = 6.0*in[0] - 3.0; │ │ │ │ │ +203 break; │ │ │ │ │ +204 default: │ │ │ │ │ +205 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +206 } │ │ │ │ │ +207 } else { │ │ │ │ │ +208 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +209 } │ │ │ │ │ +210 } │ │ │ │ │ +211 │ │ │ │ │ +_2_1_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ +214 { │ │ │ │ │ +215 return 2; │ │ │ │ │ +216 } │ │ │ │ │ +217 │ │ │ │ │ +218 private: │ │ │ │ │ +219 std::array sign_; │ │ │ │ │ +220 }; │ │ │ │ │ +221} │ │ │ │ │ +222#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Brezzi-Douglas-Marini local finite element for simplices. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniSimplexLocalFiniteElement(int s) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniSimplexLocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniSimplexLocalFiniteElement(int s) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:64 │ │ │ │ │ -_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BrezziDouglasMariniSimplexLocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ +quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:142 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM1Cube2DLocalBasis() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM1Cube2DLocalBasis(std::bitset< 4 > s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:213 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube3DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. More...
class  Dune::BDM1Cube2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00077_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,79 +70,139 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalcoefficients.hh
│ │ │ │ +
brezzidouglasmarini1cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i = 0; i < 6; ++i)
│ │ │ │ -
31 {
│ │ │ │ -
32 li[i] = LocalKey(i,1,0);
│ │ │ │ -
33 li[i + 6] = LocalKey(i,1,1);
│ │ │ │ -
34 li[i + 12] = LocalKey(i,1,2);
│ │ │ │ -
35 }
│ │ │ │ -
36 }
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ +
32 }
│ │ │ │
│ │ │ │ -
37
│ │ │ │ +
33
│ │ │ │
│ │ │ │ -
39 std::size_t size() const
│ │ │ │ -
40 {
│ │ │ │ -
41 return 18;
│ │ │ │ -
42 }
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
45 const LocalKey& localKey(std::size_t i) const
│ │ │ │ -
46 {
│ │ │ │ -
47 return li[i];
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
50 private:
│ │ │ │ -
51 std::vector<LocalKey> li;
│ │ │ │ -
52 };
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ +
42 if (s & 1)
│ │ │ │ +
43 {
│ │ │ │ +
44 sign0 = -1.0;
│ │ │ │ +
45 }
│ │ │ │ +
46 if (s & 2)
│ │ │ │ +
47 {
│ │ │ │ +
48 sign1 = -1.0;
│ │ │ │ +
49 }
│ │ │ │ +
50 if (s & 4)
│ │ │ │ +
51 {
│ │ │ │ +
52 sign2 = -1.0;
│ │ │ │ +
53 }
│ │ │ │ +
54 if (s & 8)
│ │ │ │ +
55 {
│ │ │ │ +
56 sign3 = -1.0;
│ │ │ │ +
57 }
│ │ │ │ +
58
│ │ │ │ +
59 n0[0] = -1.0;
│ │ │ │ +
60 n0[1] = 0.0;
│ │ │ │ +
61 n1[0] = 1.0;
│ │ │ │ +
62 n1[1] = 0.0;
│ │ │ │ +
63 n2[0] = 0.0;
│ │ │ │ +
64 n2[1] = -1.0;
│ │ │ │ +
65 n3[0] = 0.0;
│ │ │ │ +
66 n3[1] = 1.0;
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │ +
68
│ │ │ │ +
77 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
78 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
79 {
│ │ │ │ +
80 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
81 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
82 //typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
83
│ │ │ │ +
84 out.resize(8);
│ │ │ │ +
85 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
86
│ │ │ │ +
87 const int qOrder = 4;
│ │ │ │ +
88 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
89
│ │ │ │ +
90 for (typename QuadratureRule<Scalar,1>::const_iterator it = rule.begin();
│ │ │ │ +
91 it != rule.end(); ++it)
│ │ │ │ +
92 {
│ │ │ │ +
93 Scalar qPos = it->position();
│ │ │ │ +
94 typename LB::Traits::DomainType localPos;
│ │ │ │ +
95
│ │ │ │ +
96 localPos[0] = 0.0;
│ │ │ │ +
97 localPos[1] = qPos;
│ │ │ │ +
98 auto y = f(localPos);
│ │ │ │ +
99 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0;
│ │ │ │ +
100 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
101
│ │ │ │ +
102 localPos[0] = 1.0;
│ │ │ │ +
103 localPos[1] = qPos;
│ │ │ │ +
104 y = f(localPos);
│ │ │ │ +
105 out[2] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1;
│ │ │ │ +
106 out[3] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
107
│ │ │ │ +
108 localPos[0] = qPos;
│ │ │ │ +
109 localPos[1] = 0.0;
│ │ │ │ +
110 y = f(localPos);
│ │ │ │ +
111 out[4] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2;
│ │ │ │ +
112 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
113
│ │ │ │ +
114 localPos[0] = qPos;
│ │ │ │ +
115 localPos[1] = 1.0;
│ │ │ │ +
116 y = f(localPos);
│ │ │ │ +
117 out[6] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3;
│ │ │ │ +
118 out[7] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
119 }
│ │ │ │ +
120 }
│ │ │ │ +
│ │ │ │ +
121
│ │ │ │ +
122 private:
│ │ │ │ +
123 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3;
│ │ │ │ +
124 typename LB::Traits::DomainType n0, n1, n2, n3;
│ │ │ │ +
125 };
│ │ │ │
│ │ │ │ -
53} // end namespace Dune
│ │ │ │ -
54#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
126}
│ │ │ │ +
127#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:24
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:39
│ │ │ │ -
BDM1Cube3DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:45
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:25
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:78
│ │ │ │ +
BDM1Cube2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:39
│ │ │ │ +
BDM1Cube2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:29
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,78 +1,138 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ -brezzidouglasmarini1cube3dlocalcoefficients.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d │ │ │ │ │ +brezzidouglasmarini1cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_3 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() : li(18) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i = 0; i < 6; ++i) │ │ │ │ │ -31 { │ │ │ │ │ -32 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -33 li[i + 6] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -34 li[i + 12] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -35 } │ │ │ │ │ -36 } │ │ │ │ │ -37 │ │ │ │ │ -_3_9 std::size_t _s_i_z_e() const │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +_2_9 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () │ │ │ │ │ +30 { │ │ │ │ │ +31 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s) │ │ │ │ │ 40 { │ │ │ │ │ -41 return 18; │ │ │ │ │ -42 } │ │ │ │ │ -43 │ │ │ │ │ -_4_5 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const │ │ │ │ │ -46 { │ │ │ │ │ -47 return li[i]; │ │ │ │ │ -48 } │ │ │ │ │ -49 │ │ │ │ │ -50 private: │ │ │ │ │ -51 std::vector li; │ │ │ │ │ -52 }; │ │ │ │ │ -53} // end namespace Dune │ │ │ │ │ -54#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +41 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ +42 if (s & 1) │ │ │ │ │ +43 { │ │ │ │ │ +44 sign0 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 if (s & 2) │ │ │ │ │ +47 { │ │ │ │ │ +48 sign1 = -1.0; │ │ │ │ │ +49 } │ │ │ │ │ +50 if (s & 4) │ │ │ │ │ +51 { │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ +53 } │ │ │ │ │ +54 if (s & 8) │ │ │ │ │ +55 { │ │ │ │ │ +56 sign3 = -1.0; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 n0[0] = -1.0; │ │ │ │ │ +60 n0[1] = 0.0; │ │ │ │ │ +61 n1[0] = 1.0; │ │ │ │ │ +62 n1[1] = 0.0; │ │ │ │ │ +63 n2[0] = 0.0; │ │ │ │ │ +64 n2[1] = -1.0; │ │ │ │ │ +65 n3[0] = 0.0; │ │ │ │ │ +66 n3[1] = 1.0; │ │ │ │ │ +67 } │ │ │ │ │ +68 │ │ │ │ │ +77 template │ │ │ │ │ +_7_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +79 { │ │ │ │ │ +80 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +81 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +82 //typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +83 │ │ │ │ │ +84 out.resize(8); │ │ │ │ │ +85 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +86 │ │ │ │ │ +87 const int qOrder = 4; │ │ │ │ │ +88 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(1), qOrder); │ │ │ │ │ +89 │ │ │ │ │ +90 for (typename QuadratureRule::const_iterator it = rule.begin(); │ │ │ │ │ +91 it != rule.end(); ++it) │ │ │ │ │ +92 { │ │ │ │ │ +93 Scalar qPos = it->position(); │ │ │ │ │ +94 typename LB::Traits::DomainType localPos; │ │ │ │ │ +95 │ │ │ │ │ +96 localPos[0] = 0.0; │ │ │ │ │ +97 localPos[1] = qPos; │ │ │ │ │ +98 auto y = f(localPos); │ │ │ │ │ +99 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0; │ │ │ │ │ +100 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +101 │ │ │ │ │ +102 localPos[0] = 1.0; │ │ │ │ │ +103 localPos[1] = qPos; │ │ │ │ │ +104 y = f(localPos); │ │ │ │ │ +105 out[2] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1; │ │ │ │ │ +106 out[3] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +107 │ │ │ │ │ +108 localPos[0] = qPos; │ │ │ │ │ +109 localPos[1] = 0.0; │ │ │ │ │ +110 y = f(localPos); │ │ │ │ │ +111 out[4] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2; │ │ │ │ │ +112 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +113 │ │ │ │ │ +114 localPos[0] = qPos; │ │ │ │ │ +115 localPos[1] = 1.0; │ │ │ │ │ +116 y = f(localPos); │ │ │ │ │ +117 out[6] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3; │ │ │ │ │ +118 out[7] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +119 } │ │ │ │ │ +120 } │ │ │ │ │ +121 │ │ │ │ │ +122 private: │ │ │ │ │ +123 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3; │ │ │ │ │ +124 typename LB::Traits::DomainType n0, n1, n2, n3; │ │ │ │ │ +125 }; │ │ │ │ │ +126} │ │ │ │ │ +127#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -BDM1Cube3DLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ +quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Cube2DLocalInterpolation(unsigned int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Cube2DLocalInterpolation() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:29 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalbasis.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube3DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. More...
class  Dune::BDM1Cube3DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +brezzidouglasmarini1cube3d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - hexahedron. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00080_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,322 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalbasis.hh
│ │ │ │ +
brezzidouglasmarini1cube3d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <bitset>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
15#include "../../common/localbasis.hh"
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
29 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ -
32
│ │ │ │ -
33 public:
│ │ │ │ - │ │ │ │ -
35 R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
36 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {
│ │ │ │ -
41 for (size_t i=0; i<6; i++)
│ │ │ │ -
42 sign_[i] = 1.0;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
50 BDM1Cube3DLocalBasis(std::bitset<6> s)
│ │ │ │ -
51 {
│ │ │ │ -
52 for (size_t i=0; i<6; i++)
│ │ │ │ -
53 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ -
57 unsigned int size() const
│ │ │ │ -
58 {
│ │ │ │ -
59 return 18;
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
68 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
69 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
70 {
│ │ │ │ -
71 out.resize(size());
│ │ │ │ -
72
│ │ │ │ -
73 out[0][0] = sign_[0] * (in[0] - 1.0);
│ │ │ │ -
74 out[0][1] = 0;
│ │ │ │ -
75 out[0][2] = 0;
│ │ │ │ -
76 out[1][0] = sign_[1] * in[0];
│ │ │ │ -
77 out[1][1] = 0;
│ │ │ │ -
78 out[1][2] = 0;
│ │ │ │ -
79 out[2][0] = 0;
│ │ │ │ -
80 out[2][1] = sign_[2] * (in[1] - 1.0);
│ │ │ │ -
81 out[2][2] = 0;
│ │ │ │ -
82 out[3][0] = 0;
│ │ │ │ -
83 out[3][1] = sign_[3] * in[1];
│ │ │ │ -
84 out[3][2] = 0;
│ │ │ │ -
85 out[4][0] = 0;
│ │ │ │ -
86 out[4][1] = 0;
│ │ │ │ -
87 out[4][2] = sign_[4] * (in[2] - 1.0);
│ │ │ │ -
88 out[5][0] = 0;
│ │ │ │ -
89 out[5][1] = 0;
│ │ │ │ -
90 out[5][2] = sign_[5] * in[2];
│ │ │ │ -
91 out[6][0] = 6.0 * in[0] * in[1] - 3 * in[0]-6 * in[1] + 3.0;
│ │ │ │ -
92 out[6][1] = -3.0 * in[1] * in[1] + 3 * in[1];
│ │ │ │ -
93 out[6][2] = 0;
│ │ │ │ -
94 out[7][0] = -6.0 * in[0] * in[1] + 3 * in[0];
│ │ │ │ -
95 out[7][1] = 3.0 * in[1] * in[1] - 3 * in[1];
│ │ │ │ -
96 out[7][2] = 0;
│ │ │ │ -
97 out[8][0] = 3.0 * in[0] * in[0] - 3 * in[0];
│ │ │ │ -
98 out[8][1] = -6.0 * in[0] * in[1] + 3 * in[1]+6 * in[0]-3.0;
│ │ │ │ -
99 out[8][2] = 0;
│ │ │ │ -
100 out[9][0] = -3.0 * in[0] * in[0] + 3 * in[0];
│ │ │ │ -
101 out[9][1] = 6.0 * in[0] * in[1] - 3 * in[1];
│ │ │ │ -
102 out[9][2] = 0;
│ │ │ │ -
103 out[10][0] = -3.0 * in[0] * in[0] + 3 * in[0];
│ │ │ │ -
104 out[10][1] = 0;
│ │ │ │ -
105 out[10][2] = 6.0 * in[0] * in[2]-6 * in[0]-3 * in[2] + 3.0;
│ │ │ │ -
106 out[11][0] = 3.0 * in[0] * in[0]-3 * in[0];
│ │ │ │ -
107 out[11][1] = 0;
│ │ │ │ -
108 out[11][2] = -6.0 * in[0] * in[2] + 3 * in[2];
│ │ │ │ -
109 out[12][0] = -6.0 * in[0] * in[2]+6 * in[2] + 3 * in[0]-3.0;
│ │ │ │ -
110 out[12][1] = 0;
│ │ │ │ -
111 out[12][2] = 3.0 * in[2] * in[2]-3 * in[2];
│ │ │ │ -
112 out[13][0] = -3 * in[0]+6 * in[0] * in[2];
│ │ │ │ -
113 out[13][1] = 0;
│ │ │ │ -
114 out[13][2] = -3.0 * in[2] * in[2] + 3 * in[2];
│ │ │ │ -
115 out[14][0] = 0;
│ │ │ │ -
116 out[14][1] = 6.0 * in[1] * in[2]-3 * in[1]-6 * in[2] + 3.0;
│ │ │ │ -
117 out[14][2] = -3 * in[2] * in[2] + 3 * in[2];
│ │ │ │ -
118 out[15][0] = 0;
│ │ │ │ -
119 out[15][1] = -6.0 * in[1] * in[2] + 3 * in[1];
│ │ │ │ -
120 out[15][2] = 3.0 * in[2] * in[2]-3 * in[2];
│ │ │ │ -
121 out[16][0] = 0;
│ │ │ │ -
122 out[16][1] = 3.0 * in[1] * in[1]-3 * in[1];
│ │ │ │ -
123 out[16][2] = -6.0 * in[1] * in[2] + 3 * in[2]+6 * in[1]-3.0;
│ │ │ │ -
124 out[17][0] = 0;
│ │ │ │ -
125 out[17][1] = -3.0 * in[1] * in[1] + 3 * in[1];
│ │ │ │ -
126 out[17][2] = 6.0 * in[1] * in[2] - 3.0 * in[2];
│ │ │ │ -
127 }
│ │ │ │ -
│ │ │ │ -
128
│ │ │ │ -
│ │ │ │ -
135 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
136 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
137 {
│ │ │ │ -
138 out.resize(size());
│ │ │ │ -
139
│ │ │ │ -
140 out[0][0] = { sign_[0], 0, 0};
│ │ │ │ -
141 out[0][1] = { 0, 0, 0};
│ │ │ │ -
142 out[0][2] = { 0, 0, 0};
│ │ │ │ -
143
│ │ │ │ -
144 out[1][0] = { sign_[1], 0, 0};
│ │ │ │ -
145 out[1][1] = { 0, 0, 0};
│ │ │ │ -
146 out[1][2] = { 0, 0, 0};
│ │ │ │ -
147
│ │ │ │ -
148 out[2][0] = { 0, 0, 0};
│ │ │ │ -
149 out[2][1] = { 0, sign_[2], 0};
│ │ │ │ -
150 out[2][2] = { 0, 0, 0};
│ │ │ │ -
151
│ │ │ │ -
152 out[3][0] = { 0, 0, 0};
│ │ │ │ -
153 out[3][1] = { 0, sign_[3], 0};
│ │ │ │ -
154 out[3][2] = { 0, 0, 0};
│ │ │ │ -
155
│ │ │ │ -
156 out[4][0] = { 0, 0, 0};
│ │ │ │ -
157 out[4][1] = { 0, 0, 0};
│ │ │ │ -
158 out[4][2] = { 0, 0, sign_[4]};
│ │ │ │ -
159
│ │ │ │ -
160 out[5][0] = { 0, 0, 0};
│ │ │ │ -
161 out[5][1] = { 0, 0, 0};
│ │ │ │ -
162 out[5][2] = { 0, 0, sign_[5]};
│ │ │ │ -
163
│ │ │ │ -
164 out[6][0] = { 6*in[1]-3, 6*in[0]-6, 0};
│ │ │ │ -
165 out[6][1] = { 0, -6*in[1]+3, 0};
│ │ │ │ -
166 out[6][2] = { 0, 0, 0};
│ │ │ │ -
167
│ │ │ │ -
168 out[7][0] = {-6*in[1]+3, -6*in[0], 0};
│ │ │ │ -
169 out[7][1] = { 0, 6*in[1]-3, 0};
│ │ │ │ -
170 out[7][2] = { 0, 0, 0};
│ │ │ │ -
171
│ │ │ │ -
172 out[8][0] = { 6*in[0]-3, 0, 0};
│ │ │ │ -
173 out[8][1] = {-6*in[1]+6, -6*in[0]+3, 0};
│ │ │ │ -
174 out[8][2] = { 0, 0, 0};
│ │ │ │ -
175
│ │ │ │ -
176 out[9][0] = {-6*in[0]+3, 0, 0};
│ │ │ │ -
177 out[9][1] = { 6*in[1], 6*in[0]-3, 0};
│ │ │ │ -
178 out[9][2] = { 0, 0, 0};
│ │ │ │ -
179
│ │ │ │ -
180 out[10][0] = {-6*in[0]+3, 0, 0};
│ │ │ │ -
181 out[10][1] = { 0, 0, 0};
│ │ │ │ -
182 out[10][2] = { 6*in[2]-6, 0, 6*in[0]-3};
│ │ │ │ -
183
│ │ │ │ -
184 out[11][0] = { 6*in[0]-3, 0, 0};
│ │ │ │ -
185 out[11][1] = { 0, 0, 0};
│ │ │ │ -
186 out[11][2] = { -6*in[2], 0, -6*in[0]+3};
│ │ │ │ -
187
│ │ │ │ -
188 out[12][0] = {-6*in[2]+3, 0, -6*in[0]+6};
│ │ │ │ -
189 out[12][1] = { 0, 0, 0};
│ │ │ │ -
190 out[12][2] = { 0, 0, 6*in[2]-3};
│ │ │ │ -
191
│ │ │ │ -
192 out[13][0] = { 6*in[2]-3, 0, 6*in[0]};
│ │ │ │ -
193 out[13][1] = { 0, 0, 0};
│ │ │ │ -
194 out[13][2] = { 0, 0, -6*in[2]+3};
│ │ │ │ -
195
│ │ │ │ -
196 out[14][0] = { 0, 0, 0};
│ │ │ │ -
197 out[14][1] = { 0, 6*in[2]-3, 6*in[1]-6};
│ │ │ │ -
198 out[14][2] = { 0, 0, -6*in[2]+3};
│ │ │ │ -
199
│ │ │ │ -
200 out[15][0] = { 0, 0, 0};
│ │ │ │ -
201 out[15][1] = { 0, -6*in[2]+3, -6*in[1]};
│ │ │ │ -
202 out[15][2] = { 0, 0, 6*in[2]-3};
│ │ │ │ -
203
│ │ │ │ -
204 out[16][0] = { 0, 0, 0};
│ │ │ │ -
205 out[16][1] = { 0, 6*in[1]-3, 0};
│ │ │ │ -
206 out[16][2] = { 0, -6*in[2]+6, -6*in[1]+3};
│ │ │ │ -
207
│ │ │ │ -
208 out[17][0] = { 0, 0, 0};
│ │ │ │ -
209 out[17][1] = { 0, -6*in[1]+3, 0};
│ │ │ │ -
210 out[17][2] = { 0, 6*in[2], 6*in[1]-3};
│ │ │ │ -
211 }
│ │ │ │ -
│ │ │ │ -
212
│ │ │ │ -
│ │ │ │ -
214 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
215 const typename Traits::DomainType& in, // position
│ │ │ │ -
216 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
217 {
│ │ │ │ -
218 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
219 if (totalOrder == 0) {
│ │ │ │ -
220 evaluateFunction(in, out);
│ │ │ │ -
221 } else if (totalOrder == 1) {
│ │ │ │ -
222 out.resize(size());
│ │ │ │ -
223 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
224
│ │ │ │ -
225 switch (direction) {
│ │ │ │ -
226 case 0:
│ │ │ │ -
227 out[0] = { sign_[0], 0, 0};
│ │ │ │ -
228 out[1] = { sign_[1], 0, 0};
│ │ │ │ -
229 out[2] = { 0, 0, 0};
│ │ │ │ -
230 out[3] = { 0, 0, 0};
│ │ │ │ -
231 out[4] = { 0, 0, 0};
│ │ │ │ -
232 out[5] = { 0, 0, 0};
│ │ │ │ -
233 out[6] = { 6*in[1]-3, 0, 0};
│ │ │ │ -
234 out[7] = {-6*in[1]+3, 0, 0};
│ │ │ │ -
235 out[8] = { 6*in[0]-3, -6*in[1]+6, 0};
│ │ │ │ -
236 out[9] = {-6*in[0]+3, 6*in[1], 0};
│ │ │ │ -
237 out[10] = {-6*in[0]+3, 0, 6*in[2]-6};
│ │ │ │ -
238 out[11] = { 6*in[0]-3, 0, -6*in[2]};
│ │ │ │ -
239 out[12] = {-6*in[2]+3, 0, 0};
│ │ │ │ -
240 out[13] = { 6*in[2]-3, 0, 0};
│ │ │ │ -
241 out[14] = { 0, 0, 0};
│ │ │ │ -
242 out[15] = { 0, 0, 0};
│ │ │ │ -
243 out[16] = { 0, 0, 0};
│ │ │ │ -
244 out[17] = { 0, 0, 0};
│ │ │ │ -
245 break;
│ │ │ │ -
246 case 1:
│ │ │ │ -
247 out[0] = { 0, 0, 0};
│ │ │ │ -
248 out[1] = { 0, 0, 0};
│ │ │ │ -
249 out[2] = { 0, sign_[2], 0};
│ │ │ │ -
250 out[3] = { 0, sign_[3], 0};
│ │ │ │ -
251 out[4] = { 0, 0, 0};
│ │ │ │ -
252 out[5] = { 0, 0, 0};
│ │ │ │ -
253 out[6] = { 6*in[0]-6, -6*in[1]+3, 0};
│ │ │ │ -
254 out[7] = { -6*in[0], 6*in[1]-3, 0};
│ │ │ │ -
255 out[8] = { 0, -6*in[0]+3, 0};
│ │ │ │ -
256 out[9] = { 0, 6*in[0]-3, 0};
│ │ │ │ -
257 out[10] = { 0, 0, 0};
│ │ │ │ -
258 out[11] = { 0, 0, 0};
│ │ │ │ -
259 out[12] = { 0, 0, 0};
│ │ │ │ -
260 out[13] = { 0, 0, 0};
│ │ │ │ -
261 out[14] = { 0, 6*in[2]-3, 0};
│ │ │ │ -
262 out[15] = { 0, -6*in[2]+3, 0};
│ │ │ │ -
263 out[16] = { 0, 6*in[1]-3, -6*in[2]+6};
│ │ │ │ -
264 out[17] = { 0, -6*in[1]+3, 6*in[2]};
│ │ │ │ -
265 break;
│ │ │ │ -
266 case 2:
│ │ │ │ -
267 out[0] = { 0, 0, 0};
│ │ │ │ -
268 out[1] = { 0, 0, 0};
│ │ │ │ -
269 out[2] = { 0, 0, 0};
│ │ │ │ -
270 out[3] = { 0, 0, 0};
│ │ │ │ -
271 out[4] = { 0, 0, sign_[4]};
│ │ │ │ -
272 out[5] = { 0, 0, sign_[5]};
│ │ │ │ -
273 out[6] = { 0, 0, 0};
│ │ │ │ -
274 out[7] = { 0, 0, 0};
│ │ │ │ -
275 out[8] = { 0, 0, 0};
│ │ │ │ -
276 out[9] = { 0, 0, 0};
│ │ │ │ -
277 out[10] = { 0, 0, 6*in[0]-3};
│ │ │ │ -
278 out[11] = { 0, 0, -6*in[0]+3};
│ │ │ │ -
279 out[12] = {-6*in[0]+6, 0, 6*in[2]-3};
│ │ │ │ -
280 out[13] = { 6*in[0], 0, -6*in[2]+3};
│ │ │ │ -
281 out[14] = { 0, 6*in[1]-6, -6*in[2]+3};
│ │ │ │ -
282 out[15] = { 0, -6*in[1], 6*in[2]-3};
│ │ │ │ -
283 out[16] = { 0, 0, -6*in[1]+3};
│ │ │ │ -
284 out[17] = { 0, 0, 6*in[1]-3};
│ │ │ │ -
285 break;
│ │ │ │ -
286 default:
│ │ │ │ -
287 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
288 }
│ │ │ │ -
289 } else {
│ │ │ │ -
290 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
291 }
│ │ │ │ -
292 }
│ │ │ │ -
│ │ │ │ -
293
│ │ │ │ -
│ │ │ │ -
295 unsigned int order() const
│ │ │ │ -
296 {
│ │ │ │ -
297 return 2;
│ │ │ │ -
298 }
│ │ │ │ -
│ │ │ │ -
299
│ │ │ │ -
300 private:
│ │ │ │ -
301 std::array<R,6> sign_;
│ │ │ │ -
302 };
│ │ │ │ -
│ │ │ │ -
303} // end namespace Dune
│ │ │ │ -
304#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 : basis(s)
│ │ │ │ +
46 , interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::hexahedron;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 BDM1Cube3DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80} // end namespace Dune
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on hexahedron.
Definition brezzidouglasmarini1cube3d.hh:27
│ │ │ │ +
BDM1Cube3DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1cube3d.hh:36
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1cube3d.hh:65
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1cube3d.hh:54
│ │ │ │ +
static constexpr GeometryType type()
Definition brezzidouglasmarini1cube3d.hh:70
│ │ │ │ +
LocalFiniteElementTraits< BDM1Cube3DLocalBasis< D, R >, BDM1Cube3DLocalCoefficients, BDM1Cube3DLocalInterpolation< BDM1Cube3DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1cube3d.hh:33
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1cube3d.hh:59
│ │ │ │ +
BDM1Cube3DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3d.hh:44
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1cube3d.hh:49
│ │ │ │
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:31
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:135
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:68
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition brezzidouglasmarini1cube3dlocalbasis.hh:36
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:214
│ │ │ │ -
BDM1Cube3DLocalBasis(std::bitset< 6 > s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:50
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:295
│ │ │ │ -
BDM1Cube3DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:39
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini1cube3dlocalbasis.hh:57
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:26
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,334 +1,139 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ -brezzidouglasmarini1cube3dlocalbasis.hh │ │ │ │ │ +brezzidouglasmarini1cube3d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -15#include "../../common/localbasis.hh" │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -31 { │ │ │ │ │ -32 │ │ │ │ │ -33 public: │ │ │ │ │ -34 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>, │ │ │ │ │ -35 R,3,Dune::FieldVector, │ │ │ │ │ -_3_6 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -37 │ │ │ │ │ -_3_9 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ -40 { │ │ │ │ │ -41 for (size_t i=0; i<6; i++) │ │ │ │ │ -42 sign_[i] = 1.0; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_5_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s(std::bitset<6> s) │ │ │ │ │ -51 { │ │ │ │ │ -52 for (size_t i=0; i<6; i++) │ │ │ │ │ -53 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_7 unsigned int _s_i_z_e() const │ │ │ │ │ -58 { │ │ │ │ │ -59 return 18; │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_8 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -69 std::vector& out) const │ │ │ │ │ -70 { │ │ │ │ │ -71 out.resize(_s_i_z_e()); │ │ │ │ │ -72 │ │ │ │ │ -73 out[0][0] = sign_[0] * (in[0] - 1.0); │ │ │ │ │ -74 out[0][1] = 0; │ │ │ │ │ -75 out[0][2] = 0; │ │ │ │ │ -76 out[1][0] = sign_[1] * in[0]; │ │ │ │ │ -77 out[1][1] = 0; │ │ │ │ │ -78 out[1][2] = 0; │ │ │ │ │ -79 out[2][0] = 0; │ │ │ │ │ -80 out[2][1] = sign_[2] * (in[1] - 1.0); │ │ │ │ │ -81 out[2][2] = 0; │ │ │ │ │ -82 out[3][0] = 0; │ │ │ │ │ -83 out[3][1] = sign_[3] * in[1]; │ │ │ │ │ -84 out[3][2] = 0; │ │ │ │ │ -85 out[4][0] = 0; │ │ │ │ │ -86 out[4][1] = 0; │ │ │ │ │ -87 out[4][2] = sign_[4] * (in[2] - 1.0); │ │ │ │ │ -88 out[5][0] = 0; │ │ │ │ │ -89 out[5][1] = 0; │ │ │ │ │ -90 out[5][2] = sign_[5] * in[2]; │ │ │ │ │ -91 out[6][0] = 6.0 * in[0] * in[1] - 3 * in[0]-6 * in[1] + 3.0; │ │ │ │ │ -92 out[6][1] = -3.0 * in[1] * in[1] + 3 * in[1]; │ │ │ │ │ -93 out[6][2] = 0; │ │ │ │ │ -94 out[7][0] = -6.0 * in[0] * in[1] + 3 * in[0]; │ │ │ │ │ -95 out[7][1] = 3.0 * in[1] * in[1] - 3 * in[1]; │ │ │ │ │ -96 out[7][2] = 0; │ │ │ │ │ -97 out[8][0] = 3.0 * in[0] * in[0] - 3 * in[0]; │ │ │ │ │ -98 out[8][1] = -6.0 * in[0] * in[1] + 3 * in[1]+6 * in[0]-3.0; │ │ │ │ │ -99 out[8][2] = 0; │ │ │ │ │ -100 out[9][0] = -3.0 * in[0] * in[0] + 3 * in[0]; │ │ │ │ │ -101 out[9][1] = 6.0 * in[0] * in[1] - 3 * in[1]; │ │ │ │ │ -102 out[9][2] = 0; │ │ │ │ │ -103 out[10][0] = -3.0 * in[0] * in[0] + 3 * in[0]; │ │ │ │ │ -104 out[10][1] = 0; │ │ │ │ │ -105 out[10][2] = 6.0 * in[0] * in[2]-6 * in[0]-3 * in[2] + 3.0; │ │ │ │ │ -106 out[11][0] = 3.0 * in[0] * in[0]-3 * in[0]; │ │ │ │ │ -107 out[11][1] = 0; │ │ │ │ │ -108 out[11][2] = -6.0 * in[0] * in[2] + 3 * in[2]; │ │ │ │ │ -109 out[12][0] = -6.0 * in[0] * in[2]+6 * in[2] + 3 * in[0]-3.0; │ │ │ │ │ -110 out[12][1] = 0; │ │ │ │ │ -111 out[12][2] = 3.0 * in[2] * in[2]-3 * in[2]; │ │ │ │ │ -112 out[13][0] = -3 * in[0]+6 * in[0] * in[2]; │ │ │ │ │ -113 out[13][1] = 0; │ │ │ │ │ -114 out[13][2] = -3.0 * in[2] * in[2] + 3 * in[2]; │ │ │ │ │ -115 out[14][0] = 0; │ │ │ │ │ -116 out[14][1] = 6.0 * in[1] * in[2]-3 * in[1]-6 * in[2] + 3.0; │ │ │ │ │ -117 out[14][2] = -3 * in[2] * in[2] + 3 * in[2]; │ │ │ │ │ -118 out[15][0] = 0; │ │ │ │ │ -119 out[15][1] = -6.0 * in[1] * in[2] + 3 * in[1]; │ │ │ │ │ -120 out[15][2] = 3.0 * in[2] * in[2]-3 * in[2]; │ │ │ │ │ -121 out[16][0] = 0; │ │ │ │ │ -122 out[16][1] = 3.0 * in[1] * in[1]-3 * in[1]; │ │ │ │ │ -123 out[16][2] = -6.0 * in[1] * in[2] + 3 * in[2]+6 * in[1]-3.0; │ │ │ │ │ -124 out[17][0] = 0; │ │ │ │ │ -125 out[17][1] = -3.0 * in[1] * in[1] + 3 * in[1]; │ │ │ │ │ -126 out[17][2] = 6.0 * in[1] * in[2] - 3.0 * in[2]; │ │ │ │ │ -127 } │ │ │ │ │ -128 │ │ │ │ │ -_1_3_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -136 std::vector& out) const │ │ │ │ │ -137 { │ │ │ │ │ -138 out.resize(_s_i_z_e()); │ │ │ │ │ -139 │ │ │ │ │ -140 out[0][0] = { sign_[0], 0, 0}; │ │ │ │ │ -141 out[0][1] = { 0, 0, 0}; │ │ │ │ │ -142 out[0][2] = { 0, 0, 0}; │ │ │ │ │ -143 │ │ │ │ │ -144 out[1][0] = { sign_[1], 0, 0}; │ │ │ │ │ -145 out[1][1] = { 0, 0, 0}; │ │ │ │ │ -146 out[1][2] = { 0, 0, 0}; │ │ │ │ │ -147 │ │ │ │ │ -148 out[2][0] = { 0, 0, 0}; │ │ │ │ │ -149 out[2][1] = { 0, sign_[2], 0}; │ │ │ │ │ -150 out[2][2] = { 0, 0, 0}; │ │ │ │ │ -151 │ │ │ │ │ -152 out[3][0] = { 0, 0, 0}; │ │ │ │ │ -153 out[3][1] = { 0, sign_[3], 0}; │ │ │ │ │ -154 out[3][2] = { 0, 0, 0}; │ │ │ │ │ -155 │ │ │ │ │ -156 out[4][0] = { 0, 0, 0}; │ │ │ │ │ -157 out[4][1] = { 0, 0, 0}; │ │ │ │ │ -158 out[4][2] = { 0, 0, sign_[4]}; │ │ │ │ │ -159 │ │ │ │ │ -160 out[5][0] = { 0, 0, 0}; │ │ │ │ │ -161 out[5][1] = { 0, 0, 0}; │ │ │ │ │ -162 out[5][2] = { 0, 0, sign_[5]}; │ │ │ │ │ -163 │ │ │ │ │ -164 out[6][0] = { 6*in[1]-3, 6*in[0]-6, 0}; │ │ │ │ │ -165 out[6][1] = { 0, -6*in[1]+3, 0}; │ │ │ │ │ -166 out[6][2] = { 0, 0, 0}; │ │ │ │ │ -167 │ │ │ │ │ -168 out[7][0] = {-6*in[1]+3, -6*in[0], 0}; │ │ │ │ │ -169 out[7][1] = { 0, 6*in[1]-3, 0}; │ │ │ │ │ -170 out[7][2] = { 0, 0, 0}; │ │ │ │ │ -171 │ │ │ │ │ -172 out[8][0] = { 6*in[0]-3, 0, 0}; │ │ │ │ │ -173 out[8][1] = {-6*in[1]+6, -6*in[0]+3, 0}; │ │ │ │ │ -174 out[8][2] = { 0, 0, 0}; │ │ │ │ │ -175 │ │ │ │ │ -176 out[9][0] = {-6*in[0]+3, 0, 0}; │ │ │ │ │ -177 out[9][1] = { 6*in[1], 6*in[0]-3, 0}; │ │ │ │ │ -178 out[9][2] = { 0, 0, 0}; │ │ │ │ │ -179 │ │ │ │ │ -180 out[10][0] = {-6*in[0]+3, 0, 0}; │ │ │ │ │ -181 out[10][1] = { 0, 0, 0}; │ │ │ │ │ -182 out[10][2] = { 6*in[2]-6, 0, 6*in[0]-3}; │ │ │ │ │ -183 │ │ │ │ │ -184 out[11][0] = { 6*in[0]-3, 0, 0}; │ │ │ │ │ -185 out[11][1] = { 0, 0, 0}; │ │ │ │ │ -186 out[11][2] = { -6*in[2], 0, -6*in[0]+3}; │ │ │ │ │ -187 │ │ │ │ │ -188 out[12][0] = {-6*in[2]+3, 0, -6*in[0]+6}; │ │ │ │ │ -189 out[12][1] = { 0, 0, 0}; │ │ │ │ │ -190 out[12][2] = { 0, 0, 6*in[2]-3}; │ │ │ │ │ -191 │ │ │ │ │ -192 out[13][0] = { 6*in[2]-3, 0, 6*in[0]}; │ │ │ │ │ -193 out[13][1] = { 0, 0, 0}; │ │ │ │ │ -194 out[13][2] = { 0, 0, -6*in[2]+3}; │ │ │ │ │ -195 │ │ │ │ │ -196 out[14][0] = { 0, 0, 0}; │ │ │ │ │ -197 out[14][1] = { 0, 6*in[2]-3, 6*in[1]-6}; │ │ │ │ │ -198 out[14][2] = { 0, 0, -6*in[2]+3}; │ │ │ │ │ -199 │ │ │ │ │ -200 out[15][0] = { 0, 0, 0}; │ │ │ │ │ -201 out[15][1] = { 0, -6*in[2]+3, -6*in[1]}; │ │ │ │ │ -202 out[15][2] = { 0, 0, 6*in[2]-3}; │ │ │ │ │ -203 │ │ │ │ │ -204 out[16][0] = { 0, 0, 0}; │ │ │ │ │ -205 out[16][1] = { 0, 6*in[1]-3, 0}; │ │ │ │ │ -206 out[16][2] = { 0, -6*in[2]+6, -6*in[1]+3}; │ │ │ │ │ -207 │ │ │ │ │ -208 out[17][0] = { 0, 0, 0}; │ │ │ │ │ -209 out[17][1] = { 0, -6*in[1]+3, 0}; │ │ │ │ │ -210 out[17][2] = { 0, 6*in[2], 6*in[1]-3}; │ │ │ │ │ -211 } │ │ │ │ │ -212 │ │ │ │ │ -_2_1_4 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -215 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -216 std::vector& out) const // return value │ │ │ │ │ -217 { │ │ │ │ │ -218 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -219 if (totalOrder == 0) { │ │ │ │ │ -220 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -221 } else if (totalOrder == 1) { │ │ │ │ │ -222 out.resize(_s_i_z_e()); │ │ │ │ │ -223 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -224 │ │ │ │ │ -225 switch (direction) { │ │ │ │ │ -226 case 0: │ │ │ │ │ -227 out[0] = { sign_[0], 0, 0}; │ │ │ │ │ -228 out[1] = { sign_[1], 0, 0}; │ │ │ │ │ -229 out[2] = { 0, 0, 0}; │ │ │ │ │ -230 out[3] = { 0, 0, 0}; │ │ │ │ │ -231 out[4] = { 0, 0, 0}; │ │ │ │ │ -232 out[5] = { 0, 0, 0}; │ │ │ │ │ -233 out[6] = { 6*in[1]-3, 0, 0}; │ │ │ │ │ -234 out[7] = {-6*in[1]+3, 0, 0}; │ │ │ │ │ -235 out[8] = { 6*in[0]-3, -6*in[1]+6, 0}; │ │ │ │ │ -236 out[9] = {-6*in[0]+3, 6*in[1], 0}; │ │ │ │ │ -237 out[10] = {-6*in[0]+3, 0, 6*in[2]-6}; │ │ │ │ │ -238 out[11] = { 6*in[0]-3, 0, -6*in[2]}; │ │ │ │ │ -239 out[12] = {-6*in[2]+3, 0, 0}; │ │ │ │ │ -240 out[13] = { 6*in[2]-3, 0, 0}; │ │ │ │ │ -241 out[14] = { 0, 0, 0}; │ │ │ │ │ -242 out[15] = { 0, 0, 0}; │ │ │ │ │ -243 out[16] = { 0, 0, 0}; │ │ │ │ │ -244 out[17] = { 0, 0, 0}; │ │ │ │ │ -245 break; │ │ │ │ │ -246 case 1: │ │ │ │ │ -247 out[0] = { 0, 0, 0}; │ │ │ │ │ -248 out[1] = { 0, 0, 0}; │ │ │ │ │ -249 out[2] = { 0, sign_[2], 0}; │ │ │ │ │ -250 out[3] = { 0, sign_[3], 0}; │ │ │ │ │ -251 out[4] = { 0, 0, 0}; │ │ │ │ │ -252 out[5] = { 0, 0, 0}; │ │ │ │ │ -253 out[6] = { 6*in[0]-6, -6*in[1]+3, 0}; │ │ │ │ │ -254 out[7] = { -6*in[0], 6*in[1]-3, 0}; │ │ │ │ │ -255 out[8] = { 0, -6*in[0]+3, 0}; │ │ │ │ │ -256 out[9] = { 0, 6*in[0]-3, 0}; │ │ │ │ │ -257 out[10] = { 0, 0, 0}; │ │ │ │ │ -258 out[11] = { 0, 0, 0}; │ │ │ │ │ -259 out[12] = { 0, 0, 0}; │ │ │ │ │ -260 out[13] = { 0, 0, 0}; │ │ │ │ │ -261 out[14] = { 0, 6*in[2]-3, 0}; │ │ │ │ │ -262 out[15] = { 0, -6*in[2]+3, 0}; │ │ │ │ │ -263 out[16] = { 0, 6*in[1]-3, -6*in[2]+6}; │ │ │ │ │ -264 out[17] = { 0, -6*in[1]+3, 6*in[2]}; │ │ │ │ │ -265 break; │ │ │ │ │ -266 case 2: │ │ │ │ │ -267 out[0] = { 0, 0, 0}; │ │ │ │ │ -268 out[1] = { 0, 0, 0}; │ │ │ │ │ -269 out[2] = { 0, 0, 0}; │ │ │ │ │ -270 out[3] = { 0, 0, 0}; │ │ │ │ │ -271 out[4] = { 0, 0, sign_[4]}; │ │ │ │ │ -272 out[5] = { 0, 0, sign_[5]}; │ │ │ │ │ -273 out[6] = { 0, 0, 0}; │ │ │ │ │ -274 out[7] = { 0, 0, 0}; │ │ │ │ │ -275 out[8] = { 0, 0, 0}; │ │ │ │ │ -276 out[9] = { 0, 0, 0}; │ │ │ │ │ -277 out[10] = { 0, 0, 6*in[0]-3}; │ │ │ │ │ -278 out[11] = { 0, 0, -6*in[0]+3}; │ │ │ │ │ -279 out[12] = {-6*in[0]+6, 0, 6*in[2]-3}; │ │ │ │ │ -280 out[13] = { 6*in[0], 0, -6*in[2]+3}; │ │ │ │ │ -281 out[14] = { 0, 6*in[1]-6, -6*in[2]+3}; │ │ │ │ │ -282 out[15] = { 0, -6*in[1], 6*in[2]-3}; │ │ │ │ │ -283 out[16] = { 0, 0, -6*in[1]+3}; │ │ │ │ │ -284 out[17] = { 0, 0, 6*in[1]-3}; │ │ │ │ │ -285 break; │ │ │ │ │ -286 default: │ │ │ │ │ -287 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -288 } │ │ │ │ │ -289 } else { │ │ │ │ │ -290 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -291 } │ │ │ │ │ -292 } │ │ │ │ │ -293 │ │ │ │ │ -_2_9_5 unsigned int _o_r_d_e_r() const │ │ │ │ │ -296 { │ │ │ │ │ -297 return 2; │ │ │ │ │ -298 } │ │ │ │ │ -299 │ │ │ │ │ -300 private: │ │ │ │ │ -301 std::array sign_; │ │ │ │ │ -302 }; │ │ │ │ │ -303} // end namespace Dune │ │ │ │ │ -304#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +45 : basis(s) │ │ │ │ │ +46 , interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e() │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::hexahedron; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} // end namespace Dune │ │ │ │ │ +81#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Cube3DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< BDM1Cube3DLocalBasis< D, R >, │ │ │ │ │ +BDM1Cube3DLocalCoefficients, BDM1Cube3DLocalInterpolation< │ │ │ │ │ +BDM1Cube3DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Cube3DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3d.hh:49 │ │ │ │ │ _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:214 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Cube3DLocalBasis(std::bitset< 6 > s) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:295 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDM1Cube3DLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM1Cube3DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. More...
class  Dune::BDM1Cube2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1cube2d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ - hexahedron. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00083_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,134 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini1cube3dlocalinterpolation.hh
│ │ │ │ +
brezzidouglasmarini1cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
24 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27
│ │ │ │ -
28 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ -
32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
41 {
│ │ │ │ -
42 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
43 if (s & 1)
│ │ │ │ -
44 {
│ │ │ │ -
45 sign0 = -1.0;
│ │ │ │ -
46 }
│ │ │ │ -
47 if (s & 2)
│ │ │ │ -
48 {
│ │ │ │ -
49 sign1 = -1.0;
│ │ │ │ -
50 }
│ │ │ │ -
51 if (s & 4)
│ │ │ │ -
52 {
│ │ │ │ -
53 sign2 = -1.0;
│ │ │ │ -
54 }
│ │ │ │ -
55 if (s & 8)
│ │ │ │ -
56 {
│ │ │ │ -
57 sign3 = -1.0;
│ │ │ │ -
58 }
│ │ │ │ -
59 if (s & 16)
│ │ │ │ -
60 {
│ │ │ │ -
61 sign4 = -1.0;
│ │ │ │ -
62 }
│ │ │ │ -
63 if (s & 32)
│ │ │ │ -
64 {
│ │ │ │ -
65 sign5 = -1.0;
│ │ │ │ -
66 }
│ │ │ │ -
67
│ │ │ │ -
68 n0[0] = -1.0;
│ │ │ │ -
69 n0[1] = 0.0;
│ │ │ │ -
70 n0[2] = 0.0;
│ │ │ │ -
71 n1[0] = 1.0;
│ │ │ │ -
72 n1[1] = 0.0;
│ │ │ │ -
73 n1[2] = 0.0;
│ │ │ │ -
74 n2[0] = 0.0;
│ │ │ │ -
75 n2[1] = -1.0;
│ │ │ │ -
76 n2[2] = 0.0;
│ │ │ │ -
77 n3[0] = 0.0;
│ │ │ │ -
78 n3[1] = 1.0;
│ │ │ │ -
79 n3[2] = 0.0;
│ │ │ │ -
80 n4[0] = 0.0;
│ │ │ │ -
81 n4[1] = 0.0;
│ │ │ │ -
82 n4[2] = -1.0;
│ │ │ │ -
83 n5[0] = 0.0;
│ │ │ │ -
84 n5[1] = 0.0;
│ │ │ │ -
85 n5[2] = 1.0;
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
96 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
97 void interpolate(const F& f, std::vector<C>& out) const
│ │ │ │ -
98 {
│ │ │ │ -
99 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
100 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
101 //typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
102
│ │ │ │ -
103 DUNE_THROW( NotImplemented, "Interpolation for BDM1Cube3D finite elements is not implemented." );
│ │ │ │ -
104
│ │ │ │ -
105 out.resize(18);
│ │ │ │ -
106 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
107
│ │ │ │ -
108 const int qOrder = 4;
│ │ │ │ -
109 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
110
│ │ │ │ -
111 for (typename QuadratureRule<Scalar,1>::const_iterator it = rule.begin();
│ │ │ │ -
112 it != rule.end(); ++it)
│ │ │ │ -
113 {
│ │ │ │ -
114 // TODO: write interpolation
│ │ │ │ -
115 }
│ │ │ │ -
116 }
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
118 private:
│ │ │ │ -
119 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ -
120 typename LB::Traits::DomainType n0, n1, n2, n3, n4, n5;
│ │ │ │ -
121 };
│ │ │ │ -
│ │ │ │ -
122} // end namespace Dune
│ │ │ │ -
123#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::quadrilateral;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 BDM1Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:26
│ │ │ │ -
BDM1Cube3DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:30
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:97
│ │ │ │ -
BDM1Cube3DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:40
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini1cube2d.hh:27
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1cube2d.hh:49
│ │ │ │ +
LocalFiniteElementTraits< BDM1Cube2DLocalBasis< D, R >, BDM1Cube2DLocalCoefficients, BDM1Cube2DLocalInterpolation< BDM1Cube2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1cube2d.hh:33
│ │ │ │ +
static constexpr GeometryType type()
Definition brezzidouglasmarini1cube2d.hh:70
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1cube2d.hh:54
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1cube2d.hh:65
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1cube2d.hh:59
│ │ │ │ +
BDM1Cube2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1cube2d.hh:36
│ │ │ │ +
BDM1Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition brezzidouglasmarini1cube2d.hh:44
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalbasis.hh:30
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals.
Definition brezzidouglasmarini1cube2dlocalcoefficients.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral.
Definition brezzidouglasmarini1cube2dlocalinterpolation.hh:25
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +1,141 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ -brezzidouglasmarini1cube3dlocalinterpolation.hh │ │ │ │ │ +brezzidouglasmarini1cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -26 { │ │ │ │ │ -27 │ │ │ │ │ -28 public: │ │ │ │ │ -_3_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ -31 { │ │ │ │ │ -32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ -33 } │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ 34 │ │ │ │ │ -_4_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(unsigned int s) │ │ │ │ │ -41 { │ │ │ │ │ -42 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ -43 if (s & 1) │ │ │ │ │ -44 { │ │ │ │ │ -45 sign0 = -1.0; │ │ │ │ │ -46 } │ │ │ │ │ -47 if (s & 2) │ │ │ │ │ -48 { │ │ │ │ │ -49 sign1 = -1.0; │ │ │ │ │ -50 } │ │ │ │ │ -51 if (s & 4) │ │ │ │ │ -52 { │ │ │ │ │ -53 sign2 = -1.0; │ │ │ │ │ -54 } │ │ │ │ │ -55 if (s & 8) │ │ │ │ │ -56 { │ │ │ │ │ -57 sign3 = -1.0; │ │ │ │ │ -58 } │ │ │ │ │ -59 if (s & 16) │ │ │ │ │ +_3_6 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ 60 { │ │ │ │ │ -61 sign4 = -1.0; │ │ │ │ │ +61 return interpolation; │ │ │ │ │ 62 } │ │ │ │ │ -63 if (s & 32) │ │ │ │ │ -64 { │ │ │ │ │ -65 sign5 = -1.0; │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -68 n0[0] = -1.0; │ │ │ │ │ -69 n0[1] = 0.0; │ │ │ │ │ -70 n0[2] = 0.0; │ │ │ │ │ -71 n1[0] = 1.0; │ │ │ │ │ -72 n1[1] = 0.0; │ │ │ │ │ -73 n1[2] = 0.0; │ │ │ │ │ -74 n2[0] = 0.0; │ │ │ │ │ -75 n2[1] = -1.0; │ │ │ │ │ -76 n2[2] = 0.0; │ │ │ │ │ -77 n3[0] = 0.0; │ │ │ │ │ -78 n3[1] = 1.0; │ │ │ │ │ -79 n3[2] = 0.0; │ │ │ │ │ -80 n4[0] = 0.0; │ │ │ │ │ -81 n4[1] = 0.0; │ │ │ │ │ -82 n4[2] = -1.0; │ │ │ │ │ -83 n5[0] = 0.0; │ │ │ │ │ -84 n5[1] = 0.0; │ │ │ │ │ -85 n5[2] = 1.0; │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -96 template │ │ │ │ │ -_9_7 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const │ │ │ │ │ -98 { │ │ │ │ │ -99 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -100 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -101 //typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -102 │ │ │ │ │ -103 DUNE_THROW( NotImplemented, "Interpolation for BDM1Cube3D finite elements │ │ │ │ │ -is not implemented." ); │ │ │ │ │ -104 │ │ │ │ │ -105 out.resize(18); │ │ │ │ │ -106 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -107 │ │ │ │ │ -108 const int qOrder = 4; │ │ │ │ │ -109 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ -(GeometryTypes::cube(1), qOrder); │ │ │ │ │ -110 │ │ │ │ │ -111 for (typename QuadratureRule::const_iterator it = rule.begin(); │ │ │ │ │ -112 it != rule.end(); ++it) │ │ │ │ │ -113 { │ │ │ │ │ -114 // TODO: write interpolation │ │ │ │ │ -115 } │ │ │ │ │ -116 } │ │ │ │ │ -117 │ │ │ │ │ -118 private: │ │ │ │ │ -119 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3, sign4, │ │ │ │ │ -sign5; │ │ │ │ │ -120 typename LB::Traits::DomainType n0, n1, n2, n3, n4, n5; │ │ │ │ │ -121 }; │ │ │ │ │ -122} // end namespace Dune │ │ │ │ │ -123#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::quadrilateral; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Cube3DLocalInterpolation() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< BDM1Cube2DLocalBasis< D, R >, │ │ │ │ │ +BDM1Cube2DLocalCoefficients, BDM1Cube2DLocalInterpolation< │ │ │ │ │ +BDM1Cube2DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Cube2DLocalFiniteElement() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:97 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -BDM1Cube3DLocalInterpolation(unsigned int s) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:40 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ +quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-1 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ +quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2cube2d.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalinterpolation.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Cube2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
class  Dune::BDM1Cube3DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +brezzidouglasmarini1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ + hexahedron. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00086_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2cube2d.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,134 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2cube2d.hh
│ │ │ │ +
brezzidouglasmarini1cube3dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
24 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27
│ │ │ │ +
28 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::quadrilateral;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 BDM2Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
41 {
│ │ │ │ +
42 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
43 if (s & 1)
│ │ │ │ +
44 {
│ │ │ │ +
45 sign0 = -1.0;
│ │ │ │ +
46 }
│ │ │ │ +
47 if (s & 2)
│ │ │ │ +
48 {
│ │ │ │ +
49 sign1 = -1.0;
│ │ │ │ +
50 }
│ │ │ │ +
51 if (s & 4)
│ │ │ │ +
52 {
│ │ │ │ +
53 sign2 = -1.0;
│ │ │ │ +
54 }
│ │ │ │ +
55 if (s & 8)
│ │ │ │ +
56 {
│ │ │ │ +
57 sign3 = -1.0;
│ │ │ │ +
58 }
│ │ │ │ +
59 if (s & 16)
│ │ │ │ +
60 {
│ │ │ │ +
61 sign4 = -1.0;
│ │ │ │ +
62 }
│ │ │ │ +
63 if (s & 32)
│ │ │ │ +
64 {
│ │ │ │ +
65 sign5 = -1.0;
│ │ │ │ +
66 }
│ │ │ │ +
67
│ │ │ │ +
68 n0[0] = -1.0;
│ │ │ │ +
69 n0[1] = 0.0;
│ │ │ │ +
70 n0[2] = 0.0;
│ │ │ │ +
71 n1[0] = 1.0;
│ │ │ │ +
72 n1[1] = 0.0;
│ │ │ │ +
73 n1[2] = 0.0;
│ │ │ │ +
74 n2[0] = 0.0;
│ │ │ │ +
75 n2[1] = -1.0;
│ │ │ │ +
76 n2[2] = 0.0;
│ │ │ │ +
77 n3[0] = 0.0;
│ │ │ │ +
78 n3[1] = 1.0;
│ │ │ │ +
79 n3[2] = 0.0;
│ │ │ │ +
80 n4[0] = 0.0;
│ │ │ │ +
81 n4[1] = 0.0;
│ │ │ │ +
82 n4[2] = -1.0;
│ │ │ │ +
83 n5[0] = 0.0;
│ │ │ │ +
84 n5[1] = 0.0;
│ │ │ │ +
85 n5[2] = 1.0;
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
96 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
97 void interpolate(const F& f, std::vector<C>& out) const
│ │ │ │ +
98 {
│ │ │ │ +
99 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
100 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
101 //typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
102
│ │ │ │ +
103 DUNE_THROW( NotImplemented, "Interpolation for BDM1Cube3D finite elements is not implemented." );
│ │ │ │ +
104
│ │ │ │ +
105 out.resize(18);
│ │ │ │ +
106 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
107
│ │ │ │ +
108 const int qOrder = 4;
│ │ │ │ +
109 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
110
│ │ │ │ +
111 for (typename QuadratureRule<Scalar,1>::const_iterator it = rule.begin();
│ │ │ │ +
112 it != rule.end(); ++it)
│ │ │ │ +
113 {
│ │ │ │ +
114 // TODO: write interpolation
│ │ │ │ +
115 }
│ │ │ │ +
116 }
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
118 private:
│ │ │ │ +
119 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ +
120 typename LB::Traits::DomainType n0, n1, n2, n3, n4, n5;
│ │ │ │ +
121 };
│ │ │ │ +
│ │ │ │ +
122} // end namespace Dune
│ │ │ │ +
123#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Second order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2d.hh:27
│ │ │ │ -
BDM2Cube2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini2cube2d.hh:36
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini2cube2d.hh:65
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini2cube2d.hh:49
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini2cube2d.hh:59
│ │ │ │ -
static constexpr GeometryType type()
Definition brezzidouglasmarini2cube2d.hh:70
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini2cube2d.hh:54
│ │ │ │ -
BDM2Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < ??
Definition brezzidouglasmarini2cube2d.hh:44
│ │ │ │ -
LocalFiniteElementTraits< BDM2Cube2DLocalBasis< D, R >, BDM2Cube2DLocalCoefficients, BDM2Cube2DLocalInterpolation< BDM2Cube2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini2cube2d.hh:33
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:30
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:24
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:25
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:26
│ │ │ │ +
BDM1Cube3DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:30
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:97
│ │ │ │ +
BDM1Cube3DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3dlocalinterpolation.hh:40
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,139 +1,134 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini2cube2d.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ +brezzidouglasmarini1cube3dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +26 { │ │ │ │ │ +27 │ │ │ │ │ +28 public: │ │ │ │ │ +_3_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ +31 { │ │ │ │ │ +32 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ +33 } │ │ │ │ │ 34 │ │ │ │ │ -_3_6 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +_4_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(unsigned int s) │ │ │ │ │ +41 { │ │ │ │ │ +42 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ +43 if (s & 1) │ │ │ │ │ +44 { │ │ │ │ │ +45 sign0 = -1.0; │ │ │ │ │ +46 } │ │ │ │ │ +47 if (s & 2) │ │ │ │ │ +48 { │ │ │ │ │ +49 sign1 = -1.0; │ │ │ │ │ +50 } │ │ │ │ │ +51 if (s & 4) │ │ │ │ │ +52 { │ │ │ │ │ +53 sign2 = -1.0; │ │ │ │ │ +54 } │ │ │ │ │ +55 if (s & 8) │ │ │ │ │ +56 { │ │ │ │ │ +57 sign3 = -1.0; │ │ │ │ │ +58 } │ │ │ │ │ +59 if (s & 16) │ │ │ │ │ 60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ +61 sign4 = -1.0; │ │ │ │ │ 62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::quadrilateral; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +63 if (s & 32) │ │ │ │ │ +64 { │ │ │ │ │ +65 sign5 = -1.0; │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +68 n0[0] = -1.0; │ │ │ │ │ +69 n0[1] = 0.0; │ │ │ │ │ +70 n0[2] = 0.0; │ │ │ │ │ +71 n1[0] = 1.0; │ │ │ │ │ +72 n1[1] = 0.0; │ │ │ │ │ +73 n1[2] = 0.0; │ │ │ │ │ +74 n2[0] = 0.0; │ │ │ │ │ +75 n2[1] = -1.0; │ │ │ │ │ +76 n2[2] = 0.0; │ │ │ │ │ +77 n3[0] = 0.0; │ │ │ │ │ +78 n3[1] = 1.0; │ │ │ │ │ +79 n3[2] = 0.0; │ │ │ │ │ +80 n4[0] = 0.0; │ │ │ │ │ +81 n4[1] = 0.0; │ │ │ │ │ +82 n4[2] = -1.0; │ │ │ │ │ +83 n5[0] = 0.0; │ │ │ │ │ +84 n5[1] = 0.0; │ │ │ │ │ +85 n5[2] = 1.0; │ │ │ │ │ +86 } │ │ │ │ │ +87 │ │ │ │ │ +96 template │ │ │ │ │ +_9_7 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const │ │ │ │ │ +98 { │ │ │ │ │ +99 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +100 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +101 //typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +102 │ │ │ │ │ +103 DUNE_THROW( NotImplemented, "Interpolation for BDM1Cube3D finite elements │ │ │ │ │ +is not implemented." ); │ │ │ │ │ +104 │ │ │ │ │ +105 out.resize(18); │ │ │ │ │ +106 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +107 │ │ │ │ │ +108 const int qOrder = 4; │ │ │ │ │ +109 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(1), qOrder); │ │ │ │ │ +110 │ │ │ │ │ +111 for (typename QuadratureRule::const_iterator it = rule.begin(); │ │ │ │ │ +112 it != rule.end(); ++it) │ │ │ │ │ +113 { │ │ │ │ │ +114 // TODO: write interpolation │ │ │ │ │ +115 } │ │ │ │ │ +116 } │ │ │ │ │ +117 │ │ │ │ │ +118 private: │ │ │ │ │ +119 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3, sign4, │ │ │ │ │ +sign5; │ │ │ │ │ +120 typename LB::Traits::DomainType n0, n1, n2, n3, n4, n5; │ │ │ │ │ +121 }; │ │ │ │ │ +122} // end namespace Dune │ │ │ │ │ +123#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM2Cube2DLocalFiniteElement() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Cube3DLocalInterpolation() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM2Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < ?? │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< BDM2Cube2DLocalBasis< D, R >, │ │ │ │ │ -BDM2Cube2DLocalCoefficients, BDM2Cube2DLocalInterpolation< │ │ │ │ │ -BDM2Cube2DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:97 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Cube3DLocalInterpolation(unsigned int s) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalinterpolation.hh:40 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
brezzidouglasmarini2simplex2d.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalbasis.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalcoefficients.hh"
│ │ │ │ -#include "brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDM2Simplex2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on triangles. More...
class  Dune::BDM1Cube3DLocalCoefficients
 Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +brezzidouglasmarini1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00089_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini2simplex2d.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,79 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini2simplex2d.hh
│ │ │ │ +
brezzidouglasmarini1cube3dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::triangle;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i = 0; i < 6; ++i)
│ │ │ │ +
31 {
│ │ │ │ +
32 li[i] = LocalKey(i,1,0);
│ │ │ │ +
33 li[i + 6] = LocalKey(i,1,1);
│ │ │ │ +
34 li[i + 12] = LocalKey(i,1,2);
│ │ │ │ +
35 }
│ │ │ │ +
36 }
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
39 std::size_t size() const
│ │ │ │ +
40 {
│ │ │ │ +
41 return 18;
│ │ │ │ +
42 }
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
45 const LocalKey& localKey(std::size_t i) const
│ │ │ │ +
46 {
│ │ │ │ +
47 return li[i];
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
50 private:
│ │ │ │ +
51 std::vector<LocalKey> li;
│ │ │ │ +
52 };
│ │ │ │ +
│ │ │ │ +
53} // end namespace Dune
│ │ │ │ +
54#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Second order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2d.hh:27
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini2simplex2d.hh:54
│ │ │ │ -
LocalFiniteElementTraits< BDM2Simplex2DLocalBasis< D, R >, BDM2Simplex2DLocalCoefficients, BDM2Simplex2DLocalInterpolation< BDM2Simplex2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini2simplex2d.hh:33
│ │ │ │ -
BDM2Simplex2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini2simplex2d.hh:36
│ │ │ │ -
static constexpr GeometryType type()
Definition brezzidouglasmarini2simplex2d.hh:70
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini2simplex2d.hh:49
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini2simplex2d.hh:59
│ │ │ │ -
BDM2Simplex2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2d.hh:44
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini2simplex2d.hh:65
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:30
│ │ │ │ -
Layout map for Brezzi-Douglas-Marini-2 elements on triangles.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:24
│ │ │ │ -
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:25
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:24
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:39
│ │ │ │ +
BDM1Cube3DLocalCoefficients()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition brezzidouglasmarini1cube3dlocalcoefficients.hh:45
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,143 +1,78 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ -brezzidouglasmarini2simplex2d.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ +brezzidouglasmarini1cube3dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::triangle; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ -interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif / │ │ │ │ │ -/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() : li(18) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i = 0; i < 6; ++i) │ │ │ │ │ +31 { │ │ │ │ │ +32 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +33 li[i + 6] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +34 li[i + 12] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +35 } │ │ │ │ │ +36 } │ │ │ │ │ +37 │ │ │ │ │ +_3_9 std::size_t _s_i_z_e() const │ │ │ │ │ +40 { │ │ │ │ │ +41 return 18; │ │ │ │ │ +42 } │ │ │ │ │ +43 │ │ │ │ │ +_4_5 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const │ │ │ │ │ +46 { │ │ │ │ │ +47 return li[i]; │ │ │ │ │ +48 } │ │ │ │ │ +49 │ │ │ │ │ +50 private: │ │ │ │ │ +51 std::vector li; │ │ │ │ │ +52 }; │ │ │ │ │ +53} // end namespace Dune │ │ │ │ │ +54#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< BDM2Simplex2DLocalBasis< D, R >, │ │ │ │ │ -BDM2Simplex2DLocalCoefficients, BDM2Simplex2DLocalInterpolation< │ │ │ │ │ -BDM2Simplex2DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM2Simplex2DLocalFiniteElement() │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +BDM1Cube3DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDM2Simplex2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Marini-2 elements on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalcoefficients.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localtoglobaladaptors.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,51 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localtoglobaladaptors.hh File Reference
│ │ │ │ +
brezzidouglasmarini1cube3dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LocalToGlobalBasisAdaptorTraits< LocalBasisTraits, dimDomainGlobal_ >
 Traits class for local-to-global basis adaptors. More...
 
class  Dune::ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry >
 Convert a simple scalar local basis into a global basis. More...
 
class  Dune::LocalToGlobalInterpolationAdaptor< LocalInterpolation, Traits_ >
 Convert a local interpolation into a global interpolation. More...
 
struct  Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >
 Convert a simple scalar local finite element into a global finite element. More...
 
struct  Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >::Traits
 
class  Dune::ScalarLocalToGlobalFiniteElementAdaptorFactory< LocalFiniteElement, Geometry >
 Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. More...
class  Dune::BDM1Cube3DLocalBasis< D, R >
 First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,44 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localtoglobaladaptors.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1cube3dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_<_ _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_, │ │ │ │ │ - _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l___ _> │ │ │ │ │ -  Traits class for local-to-global basis adaptors. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_ _L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ -  Convert a simple scalar local basis into a global basis. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_<_ _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _T_r_a_i_t_s___ _> │ │ │ │ │ -  Convert a local interpolation into a global interpolation. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_ _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_, │ │ │ │ │ - _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ -  Convert a simple scalar local finite element into a global finite │ │ │ │ │ - element. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_ _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_, │ │ │ │ │ - _G_e_o_m_e_t_r_y_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_< │ │ │ │ │ - _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ -  Factory for _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r objects. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ + hexahedron. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00092_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localtoglobaladaptors.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1cube3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,270 +70,322 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localtoglobaladaptors.hh
│ │ │ │ +
brezzidouglasmarini1cube3dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13#include <dune/common/fvector.hh>
│ │ │ │ -
14#include <dune/common/typetraits.hh>
│ │ │ │ -
15
│ │ │ │ -
16#include <dune/geometry/type.hh>
│ │ │ │ -
17
│ │ │ │ -
18namespace Dune {
│ │ │ │ -
19
│ │ │ │ -
21
│ │ │ │ -
29 template<class LocalBasisTraits, std::size_t dimDomainGlobal_>
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <bitset>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include "../../common/localbasis.hh"
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
29 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ - │ │ │ │ -
32 static const std::size_t dimDomainLocal = LocalBasisTraits::dimDomain;
│ │ │ │ -
33 static const std::size_t dimDomainGlobal = dimDomainGlobal_;
│ │ │ │ - │ │ │ │ -
35 typedef FieldVector<DomainField, dimDomainGlobal> DomainGlobal;
│ │ │ │ -
36
│ │ │ │ - │ │ │ │ -
38 static const std::size_t dimRange = LocalBasisTraits::dimRange;
│ │ │ │ - │ │ │ │ -
40
│ │ │ │ -
41 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal> Jacobian;
│ │ │ │ -
42 };
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
45
│ │ │ │ -
64 template<class LocalBasis, class Geometry>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
66 static_assert(LocalBasis::Traits::dimRange == 1,
│ │ │ │ -
67 "ScalarLocalToGlobalBasisAdaptor can only wrap a "
│ │ │ │ -
68 "scalar local basis.");
│ │ │ │ -
69 static_assert((std::is_same<typename LocalBasis::Traits::DomainFieldType,
│ │ │ │ -
70 typename Geometry::ctype>::value),
│ │ │ │ -
71 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use "
│ │ │ │ -
72 "the same ctype as Geometry");
│ │ │ │ -
73 static_assert
│ │ │ │ -
74 ( static_cast<std::size_t>(LocalBasis::Traits::dimDomain) ==
│ │ │ │ -
75 static_cast<std::size_t>(Geometry::mydimension),
│ │ │ │ -
76 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must "
│ │ │ │ -
77 "match local dimension of Geometry");
│ │ │ │ -
78
│ │ │ │ -
79 const LocalBasis& localBasis;
│ │ │ │ -
80 Geometry geometry;
│ │ │ │ -
81
│ │ │ │ -
82 public:
│ │ │ │ -
83 typedef LocalToGlobalBasisAdaptorTraits<typename LocalBasis::Traits,
│ │ │ │ -
84 Geometry::coorddimension> Traits;
│ │ │ │ -
85
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ -
96 ScalarLocalToGlobalBasisAdaptor(const LocalBasis& localBasis_,
│ │ │ │ -
97 const Geometry& geometry_) :
│ │ │ │ -
98 localBasis(localBasis_), geometry(geometry_)
│ │ │ │ -
99 { }
│ │ │ │ -
│ │ │ │ -
100
│ │ │ │ -
101 std::size_t size() const { return localBasis.size(); }
│ │ │ │ -
103
│ │ │ │ -
│ │ │ │ -
110 std::size_t order() const {
│ │ │ │ -
111 if(geometry.affine())
│ │ │ │ -
112 // affine linear
│ │ │ │ -
113 return localBasis.order();
│ │ │ │ -
114 else
│ │ │ │ -
115 // assume at most order dim
│ │ │ │ -
116 return localBasis.order() + Traits::dimDomainGlobal - 1;
│ │ │ │ -
117 }
│ │ │ │ -
│ │ │ │ -
118
│ │ │ │ -
│ │ │ │ -
119 void evaluateFunction(const typename Traits::DomainLocal& in,
│ │ │ │ -
120 std::vector<typename Traits::Range>& out) const
│ │ │ │ -
121 {
│ │ │ │ -
122 localBasis.evaluateFunction(in, out);
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ -
124
│ │ │ │ -
│ │ │ │ -
125 void evaluateJacobian(const typename Traits::DomainLocal& in,
│ │ │ │ -
126 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ -
127 {
│ │ │ │ -
128 std::vector<typename LocalBasis::Traits::JacobianType>
│ │ │ │ -
129 localJacobian(size());
│ │ │ │ -
130 localBasis.evaluateJacobian(in, localJacobian);
│ │ │ │ -
131
│ │ │ │ -
132 const typename Geometry::JacobianInverseTransposed &geoJacobian =
│ │ │ │ -
133 geometry.jacobianInverseTransposed(in);
│ │ │ │ -
134
│ │ │ │ -
135 out.resize(size());
│ │ │ │ -
136 for(std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
137 geoJacobian.mv(localJacobian[i][0], out[i][0]);
│ │ │ │ -
138 }
│ │ │ │ -
│ │ │ │ -
139 };
│ │ │ │ -
│ │ │ │ -
140
│ │ │ │ -
142
│ │ │ │ -
148 template<class LocalInterpolation, class Traits_>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
150 const LocalInterpolation& localInterpolation;
│ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32
│ │ │ │ +
33 public:
│ │ │ │ + │ │ │ │ +
35 R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
36 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 for (size_t i=0; i<6; i++)
│ │ │ │ +
42 sign_[i] = 1.0;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
50 BDM1Cube3DLocalBasis(std::bitset<6> s)
│ │ │ │ +
51 {
│ │ │ │ +
52 for (size_t i=0; i<6; i++)
│ │ │ │ +
53 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
57 unsigned int size() const
│ │ │ │ +
58 {
│ │ │ │ +
59 return 18;
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
68 inline void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
69 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
70 {
│ │ │ │ +
71 out.resize(size());
│ │ │ │ +
72
│ │ │ │ +
73 out[0][0] = sign_[0] * (in[0] - 1.0);
│ │ │ │ +
74 out[0][1] = 0;
│ │ │ │ +
75 out[0][2] = 0;
│ │ │ │ +
76 out[1][0] = sign_[1] * in[0];
│ │ │ │ +
77 out[1][1] = 0;
│ │ │ │ +
78 out[1][2] = 0;
│ │ │ │ +
79 out[2][0] = 0;
│ │ │ │ +
80 out[2][1] = sign_[2] * (in[1] - 1.0);
│ │ │ │ +
81 out[2][2] = 0;
│ │ │ │ +
82 out[3][0] = 0;
│ │ │ │ +
83 out[3][1] = sign_[3] * in[1];
│ │ │ │ +
84 out[3][2] = 0;
│ │ │ │ +
85 out[4][0] = 0;
│ │ │ │ +
86 out[4][1] = 0;
│ │ │ │ +
87 out[4][2] = sign_[4] * (in[2] - 1.0);
│ │ │ │ +
88 out[5][0] = 0;
│ │ │ │ +
89 out[5][1] = 0;
│ │ │ │ +
90 out[5][2] = sign_[5] * in[2];
│ │ │ │ +
91 out[6][0] = 6.0 * in[0] * in[1] - 3 * in[0]-6 * in[1] + 3.0;
│ │ │ │ +
92 out[6][1] = -3.0 * in[1] * in[1] + 3 * in[1];
│ │ │ │ +
93 out[6][2] = 0;
│ │ │ │ +
94 out[7][0] = -6.0 * in[0] * in[1] + 3 * in[0];
│ │ │ │ +
95 out[7][1] = 3.0 * in[1] * in[1] - 3 * in[1];
│ │ │ │ +
96 out[7][2] = 0;
│ │ │ │ +
97 out[8][0] = 3.0 * in[0] * in[0] - 3 * in[0];
│ │ │ │ +
98 out[8][1] = -6.0 * in[0] * in[1] + 3 * in[1]+6 * in[0]-3.0;
│ │ │ │ +
99 out[8][2] = 0;
│ │ │ │ +
100 out[9][0] = -3.0 * in[0] * in[0] + 3 * in[0];
│ │ │ │ +
101 out[9][1] = 6.0 * in[0] * in[1] - 3 * in[1];
│ │ │ │ +
102 out[9][2] = 0;
│ │ │ │ +
103 out[10][0] = -3.0 * in[0] * in[0] + 3 * in[0];
│ │ │ │ +
104 out[10][1] = 0;
│ │ │ │ +
105 out[10][2] = 6.0 * in[0] * in[2]-6 * in[0]-3 * in[2] + 3.0;
│ │ │ │ +
106 out[11][0] = 3.0 * in[0] * in[0]-3 * in[0];
│ │ │ │ +
107 out[11][1] = 0;
│ │ │ │ +
108 out[11][2] = -6.0 * in[0] * in[2] + 3 * in[2];
│ │ │ │ +
109 out[12][0] = -6.0 * in[0] * in[2]+6 * in[2] + 3 * in[0]-3.0;
│ │ │ │ +
110 out[12][1] = 0;
│ │ │ │ +
111 out[12][2] = 3.0 * in[2] * in[2]-3 * in[2];
│ │ │ │ +
112 out[13][0] = -3 * in[0]+6 * in[0] * in[2];
│ │ │ │ +
113 out[13][1] = 0;
│ │ │ │ +
114 out[13][2] = -3.0 * in[2] * in[2] + 3 * in[2];
│ │ │ │ +
115 out[14][0] = 0;
│ │ │ │ +
116 out[14][1] = 6.0 * in[1] * in[2]-3 * in[1]-6 * in[2] + 3.0;
│ │ │ │ +
117 out[14][2] = -3 * in[2] * in[2] + 3 * in[2];
│ │ │ │ +
118 out[15][0] = 0;
│ │ │ │ +
119 out[15][1] = -6.0 * in[1] * in[2] + 3 * in[1];
│ │ │ │ +
120 out[15][2] = 3.0 * in[2] * in[2]-3 * in[2];
│ │ │ │ +
121 out[16][0] = 0;
│ │ │ │ +
122 out[16][1] = 3.0 * in[1] * in[1]-3 * in[1];
│ │ │ │ +
123 out[16][2] = -6.0 * in[1] * in[2] + 3 * in[2]+6 * in[1]-3.0;
│ │ │ │ +
124 out[17][0] = 0;
│ │ │ │ +
125 out[17][1] = -3.0 * in[1] * in[1] + 3 * in[1];
│ │ │ │ +
126 out[17][2] = 6.0 * in[1] * in[2] - 3.0 * in[2];
│ │ │ │ +
127 }
│ │ │ │ +
│ │ │ │ +
128
│ │ │ │ +
│ │ │ │ +
135 inline void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
136 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
137 {
│ │ │ │ +
138 out.resize(size());
│ │ │ │ +
139
│ │ │ │ +
140 out[0][0] = { sign_[0], 0, 0};
│ │ │ │ +
141 out[0][1] = { 0, 0, 0};
│ │ │ │ +
142 out[0][2] = { 0, 0, 0};
│ │ │ │ +
143
│ │ │ │ +
144 out[1][0] = { sign_[1], 0, 0};
│ │ │ │ +
145 out[1][1] = { 0, 0, 0};
│ │ │ │ +
146 out[1][2] = { 0, 0, 0};
│ │ │ │ +
147
│ │ │ │ +
148 out[2][0] = { 0, 0, 0};
│ │ │ │ +
149 out[2][1] = { 0, sign_[2], 0};
│ │ │ │ +
150 out[2][2] = { 0, 0, 0};
│ │ │ │
151
│ │ │ │ -
152 public:
│ │ │ │ -
153 typedef Traits_ Traits;
│ │ │ │ -
154
│ │ │ │ -
156
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
165 ( const LocalInterpolation& localInterpolation_) :
│ │ │ │ -
166 localInterpolation(localInterpolation_)
│ │ │ │ -
167 { }
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
169 template<class Function, class Coeff>
│ │ │ │ -
│ │ │ │ -
170 void interpolate(const Function& function, std::vector<Coeff>& out) const
│ │ │ │ -
171 { localInterpolation.interpolate(function, out); }
│ │ │ │ -
│ │ │ │ -
172 };
│ │ │ │ -
│ │ │ │ -
173
│ │ │ │ -
176
│ │ │ │ -
186 template<class LocalFiniteElement, class Geometry>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
│ │ │ │ -
191 struct Traits {
│ │ │ │ -
192 typedef ScalarLocalToGlobalBasisAdaptor<typename LocalFiniteElement::
│ │ │ │ -
193 Traits::LocalBasisType, Geometry> Basis;
│ │ │ │ -
194 typedef LocalToGlobalInterpolationAdaptor<typename LocalFiniteElement::
│ │ │ │ -
195 Traits::LocalInterpolationType, typename Basis::Traits>
│ │ │ │ - │ │ │ │ -
197 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType
│ │ │ │ - │ │ │ │ -
199 };
│ │ │ │ -
│ │ │ │ -
200
│ │ │ │ -
201 private:
│ │ │ │ -
202 const LocalFiniteElement &localFE;
│ │ │ │ -
203 typename Traits::Basis basis_;
│ │ │ │ -
204 typename Traits::Interpolation interpolation_;
│ │ │ │ -
205
│ │ │ │ -
206 public:
│ │ │ │ -
208
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
218 ( const LocalFiniteElement& localFE_, const Geometry &geometry) :
│ │ │ │ -
219 localFE(localFE_),
│ │ │ │ -
220 basis_(localFE.localBasis(), geometry),
│ │ │ │ -
221 interpolation_(localFE.localInterpolation())
│ │ │ │ -
222 { }
│ │ │ │ -
│ │ │ │ -
223
│ │ │ │ -
224 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
│ │ │ │ -
225 const typename Traits::Interpolation& interpolation() const
│ │ │ │ -
226 { return interpolation_; }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
227 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
228 { return localFE.localCoefficients(); }
│ │ │ │ -
│ │ │ │ -
229 GeometryType type() const { return localFE.type(); }
│ │ │ │ -
230 };
│ │ │ │ -
│ │ │ │ -
231
│ │ │ │ -
233
│ │ │ │ -
243 template<class LocalFiniteElement, class Geometry>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
245 const LocalFiniteElement& localFE;
│ │ │ │ -
246
│ │ │ │ -
247 public:
│ │ │ │ -
248 typedef ScalarLocalToGlobalFiniteElementAdaptor<LocalFiniteElement,
│ │ │ │ -
249 Geometry> FiniteElement;
│ │ │ │ -
250
│ │ │ │ -
252
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
261 (const LocalFiniteElement &localFE_) : localFE(localFE_) {}
│ │ │ │ -
│ │ │ │ -
262
│ │ │ │ -
264
│ │ │ │ -
│ │ │ │ -
274 const FiniteElement make(const Geometry& geometry) {
│ │ │ │ -
275 return FiniteElement(localFE, geometry);
│ │ │ │ -
276 }
│ │ │ │ -
│ │ │ │ -
277 };
│ │ │ │ -
│ │ │ │ -
278
│ │ │ │ -
279} // namespace Dune
│ │ │ │ -
280
│ │ │ │ -
281#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ +
152 out[3][0] = { 0, 0, 0};
│ │ │ │ +
153 out[3][1] = { 0, sign_[3], 0};
│ │ │ │ +
154 out[3][2] = { 0, 0, 0};
│ │ │ │ +
155
│ │ │ │ +
156 out[4][0] = { 0, 0, 0};
│ │ │ │ +
157 out[4][1] = { 0, 0, 0};
│ │ │ │ +
158 out[4][2] = { 0, 0, sign_[4]};
│ │ │ │ +
159
│ │ │ │ +
160 out[5][0] = { 0, 0, 0};
│ │ │ │ +
161 out[5][1] = { 0, 0, 0};
│ │ │ │ +
162 out[5][2] = { 0, 0, sign_[5]};
│ │ │ │ +
163
│ │ │ │ +
164 out[6][0] = { 6*in[1]-3, 6*in[0]-6, 0};
│ │ │ │ +
165 out[6][1] = { 0, -6*in[1]+3, 0};
│ │ │ │ +
166 out[6][2] = { 0, 0, 0};
│ │ │ │ +
167
│ │ │ │ +
168 out[7][0] = {-6*in[1]+3, -6*in[0], 0};
│ │ │ │ +
169 out[7][1] = { 0, 6*in[1]-3, 0};
│ │ │ │ +
170 out[7][2] = { 0, 0, 0};
│ │ │ │ +
171
│ │ │ │ +
172 out[8][0] = { 6*in[0]-3, 0, 0};
│ │ │ │ +
173 out[8][1] = {-6*in[1]+6, -6*in[0]+3, 0};
│ │ │ │ +
174 out[8][2] = { 0, 0, 0};
│ │ │ │ +
175
│ │ │ │ +
176 out[9][0] = {-6*in[0]+3, 0, 0};
│ │ │ │ +
177 out[9][1] = { 6*in[1], 6*in[0]-3, 0};
│ │ │ │ +
178 out[9][2] = { 0, 0, 0};
│ │ │ │ +
179
│ │ │ │ +
180 out[10][0] = {-6*in[0]+3, 0, 0};
│ │ │ │ +
181 out[10][1] = { 0, 0, 0};
│ │ │ │ +
182 out[10][2] = { 6*in[2]-6, 0, 6*in[0]-3};
│ │ │ │ +
183
│ │ │ │ +
184 out[11][0] = { 6*in[0]-3, 0, 0};
│ │ │ │ +
185 out[11][1] = { 0, 0, 0};
│ │ │ │ +
186 out[11][2] = { -6*in[2], 0, -6*in[0]+3};
│ │ │ │ +
187
│ │ │ │ +
188 out[12][0] = {-6*in[2]+3, 0, -6*in[0]+6};
│ │ │ │ +
189 out[12][1] = { 0, 0, 0};
│ │ │ │ +
190 out[12][2] = { 0, 0, 6*in[2]-3};
│ │ │ │ +
191
│ │ │ │ +
192 out[13][0] = { 6*in[2]-3, 0, 6*in[0]};
│ │ │ │ +
193 out[13][1] = { 0, 0, 0};
│ │ │ │ +
194 out[13][2] = { 0, 0, -6*in[2]+3};
│ │ │ │ +
195
│ │ │ │ +
196 out[14][0] = { 0, 0, 0};
│ │ │ │ +
197 out[14][1] = { 0, 6*in[2]-3, 6*in[1]-6};
│ │ │ │ +
198 out[14][2] = { 0, 0, -6*in[2]+3};
│ │ │ │ +
199
│ │ │ │ +
200 out[15][0] = { 0, 0, 0};
│ │ │ │ +
201 out[15][1] = { 0, -6*in[2]+3, -6*in[1]};
│ │ │ │ +
202 out[15][2] = { 0, 0, 6*in[2]-3};
│ │ │ │ +
203
│ │ │ │ +
204 out[16][0] = { 0, 0, 0};
│ │ │ │ +
205 out[16][1] = { 0, 6*in[1]-3, 0};
│ │ │ │ +
206 out[16][2] = { 0, -6*in[2]+6, -6*in[1]+3};
│ │ │ │ +
207
│ │ │ │ +
208 out[17][0] = { 0, 0, 0};
│ │ │ │ +
209 out[17][1] = { 0, -6*in[1]+3, 0};
│ │ │ │ +
210 out[17][2] = { 0, 6*in[2], 6*in[1]-3};
│ │ │ │ +
211 }
│ │ │ │ +
│ │ │ │ +
212
│ │ │ │ +
│ │ │ │ +
214 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
215 const typename Traits::DomainType& in, // position
│ │ │ │ +
216 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
217 {
│ │ │ │ +
218 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
219 if (totalOrder == 0) {
│ │ │ │ +
220 evaluateFunction(in, out);
│ │ │ │ +
221 } else if (totalOrder == 1) {
│ │ │ │ +
222 out.resize(size());
│ │ │ │ +
223 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
224
│ │ │ │ +
225 switch (direction) {
│ │ │ │ +
226 case 0:
│ │ │ │ +
227 out[0] = { sign_[0], 0, 0};
│ │ │ │ +
228 out[1] = { sign_[1], 0, 0};
│ │ │ │ +
229 out[2] = { 0, 0, 0};
│ │ │ │ +
230 out[3] = { 0, 0, 0};
│ │ │ │ +
231 out[4] = { 0, 0, 0};
│ │ │ │ +
232 out[5] = { 0, 0, 0};
│ │ │ │ +
233 out[6] = { 6*in[1]-3, 0, 0};
│ │ │ │ +
234 out[7] = {-6*in[1]+3, 0, 0};
│ │ │ │ +
235 out[8] = { 6*in[0]-3, -6*in[1]+6, 0};
│ │ │ │ +
236 out[9] = {-6*in[0]+3, 6*in[1], 0};
│ │ │ │ +
237 out[10] = {-6*in[0]+3, 0, 6*in[2]-6};
│ │ │ │ +
238 out[11] = { 6*in[0]-3, 0, -6*in[2]};
│ │ │ │ +
239 out[12] = {-6*in[2]+3, 0, 0};
│ │ │ │ +
240 out[13] = { 6*in[2]-3, 0, 0};
│ │ │ │ +
241 out[14] = { 0, 0, 0};
│ │ │ │ +
242 out[15] = { 0, 0, 0};
│ │ │ │ +
243 out[16] = { 0, 0, 0};
│ │ │ │ +
244 out[17] = { 0, 0, 0};
│ │ │ │ +
245 break;
│ │ │ │ +
246 case 1:
│ │ │ │ +
247 out[0] = { 0, 0, 0};
│ │ │ │ +
248 out[1] = { 0, 0, 0};
│ │ │ │ +
249 out[2] = { 0, sign_[2], 0};
│ │ │ │ +
250 out[3] = { 0, sign_[3], 0};
│ │ │ │ +
251 out[4] = { 0, 0, 0};
│ │ │ │ +
252 out[5] = { 0, 0, 0};
│ │ │ │ +
253 out[6] = { 6*in[0]-6, -6*in[1]+3, 0};
│ │ │ │ +
254 out[7] = { -6*in[0], 6*in[1]-3, 0};
│ │ │ │ +
255 out[8] = { 0, -6*in[0]+3, 0};
│ │ │ │ +
256 out[9] = { 0, 6*in[0]-3, 0};
│ │ │ │ +
257 out[10] = { 0, 0, 0};
│ │ │ │ +
258 out[11] = { 0, 0, 0};
│ │ │ │ +
259 out[12] = { 0, 0, 0};
│ │ │ │ +
260 out[13] = { 0, 0, 0};
│ │ │ │ +
261 out[14] = { 0, 6*in[2]-3, 0};
│ │ │ │ +
262 out[15] = { 0, -6*in[2]+3, 0};
│ │ │ │ +
263 out[16] = { 0, 6*in[1]-3, -6*in[2]+6};
│ │ │ │ +
264 out[17] = { 0, -6*in[1]+3, 6*in[2]};
│ │ │ │ +
265 break;
│ │ │ │ +
266 case 2:
│ │ │ │ +
267 out[0] = { 0, 0, 0};
│ │ │ │ +
268 out[1] = { 0, 0, 0};
│ │ │ │ +
269 out[2] = { 0, 0, 0};
│ │ │ │ +
270 out[3] = { 0, 0, 0};
│ │ │ │ +
271 out[4] = { 0, 0, sign_[4]};
│ │ │ │ +
272 out[5] = { 0, 0, sign_[5]};
│ │ │ │ +
273 out[6] = { 0, 0, 0};
│ │ │ │ +
274 out[7] = { 0, 0, 0};
│ │ │ │ +
275 out[8] = { 0, 0, 0};
│ │ │ │ +
276 out[9] = { 0, 0, 0};
│ │ │ │ +
277 out[10] = { 0, 0, 6*in[0]-3};
│ │ │ │ +
278 out[11] = { 0, 0, -6*in[0]+3};
│ │ │ │ +
279 out[12] = {-6*in[0]+6, 0, 6*in[2]-3};
│ │ │ │ +
280 out[13] = { 6*in[0], 0, -6*in[2]+3};
│ │ │ │ +
281 out[14] = { 0, 6*in[1]-6, -6*in[2]+3};
│ │ │ │ +
282 out[15] = { 0, -6*in[1], 6*in[2]-3};
│ │ │ │ +
283 out[16] = { 0, 0, -6*in[1]+3};
│ │ │ │ +
284 out[17] = { 0, 0, 6*in[1]-3};
│ │ │ │ +
285 break;
│ │ │ │ +
286 default:
│ │ │ │ +
287 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
288 }
│ │ │ │ +
289 } else {
│ │ │ │ +
290 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
291 }
│ │ │ │ +
292 }
│ │ │ │ +
│ │ │ │ +
293
│ │ │ │ +
│ │ │ │ +
295 unsigned int order() const
│ │ │ │ +
296 {
│ │ │ │ +
297 return 2;
│ │ │ │ +
298 }
│ │ │ │ +
│ │ │ │ +
299
│ │ │ │ +
300 private:
│ │ │ │ +
301 std::array<R,6> sign_;
│ │ │ │ +
302 };
│ │ │ │ +
│ │ │ │ +
303} // end namespace Dune
│ │ │ │ +
304#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference hexahedron.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:31
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:135
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:68
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition brezzidouglasmarini1cube3dlocalbasis.hh:36
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:214
│ │ │ │ +
BDM1Cube3DLocalBasis(std::bitset< 6 > s)
Make set number s, where 0 <= s < 64.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:50
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:295
│ │ │ │ +
BDM1Cube3DLocalBasis()
Standard constructor.
Definition brezzidouglasmarini1cube3dlocalbasis.hh:39
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasmarini1cube3dlocalbasis.hh:57
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ -
static constexpr int dimRange
dimension of the range
Definition common/localbasis.hh:49
│ │ │ │ -
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ -
static constexpr int dimDomain
dimension of the domain
Definition common/localbasis.hh:40
│ │ │ │ -
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ -
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ -
LocalBasisTraits::RangeFieldType RangeField
Definition localtoglobaladaptors.hh:37
│ │ │ │ -
LocalBasisTraits::DomainFieldType DomainField
Definition localtoglobaladaptors.hh:31
│ │ │ │ -
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition localtoglobaladaptors.hh:41
│ │ │ │ -
static const std::size_t dimDomainLocal
Definition localtoglobaladaptors.hh:32
│ │ │ │ -
LocalBasisTraits::RangeType Range
Definition localtoglobaladaptors.hh:39
│ │ │ │ -
static const std::size_t dimDomainGlobal
Definition localtoglobaladaptors.hh:33
│ │ │ │ -
static const std::size_t dimRange
Definition localtoglobaladaptors.hh:38
│ │ │ │ -
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition localtoglobaladaptors.hh:35
│ │ │ │ -
LocalBasisTraits::DomainType DomainLocal
Definition localtoglobaladaptors.hh:34
│ │ │ │ -
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition localtoglobaladaptors.hh:125
│ │ │ │ -
std::size_t order() const
return maximum polynomial order of the base function
Definition localtoglobaladaptors.hh:110
│ │ │ │ -
LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry::coorddimension > Traits
Definition localtoglobaladaptors.hh:84
│ │ │ │ -
ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry &geometry_)
construct a ScalarLocalToGlobalBasisAdaptor
Definition localtoglobaladaptors.hh:96
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Definition localtoglobaladaptors.hh:119
│ │ │ │ -
std::size_t size() const
Definition localtoglobaladaptors.hh:101
│ │ │ │ -
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ -
LocalToGlobalInterpolationAdaptor(const LocalInterpolation &localInterpolation_)
construct a LocalToGlobalInterpolationAdaptor
Definition localtoglobaladaptors.hh:165
│ │ │ │ -
void interpolate(const Function &function, std::vector< Coeff > &out) const
Definition localtoglobaladaptors.hh:170
│ │ │ │ -
Traits_ Traits
Definition localtoglobaladaptors.hh:153
│ │ │ │ -
Convert a simple scalar local finite element into a global finite element.
Definition localtoglobaladaptors.hh:187
│ │ │ │ -
GeometryType type() const
Definition localtoglobaladaptors.hh:229
│ │ │ │ -
const Traits::Coefficients & coefficients() const
Definition localtoglobaladaptors.hh:227
│ │ │ │ -
const Traits::Interpolation & interpolation() const
Definition localtoglobaladaptors.hh:225
│ │ │ │ -
const Traits::Basis & basis() const
Definition localtoglobaladaptors.hh:224
│ │ │ │ -
ScalarLocalToGlobalFiniteElementAdaptor(const LocalFiniteElement &localFE_, const Geometry &geometry)
construct a ScalarLocalToGlobalFiniteElementAdaptor
Definition localtoglobaladaptors.hh:218
│ │ │ │ -
Definition localtoglobaladaptors.hh:191
│ │ │ │ -
LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits::LocalInterpolationType, typename Basis::Traits > Interpolation
Definition localtoglobaladaptors.hh:196
│ │ │ │ -
LocalFiniteElement::Traits::LocalCoefficientsType Coefficients
Definition localtoglobaladaptors.hh:198
│ │ │ │ -
ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits::LocalBasisType, Geometry > Basis
Definition localtoglobaladaptors.hh:193
│ │ │ │ -
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ -
const FiniteElement make(const Geometry &geometry)
construct ScalarLocalToGlobalFiniteElementAdaptor
Definition localtoglobaladaptors.hh:274
│ │ │ │ -
ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > FiniteElement
Definition localtoglobaladaptors.hh:249
│ │ │ │ -
ScalarLocalToGlobalFiniteElementAdaptorFactory(const LocalFiniteElement &localFE_)
construct a ScalarLocalToGlobalFiniteElementAdaptorFactory
Definition localtoglobaladaptors.hh:261
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,333 +1,334 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localtoglobaladaptors.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_c_u_b_e_3_d │ │ │ │ │ +brezzidouglasmarini1cube3dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18namespace _D_u_n_e { │ │ │ │ │ -19 │ │ │ │ │ -21 │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 struct _L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s { │ │ │ │ │ -_3_1 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ -_3_2 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n; │ │ │ │ │ -_3_3 static const std::size_t _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l = dimDomainGlobal_; │ │ │ │ │ -_3_4 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -_3_5 typedef FieldVector _D_o_m_a_i_n_G_l_o_b_a_l; │ │ │ │ │ -36 │ │ │ │ │ -_3_7 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ -_3_8 static const std::size_t _d_i_m_R_a_n_g_e = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e; │ │ │ │ │ -_3_9 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e _R_a_n_g_e; │ │ │ │ │ -40 │ │ │ │ │ -_4_1 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ -42 }; │ │ │ │ │ -43 │ │ │ │ │ -45 │ │ │ │ │ -64 template │ │ │ │ │ -_6_5 class _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r { │ │ │ │ │ -66 static_assert(LocalBasis::Traits::dimRange == 1, │ │ │ │ │ -67 "ScalarLocalToGlobalBasisAdaptor can only wrap a " │ │ │ │ │ -68 "scalar local basis."); │ │ │ │ │ -69 static_assert((std::is_same::value), │ │ │ │ │ -71 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use " │ │ │ │ │ -72 "the same ctype as Geometry"); │ │ │ │ │ -73 static_assert │ │ │ │ │ -74 ( static_cast(LocalBasis::Traits::dimDomain) == │ │ │ │ │ -75 static_cast(Geometry::mydimension), │ │ │ │ │ -76 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must " │ │ │ │ │ -77 "match local dimension of Geometry"); │ │ │ │ │ -78 │ │ │ │ │ -79 const LocalBasis& localBasis; │ │ │ │ │ -80 Geometry geometry; │ │ │ │ │ -81 │ │ │ │ │ -82 public: │ │ │ │ │ -83 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ -85 │ │ │ │ │ -87 │ │ │ │ │ -_9_6 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r(const LocalBasis& localBasis_, │ │ │ │ │ -97 const Geometry& geometry_) : │ │ │ │ │ -98 localBasis(localBasis_), geometry(geometry_) │ │ │ │ │ -99 { } │ │ │ │ │ -100 │ │ │ │ │ -_1_0_1 std::size_t _s_i_z_e() const { return localBasis.size(); } │ │ │ │ │ -103 │ │ │ │ │ -_1_1_0 std::size_t _o_r_d_e_r() const { │ │ │ │ │ -111 if(geometry.affine()) │ │ │ │ │ -112 // affine linear │ │ │ │ │ -113 return localBasis.order(); │ │ │ │ │ -114 else │ │ │ │ │ -115 // assume at most order dim │ │ │ │ │ -116 return localBasis.order() + _T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l - 1; │ │ │ │ │ -117 } │ │ │ │ │ -118 │ │ │ │ │ -_1_1_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, │ │ │ │ │ -120 std::vector& out) const │ │ │ │ │ -121 { │ │ │ │ │ -122 localBasis.evaluateFunction(in, out); │ │ │ │ │ -123 } │ │ │ │ │ -124 │ │ │ │ │ -_1_2_5 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, │ │ │ │ │ -126 std::vector& out) const │ │ │ │ │ -127 { │ │ │ │ │ -128 std::vector │ │ │ │ │ -129 localJacobian(_s_i_z_e()); │ │ │ │ │ -130 localBasis.evaluateJacobian(in, localJacobian); │ │ │ │ │ -131 │ │ │ │ │ -132 const typename Geometry::JacobianInverseTransposed &geoJacobian = │ │ │ │ │ -133 geometry.jacobianInverseTransposed(in); │ │ │ │ │ -134 │ │ │ │ │ -135 out.resize(_s_i_z_e()); │ │ │ │ │ -136 for(std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -137 geoJacobian.mv(localJacobian[i][0], out[i][0]); │ │ │ │ │ -138 } │ │ │ │ │ -139 }; │ │ │ │ │ -140 │ │ │ │ │ -142 │ │ │ │ │ -148 template │ │ │ │ │ -_1_4_9 class _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r { │ │ │ │ │ -150 const LocalInterpolation& localInterpolation; │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include "../../common/localbasis.hh" │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 class _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +31 { │ │ │ │ │ +32 │ │ │ │ │ +33 public: │ │ │ │ │ +34 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>, │ │ │ │ │ +35 R,3,Dune::FieldVector, │ │ │ │ │ +_3_6 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +37 │ │ │ │ │ +_3_9 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +40 { │ │ │ │ │ +41 for (size_t i=0; i<6; i++) │ │ │ │ │ +42 sign_[i] = 1.0; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_5_0 _B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s(std::bitset<6> s) │ │ │ │ │ +51 { │ │ │ │ │ +52 for (size_t i=0; i<6; i++) │ │ │ │ │ +53 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_7 unsigned int _s_i_z_e() const │ │ │ │ │ +58 { │ │ │ │ │ +59 return 18; │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +_6_8 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +69 std::vector& out) const │ │ │ │ │ +70 { │ │ │ │ │ +71 out.resize(_s_i_z_e()); │ │ │ │ │ +72 │ │ │ │ │ +73 out[0][0] = sign_[0] * (in[0] - 1.0); │ │ │ │ │ +74 out[0][1] = 0; │ │ │ │ │ +75 out[0][2] = 0; │ │ │ │ │ +76 out[1][0] = sign_[1] * in[0]; │ │ │ │ │ +77 out[1][1] = 0; │ │ │ │ │ +78 out[1][2] = 0; │ │ │ │ │ +79 out[2][0] = 0; │ │ │ │ │ +80 out[2][1] = sign_[2] * (in[1] - 1.0); │ │ │ │ │ +81 out[2][2] = 0; │ │ │ │ │ +82 out[3][0] = 0; │ │ │ │ │ +83 out[3][1] = sign_[3] * in[1]; │ │ │ │ │ +84 out[3][2] = 0; │ │ │ │ │ +85 out[4][0] = 0; │ │ │ │ │ +86 out[4][1] = 0; │ │ │ │ │ +87 out[4][2] = sign_[4] * (in[2] - 1.0); │ │ │ │ │ +88 out[5][0] = 0; │ │ │ │ │ +89 out[5][1] = 0; │ │ │ │ │ +90 out[5][2] = sign_[5] * in[2]; │ │ │ │ │ +91 out[6][0] = 6.0 * in[0] * in[1] - 3 * in[0]-6 * in[1] + 3.0; │ │ │ │ │ +92 out[6][1] = -3.0 * in[1] * in[1] + 3 * in[1]; │ │ │ │ │ +93 out[6][2] = 0; │ │ │ │ │ +94 out[7][0] = -6.0 * in[0] * in[1] + 3 * in[0]; │ │ │ │ │ +95 out[7][1] = 3.0 * in[1] * in[1] - 3 * in[1]; │ │ │ │ │ +96 out[7][2] = 0; │ │ │ │ │ +97 out[8][0] = 3.0 * in[0] * in[0] - 3 * in[0]; │ │ │ │ │ +98 out[8][1] = -6.0 * in[0] * in[1] + 3 * in[1]+6 * in[0]-3.0; │ │ │ │ │ +99 out[8][2] = 0; │ │ │ │ │ +100 out[9][0] = -3.0 * in[0] * in[0] + 3 * in[0]; │ │ │ │ │ +101 out[9][1] = 6.0 * in[0] * in[1] - 3 * in[1]; │ │ │ │ │ +102 out[9][2] = 0; │ │ │ │ │ +103 out[10][0] = -3.0 * in[0] * in[0] + 3 * in[0]; │ │ │ │ │ +104 out[10][1] = 0; │ │ │ │ │ +105 out[10][2] = 6.0 * in[0] * in[2]-6 * in[0]-3 * in[2] + 3.0; │ │ │ │ │ +106 out[11][0] = 3.0 * in[0] * in[0]-3 * in[0]; │ │ │ │ │ +107 out[11][1] = 0; │ │ │ │ │ +108 out[11][2] = -6.0 * in[0] * in[2] + 3 * in[2]; │ │ │ │ │ +109 out[12][0] = -6.0 * in[0] * in[2]+6 * in[2] + 3 * in[0]-3.0; │ │ │ │ │ +110 out[12][1] = 0; │ │ │ │ │ +111 out[12][2] = 3.0 * in[2] * in[2]-3 * in[2]; │ │ │ │ │ +112 out[13][0] = -3 * in[0]+6 * in[0] * in[2]; │ │ │ │ │ +113 out[13][1] = 0; │ │ │ │ │ +114 out[13][2] = -3.0 * in[2] * in[2] + 3 * in[2]; │ │ │ │ │ +115 out[14][0] = 0; │ │ │ │ │ +116 out[14][1] = 6.0 * in[1] * in[2]-3 * in[1]-6 * in[2] + 3.0; │ │ │ │ │ +117 out[14][2] = -3 * in[2] * in[2] + 3 * in[2]; │ │ │ │ │ +118 out[15][0] = 0; │ │ │ │ │ +119 out[15][1] = -6.0 * in[1] * in[2] + 3 * in[1]; │ │ │ │ │ +120 out[15][2] = 3.0 * in[2] * in[2]-3 * in[2]; │ │ │ │ │ +121 out[16][0] = 0; │ │ │ │ │ +122 out[16][1] = 3.0 * in[1] * in[1]-3 * in[1]; │ │ │ │ │ +123 out[16][2] = -6.0 * in[1] * in[2] + 3 * in[2]+6 * in[1]-3.0; │ │ │ │ │ +124 out[17][0] = 0; │ │ │ │ │ +125 out[17][1] = -3.0 * in[1] * in[1] + 3 * in[1]; │ │ │ │ │ +126 out[17][2] = 6.0 * in[1] * in[2] - 3.0 * in[2]; │ │ │ │ │ +127 } │ │ │ │ │ +128 │ │ │ │ │ +_1_3_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +136 std::vector& out) const │ │ │ │ │ +137 { │ │ │ │ │ +138 out.resize(_s_i_z_e()); │ │ │ │ │ +139 │ │ │ │ │ +140 out[0][0] = { sign_[0], 0, 0}; │ │ │ │ │ +141 out[0][1] = { 0, 0, 0}; │ │ │ │ │ +142 out[0][2] = { 0, 0, 0}; │ │ │ │ │ +143 │ │ │ │ │ +144 out[1][0] = { sign_[1], 0, 0}; │ │ │ │ │ +145 out[1][1] = { 0, 0, 0}; │ │ │ │ │ +146 out[1][2] = { 0, 0, 0}; │ │ │ │ │ +147 │ │ │ │ │ +148 out[2][0] = { 0, 0, 0}; │ │ │ │ │ +149 out[2][1] = { 0, sign_[2], 0}; │ │ │ │ │ +150 out[2][2] = { 0, 0, 0}; │ │ │ │ │ 151 │ │ │ │ │ -152 public: │ │ │ │ │ -_1_5_3 typedef Traits_ _T_r_a_i_t_s; │ │ │ │ │ -154 │ │ │ │ │ -156 │ │ │ │ │ -_1_6_4 _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -165 ( const LocalInterpolation& localInterpolation_) : │ │ │ │ │ -166 localInterpolation(localInterpolation_) │ │ │ │ │ -167 { } │ │ │ │ │ -168 │ │ │ │ │ -169 template │ │ │ │ │ -_1_7_0 void _i_n_t_e_r_p_o_l_a_t_e(const Function& function, std::vector& out) const │ │ │ │ │ -171 { localInterpolation.interpolate(function, out); } │ │ │ │ │ -172 }; │ │ │ │ │ -173 │ │ │ │ │ -176 │ │ │ │ │ -186 template │ │ │ │ │ -_1_8_7 struct _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r { │ │ │ │ │ -_1_9_1 struct _T_r_a_i_t_s { │ │ │ │ │ -192 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r _B_a_s_i_s; │ │ │ │ │ -194 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -_1_9_6 _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -197 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType │ │ │ │ │ -_1_9_8 _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -199 }; │ │ │ │ │ -200 │ │ │ │ │ -201 private: │ │ │ │ │ -202 const LocalFiniteElement &localFE; │ │ │ │ │ -203 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ -204 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ -205 │ │ │ │ │ -206 public: │ │ │ │ │ -208 │ │ │ │ │ -_2_1_7 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ -218 ( const LocalFiniteElement& localFE_, const Geometry &geometry) : │ │ │ │ │ -219 localFE(localFE_), │ │ │ │ │ -220 basis_(localFE.localBasis(), geometry), │ │ │ │ │ -221 interpolation_(localFE.localInterpolation()) │ │ │ │ │ -222 { } │ │ │ │ │ -223 │ │ │ │ │ -_2_2_4 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ -_2_2_5 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -226 { return interpolation_; } │ │ │ │ │ -_2_2_7 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -228 { return localFE.localCoefficients(); } │ │ │ │ │ -_2_2_9 GeometryType _t_y_p_e() const { return localFE.type(); } │ │ │ │ │ -230 }; │ │ │ │ │ -231 │ │ │ │ │ -233 │ │ │ │ │ -243 template │ │ │ │ │ -_2_4_4 class _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y { │ │ │ │ │ -245 const LocalFiniteElement& localFE; │ │ │ │ │ -246 │ │ │ │ │ -247 public: │ │ │ │ │ -248 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -250 │ │ │ │ │ -252 │ │ │ │ │ -_2_6_0 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ -261 (const LocalFiniteElement &localFE_) : localFE(localFE_) {} │ │ │ │ │ -262 │ │ │ │ │ -264 │ │ │ │ │ -_2_7_4 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry) { │ │ │ │ │ -275 return _F_i_n_i_t_e_E_l_e_m_e_n_t(localFE, geometry); │ │ │ │ │ -276 } │ │ │ │ │ -277 }; │ │ │ │ │ -278 │ │ │ │ │ -279} // namespace Dune │ │ │ │ │ -280 │ │ │ │ │ -281#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ +152 out[3][0] = { 0, 0, 0}; │ │ │ │ │ +153 out[3][1] = { 0, sign_[3], 0}; │ │ │ │ │ +154 out[3][2] = { 0, 0, 0}; │ │ │ │ │ +155 │ │ │ │ │ +156 out[4][0] = { 0, 0, 0}; │ │ │ │ │ +157 out[4][1] = { 0, 0, 0}; │ │ │ │ │ +158 out[4][2] = { 0, 0, sign_[4]}; │ │ │ │ │ +159 │ │ │ │ │ +160 out[5][0] = { 0, 0, 0}; │ │ │ │ │ +161 out[5][1] = { 0, 0, 0}; │ │ │ │ │ +162 out[5][2] = { 0, 0, sign_[5]}; │ │ │ │ │ +163 │ │ │ │ │ +164 out[6][0] = { 6*in[1]-3, 6*in[0]-6, 0}; │ │ │ │ │ +165 out[6][1] = { 0, -6*in[1]+3, 0}; │ │ │ │ │ +166 out[6][2] = { 0, 0, 0}; │ │ │ │ │ +167 │ │ │ │ │ +168 out[7][0] = {-6*in[1]+3, -6*in[0], 0}; │ │ │ │ │ +169 out[7][1] = { 0, 6*in[1]-3, 0}; │ │ │ │ │ +170 out[7][2] = { 0, 0, 0}; │ │ │ │ │ +171 │ │ │ │ │ +172 out[8][0] = { 6*in[0]-3, 0, 0}; │ │ │ │ │ +173 out[8][1] = {-6*in[1]+6, -6*in[0]+3, 0}; │ │ │ │ │ +174 out[8][2] = { 0, 0, 0}; │ │ │ │ │ +175 │ │ │ │ │ +176 out[9][0] = {-6*in[0]+3, 0, 0}; │ │ │ │ │ +177 out[9][1] = { 6*in[1], 6*in[0]-3, 0}; │ │ │ │ │ +178 out[9][2] = { 0, 0, 0}; │ │ │ │ │ +179 │ │ │ │ │ +180 out[10][0] = {-6*in[0]+3, 0, 0}; │ │ │ │ │ +181 out[10][1] = { 0, 0, 0}; │ │ │ │ │ +182 out[10][2] = { 6*in[2]-6, 0, 6*in[0]-3}; │ │ │ │ │ +183 │ │ │ │ │ +184 out[11][0] = { 6*in[0]-3, 0, 0}; │ │ │ │ │ +185 out[11][1] = { 0, 0, 0}; │ │ │ │ │ +186 out[11][2] = { -6*in[2], 0, -6*in[0]+3}; │ │ │ │ │ +187 │ │ │ │ │ +188 out[12][0] = {-6*in[2]+3, 0, -6*in[0]+6}; │ │ │ │ │ +189 out[12][1] = { 0, 0, 0}; │ │ │ │ │ +190 out[12][2] = { 0, 0, 6*in[2]-3}; │ │ │ │ │ +191 │ │ │ │ │ +192 out[13][0] = { 6*in[2]-3, 0, 6*in[0]}; │ │ │ │ │ +193 out[13][1] = { 0, 0, 0}; │ │ │ │ │ +194 out[13][2] = { 0, 0, -6*in[2]+3}; │ │ │ │ │ +195 │ │ │ │ │ +196 out[14][0] = { 0, 0, 0}; │ │ │ │ │ +197 out[14][1] = { 0, 6*in[2]-3, 6*in[1]-6}; │ │ │ │ │ +198 out[14][2] = { 0, 0, -6*in[2]+3}; │ │ │ │ │ +199 │ │ │ │ │ +200 out[15][0] = { 0, 0, 0}; │ │ │ │ │ +201 out[15][1] = { 0, -6*in[2]+3, -6*in[1]}; │ │ │ │ │ +202 out[15][2] = { 0, 0, 6*in[2]-3}; │ │ │ │ │ +203 │ │ │ │ │ +204 out[16][0] = { 0, 0, 0}; │ │ │ │ │ +205 out[16][1] = { 0, 6*in[1]-3, 0}; │ │ │ │ │ +206 out[16][2] = { 0, -6*in[2]+6, -6*in[1]+3}; │ │ │ │ │ +207 │ │ │ │ │ +208 out[17][0] = { 0, 0, 0}; │ │ │ │ │ +209 out[17][1] = { 0, -6*in[1]+3, 0}; │ │ │ │ │ +210 out[17][2] = { 0, 6*in[2], 6*in[1]-3}; │ │ │ │ │ +211 } │ │ │ │ │ +212 │ │ │ │ │ +_2_1_4 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +215 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +216 std::vector& out) const // return value │ │ │ │ │ +217 { │ │ │ │ │ +218 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +219 if (totalOrder == 0) { │ │ │ │ │ +220 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +221 } else if (totalOrder == 1) { │ │ │ │ │ +222 out.resize(_s_i_z_e()); │ │ │ │ │ +223 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +224 │ │ │ │ │ +225 switch (direction) { │ │ │ │ │ +226 case 0: │ │ │ │ │ +227 out[0] = { sign_[0], 0, 0}; │ │ │ │ │ +228 out[1] = { sign_[1], 0, 0}; │ │ │ │ │ +229 out[2] = { 0, 0, 0}; │ │ │ │ │ +230 out[3] = { 0, 0, 0}; │ │ │ │ │ +231 out[4] = { 0, 0, 0}; │ │ │ │ │ +232 out[5] = { 0, 0, 0}; │ │ │ │ │ +233 out[6] = { 6*in[1]-3, 0, 0}; │ │ │ │ │ +234 out[7] = {-6*in[1]+3, 0, 0}; │ │ │ │ │ +235 out[8] = { 6*in[0]-3, -6*in[1]+6, 0}; │ │ │ │ │ +236 out[9] = {-6*in[0]+3, 6*in[1], 0}; │ │ │ │ │ +237 out[10] = {-6*in[0]+3, 0, 6*in[2]-6}; │ │ │ │ │ +238 out[11] = { 6*in[0]-3, 0, -6*in[2]}; │ │ │ │ │ +239 out[12] = {-6*in[2]+3, 0, 0}; │ │ │ │ │ +240 out[13] = { 6*in[2]-3, 0, 0}; │ │ │ │ │ +241 out[14] = { 0, 0, 0}; │ │ │ │ │ +242 out[15] = { 0, 0, 0}; │ │ │ │ │ +243 out[16] = { 0, 0, 0}; │ │ │ │ │ +244 out[17] = { 0, 0, 0}; │ │ │ │ │ +245 break; │ │ │ │ │ +246 case 1: │ │ │ │ │ +247 out[0] = { 0, 0, 0}; │ │ │ │ │ +248 out[1] = { 0, 0, 0}; │ │ │ │ │ +249 out[2] = { 0, sign_[2], 0}; │ │ │ │ │ +250 out[3] = { 0, sign_[3], 0}; │ │ │ │ │ +251 out[4] = { 0, 0, 0}; │ │ │ │ │ +252 out[5] = { 0, 0, 0}; │ │ │ │ │ +253 out[6] = { 6*in[0]-6, -6*in[1]+3, 0}; │ │ │ │ │ +254 out[7] = { -6*in[0], 6*in[1]-3, 0}; │ │ │ │ │ +255 out[8] = { 0, -6*in[0]+3, 0}; │ │ │ │ │ +256 out[9] = { 0, 6*in[0]-3, 0}; │ │ │ │ │ +257 out[10] = { 0, 0, 0}; │ │ │ │ │ +258 out[11] = { 0, 0, 0}; │ │ │ │ │ +259 out[12] = { 0, 0, 0}; │ │ │ │ │ +260 out[13] = { 0, 0, 0}; │ │ │ │ │ +261 out[14] = { 0, 6*in[2]-3, 0}; │ │ │ │ │ +262 out[15] = { 0, -6*in[2]+3, 0}; │ │ │ │ │ +263 out[16] = { 0, 6*in[1]-3, -6*in[2]+6}; │ │ │ │ │ +264 out[17] = { 0, -6*in[1]+3, 6*in[2]}; │ │ │ │ │ +265 break; │ │ │ │ │ +266 case 2: │ │ │ │ │ +267 out[0] = { 0, 0, 0}; │ │ │ │ │ +268 out[1] = { 0, 0, 0}; │ │ │ │ │ +269 out[2] = { 0, 0, 0}; │ │ │ │ │ +270 out[3] = { 0, 0, 0}; │ │ │ │ │ +271 out[4] = { 0, 0, sign_[4]}; │ │ │ │ │ +272 out[5] = { 0, 0, sign_[5]}; │ │ │ │ │ +273 out[6] = { 0, 0, 0}; │ │ │ │ │ +274 out[7] = { 0, 0, 0}; │ │ │ │ │ +275 out[8] = { 0, 0, 0}; │ │ │ │ │ +276 out[9] = { 0, 0, 0}; │ │ │ │ │ +277 out[10] = { 0, 0, 6*in[0]-3}; │ │ │ │ │ +278 out[11] = { 0, 0, -6*in[0]+3}; │ │ │ │ │ +279 out[12] = {-6*in[0]+6, 0, 6*in[2]-3}; │ │ │ │ │ +280 out[13] = { 6*in[0], 0, -6*in[2]+3}; │ │ │ │ │ +281 out[14] = { 0, 6*in[1]-6, -6*in[2]+3}; │ │ │ │ │ +282 out[15] = { 0, -6*in[1], 6*in[2]-3}; │ │ │ │ │ +283 out[16] = { 0, 0, -6*in[1]+3}; │ │ │ │ │ +284 out[17] = { 0, 0, 6*in[1]-3}; │ │ │ │ │ +285 break; │ │ │ │ │ +286 default: │ │ │ │ │ +287 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +288 } │ │ │ │ │ +289 } else { │ │ │ │ │ +290 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +291 } │ │ │ │ │ +292 } │ │ │ │ │ +293 │ │ │ │ │ +_2_9_5 unsigned int _o_r_d_e_r() const │ │ │ │ │ +296 { │ │ │ │ │ +297 return 2; │ │ │ │ │ +298 } │ │ │ │ │ +299 │ │ │ │ │ +300 private: │ │ │ │ │ +301 std::array sign_; │ │ │ │ │ +302 }; │ │ │ │ │ +303} // end namespace Dune │ │ │ │ │ +304#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:214 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM1Cube3DLocalBasis(std::bitset< 6 > s) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:295 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDM1Cube3DLocalBasis() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1cube3dlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ -RF RangeFieldType │ │ │ │ │ -Export type for range field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static constexpr int dimRange │ │ │ │ │ -dimension of the range │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ -DF DomainFieldType │ │ │ │ │ -Export type for domain field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ -static constexpr int dimDomain │ │ │ │ │ -dimension of the domain │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -R RangeType │ │ │ │ │ -range type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ -Traits class for local-to-global basis adaptors. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ -LocalBasisTraits::RangeFieldType RangeField │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ -LocalBasisTraits::DomainFieldType DomainField │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ -FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -static const std::size_t dimDomainLocal │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ -LocalBasisTraits::RangeType Range │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ -static const std::size_t dimDomainGlobal │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const std::size_t dimRange │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ -FieldVector< DomainField, dimDomainGlobal > DomainGlobal │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -LocalBasisTraits::DomainType DomainLocal │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local basis into a global basis. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ -typename Traits::Jacobian > &out) const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:125 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -return maximum polynomial order of the base function │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry:: │ │ │ │ │ -coorddimension > Traits │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ -ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry │ │ │ │ │ -&geometry_) │ │ │ │ │ -construct a ScalarLocalToGlobalBasisAdaptor │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:96 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ -typename Traits::Range > &out) const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:101 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -Convert a local interpolation into a global interpolation. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -LocalToGlobalInterpolationAdaptor(const LocalInterpolation │ │ │ │ │ -&localInterpolation_) │ │ │ │ │ -construct a LocalToGlobalInterpolationAdaptor │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:165 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const Function &function, std::vector< Coeff > &out) const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:170 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ -Traits_ Traits │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:153 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local finite element into a global finite element. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:229 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::Coefficients & coefficients() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:227 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::Interpolation & interpolation() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_b_a_s_i_s │ │ │ │ │ -const Traits::Basis & basis() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:224 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_: │ │ │ │ │ -_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ -ScalarLocalToGlobalFiniteElementAdaptor(const LocalFiniteElement &localFE_, │ │ │ │ │ -const Geometry &geometry) │ │ │ │ │ -construct a ScalarLocalToGlobalFiniteElementAdaptor │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:218 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:191 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits:: │ │ │ │ │ -LocalInterpolationType, typename Basis::Traits > Interpolation │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:196 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -LocalFiniteElement::Traits::LocalCoefficientsType Coefficients │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:198 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits:: │ │ │ │ │ -LocalBasisType, Geometry > Basis │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:193 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ -Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:244 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &geometry) │ │ │ │ │ -construct ScalarLocalToGlobalFiniteElementAdaptor │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:274 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > │ │ │ │ │ -FiniteElement │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:249 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ -_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ -ScalarLocalToGlobalFiniteElementAdaptorFactory(const LocalFiniteElement │ │ │ │ │ -&localFE_) │ │ │ │ │ -construct a ScalarLocalToGlobalFiniteElementAdaptorFactory │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:261 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementtraits.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarinisimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localfiniteelementtraits.hh File Reference
│ │ │ │ +
brezzidouglasmarinisimplex.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LocalFiniteElementTraits< LB, LC, LI >
 traits helper struct More...
class  Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 1 >
 Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 1. More...
 
class  Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 2 >
 Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 2. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,19 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localfiniteelementtraits.hh File Reference │ │ │ │ │ +brezzidouglasmarinisimplex.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_ _L_B_,_ _L_C_,_ _L_I_ _> │ │ │ │ │ -  traits helper struct _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ +  Brezzi-Douglas-Marini local finite elements for simplices with │ │ │ │ │ + dimension 2 and order 1. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ +  Brezzi-Douglas-Marini local finite elements for simplices with │ │ │ │ │ + dimension 2 and order 2. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00095_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementtraits.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarinisimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,50 +70,88 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementtraits.hh
│ │ │ │ +
brezzidouglasmarinisimplex.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ -
6#define DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │
7
│ │ │ │ -
8namespace Dune {
│ │ │ │ -
9
│ │ │ │ -
11 template<class LB, class LC, class LI>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
13 {
│ │ │ │ -
16 typedef LB LocalBasisType;
│ │ │ │ -
17
│ │ │ │ - │ │ │ │ -
21
│ │ │ │ - │ │ │ │ -
25 };
│ │ │ │ -
│ │ │ │ -
26
│ │ │ │ -
27}
│ │ │ │ -
28
│ │ │ │ -
29#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ +
10
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
22 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ + │ │ │ │ +
24
│ │ │ │ +
28 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {}
│ │ │ │ +
│ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
44 {}
│ │ │ │ +
│ │ │ │ +
45 };
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
50 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
53 {
│ │ │ │ +
54 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {}
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
66 {}
│ │ │ │ +
│ │ │ │ +
67 };
│ │ │ │ +
│ │ │ │ +
68
│ │ │ │ +
69} // namespace Dune
│ │ │ │ +
70
│ │ │ │ +
71#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini1simplex2d.hh:28
│ │ │ │ +
Second order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2d.hh:27
│ │ │ │ +
Brezzi-Douglas-Marini local finite element for simplices.
Definition brezzidouglasmarinisimplex.hh:23
│ │ │ │ +
BrezziDouglasMariniSimplexLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinisimplex.hh:42
│ │ │ │ +
BrezziDouglasMariniSimplexLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinisimplex.hh:34
│ │ │ │ +
BrezziDouglasMariniSimplexLocalFiniteElement(int s)
Constructor with a set of edge orientations.
Definition brezzidouglasmarinisimplex.hh:64
│ │ │ │ +
BrezziDouglasMariniSimplexLocalFiniteElement()
Default constructor.
Definition brezzidouglasmarinisimplex.hh:56
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,48 +1,93 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementtraits.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +brezzidouglasmarinisimplex.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ -6#define DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8namespace _D_u_n_e { │ │ │ │ │ -9 │ │ │ │ │ -11 template │ │ │ │ │ -_1_2 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -13 { │ │ │ │ │ -_1_6 typedef LB _L_o_c_a_l_B_a_s_i_s_T_y_p_e; │ │ │ │ │ -17 │ │ │ │ │ -_2_0 typedef LC _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e; │ │ │ │ │ -21 │ │ │ │ │ -_2_4 typedef LI _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e; │ │ │ │ │ -25 }; │ │ │ │ │ -26 │ │ │ │ │ -27} │ │ │ │ │ -28 │ │ │ │ │ -29#endif │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h> │ │ │ │ │ +10 │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +24 │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +30 : public _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +31 { │ │ │ │ │ +32 public: │ │ │ │ │ +_3_4 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +35 {} │ │ │ │ │ +36 │ │ │ │ │ +_4_2 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +43 : _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +44 {} │ │ │ │ │ +45 }; │ │ │ │ │ +46 │ │ │ │ │ +50 template │ │ │ │ │ +_5_1 class _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +52 : public _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +53 { │ │ │ │ │ +54 public: │ │ │ │ │ +_5_6 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +57 {} │ │ │ │ │ +58 │ │ │ │ │ +_6_4 _B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +65 : _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +66 {} │ │ │ │ │ +67 }; │ │ │ │ │ +68 │ │ │ │ │ +69} // namespace Dune │ │ │ │ │ +70 │ │ │ │ │ +71#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_BREZZIDOUGLASMARINISIMPLEX_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Brezzi-Douglas-Marini local finite element for simplices. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniSimplexLocalFiniteElement(int s) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniSimplexLocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniSimplexLocalFiniteElement(int s) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:64 │ │ │ │ │ +_D_u_n_e_:_:_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_B_r_e_z_z_i_D_o_u_g_l_a_s_M_a_r_i_n_i_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BrezziDouglasMariniSimplexLocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarinisimplex.hh:56 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localkey.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localkey.hh File Reference
│ │ │ │ +
brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <ostream>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalKey
 Describe position of one degree of freedom. More...
class  Dune::BDM1Simplex2DLocalInterpolation< LB >
 First order Brezzi-Douglas-Marini shape functions on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localkey.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1simplex2dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -  Describe position of one degree of freedom. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on the reference │ │ │ │ │ + triangle. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00104_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localkey.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,130 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localkey.hh
│ │ │ │ +
brezzidouglasmarini1simplex2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALKEY_HH
│ │ │ │ -
6#define DUNE_LOCALKEY_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <ostream>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │
11
│ │ │ │
12namespace Dune
│ │ │ │
13{
│ │ │ │ +
22 template<class LB>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
24 {
│ │ │ │ -
25 public:
│ │ │ │ -
26
│ │ │ │ -
28 enum {
│ │ │ │ - │ │ │ │ -
38 };
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 constexpr LocalKey () noexcept
│ │ │ │ -
42 : values_{}
│ │ │ │ -
43 {}
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
50 constexpr LocalKey (unsigned int s, unsigned int c, unsigned int i) noexcept
│ │ │ │ -
51 : values_{s,c,i}
│ │ │ │ -
52 {}
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
55 [[nodiscard]]
│ │ │ │ -
│ │ │ │ -
56 constexpr unsigned int subEntity () const noexcept
│ │ │ │ -
57 {
│ │ │ │ -
58 return values_[0];
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
62 [[nodiscard]]
│ │ │ │ -
│ │ │ │ -
63 constexpr unsigned int codim () const noexcept
│ │ │ │ -
64 {
│ │ │ │ -
65 return values_[1];
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
69 [[nodiscard]]
│ │ │ │ -
│ │ │ │ -
70 constexpr unsigned int index () const noexcept
│ │ │ │ -
71 {
│ │ │ │ -
72 return values_[2];
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
│ │ │ │ -
76 constexpr void index (unsigned int i) noexcept
│ │ │ │ -
77 {
│ │ │ │ -
78 values_[2] = i;
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
82 [[nodiscard]]
│ │ │ │ -
│ │ │ │ -
83 bool operator< (const LocalKey& other) const noexcept
│ │ │ │ -
84 {
│ │ │ │ -
85 return values_ < other.values_;
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ -
89 friend std::ostream& operator<< (std::ostream& s, const LocalKey& localKey)
│ │ │ │ -
90 {
│ │ │ │ -
91 return s << "[ subEntity: " << localKey.subEntity()
│ │ │ │ -
92 << ", codim: " << localKey.codim()
│ │ │ │ -
93 << ", index: " << localKey.index() << " ]";
│ │ │ │ -
94 }
│ │ │ │ -
│ │ │ │ -
95
│ │ │ │ -
96 private:
│ │ │ │ -
97
│ │ │ │ -
98 // We use an array to store the values in order to be able to use the array::operator< implementation
│ │ │ │ -
99 std::array<unsigned int,3> values_;
│ │ │ │ -
100
│ │ │ │ -
101 };
│ │ │ │ -
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ +
31 }
│ │ │ │ +
│ │ │ │ +
32
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {
│ │ │ │ +
40 using std::sqrt;
│ │ │ │ +
41 sign0 = sign1 = sign2 = 1.0;
│ │ │ │ +
42 if (s & 1)
│ │ │ │ +
43 {
│ │ │ │ +
44 sign0 = -1.0;
│ │ │ │ +
45 }
│ │ │ │ +
46 if (s & 2)
│ │ │ │ +
47 {
│ │ │ │ +
48 sign1 = -1.0;
│ │ │ │ +
49 }
│ │ │ │ +
50 if (s & 4)
│ │ │ │ +
51 {
│ │ │ │ +
52 sign2 = -1.0;
│ │ │ │ +
53 }
│ │ │ │ +
54
│ │ │ │ +
55 n0[0] = 0.0;
│ │ │ │ +
56 n0[1] = -1.0;
│ │ │ │ +
57 n1[0] = -1.0;
│ │ │ │ +
58 n1[1] = 0.0;
│ │ │ │ +
59 n2[0] = 1.0/sqrt(2.0);
│ │ │ │ +
60 n2[1] = 1.0/sqrt(2.0);
│ │ │ │ +
61 c0 = 0.5*n0[0] - 1.0*n0[1];
│ │ │ │ +
62 c1 = -1.0*n1[0] + 0.5*n1[1];
│ │ │ │ +
63 c2 = 0.5*n2[0] + 0.5*n2[1];
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
74 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
75 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
76 {
│ │ │ │ +
77 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
78 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
79
│ │ │ │ +
80 out.resize(6);
│ │ │ │ +
81 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
82
│ │ │ │ +
83 const int qOrder = 4;
│ │ │ │ +
84 const Dune::QuadratureRule<Scalar,1>& rule = Dune::QuadratureRules<Scalar,1>::rule(Dune::GeometryTypes::simplex(1), qOrder);
│ │ │ │ +
85
│ │ │ │ +
86 for (typename Dune::QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ +
87 {
│ │ │ │ +
88 Scalar qPos = it->position();
│ │ │ │ +
89 typename LB::Traits::DomainType localPos;
│ │ │ │ +
90
│ │ │ │ +
91 localPos[0] = qPos;
│ │ │ │ +
92 localPos[1] = 0.0;
│ │ │ │ +
93 auto y = f(localPos);
│ │ │ │ +
94 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0;
│ │ │ │ +
95 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight()/c0;
│ │ │ │ +
96
│ │ │ │ +
97 localPos[0] = 0.0;
│ │ │ │ +
98 localPos[1] = qPos;
│ │ │ │ +
99 y = f(localPos);
│ │ │ │ +
100 out[1] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1/c1;
│ │ │ │ +
101 out[4] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight()/c1;
│ │ │ │
102
│ │ │ │ -
103}
│ │ │ │ -
104#endif
│ │ │ │ +
103 localPos[0] = 1.0 - qPos;
│ │ │ │ +
104 localPos[1] = qPos;
│ │ │ │ +
105 y = f(localPos);
│ │ │ │ +
106 out[2] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2;
│ │ │ │ +
107 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(2.0*qPos - 1.0)*it->weight()/c2;
│ │ │ │ +
108 }
│ │ │ │ +
109 }
│ │ │ │ +
│ │ │ │ +
110
│ │ │ │ +
111 private:
│ │ │ │ +
112 typename LB::Traits::RangeFieldType sign0,sign1,sign2;
│ │ │ │ +
113 typename LB::Traits::DomainType n0,n1,n2;
│ │ │ │ +
114 typename LB::Traits::RangeFieldType c0,c1,c2;
│ │ │ │ +
115 };
│ │ │ │ +
│ │ │ │ +
116}
│ │ │ │ +
117
│ │ │ │ +
118#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
bool operator<(const LocalKey &other) const noexcept
Less-than operator so we can use this class as a key type in stl containers.
Definition localkey.hh:83
│ │ │ │ -
constexpr void index(unsigned int i) noexcept
Set index component.
Definition localkey.hh:76
│ │ │ │ -
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ -
constexpr LocalKey(unsigned int s, unsigned int c, unsigned int i) noexcept
Initialize all components.
Definition localkey.hh:50
│ │ │ │ -
@ intersectionCodim
Codimension returned by LocalKey::codim() for degrees of freedom attached to an intersection.
Definition localkey.hh:37
│ │ │ │ -
constexpr unsigned int codim() const noexcept
Return codim of associated entity.
Definition localkey.hh:63
│ │ │ │ -
friend std::ostream & operator<<(std::ostream &s, const LocalKey &localKey)
Write LocalKey object to output stream.
Definition localkey.hh:89
│ │ │ │ -
constexpr LocalKey() noexcept
Standard constructor for uninitialized local index.
Definition localkey.hh:41
│ │ │ │ -
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:24
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:75
│ │ │ │ +
BDM1Simplex2DLocalInterpolation(unsigned int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:38
│ │ │ │ +
BDM1Simplex2DLocalInterpolation()
Standard constructor.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:28
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,129 +1,131 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localkey.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d │ │ │ │ │ +brezzidouglasmarini1simplex2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALKEY_HH │ │ │ │ │ -6#define DUNE_LOCALKEY_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ 12namespace _D_u_n_e │ │ │ │ │ 13{ │ │ │ │ │ -_2_3 class _L_o_c_a_l_K_e_y │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ 24 { │ │ │ │ │ -25 public: │ │ │ │ │ -26 │ │ │ │ │ -28 enum { │ │ │ │ │ -37 _i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m=666 │ │ │ │ │ -_3_8 }; │ │ │ │ │ -39 │ │ │ │ │ -_4_1 constexpr _L_o_c_a_l_K_e_y () noexcept │ │ │ │ │ -42 : values_{} │ │ │ │ │ -43 {} │ │ │ │ │ -44 │ │ │ │ │ -_5_0 constexpr _L_o_c_a_l_K_e_y (unsigned int s, unsigned int c, unsigned int i) noexcept │ │ │ │ │ -51 : values_{s,c,i} │ │ │ │ │ -52 {} │ │ │ │ │ -53 │ │ │ │ │ -55 [[nodiscard]] │ │ │ │ │ -_5_6 constexpr unsigned int _s_u_b_E_n_t_i_t_y () const noexcept │ │ │ │ │ -57 { │ │ │ │ │ -58 return values_[0]; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -62 [[nodiscard]] │ │ │ │ │ -_6_3 constexpr unsigned int _c_o_d_i_m () const noexcept │ │ │ │ │ -64 { │ │ │ │ │ -65 return values_[1]; │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -69 [[nodiscard]] │ │ │ │ │ -_7_0 constexpr unsigned int _i_n_d_e_x () const noexcept │ │ │ │ │ -71 { │ │ │ │ │ -72 return values_[2]; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -_7_6 constexpr void _i_n_d_e_x (unsigned int i) noexcept │ │ │ │ │ -77 { │ │ │ │ │ -78 values_[2] = i; │ │ │ │ │ -79 } │ │ │ │ │ -80 │ │ │ │ │ -82 [[nodiscard]] │ │ │ │ │ -_8_3 bool _o_p_e_r_a_t_o_r_<_ (const _L_o_c_a_l_K_e_y& other) const noexcept │ │ │ │ │ -84 { │ │ │ │ │ -85 return values_ < other.values_; │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -_8_9 friend std::ostream& _o_p_e_r_a_t_o_r_<_<_ (std::ostream& s, const _L_o_c_a_l_K_e_y& localKey) │ │ │ │ │ -90 { │ │ │ │ │ -91 return s << "[ subEntity: " << localKey._s_u_b_E_n_t_i_t_y() │ │ │ │ │ -92 << ", codim: " << localKey._c_o_d_i_m() │ │ │ │ │ -93 << ", index: " << localKey._i_n_d_e_x() << " ]"; │ │ │ │ │ -94 } │ │ │ │ │ -95 │ │ │ │ │ -96 private: │ │ │ │ │ -97 │ │ │ │ │ -98 // We use an array to store the values in order to be able to use the │ │ │ │ │ -array::operator< implementation │ │ │ │ │ -99 std::array values_; │ │ │ │ │ -100 │ │ │ │ │ -101 }; │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () │ │ │ │ │ +29 { │ │ │ │ │ +30 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ +31 } │ │ │ │ │ +32 │ │ │ │ │ +_3_8 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s) │ │ │ │ │ +39 { │ │ │ │ │ +40 using std::sqrt; │ │ │ │ │ +41 sign0 = sign1 = sign2 = 1.0; │ │ │ │ │ +42 if (s & 1) │ │ │ │ │ +43 { │ │ │ │ │ +44 sign0 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 if (s & 2) │ │ │ │ │ +47 { │ │ │ │ │ +48 sign1 = -1.0; │ │ │ │ │ +49 } │ │ │ │ │ +50 if (s & 4) │ │ │ │ │ +51 { │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 n0[0] = 0.0; │ │ │ │ │ +56 n0[1] = -1.0; │ │ │ │ │ +57 n1[0] = -1.0; │ │ │ │ │ +58 n1[1] = 0.0; │ │ │ │ │ +59 n2[0] = 1.0/sqrt(2.0); │ │ │ │ │ +60 n2[1] = 1.0/sqrt(2.0); │ │ │ │ │ +61 c0 = 0.5*n0[0] - 1.0*n0[1]; │ │ │ │ │ +62 c1 = -1.0*n1[0] + 0.5*n1[1]; │ │ │ │ │ +63 c2 = 0.5*n2[0] + 0.5*n2[1]; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +74 template │ │ │ │ │ +_7_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +76 { │ │ │ │ │ +77 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +78 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +79 │ │ │ │ │ +80 out.resize(6); │ │ │ │ │ +81 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +82 │ │ │ │ │ +83 const int qOrder = 4; │ │ │ │ │ +84 const Dune::QuadratureRule& rule = Dune:: │ │ │ │ │ +QuadratureRules::rule(Dune::GeometryTypes::simplex(1), qOrder); │ │ │ │ │ +85 │ │ │ │ │ +86 for (typename Dune::QuadratureRule::const_iterator it=rule.begin │ │ │ │ │ +(); it!=rule.end(); ++it) │ │ │ │ │ +87 { │ │ │ │ │ +88 Scalar qPos = it->position(); │ │ │ │ │ +89 typename LB::Traits::DomainType localPos; │ │ │ │ │ +90 │ │ │ │ │ +91 localPos[0] = qPos; │ │ │ │ │ +92 localPos[1] = 0.0; │ │ │ │ │ +93 auto y = f(localPos); │ │ │ │ │ +94 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0/c0; │ │ │ │ │ +95 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight()/c0; │ │ │ │ │ +96 │ │ │ │ │ +97 localPos[0] = 0.0; │ │ │ │ │ +98 localPos[1] = qPos; │ │ │ │ │ +99 y = f(localPos); │ │ │ │ │ +100 out[1] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1/c1; │ │ │ │ │ +101 out[4] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight()/c1; │ │ │ │ │ 102 │ │ │ │ │ -103} │ │ │ │ │ -104#endif │ │ │ │ │ +103 localPos[0] = 1.0 - qPos; │ │ │ │ │ +104 localPos[1] = qPos; │ │ │ │ │ +105 y = f(localPos); │ │ │ │ │ +106 out[2] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2/c2; │ │ │ │ │ +107 out[5] += (y[0]*n2[0] + y[1]*n2[1])*(2.0*qPos - 1.0)*it->weight()/c2; │ │ │ │ │ +108 } │ │ │ │ │ +109 } │ │ │ │ │ +110 │ │ │ │ │ +111 private: │ │ │ │ │ +112 typename LB::Traits::RangeFieldType sign0,sign1,sign2; │ │ │ │ │ +113 typename LB::Traits::DomainType n0,n1,n2; │ │ │ │ │ +114 typename LB::Traits::RangeFieldType c0,c1,c2; │ │ │ │ │ +115 }; │ │ │ │ │ +116} │ │ │ │ │ +117 │ │ │ │ │ +118#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ -bool operator<(const LocalKey &other) const noexcept │ │ │ │ │ -Less-than operator so we can use this class as a key type in stl containers. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ -constexpr void index(unsigned int i) noexcept │ │ │ │ │ -Set index component. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ -constexpr unsigned int index() const noexcept │ │ │ │ │ -Return offset within subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -constexpr LocalKey(unsigned int s, unsigned int c, unsigned int i) noexcept │ │ │ │ │ -Initialize all components. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m │ │ │ │ │ -@ intersectionCodim │ │ │ │ │ -Codimension returned by LocalKey::codim() for degrees of freedom attached to an │ │ │ │ │ -intersection. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_c_o_d_i_m │ │ │ │ │ -constexpr unsigned int codim() const noexcept │ │ │ │ │ -Return codim of associated entity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ -friend std::ostream & operator<<(std::ostream &s, const LocalKey &localKey) │ │ │ │ │ -Write LocalKey object to output stream. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -constexpr LocalKey() noexcept │ │ │ │ │ -Standard constructor for uninitialized local index. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ -constexpr unsigned int subEntity() const noexcept │ │ │ │ │ -Return number of associated subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Simplex2DLocalInterpolation(unsigned int s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +BDM1Simplex2DLocalInterpolation() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:28 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interface.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interface.hh File Reference
│ │ │ │ +
brezzidouglasmarini1simplex2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::FiniteElementInterface
 Interface for global-valued finite elements. More...
 
struct  Dune::FiniteElementInterface::Traits
 types of component objects More...
 
class  Dune::FiniteElementFactoryInterface< Geometry, VertexOrder >
 Factory interface for global-valued finite elements. More...
 
class  Dune::BasisInterface
 Interface for global-valued shape functions. More...
 
struct  Dune::BasisInterface::Traits
 types of domain and range More...
 
struct  Dune::InterpolationInterface
 Interface for global-valued interpolation. More...
 
struct  Dune::CoefficientsInterface
 Interface for global-valued coefficients. More...
class  Dune::BDM1Simplex2DLocalFiniteElement< D, R >
 First order Brezzi-Douglas-Marini shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,42 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -interface.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini1simplex2d.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  Interface for global-valued finite elements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -  types of component objects _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_<_ _G_e_o_m_e_t_r_y_,_ _V_e_r_t_e_x_O_r_d_e_r_ _> │ │ │ │ │ -  Factory interface for global-valued finite elements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  Interface for global-valued shape functions. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -  types of domain and range _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  Interface for global-valued interpolation. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  Interface for global-valued coefficients. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Marini shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00107_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interface.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini1simplex2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,215 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interface.hh
│ │ │ │ +
brezzidouglasmarini1simplex2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ -
8
│ │ │ │ -
9#ifndef HEADERCHECK
│ │ │ │ -
10#error This header exists for documentation purposes only and should never be included directly.
│ │ │ │ -
11#endif
│ │ │ │ -
12
│ │ │ │ -
13#include <array>
│ │ │ │ -
14#include <cstddef>
│ │ │ │ -
15#include <vector>
│ │ │ │ -
16
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │
17
│ │ │ │ -
18#include <dune/geometry/type.hh>
│ │ │ │ -
19
│ │ │ │ - │ │ │ │ -
21
│ │ │ │ -
22namespace Dune {
│ │ │ │ -
23
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27 struct ImplementationDefined;
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ -
31
│ │ │ │ -
│ │ │ │ -
34 struct Traits
│ │ │ │ -
35 {
│ │ │ │ -
37
│ │ │ │ -
42 typedef ImplementationDefined Basis;
│ │ │ │ -
44
│ │ │ │ -
49 typedef ImplementationDefined Coefficients;
│ │ │ │ -
51
│ │ │ │ -
56 typedef ImplementationDefined Interpolation;
│ │ │ │ -
57 };
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
60
│ │ │ │ - │ │ │ │ - │ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
35
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {}
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 basis(s),
│ │ │ │ +
47 interpolation(s)
│ │ │ │ +
48 {}
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
51 {
│ │ │ │ +
52 return basis;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ +
57 return coefficients;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
61 {
│ │ │ │ +
62 return interpolation;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ +
66 unsigned int size () const
│ │ │ │ +
67 {
│ │ │ │ +
68 return basis.size();
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │
70
│ │ │ │ -
72
│ │ │ │ -
76 const Traits::Basis& basis() const;
│ │ │ │ -
78
│ │ │ │ - │ │ │ │ -
84
│ │ │ │ - │ │ │ │ -
90 GeometryType type() const;
│ │ │ │ -
91 };
│ │ │ │ -
│ │ │ │ -
92
│ │ │ │ -
94
│ │ │ │ -
114 template<class Geometry, class VertexOrder>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
116 {
│ │ │ │ -
117 struct ImplementationDefined;
│ │ │ │ -
118
│ │ │ │ -
119 public:
│ │ │ │ -
121
│ │ │ │ -
126 typedef ImplementationDefined FiniteElement;
│ │ │ │ -
127
│ │ │ │ -
129
│ │ │ │ - │ │ │ │ -
133
│ │ │ │ -
154
│ │ │ │ -
156 const FiniteElement make(const Geometry&, const VertexOrder&, ...);
│ │ │ │ -
158 const FiniteElement make(const Geometry&, ...);
│ │ │ │ -
160 const FiniteElement make(const VertexOrder&, ...);
│ │ │ │ -
162
│ │ │ │ -
166 const FiniteElement make(const GeometryType&, ...);
│ │ │ │ -
168 const FiniteElement make(...);
│ │ │ │ -
169
│ │ │ │ -
171
│ │ │ │ -
172 };
│ │ │ │ -
│ │ │ │ -
173
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
176 {
│ │ │ │ -
177 struct ImplementationDefined;
│ │ │ │ -
178 constexpr static int implementationDefined = 42;
│ │ │ │ -
179
│ │ │ │ -
180 public:
│ │ │ │ -
182
│ │ │ │ -
│ │ │ │ -
187 struct Traits
│ │ │ │ -
188 {
│ │ │ │ -
191
│ │ │ │ -
193 typedef ImplementationDefined DomainFieldType;
│ │ │ │ -
194
│ │ │ │ -
196 constexpr static int dimDomain = implementationDefined;
│ │ │ │ -
197
│ │ │ │ -
199 typedef ImplementationDefined DomainType;
│ │ │ │ -
200
│ │ │ │ -
202
│ │ │ │ -
205
│ │ │ │ -
207 typedef ImplementationDefined RangeFieldType;
│ │ │ │ -
208
│ │ │ │ -
210 constexpr static int dimRange = implementationDefined;
│ │ │ │ -
211
│ │ │ │ -
213 typedef ImplementationDefined RangeType;
│ │ │ │ -
214
│ │ │ │ -
216
│ │ │ │ -
218
│ │ │ │ -
222 typedef ImplementationDefined Jacobian;
│ │ │ │ -
223 };
│ │ │ │ -
│ │ │ │ -
224
│ │ │ │ -
226 std::size_t size () const;
│ │ │ │ -
228 std::size_t order () const;
│ │ │ │ -
229
│ │ │ │ - │ │ │ │ -
232 std::vector<Traits::RangeType>& out) const;
│ │ │ │ -
233
│ │ │ │ - │ │ │ │ -
236 std::vector<Traits::Jacobian>& out) const;
│ │ │ │ -
237
│ │ │ │ -
243 void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ -
244 const typename Traits::DomainType& in,
│ │ │ │ -
245 std::vector<typename Traits::RangeType>& out) const;
│ │ │ │ -
246 };
│ │ │ │ -
│ │ │ │ -
247
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
250 {
│ │ │ │ -
252
│ │ │ │ - │ │ │ │ -
256
│ │ │ │ -
258
│ │ │ │ -
267 template<typename F, typename C>
│ │ │ │ -
268 void interpolate (const F& f, std::vector<C>& out) const;
│ │ │ │ -
269 };
│ │ │ │ -
│ │ │ │ -
270
│ │ │ │ -
272
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
278 {
│ │ │ │ -
280 std::size_t size() const;
│ │ │ │ -
281
│ │ │ │ -
283 const LocalKey& localKey(std::size_t i) const;
│ │ │ │ -
284 };
│ │ │ │ -
│ │ │ │ -
285}
│ │ │ │ -
286#endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
71 static constexpr GeometryType type ()
│ │ │ │ +
72 {
│ │ │ │ +
73 return GeometryTypes::triangle;
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81}
│ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Interface for global-valued finite elements.
Definition interface.hh:26
│ │ │ │ -
GeometryType type() const
Extract geometry type of this finite element.
│ │ │ │ -
const Traits::Basis & basis() const
Extract basis of this finite element.
│ │ │ │ -
const Traits::Coefficients & coefficients() const
Extract coefficients of this finite element.
│ │ │ │ -
const Traits::Interpolation & interpolation() const
Extract interpolation of this finite element.
│ │ │ │ -
FiniteElementInterface(const FiniteElementInterface &)
Finite elements are CopyConstructible.
│ │ │ │ -
FiniteElementInterface(...)
Construct a finite element.
│ │ │ │ -
types of component objects
Definition interface.hh:35
│ │ │ │ -
ImplementationDefined Basis
type of the Basis
Definition interface.hh:42
│ │ │ │ -
ImplementationDefined Coefficients
type of the Coefficients
Definition interface.hh:49
│ │ │ │ -
ImplementationDefined Interpolation
type of the Interpolation
Definition interface.hh:56
│ │ │ │ -
Factory interface for global-valued finite elements.
Definition interface.hh:116
│ │ │ │ -
const FiniteElement make(const VertexOrder &,...)
create a finite element from a vertex ordering
│ │ │ │ -
const FiniteElement make(...)
create a finite element
│ │ │ │ -
const FiniteElement make(const GeometryType &,...)
create a finite element from a geometry type
│ │ │ │ -
FiniteElementFactoryInterface(...)
Construct a finite element factory.
│ │ │ │ -
ImplementationDefined FiniteElement
Type of the finite element.
Definition interface.hh:126
│ │ │ │ -
const FiniteElement make(const Geometry &, const VertexOrder &,...)
create a finite element from a geometry and a vertex ordering
│ │ │ │ -
const FiniteElement make(const Geometry &,...)
create a finite element from a geometry
│ │ │ │ -
Interface for global-valued shape functions.
Definition interface.hh:176
│ │ │ │ -
void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
│ │ │ │ -
void evaluateFunction(const Traits::DomainType &in, std::vector< Traits::RangeType > &out) const
Evaluate all shape functions at given position.
│ │ │ │ -
std::size_t order() const
Polynomial order of the shape functions for quadrature.
│ │ │ │ -
void evaluateJacobian(const Traits::DomainType &in, std::vector< Traits::Jacobian > &out) const
Evaluate Jacobian of all shape functions at given position.
│ │ │ │ -
std::size_t size() const
Number of shape functions.
│ │ │ │ -
types of domain and range
Definition interface.hh:188
│ │ │ │ -
static constexpr int dimRange
dimension of the range
Definition interface.hh:210
│ │ │ │ -
ImplementationDefined Jacobian
Jacobian properties.
Definition interface.hh:222
│ │ │ │ -
ImplementationDefined DomainType
Type used for coordinate vectors in the domain.
Definition interface.hh:199
│ │ │ │ -
ImplementationDefined RangeFieldType
Field type of the range.
Definition interface.hh:207
│ │ │ │ -
ImplementationDefined DomainFieldType
Field type of the domain.
Definition interface.hh:193
│ │ │ │ -
ImplementationDefined RangeType
Type used for range values.
Definition interface.hh:213
│ │ │ │ -
static constexpr int dimDomain
dimension of the domain
Definition interface.hh:196
│ │ │ │ -
Interface for global-valued interpolation.
Definition interface.hh:250
│ │ │ │ -
BasisInterface::Traits Traits
Export basis traits.
Definition interface.hh:255
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
│ │ │ │ -
Interface for global-valued coefficients.
Definition interface.hh:278
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
│ │ │ │ -
std::size_t size() const
number of coefficients
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini1simplex2d.hh:28
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini1simplex2d.hh:50
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini1simplex2d.hh:55
│ │ │ │ +
static constexpr GeometryType type()
Definition brezzidouglasmarini1simplex2d.hh:71
│ │ │ │ +
BDM1Simplex2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini1simplex2d.hh:37
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini1simplex2d.hh:60
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini1simplex2d.hh:66
│ │ │ │ +
BDM1Simplex2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini1simplex2d.hh:45
│ │ │ │ +
LocalFiniteElementTraits< BDM1Simplex2DLocalBasis< D, R >, BDM1Simplex2DLocalCoefficients, BDM1Simplex2DLocalInterpolation< BDM1Simplex2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini1simplex2d.hh:34
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalbasis.hh:30
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-1 elements on triangles.
Definition brezzidouglasmarini1simplex2dlocalcoefficients.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on the reference triangle.
Definition brezzidouglasmarini1simplex2dlocalinterpolation.hh:24
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,290 +1,144 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -interface.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +brezzidouglasmarini1simplex2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ -8 │ │ │ │ │ -9#ifndef HEADERCHECK │ │ │ │ │ -10#error This header exists for documentation purposes only and should never be │ │ │ │ │ -included directly. │ │ │ │ │ -11#endif │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ 17 │ │ │ │ │ -18#include │ │ │ │ │ -19 │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -21 │ │ │ │ │ -22namespace _D_u_n_e { │ │ │ │ │ -23 │ │ │ │ │ -_2_5 class _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ -26 { │ │ │ │ │ -27 struct ImplementationDefined; │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -31 │ │ │ │ │ -_3_4 struct _T_r_a_i_t_s │ │ │ │ │ -35 { │ │ │ │ │ -37 │ │ │ │ │ -_4_2 typedef ImplementationDefined _B_a_s_i_s; │ │ │ │ │ -44 │ │ │ │ │ -_4_9 typedef ImplementationDefined _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -51 │ │ │ │ │ -_5_6 typedef ImplementationDefined _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -57 }; │ │ │ │ │ -58 │ │ │ │ │ -60 │ │ │ │ │ -_6_7 _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e(...); │ │ │ │ │ -_6_9 _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e(const _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e&); │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +32 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +33 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_4 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +35 │ │ │ │ │ +_3_7 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +38 {} │ │ │ │ │ +39 │ │ │ │ │ +_4_5 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +46 basis(s), │ │ │ │ │ +47 interpolation(s) │ │ │ │ │ +48 {} │ │ │ │ │ +49 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return basis; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return coefficients; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return interpolation; │ │ │ │ │ +63 } │ │ │ │ │ +64 │ │ │ │ │ +_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ +67 { │ │ │ │ │ +68 return basis.size(); │ │ │ │ │ +69 } │ │ │ │ │ 70 │ │ │ │ │ -72 │ │ │ │ │ -_7_6 const _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const; │ │ │ │ │ -78 │ │ │ │ │ -_8_2 const _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const; │ │ │ │ │ -84 │ │ │ │ │ -_8_8 const _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const; │ │ │ │ │ -_9_0 GeometryType _t_y_p_e() const; │ │ │ │ │ -91 }; │ │ │ │ │ -92 │ │ │ │ │ -94 │ │ │ │ │ -114 template │ │ │ │ │ -_1_1_5 class _F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ -116 { │ │ │ │ │ -117 struct ImplementationDefined; │ │ │ │ │ -118 │ │ │ │ │ -119 public: │ │ │ │ │ -121 │ │ │ │ │ -_1_2_6 typedef ImplementationDefined _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -127 │ │ │ │ │ -129 │ │ │ │ │ -_1_3_2 _F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e(...); │ │ │ │ │ -133 │ │ │ │ │ -154 │ │ │ │ │ -_1_5_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry&, const VertexOrder&, ...); │ │ │ │ │ -_1_5_8 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry&, ...); │ │ │ │ │ -_1_6_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const VertexOrder&, ...); │ │ │ │ │ -162 │ │ │ │ │ -_1_6_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const GeometryType&, ...); │ │ │ │ │ -_1_6_8 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(...); │ │ │ │ │ -169 │ │ │ │ │ -171 │ │ │ │ │ -172 }; │ │ │ │ │ -173 │ │ │ │ │ -_1_7_5 class _B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -176 { │ │ │ │ │ -177 struct ImplementationDefined; │ │ │ │ │ -178 constexpr static int implementationDefined = 42; │ │ │ │ │ -179 │ │ │ │ │ -180 public: │ │ │ │ │ -182 │ │ │ │ │ -_1_8_7 struct _T_r_a_i_t_s │ │ │ │ │ -188 { │ │ │ │ │ -191 │ │ │ │ │ -_1_9_3 typedef ImplementationDefined _D_o_m_a_i_n_F_i_e_l_d_T_y_p_e; │ │ │ │ │ -194 │ │ │ │ │ -_1_9_6 constexpr static int _d_i_m_D_o_m_a_i_n = implementationDefined; │ │ │ │ │ -197 │ │ │ │ │ -_1_9_9 typedef ImplementationDefined _D_o_m_a_i_n_T_y_p_e; │ │ │ │ │ -200 │ │ │ │ │ -202 │ │ │ │ │ -205 │ │ │ │ │ -_2_0_7 typedef ImplementationDefined _R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ -208 │ │ │ │ │ -_2_1_0 constexpr static int _d_i_m_R_a_n_g_e = implementationDefined; │ │ │ │ │ -211 │ │ │ │ │ -_2_1_3 typedef ImplementationDefined _R_a_n_g_e_T_y_p_e; │ │ │ │ │ -214 │ │ │ │ │ -216 │ │ │ │ │ -218 │ │ │ │ │ -_2_2_2 typedef ImplementationDefined _J_a_c_o_b_i_a_n; │ │ │ │ │ -223 }; │ │ │ │ │ -224 │ │ │ │ │ -_2_2_6 std::size_t _s_i_z_e () const; │ │ │ │ │ -_2_2_8 std::size_t _o_r_d_e_r () const; │ │ │ │ │ -229 │ │ │ │ │ -_2_3_1 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -232 std::vector& out) const; │ │ │ │ │ -233 │ │ │ │ │ -_2_3_5 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -236 std::vector& out) const; │ │ │ │ │ -237 │ │ │ │ │ -_2_4_3 void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ -244 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -245 std::vector& out) const; │ │ │ │ │ -246 }; │ │ │ │ │ -247 │ │ │ │ │ -_2_4_9 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ -250 { │ │ │ │ │ -252 │ │ │ │ │ -_2_5_5 typedef _B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ -256 │ │ │ │ │ -258 │ │ │ │ │ -267 template │ │ │ │ │ -_2_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const; │ │ │ │ │ -269 }; │ │ │ │ │ -270 │ │ │ │ │ -272 │ │ │ │ │ -_2_7_7 struct _C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -278 { │ │ │ │ │ -_2_8_0 std::size_t _s_i_z_e() const; │ │ │ │ │ -281 │ │ │ │ │ -_2_8_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const; │ │ │ │ │ -284 }; │ │ │ │ │ -285} │ │ │ │ │ -286#endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +72 { │ │ │ │ │ +73 return GeometryTypes::triangle; │ │ │ │ │ +74 } │ │ │ │ │ +75 │ │ │ │ │ +76 private: │ │ │ │ │ +77 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +78 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +79 _B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ +interpolation; │ │ │ │ │ +80 }; │ │ │ │ │ +81} │ │ │ │ │ +82#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI1_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_1_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ -Interface for global-valued finite elements. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -Extract geometry type of this finite element. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_b_a_s_i_s │ │ │ │ │ -const Traits::Basis & basis() const │ │ │ │ │ -Extract basis of this finite element. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::Coefficients & coefficients() const │ │ │ │ │ -Extract coefficients of this finite element. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::Interpolation & interpolation() const │ │ │ │ │ -Extract interpolation of this finite element. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ -FiniteElementInterface(const FiniteElementInterface &) │ │ │ │ │ -Finite elements are CopyConstructible. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ -FiniteElementInterface(...) │ │ │ │ │ -Construct a finite element. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -types of component objects │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -ImplementationDefined Basis │ │ │ │ │ -type of the Basis │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -ImplementationDefined Coefficients │ │ │ │ │ -type of the Coefficients │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -ImplementationDefined Interpolation │ │ │ │ │ -type of the Interpolation │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ -Factory interface for global-valued finite elements. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:116 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const VertexOrder &,...) │ │ │ │ │ -create a finite element from a vertex ordering │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(...) │ │ │ │ │ -create a finite element │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const GeometryType &,...) │ │ │ │ │ -create a finite element from a geometry type │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ -FiniteElementFactoryInterface(...) │ │ │ │ │ -Construct a finite element factory. │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -ImplementationDefined FiniteElement │ │ │ │ │ -Type of the finite element. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:126 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &, const VertexOrder &,...) │ │ │ │ │ -create a finite element from a geometry and a vertex ordering │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &,...) │ │ │ │ │ -create a finite element from a geometry │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -Interface for global-valued shape functions. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:176 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, Traits::dimDomain > &order, const │ │ │ │ │ -typename Traits::DomainType &in, std::vector< typename Traits::RangeType > │ │ │ │ │ -&out) const │ │ │ │ │ -Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const Traits::DomainType &in, std::vector< Traits:: │ │ │ │ │ -RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions at given position. │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -Polynomial order of the shape functions for quadrature. │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const Traits::DomainType &in, std::vector< Traits:: │ │ │ │ │ -Jacobian > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions at given position. │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -types of domain and range │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:188 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static constexpr int dimRange │ │ │ │ │ -dimension of the range │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:210 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ -ImplementationDefined Jacobian │ │ │ │ │ -Jacobian properties. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:222 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -ImplementationDefined DomainType │ │ │ │ │ -Type used for coordinate vectors in the domain. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:199 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ -ImplementationDefined RangeFieldType │ │ │ │ │ -Field type of the range. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:207 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ -ImplementationDefined DomainFieldType │ │ │ │ │ -Field type of the domain. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:193 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -ImplementationDefined RangeType │ │ │ │ │ -Type used for range values. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:213 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ -static constexpr int dimDomain │ │ │ │ │ -dimension of the domain │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:196 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ -Interface for global-valued interpolation. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:250 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -BasisInterface::Traits Traits │ │ │ │ │ -Export basis traits. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:255 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Determine coefficients interpolating a given function. │ │ │ │ │ -_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ -Interface for global-valued coefficients. │ │ │ │ │ -DDeeffiinniittiioonn interface.hh:278 │ │ │ │ │ -_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Simplex2DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM1Simplex2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< BDM1Simplex2DLocalBasis< D, R >, │ │ │ │ │ +BDM1Simplex2DLocalCoefficients, BDM1Simplex2DLocalInterpolation< │ │ │ │ │ +BDM1Simplex2DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2d.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-1 elements on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_1_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini1simplex2dlocalinterpolation.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interfaceswitch.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interfaceswitch.hh File Reference
│ │ │ │ +
brezzidouglasmarini2simplex2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <memory>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/common/shared_ptr.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::FiniteElementInterfaceSwitch< FiniteElement, Dummy >
 Switch for uniform treatment of finite element with either the local or the global interface. More...
 
struct  Dune::BasisInterfaceSwitch< Basis, Dummy >
 Switch for uniform treatment of local and global basis classes. More...
class  Dune::BDM2Simplex2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -interfaceswitch.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini2simplex2d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_<_ _F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _D_u_m_m_y_ _> │ │ │ │ │ -  Switch for uniform treatment of finite element with either the local │ │ │ │ │ - or the global interface. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_<_ _B_a_s_i_s_,_ _D_u_m_m_y_ _> │ │ │ │ │ -  Switch for uniform treatment of local and global basis classes. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00110_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interfaceswitch.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2simplex2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,198 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interfaceswitch.hh
│ │ │ │ +
brezzidouglasmarini2simplex2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <memory>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14#include <dune/common/typetraits.hh>
│ │ │ │ -
15#include <dune/common/shared_ptr.hh>
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune {
│ │ │ │ -
18
│ │ │ │ -
21
│ │ │ │ -
29 template<class FiniteElement, class Dummy = void>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
32 typedef typename FiniteElement::Traits::Basis Basis;
│ │ │ │ -
34 typedef typename FiniteElement::Traits::Interpolation Interpolation;
│ │ │ │ -
36 typedef typename FiniteElement::Traits::Coefficients Coefficients;
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
39 static const Basis &basis(const FiniteElement& fe)
│ │ │ │ -
40 { return fe.basis(); }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
42 static const Interpolation &interpolation(const FiniteElement& fe)
│ │ │ │ -
43 { return fe.interpolation(); }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
45 static const Coefficients &coefficients(const FiniteElement& fe)
│ │ │ │ -
46 { return fe.coefficients(); }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
49
│ │ │ │ -
78 typedef std::shared_ptr<const FiniteElement> Store;
│ │ │ │ -
80
│ │ │ │ -
│ │ │ │ -
85 static void setStore(Store& store, const FiniteElement& fe)
│ │ │ │ -
86 { store = std::make_shared<const FiniteElement>(fe); }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
88 static void setStore(Store& store, FiniteElement&& fe)
│ │ │ │ -
89 { store = std::make_shared<const FiniteElement>(std::move(fe)); }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
91 static void setStore(Store& store, const Store& fe)
│ │ │ │ -
92 { store = fe; }
│ │ │ │ -
│ │ │ │ -
93 };
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
95#ifndef DOXYGEN
│ │ │ │ -
98 template<class FiniteElement>
│ │ │ │ -
99 struct FiniteElementInterfaceSwitch<
│ │ │ │ -
100 FiniteElement,
│ │ │ │ -
101 typename std::enable_if<AlwaysTrue<typename FiniteElement::Traits::
│ │ │ │ -
102 LocalBasisType>::value>::type
│ │ │ │ -
103 >
│ │ │ │ -
104 {
│ │ │ │ -
106 typedef typename FiniteElement::Traits::LocalBasisType Basis;
│ │ │ │ -
108 typedef typename FiniteElement::Traits::LocalInterpolationType
│ │ │ │ - │ │ │ │ -
111 typedef typename FiniteElement::Traits::LocalCoefficientsType Coefficients;
│ │ │ │ -
112
│ │ │ │ -
114 static const Basis &basis(const FiniteElement& fe)
│ │ │ │ -
115 { return fe.localBasis(); }
│ │ │ │ -
117 static const Interpolation &interpolation(const FiniteElement& fe)
│ │ │ │ -
118 { return fe.localInterpolation(); }
│ │ │ │ -
120 static const Coefficients &coefficients(const FiniteElement& fe)
│ │ │ │ -
121 { return fe.localCoefficients(); }
│ │ │ │ -
122
│ │ │ │ -
124 typedef std::shared_ptr<const FiniteElement> Store;
│ │ │ │ -
126 static void setStore(Store& store, const FiniteElement& fe)
│ │ │ │ -
127 { store = stackobject_to_shared_ptr<const FiniteElement>(fe); }
│ │ │ │ -
129 static void setStore(Store& store, FiniteElement&& fe)
│ │ │ │ -
130 { store = std::make_shared<const FiniteElement>(std::move(fe)); }
│ │ │ │ -
132 static void setStore(Store& store, const Store& fe)
│ │ │ │ -
133 { store = fe; }
│ │ │ │ -
134 };
│ │ │ │ -
135#endif // !DOXYGEN
│ │ │ │ -
136
│ │ │ │ -
138
│ │ │ │ -
153 template<class Basis, class Dummy = void>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
156 typedef typename Basis::Traits::DomainField DomainField;
│ │ │ │ -
158 static const std::size_t dimDomainLocal = Basis::Traits::dimDomainLocal;
│ │ │ │ -
160 typedef typename Basis::Traits::DomainLocal DomainLocal;
│ │ │ │ -
161
│ │ │ │ -
163 typedef typename Basis::Traits::RangeField RangeField;
│ │ │ │ -
165 static const std::size_t dimRange = Basis::Traits::dimRange;
│ │ │ │ -
167 typedef typename Basis::Traits::Range Range;
│ │ │ │ -
168
│ │ │ │ -
170
│ │ │ │ -
180 template<typename Geometry>
│ │ │ │ -
│ │ │ │ -
181 static void gradient(const Basis& basis, const Geometry& geometry,
│ │ │ │ -
182 const DomainLocal& xl,
│ │ │ │ -
183 std::vector<FieldMatrix<RangeField, 1,
│ │ │ │ -
184 Geometry::coorddimension> >& grad)
│ │ │ │ -
185 {
│ │ │ │ -
186 grad.resize(basis.size());
│ │ │ │ -
187 basis.evaluateJacobian(xl, grad);
│ │ │ │ -
188 }
│ │ │ │ -
│ │ │ │ -
189 };
│ │ │ │ -
│ │ │ │ -
190
│ │ │ │ -
191#ifndef DOXYGEN
│ │ │ │ -
193 template<class Basis>
│ │ │ │ -
194 struct BasisInterfaceSwitch<Basis,
│ │ │ │ -
195 typename std::enable_if<
│ │ │ │ -
196 AlwaysTrue<
│ │ │ │ -
197 std::integral_constant<
│ │ │ │ -
198 std::size_t,
│ │ │ │ -
199 Basis::Traits::dimDomain
│ │ │ │ -
200 >
│ │ │ │ -
201 >::value
│ │ │ │ -
202 >::type
│ │ │ │ -
203 >
│ │ │ │ -
204 {
│ │ │ │ -
206 typedef typename Basis::Traits::DomainFieldType DomainField;
│ │ │ │ -
208 static const std::size_t dimDomainLocal = Basis::Traits::dimDomain;
│ │ │ │ -
210 typedef typename Basis::Traits::DomainType DomainLocal;
│ │ │ │ -
211
│ │ │ │ -
213 typedef typename Basis::Traits::RangeFieldType RangeField;
│ │ │ │ -
215 static const std::size_t dimRange = Basis::Traits::dimRange;
│ │ │ │ -
217 typedef typename Basis::Traits::RangeType Range;
│ │ │ │ -
218
│ │ │ │ -
220 template<typename Geometry>
│ │ │ │ -
221 static void gradient(const Basis& basis, const Geometry& geometry,
│ │ │ │ -
222 const DomainLocal& xl,
│ │ │ │ -
223 std::vector<FieldMatrix<RangeField, 1,
│ │ │ │ -
224 Geometry::coorddimension> >& grad)
│ │ │ │ -
225 {
│ │ │ │ -
226 std::vector<typename Basis::Traits::JacobianType> lgrad(basis.size());
│ │ │ │ -
227 basis.evaluateJacobian(xl, lgrad);
│ │ │ │ -
228
│ │ │ │ -
229 const typename Geometry::JacobianInverseTransposed& jac =
│ │ │ │ -
230 geometry.jacobianInverseTransposed(xl);
│ │ │ │ -
231
│ │ │ │ -
232 grad.resize(basis.size());
│ │ │ │ -
233 for(std::size_t i = 0; i < basis.size(); ++i)
│ │ │ │ -
234 jac.mv(lgrad[i][0], grad[i][0]);
│ │ │ │ -
235 }
│ │ │ │ -
236 };
│ │ │ │ -
237#endif // !DOXYGEN
│ │ │ │ -
238
│ │ │ │ -
239} // namespace Dune
│ │ │ │ -
240
│ │ │ │ -
241#endif // DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::triangle;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Switch for uniform treatment of finite element with either the local or the global interface.
Definition interfaceswitch.hh:30
│ │ │ │ -
static const Coefficients & coefficients(const FiniteElement &fe)
access coefficients
Definition interfaceswitch.hh:45
│ │ │ │ -
static void setStore(Store &store, FiniteElement &&fe)
Store a finite element in the store.
Definition interfaceswitch.hh:88
│ │ │ │ -
FiniteElement::Traits::Coefficients Coefficients
export the type of the coefficients
Definition interfaceswitch.hh:36
│ │ │ │ -
static void setStore(Store &store, const Store &fe)
Store a finite element in the store.
Definition interfaceswitch.hh:91
│ │ │ │ -
static void setStore(Store &store, const FiniteElement &fe)
Store a finite element in the store.
Definition interfaceswitch.hh:85
│ │ │ │ -
FiniteElement::Traits::Interpolation Interpolation
export the type of the interpolation
Definition interfaceswitch.hh:34
│ │ │ │ -
std::shared_ptr< const FiniteElement > Store
Type for storing finite elements.
Definition interfaceswitch.hh:78
│ │ │ │ -
static const Basis & basis(const FiniteElement &fe)
access basis
Definition interfaceswitch.hh:39
│ │ │ │ -
FiniteElement::Traits::Basis Basis
export the type of the basis
Definition interfaceswitch.hh:32
│ │ │ │ -
static const Interpolation & interpolation(const FiniteElement &fe)
access interpolation
Definition interfaceswitch.hh:42
│ │ │ │ -
Switch for uniform treatment of local and global basis classes.
Definition interfaceswitch.hh:154
│ │ │ │ -
static const std::size_t dimRange
export dimension of the values
Definition interfaceswitch.hh:165
│ │ │ │ -
static const std::size_t dimDomainLocal
export dimension of local coordinates
Definition interfaceswitch.hh:158
│ │ │ │ -
Basis::Traits::RangeField RangeField
export field type of the values
Definition interfaceswitch.hh:163
│ │ │ │ -
Basis::Traits::Range Range
export vector type of the values
Definition interfaceswitch.hh:167
│ │ │ │ -
static void gradient(const Basis &basis, const Geometry &geometry, const DomainLocal &xl, std::vector< FieldMatrix< RangeField, 1, Geometry::coorddimension > > &grad)
Compute global gradient for scalar valued bases.
Definition interfaceswitch.hh:181
│ │ │ │ -
Basis::Traits::DomainLocal DomainLocal
export vector type of the local coordinates
Definition interfaceswitch.hh:160
│ │ │ │ -
Basis::Traits::DomainField DomainField
export field types of the coordinates
Definition interfaceswitch.hh:156
│ │ │ │ +
Second order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2d.hh:27
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini2simplex2d.hh:54
│ │ │ │ +
LocalFiniteElementTraits< BDM2Simplex2DLocalBasis< D, R >, BDM2Simplex2DLocalCoefficients, BDM2Simplex2DLocalInterpolation< BDM2Simplex2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini2simplex2d.hh:33
│ │ │ │ +
BDM2Simplex2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini2simplex2d.hh:36
│ │ │ │ +
static constexpr GeometryType type()
Definition brezzidouglasmarini2simplex2d.hh:70
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini2simplex2d.hh:49
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini2simplex2d.hh:59
│ │ │ │ +
BDM2Simplex2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition brezzidouglasmarini2simplex2d.hh:44
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini2simplex2d.hh:65
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2simplex2dlocalbasis.hh:30
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-2 elements on triangles.
Definition brezzidouglasmarini2simplex2dlocalcoefficients.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on triangles.
Definition brezzidouglasmarini2simplex2dlocalinterpolation.hh:25
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,230 +1,143 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -interfaceswitch.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +brezzidouglasmarini2simplex2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e { │ │ │ │ │ -18 │ │ │ │ │ -21 │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 struct _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h { │ │ │ │ │ -_3_2 typedef typename FiniteElement::Traits::Basis _B_a_s_i_s; │ │ │ │ │ -_3_4 typedef typename FiniteElement::Traits::Interpolation _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_3_6 typedef typename FiniteElement::Traits::Coefficients _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -37 │ │ │ │ │ -_3_9 static const _B_a_s_i_s &_b_a_s_i_s(const FiniteElement& fe) │ │ │ │ │ -40 { return fe.basis(); } │ │ │ │ │ -_4_2 static const _I_n_t_e_r_p_o_l_a_t_i_o_n &_i_n_t_e_r_p_o_l_a_t_i_o_n(const FiniteElement& fe) │ │ │ │ │ -43 { return fe.interpolation(); } │ │ │ │ │ -_4_5 static const _C_o_e_f_f_i_c_i_e_n_t_s &_c_o_e_f_f_i_c_i_e_n_t_s(const FiniteElement& fe) │ │ │ │ │ -46 { return fe.coefficients(); } │ │ │ │ │ -47 │ │ │ │ │ -49 │ │ │ │ │ -_7_8 typedef std::shared_ptr _S_t_o_r_e; │ │ │ │ │ -80 │ │ │ │ │ -_8_5 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const FiniteElement& fe) │ │ │ │ │ -86 { store = std::make_shared(fe); } │ │ │ │ │ -_8_8 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, FiniteElement&& fe) │ │ │ │ │ -89 { store = std::make_shared(std::move(fe)); } │ │ │ │ │ -_9_1 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const _S_t_o_r_e& fe) │ │ │ │ │ -92 { store = fe; } │ │ │ │ │ -93 }; │ │ │ │ │ -94 │ │ │ │ │ -95#ifndef DOXYGEN │ │ │ │ │ -98 template │ │ │ │ │ -99 struct FiniteElementInterfaceSwitch< │ │ │ │ │ -100 FiniteElement, │ │ │ │ │ -101 typename std::enable_if::value>::type │ │ │ │ │ -103 > │ │ │ │ │ -104 { │ │ │ │ │ -106 typedef typename FiniteElement::Traits::LocalBasisType _B_a_s_i_s; │ │ │ │ │ -108 typedef typename FiniteElement::Traits::LocalInterpolationType │ │ │ │ │ -109 _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -111 typedef typename FiniteElement::Traits::LocalCoefficientsType _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -112 │ │ │ │ │ -114 static const _B_a_s_i_s &_b_a_s_i_s(const FiniteElement& fe) │ │ │ │ │ -115 { return fe.localBasis(); } │ │ │ │ │ -117 static const _I_n_t_e_r_p_o_l_a_t_i_o_n &_i_n_t_e_r_p_o_l_a_t_i_o_n(const FiniteElement& fe) │ │ │ │ │ -118 { return fe.localInterpolation(); } │ │ │ │ │ -120 static const _C_o_e_f_f_i_c_i_e_n_t_s &_c_o_e_f_f_i_c_i_e_n_t_s(const FiniteElement& fe) │ │ │ │ │ -121 { return fe.localCoefficients(); } │ │ │ │ │ -122 │ │ │ │ │ -124 typedef std::shared_ptr _S_t_o_r_e; │ │ │ │ │ -126 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const FiniteElement& fe) │ │ │ │ │ -127 { store = stackobject_to_shared_ptr(fe); } │ │ │ │ │ -129 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, FiniteElement&& fe) │ │ │ │ │ -130 { store = std::make_shared(std::move(fe)); } │ │ │ │ │ -132 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const _S_t_o_r_e& fe) │ │ │ │ │ -133 { store = fe; } │ │ │ │ │ -134 }; │ │ │ │ │ -135#endif // !DOXYGEN │ │ │ │ │ -136 │ │ │ │ │ -138 │ │ │ │ │ -153 template │ │ │ │ │ -_1_5_4 struct _B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h { │ │ │ │ │ -_1_5_6 typedef typename Basis::Traits::DomainField _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ -_1_5_8 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Basis::Traits::dimDomainLocal; │ │ │ │ │ -_1_6_0 typedef typename Basis::Traits::DomainLocal _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -161 │ │ │ │ │ -_1_6_3 typedef typename Basis::Traits::RangeField _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ -_1_6_5 static const std::size_t _d_i_m_R_a_n_g_e = Basis::Traits::dimRange; │ │ │ │ │ -_1_6_7 typedef typename Basis::Traits::Range _R_a_n_g_e; │ │ │ │ │ -168 │ │ │ │ │ -170 │ │ │ │ │ -180 template │ │ │ │ │ -_1_8_1 static void _g_r_a_d_i_e_n_t(const Basis& basis, const Geometry& geometry, │ │ │ │ │ -182 const _D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ -183 std::vector >& grad) │ │ │ │ │ -185 { │ │ │ │ │ -186 grad.resize(basis.size()); │ │ │ │ │ -187 basis.evaluateJacobian(xl, grad); │ │ │ │ │ -188 } │ │ │ │ │ -189 }; │ │ │ │ │ -190 │ │ │ │ │ -191#ifndef DOXYGEN │ │ │ │ │ -193 template │ │ │ │ │ -194 struct BasisInterfaceSwitch │ │ │ │ │ -201 >::value │ │ │ │ │ -202 >::type │ │ │ │ │ -203 > │ │ │ │ │ -204 { │ │ │ │ │ -206 typedef typename Basis::Traits::DomainFieldType _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ -208 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Basis::Traits::dimDomain; │ │ │ │ │ -210 typedef typename Basis::Traits::DomainType _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -211 │ │ │ │ │ -213 typedef typename Basis::Traits::RangeFieldType _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ -215 static const std::size_t _d_i_m_R_a_n_g_e = Basis::Traits::dimRange; │ │ │ │ │ -217 typedef typename Basis::Traits::RangeType _R_a_n_g_e; │ │ │ │ │ -218 │ │ │ │ │ -220 template │ │ │ │ │ -221 static void _g_r_a_d_i_e_n_t(const Basis& basis, const Geometry& geometry, │ │ │ │ │ -222 const _D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ -223 std::vector >& grad) │ │ │ │ │ -225 { │ │ │ │ │ -226 std::vector lgrad(basis.size()); │ │ │ │ │ -227 basis.evaluateJacobian(xl, lgrad); │ │ │ │ │ -228 │ │ │ │ │ -229 const typename Geometry::JacobianInverseTransposed& jac = │ │ │ │ │ -230 geometry.jacobianInverseTransposed(xl); │ │ │ │ │ -231 │ │ │ │ │ -232 grad.resize(basis.size()); │ │ │ │ │ -233 for(std::size_t i = 0; i < basis.size(); ++i) │ │ │ │ │ -234 jac.mv(lgrad[i][0], grad[i][0]); │ │ │ │ │ -235 } │ │ │ │ │ -236 }; │ │ │ │ │ -237#endif // !DOXYGEN │ │ │ │ │ -238 │ │ │ │ │ -239} // namespace Dune │ │ │ │ │ -240 │ │ │ │ │ -241#endif // DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::triangle; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ +interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_SIMPLEX2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_s_i_m_p_l_e_x_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h │ │ │ │ │ -Switch for uniform treatment of finite element with either the local or the │ │ │ │ │ -global interface. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -static const Coefficients & coefficients(const FiniteElement &fe) │ │ │ │ │ -access coefficients │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ -static void setStore(Store &store, FiniteElement &&fe) │ │ │ │ │ -Store a finite element in the store. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -FiniteElement::Traits::Coefficients Coefficients │ │ │ │ │ -export the type of the coefficients │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ -static void setStore(Store &store, const Store &fe) │ │ │ │ │ -Store a finite element in the store. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:91 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ -static void setStore(Store &store, const FiniteElement &fe) │ │ │ │ │ -Store a finite element in the store. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -FiniteElement::Traits::Interpolation Interpolation │ │ │ │ │ -export the type of the interpolation │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_S_t_o_r_e │ │ │ │ │ -std::shared_ptr< const FiniteElement > Store │ │ │ │ │ -Type for storing finite elements. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_b_a_s_i_s │ │ │ │ │ -static const Basis & basis(const FiniteElement &fe) │ │ │ │ │ -access basis │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_B_a_s_i_s │ │ │ │ │ -FiniteElement::Traits::Basis Basis │ │ │ │ │ -export the type of the basis │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -static const Interpolation & interpolation(const FiniteElement &fe) │ │ │ │ │ -access interpolation │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h │ │ │ │ │ -Switch for uniform treatment of local and global basis classes. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:154 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const std::size_t dimRange │ │ │ │ │ -export dimension of the values │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:165 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -static const std::size_t dimDomainLocal │ │ │ │ │ -export dimension of local coordinates │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:158 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ -Basis::Traits::RangeField RangeField │ │ │ │ │ -export field type of the values │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_R_a_n_g_e │ │ │ │ │ -Basis::Traits::Range Range │ │ │ │ │ -export vector type of the values │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:167 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_g_r_a_d_i_e_n_t │ │ │ │ │ -static void gradient(const Basis &basis, const Geometry &geometry, const │ │ │ │ │ -DomainLocal &xl, std::vector< FieldMatrix< RangeField, 1, Geometry:: │ │ │ │ │ -coorddimension > > &grad) │ │ │ │ │ -Compute global gradient for scalar valued bases. │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:181 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -Basis::Traits::DomainLocal DomainLocal │ │ │ │ │ -export vector type of the local coordinates │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:160 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ -Basis::Traits::DomainField DomainField │ │ │ │ │ -export field types of the coordinates │ │ │ │ │ -DDeeffiinniittiioonn interfaceswitch.hh:156 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< BDM2Simplex2DLocalBasis< D, R >, │ │ │ │ │ +BDM2Simplex2DLocalCoefficients, BDM2Simplex2DLocalInterpolation< │ │ │ │ │ +BDM2Simplex2DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM2Simplex2DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM2Simplex2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-2 elements on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_S_i_m_p_l_e_x_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2simplex2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualinterface.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,51 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
virtualinterface.hh File Reference
│ │ │ │ +
brezzidouglasmarini2cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <type_traits>
│ │ │ │ -#include <array>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <functional>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalBasisVirtualInterface< T >
 virtual base class for a local basis More...
 
class  Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType >
 virtual base class for a local interpolation More...
 
class  Dune::LocalInterpolationVirtualInterface< DomainType, RangeType >
 virtual base class for a local interpolation More...
 
class  Dune::LocalCoefficientsVirtualInterface
 virtual base class for local coefficients More...
 
class  Dune::LocalFiniteElementVirtualInterface< T >
 virtual base class for local finite elements with functions More...
class  Dune::BDM2Cube2DLocalFiniteElement< D, R >
 Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,39 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -virtualinterface.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +brezzidouglasmarini2cube2d.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _T_ _> │ │ │ │ │ -  virtual base class for a local basis _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> │ │ │ │ │ -  virtual base class for a local interpolation _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> │ │ │ │ │ -  virtual base class for a local interpolation _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -  virtual base class for local coefficients _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _T_ _> │ │ │ │ │ -  virtual base class for local finite elements with functions _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00113_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualinterface.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini2cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,244 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
virtualinterface.hh
│ │ │ │ +
brezzidouglasmarini2cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <type_traits>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11#include <functional>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
18
│ │ │ │ -
19namespace Dune
│ │ │ │ -
20{
│ │ │ │ -
21
│ │ │ │ -
22 // forward declaration needed by the helper traits
│ │ │ │ -
23 template<class DomainType, class RangeType>
│ │ │ │ -
24 class LocalInterpolationVirtualInterface;
│ │ │ │ -
25
│ │ │ │ -
26
│ │ │ │ -
27
│ │ │ │ -
28 // -----------------------------------------------------------------
│ │ │ │ -
29 // Basis
│ │ │ │ -
30 // -----------------------------------------------------------------
│ │ │ │ -
31
│ │ │ │ -
38 template<class T>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {
│ │ │ │ -
41 public:
│ │ │ │ -
42 using Traits = T;
│ │ │ │ -
43
│ │ │ │ -
44
│ │ │ │ - │ │ │ │ -
46
│ │ │ │ -
48 virtual unsigned int size () const = 0;
│ │ │ │ -
49
│ │ │ │ -
51 virtual unsigned int order () const = 0;
│ │ │ │ -
52
│ │ │ │ -
58 virtual void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
59 std::vector<typename Traits::RangeType>& out) const = 0;
│ │ │ │ -
60
│ │ │ │ -
69 virtual void evaluateJacobian(const typename Traits::DomainType& in, // position
│ │ │ │ -
70 std::vector<typename Traits::JacobianType>& out) const = 0;
│ │ │ │ -
71
│ │ │ │ -
77 virtual void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ -
78 const typename Traits::DomainType& in,
│ │ │ │ -
79 std::vector<typename Traits::RangeType>& out) const = 0;
│ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
82
│ │ │ │ -
83
│ │ │ │ -
84 // -----------------------------------------------------------------
│ │ │ │ -
85 // Interpolation
│ │ │ │ -
86 // -----------------------------------------------------------------
│ │ │ │ -
87
│ │ │ │ -
100 template<class DomainType, class RangeType>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
102 {
│ │ │ │ -
103 public:
│ │ │ │ -
104
│ │ │ │ -
106 using FunctionType = std::function<RangeType(DomainType)>;
│ │ │ │ -
107
│ │ │ │ -
109 typedef typename RangeType::field_type CoefficientType;
│ │ │ │ -
110
│ │ │ │ - │ │ │ │ -
112
│ │ │ │ -
120 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const = 0;
│ │ │ │ -
121 };
│ │ │ │ -
│ │ │ │ -
122
│ │ │ │ -
130 template<class DomainType, class RangeType>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
132 : public LocalInterpolationVirtualInterfaceBase<DomainType, RangeType>
│ │ │ │ -
133 {
│ │ │ │ -
134 public:
│ │ │ │ -
135
│ │ │ │ -
137 using FunctionType = std::function<RangeType(DomainType)>;
│ │ │ │ -
138
│ │ │ │ -
140 typedef typename RangeType::field_type CoefficientType;
│ │ │ │ -
141
│ │ │ │ -
142
│ │ │ │ - │ │ │ │ -
144
│ │ │ │ -
145 // This method is only noted again for to make the documentation complete.
│ │ │ │ -
146
│ │ │ │ -
154 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const = 0;
│ │ │ │ -
155
│ │ │ │ -
161 template<class F,
│ │ │ │ -
162 std::enable_if_t<not std::is_base_of<FunctionType, F>::value, int> = 0>
│ │ │ │ -
│ │ │ │ -
163 void interpolate (const F& f, std::vector<CoefficientType>& out) const
│ │ │ │ -
164 {
│ │ │ │ - │ │ │ │ -
166 asBase.interpolate(FunctionType(std::cref(f)),out);
│ │ │ │ -
167 }
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
174 template<class F, class C>
│ │ │ │ -
│ │ │ │ -
175 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
176 {
│ │ │ │ -
177 std::vector<CoefficientType> outDummy;
│ │ │ │ - │ │ │ │ -
179 asBase.interpolate(FunctionType(std::cref(f)),outDummy);
│ │ │ │ -
180 out.resize(outDummy.size());
│ │ │ │ -
181 for(typename std::vector<CoefficientType>::size_type i=0; i<outDummy.size(); ++i)
│ │ │ │ -
182 out[i] = outDummy[i];
│ │ │ │ -
183 }
│ │ │ │ -
│ │ │ │ -
184 };
│ │ │ │ -
│ │ │ │ -
185
│ │ │ │ -
186
│ │ │ │ -
187
│ │ │ │ -
188 // -----------------------------------------------------------------
│ │ │ │ -
189 // Coefficients
│ │ │ │ -
190 // -----------------------------------------------------------------
│ │ │ │ -
191
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
198 {
│ │ │ │ -
199 public:
│ │ │ │ -
200
│ │ │ │ - │ │ │ │ -
202
│ │ │ │ -
204 virtual std::size_t size () const = 0;
│ │ │ │ -
205
│ │ │ │ -
207 const virtual LocalKey& localKey (std::size_t i) const = 0;
│ │ │ │ -
208
│ │ │ │ -
209 };
│ │ │ │ -
│ │ │ │ -
210
│ │ │ │ -
211
│ │ │ │ -
212
│ │ │ │ -
213 // -----------------------------------------------------------------
│ │ │ │ -
214 // Finite Element
│ │ │ │ -
215 // -----------------------------------------------------------------
│ │ │ │ -
216
│ │ │ │ -
217
│ │ │ │ -
223 template<class T>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
225 {
│ │ │ │ -
226 using LocalBasisTraits = T;
│ │ │ │ -
227 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
234
│ │ │ │ - │ │ │ │ -
236
│ │ │ │ -
238 virtual const typename Traits::LocalBasisType& localBasis () const = 0;
│ │ │ │ -
239
│ │ │ │ -
241 virtual const typename Traits::LocalCoefficientsType& localCoefficients () const = 0;
│ │ │ │ -
242
│ │ │ │ -
244 virtual const typename Traits::LocalInterpolationType& localInterpolation () const = 0;
│ │ │ │ -
245
│ │ │ │ -
247 virtual unsigned int size () const = 0;
│ │ │ │ -
248
│ │ │ │ -
250 virtual const GeometryType type () const = 0;
│ │ │ │ -
251
│ │ │ │ - │ │ │ │ -
253 };
│ │ │ │ -
│ │ │ │ -
254}
│ │ │ │ -
255#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::quadrilateral;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 BDM2Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
Second order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2d.hh:27
│ │ │ │ +
BDM2Cube2DLocalFiniteElement()
Standard constructor.
Definition brezzidouglasmarini2cube2d.hh:36
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition brezzidouglasmarini2cube2d.hh:65
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition brezzidouglasmarini2cube2d.hh:49
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition brezzidouglasmarini2cube2d.hh:59
│ │ │ │ +
static constexpr GeometryType type()
Definition brezzidouglasmarini2cube2d.hh:70
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition brezzidouglasmarini2cube2d.hh:54
│ │ │ │ +
BDM2Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < ??
Definition brezzidouglasmarini2cube2d.hh:44
│ │ │ │ +
LocalFiniteElementTraits< BDM2Cube2DLocalBasis< D, R >, BDM2Cube2DLocalCoefficients, BDM2Cube2DLocalInterpolation< BDM2Cube2DLocalBasis< D, R > > > Traits
Definition brezzidouglasmarini2cube2d.hh:33
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalbasis.hh:30
│ │ │ │ +
Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalcoefficients.hh:24
│ │ │ │ +
First order Brezzi-Douglas-Marini shape functions on quadrilaterals.
Definition brezzidouglasmarini2cube2dlocalinterpolation.hh:25
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
virtual base class for a local interpolation
Definition virtualinterface.hh:133
│ │ │ │ -
virtual ~LocalInterpolationVirtualInterface()
Definition virtualinterface.hh:143
│ │ │ │ -
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:137
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
determine coefficients interpolating a given function
Definition virtualinterface.hh:175
│ │ │ │ -
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:140
│ │ │ │ -
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
│ │ │ │ -
void interpolate(const F &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition virtualinterface.hh:163
│ │ │ │ -
virtual base class for a local basis
Definition virtualinterface.hh:40
│ │ │ │ -
virtual unsigned int order() const =0
Polynomial order of the shape functions.
│ │ │ │ -
virtual void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const =0
Evaluate jacobian of all shape functions at given position.
│ │ │ │ -
virtual unsigned int size() const =0
Number of shape functions.
│ │ │ │ -
T Traits
Definition virtualinterface.hh:42
│ │ │ │ -
virtual void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const =0
Evaluate all basis function at given position.
│ │ │ │ -
virtual ~LocalBasisVirtualInterface()
Definition virtualinterface.hh:45
│ │ │ │ -
virtual void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const =0
Evaluate partial derivatives of any order of all shape functions.
│ │ │ │ -
virtual base class for a local interpolation
Definition virtualinterface.hh:102
│ │ │ │ -
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:106
│ │ │ │ -
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:109
│ │ │ │ -
virtual ~LocalInterpolationVirtualInterfaceBase()
Definition virtualinterface.hh:111
│ │ │ │ -
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
│ │ │ │ -
virtual base class for local coefficients
Definition virtualinterface.hh:198
│ │ │ │ -
virtual ~LocalCoefficientsVirtualInterface()
Definition virtualinterface.hh:201
│ │ │ │ -
virtual std::size_t size() const =0
number of coefficients
│ │ │ │ -
virtual const LocalKey & localKey(std::size_t i) const =0
get i'th index
│ │ │ │ -
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ -
virtual LocalFiniteElementVirtualInterface< T > * clone() const =0
│ │ │ │ -
virtual const Traits::LocalInterpolationType & localInterpolation() const =0
│ │ │ │ -
virtual unsigned int size() const =0
│ │ │ │ -
virtual const Traits::LocalBasisType & localBasis() const =0
│ │ │ │ -
virtual const GeometryType type() const =0
│ │ │ │ -
LocalFiniteElementTraits< LocalBasisVirtualInterface< LocalBasisTraits >, LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType > > Traits
Definition virtualinterface.hh:233
│ │ │ │ -
virtual ~LocalFiniteElementVirtualInterface()
Definition virtualinterface.hh:235
│ │ │ │ -
virtual const Traits::LocalCoefficientsType & localCoefficients() const =0
│ │ │ │ - │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,322 +1,139 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -virtualinterface.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i │ │ │ │ │ +brezzidouglasmarini2cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -18 │ │ │ │ │ -19namespace _D_u_n_e │ │ │ │ │ -20{ │ │ │ │ │ -21 │ │ │ │ │ -22 // forward declaration needed by the helper traits │ │ │ │ │ -23 template │ │ │ │ │ -24 class LocalInterpolationVirtualInterface; │ │ │ │ │ -25 │ │ │ │ │ -26 │ │ │ │ │ -27 │ │ │ │ │ -28 // ----------------------------------------------------------------- │ │ │ │ │ -29 // Basis │ │ │ │ │ -30 // ----------------------------------------------------------------- │ │ │ │ │ -31 │ │ │ │ │ -38 template │ │ │ │ │ -_3_9 class _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -40 { │ │ │ │ │ -41 public: │ │ │ │ │ -_4_2 using _T_r_a_i_t_s = T; │ │ │ │ │ -43 │ │ │ │ │ -44 │ │ │ │ │ -_4_5 virtual _~_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ -46 │ │ │ │ │ -_4_8 virtual unsigned int _s_i_z_e () const = 0; │ │ │ │ │ -49 │ │ │ │ │ -_5_1 virtual unsigned int _o_r_d_e_r () const = 0; │ │ │ │ │ -52 │ │ │ │ │ -_5_8 virtual void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename Traits::DomainType& in, │ │ │ │ │ -59 std::vector& out) const = 0; │ │ │ │ │ -60 │ │ │ │ │ -_6_9 virtual void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename Traits::DomainType& in, / │ │ │ │ │ -/ position │ │ │ │ │ -70 std::vector& out) const = 0; │ │ │ │ │ -71 │ │ │ │ │ -_7_7 virtual void _p_a_r_t_i_a_l(const std::array& │ │ │ │ │ -_o_r_d_e_r, │ │ │ │ │ -78 const typename Traits::DomainType& in, │ │ │ │ │ -79 std::vector& out) const = 0; │ │ │ │ │ -80 }; │ │ │ │ │ -81 │ │ │ │ │ -82 │ │ │ │ │ -83 │ │ │ │ │ -84 // ----------------------------------------------------------------- │ │ │ │ │ -85 // Interpolation │ │ │ │ │ -86 // ----------------------------------------------------------------- │ │ │ │ │ -87 │ │ │ │ │ -100 template │ │ │ │ │ -_1_0_1 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ -102 { │ │ │ │ │ -103 public: │ │ │ │ │ -104 │ │ │ │ │ -_1_0_6 using _F_u_n_c_t_i_o_n_T_y_p_e = std::function; │ │ │ │ │ -107 │ │ │ │ │ -_1_0_9 typedef typename RangeType::field_type _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ -110 │ │ │ │ │ -_1_1_1 virtual _~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e() {} │ │ │ │ │ -112 │ │ │ │ │ -_1_2_0 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ -vector& out) const = 0; │ │ │ │ │ -121 }; │ │ │ │ │ -122 │ │ │ │ │ -130 template │ │ │ │ │ -_1_3_1 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -132 : public _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ -133 { │ │ │ │ │ -134 public: │ │ │ │ │ -135 │ │ │ │ │ -_1_3_7 using _F_u_n_c_t_i_o_n_T_y_p_e = std::function; │ │ │ │ │ -138 │ │ │ │ │ -_1_4_0 typedef typename RangeType::field_type _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ -141 │ │ │ │ │ -142 │ │ │ │ │ -_1_4_3 virtual _~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ -144 │ │ │ │ │ -145 // This method is only noted again for to make the documentation complete. │ │ │ │ │ -146 │ │ │ │ │ -_1_5_4 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ -vector& out) const = 0; │ │ │ │ │ -155 │ │ │ │ │ -161 template::value, int> = 0> │ │ │ │ │ -_1_6_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -164 { │ │ │ │ │ -165 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_>& asBase │ │ │ │ │ -= *this; │ │ │ │ │ -166 asBase._i_n_t_e_r_p_o_l_a_t_e(_F_u_n_c_t_i_o_n_T_y_p_e(std::cref(f)),out); │ │ │ │ │ -167 } │ │ │ │ │ -168 │ │ │ │ │ -174 template │ │ │ │ │ -_1_7_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -176 { │ │ │ │ │ -177 std::vector outDummy; │ │ │ │ │ -178 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_>& asBase │ │ │ │ │ -= *this; │ │ │ │ │ -179 asBase._i_n_t_e_r_p_o_l_a_t_e(_F_u_n_c_t_i_o_n_T_y_p_e(std::cref(f)),outDummy); │ │ │ │ │ -180 out.resize(outDummy.size()); │ │ │ │ │ -181 for(typename std::vector::size_type i=0; i │ │ │ │ │ -_2_2_4 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -225 { │ │ │ │ │ -226 using LocalBasisTraits = T; │ │ │ │ │ -227 public: │ │ │ │ │ -228 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -229 _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_>, │ │ │ │ │ -230 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e, │ │ │ │ │ -231 _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e< │ │ │ │ │ -232 typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e, │ │ │ │ │ -_2_3_3 typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e> > _T_r_a_i_t_s; │ │ │ │ │ -234 │ │ │ │ │ -_2_3_5 virtual _~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ -236 │ │ │ │ │ -_2_3_8 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const = 0; │ │ │ │ │ -239 │ │ │ │ │ -_2_4_1 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ -const = 0; │ │ │ │ │ -242 │ │ │ │ │ -_2_4_4 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -() const = 0; │ │ │ │ │ -245 │ │ │ │ │ -_2_4_7 virtual unsigned int _s_i_z_e () const = 0; │ │ │ │ │ -248 │ │ │ │ │ -_2_5_0 virtual const GeometryType _t_y_p_e () const = 0; │ │ │ │ │ -251 │ │ │ │ │ -_2_5_2 virtual _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_l_o_n_e() const = 0; │ │ │ │ │ -253 }; │ │ │ │ │ -254} │ │ │ │ │ -255#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::quadrilateral; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81#endif / │ │ │ │ │ +/ DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI2_QUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -R RangeType │ │ │ │ │ -range type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM2Cube2DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +BDM2Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < ?? │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< BDM2Cube2DLocalBasis< D, R >, │ │ │ │ │ +BDM2Cube2DLocalCoefficients, BDM2Cube2DLocalInterpolation< │ │ │ │ │ +BDM2Cube2DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_B_D_M_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasmarini2cube2dlocalinterpolation.hh:25 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ LB LocalBasisType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ LC LocalCoefficientsType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ LI LocalInterpolationType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for a local interpolation │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual ~LocalInterpolationVirtualInterface() │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:143 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ -std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ -type of function to interpolate │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:137 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:175 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ -RangeType::field_type CoefficientType │ │ │ │ │ -type of the coefficient vector in the interpolate method │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:140 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ -&out) const =0 │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< CoefficientType > &out) const │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for a local basis │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_o_r_d_e_r │ │ │ │ │ -virtual unsigned int order() const =0 │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -virtual void evaluateJacobian(const typename Traits::DomainType &in, std:: │ │ │ │ │ -vector< typename Traits::JacobianType > &out) const =0 │ │ │ │ │ -Evaluate jacobian of all shape functions at given position. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ -virtual unsigned int size() const =0 │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -T Traits │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -virtual void evaluateFunction(const typename Traits::DomainType &in, std:: │ │ │ │ │ -vector< typename Traits::RangeType > &out) const =0 │ │ │ │ │ -Evaluate all basis function at given position. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual ~LocalBasisVirtualInterface() │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_p_a_r_t_i_a_l │ │ │ │ │ -virtual void partial(const std::array< unsigned int, Traits::dimDomain > │ │ │ │ │ -&order, const typename Traits::DomainType &in, std::vector< typename Traits:: │ │ │ │ │ -RangeType > &out) const =0 │ │ │ │ │ -Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ -virtual base class for a local interpolation │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:102 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ -std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ -type of function to interpolate │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:106 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ -RangeType::field_type CoefficientType │ │ │ │ │ -type of the coefficient vector in the interpolate method │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:109 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_: │ │ │ │ │ -_~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ -virtual ~LocalInterpolationVirtualInterfaceBase() │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ -&out) const =0 │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local coefficients │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:198 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual ~LocalCoefficientsVirtualInterface() │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:201 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ -virtual std::size_t size() const =0 │ │ │ │ │ -number of coefficients │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -virtual const LocalKey & localKey(std::size_t i) const =0 │ │ │ │ │ -get i'th index │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local finite elements with functions │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_c_l_o_n_e │ │ │ │ │ -virtual LocalFiniteElementVirtualInterface< T > * clone() const =0 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -virtual const Traits::LocalInterpolationType & localInterpolation() const =0 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ -virtual unsigned int size() const =0 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -virtual const Traits::LocalBasisType & localBasis() const =0 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_t_y_p_e │ │ │ │ │ -virtual const GeometryType type() const =0 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< LocalBasisVirtualInterface< LocalBasisTraits >, │ │ │ │ │ -LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename │ │ │ │ │ -LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType > > Traits │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:233 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual ~LocalFiniteElementVirtualInterface() │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:235 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -virtual const Traits::LocalCoefficientsType & localCoefficients() const =0 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariant.hh File Reference │ │ │ │ +dune-localfunctions: brezzidouglasmarini.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
localfiniteelementvariant.hh File Reference
│ │ │ │ +
brezzidouglasmarini.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <type_traits>
│ │ │ │ -#include <variant>
│ │ │ │ -#include <dune/common/typeutilities.hh>
│ │ │ │ -#include <dune/common/std/type_traits.hh>
│ │ │ │ -#include <dune/common/overloadset.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::LocalFiniteElementVariant< Implementations >
 Type erasure class for wrapping LocalFiniteElement classes. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,13 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localfiniteelementvariant.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +brezzidouglasmarini.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _I_m_p_l_e_m_e_n_t_a_t_i_o_n_s_ _> │ │ │ │ │ -  Type erasure class for wrapping LocalFiniteElement classes. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00116_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariant.hh Source File │ │ │ │ +dune-localfunctions: brezzidouglasmarini.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,387 +70,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementvariant.hh
│ │ │ │ +
brezzidouglasmarini.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <type_traits>
│ │ │ │ -
10#include <variant>
│ │ │ │ +
8// BDM implementations with compile-time order
│ │ │ │ + │ │ │ │ + │ │ │ │
11
│ │ │ │ -
12#include <dune/common/typeutilities.hh>
│ │ │ │ -
13#include <dune/common/std/type_traits.hh>
│ │ │ │ -
14#include <dune/common/overloadset.hh>
│ │ │ │ -
15
│ │ │ │ -
16#include <dune/geometry/type.hh>
│ │ │ │ -
17
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
21
│ │ │ │ -
22
│ │ │ │ -
23namespace Dune {
│ │ │ │ -
24
│ │ │ │ -
25namespace Impl {
│ │ │ │ -
26
│ │ │ │ -
27 // Helper for visiting a variant containing monostate.
│ │ │ │ -
28 // Since a generic lambda will in most cases not compile
│ │ │ │ -
29 // for monostate, we add special empty overloads for monostate.
│ │ │ │ -
30 // Hence visitIf will simply do nothing in the case of a
│ │ │ │ -
31 // monostate value.
│ │ │ │ -
32 template<class Visitor, class Variant>
│ │ │ │ -
33 void visitIf(Visitor&& visitor, Variant&& variant)
│ │ │ │ -
34 {
│ │ │ │ -
35 auto visitorWithFallback = overload([&](std::monostate&) {}, [&](const std::monostate&) {}, visitor);
│ │ │ │ -
36 std::visit(visitorWithFallback, variant);
│ │ │ │ -
37 }
│ │ │ │ -
38
│ │ │ │ -
39 template<class... Implementations>
│ │ │ │ -
40 class LocalBasisVariant
│ │ │ │ -
41 {
│ │ │ │ -
42
│ │ │ │ -
43 template<class I0, class... II>
│ │ │ │ -
44 struct FirstType
│ │ │ │ -
45 { using type = I0; };
│ │ │ │ -
46
│ │ │ │ -
47 using FirstImpTraits = typename FirstType<Implementations...>::type::Traits;
│ │ │ │ -
48
│ │ │ │ -
49 public:
│ │ │ │ -
50
│ │ │ │ -
51 // We do not simply copy Implementation::LocalBasisTraits because this
│ │ │ │ -
52 // may be implementation specific. To stay clean, we simply put all its
│ │ │ │ -
53 // data into the default LocalBasisTraits.
│ │ │ │ -
54 using Traits = typename Dune::LocalBasisTraits<
│ │ │ │ -
55 typename FirstImpTraits::DomainFieldType,
│ │ │ │ -
56 FirstImpTraits::dimDomain,
│ │ │ │ -
57 typename FirstImpTraits::DomainType,
│ │ │ │ -
58 typename FirstImpTraits::RangeFieldType,
│ │ │ │ -
59 FirstImpTraits::dimRange,
│ │ │ │ -
60 typename FirstImpTraits::RangeType,
│ │ │ │ -
61 typename FirstImpTraits::JacobianType>;
│ │ │ │ -
62
│ │ │ │ -
63 template<class Implementation>
│ │ │ │ -
64 LocalBasisVariant(const Implementation& impl) :
│ │ │ │ -
65 impl_(&impl),
│ │ │ │ -
66 size_(impl.size()),
│ │ │ │ -
67 order_(impl.order())
│ │ │ │ -
68 {}
│ │ │ │ -
69
│ │ │ │ -
70 LocalBasisVariant() = default;
│ │ │ │ -
71 LocalBasisVariant(const LocalBasisVariant& other) = default;
│ │ │ │ -
72 LocalBasisVariant(LocalBasisVariant&& other) = default;
│ │ │ │ -
73 LocalBasisVariant& operator=(const LocalBasisVariant& other) = default;
│ │ │ │ -
74 LocalBasisVariant& operator=(LocalBasisVariant&& other) = default;
│ │ │ │ -
75
│ │ │ │ -
79 unsigned int size() const
│ │ │ │ -
80 {
│ │ │ │ -
81 return size_;
│ │ │ │ -
82 }
│ │ │ │ -
83
│ │ │ │ -
87 unsigned int order() const
│ │ │ │ -
88 {
│ │ │ │ -
89 return order_;
│ │ │ │ -
90 }
│ │ │ │ -
91
│ │ │ │ -
95 inline void evaluateFunction(
│ │ │ │ -
96 const typename Traits::DomainType& x,
│ │ │ │ -
97 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
98 {
│ │ │ │ -
99 Impl::visitIf([&](const auto* impl) { impl->evaluateFunction(x, out); }, impl_);
│ │ │ │ -
100 }
│ │ │ │ -
101
│ │ │ │ -
105 inline void evaluateJacobian(
│ │ │ │ -
106 const typename Traits::DomainType& x,
│ │ │ │ -
107 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
108 {
│ │ │ │ -
109 Impl::visitIf([&](const auto* impl) { impl->evaluateJacobian(x, out); }, impl_);
│ │ │ │ -
110 }
│ │ │ │ -
111
│ │ │ │ -
119 void partial(
│ │ │ │ -
120 const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ -
121 const typename Traits::DomainType& x,
│ │ │ │ -
122 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
123 {
│ │ │ │ -
124 Impl::visitIf([&](const auto* impl) { impl->partial(order, x, out); }, impl_);
│ │ │ │ -
125 }
│ │ │ │ -
126
│ │ │ │ -
127 private:
│ │ │ │ -
128 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ -
129 std::size_t size_;
│ │ │ │ -
130 std::size_t order_;
│ │ │ │ -
131 };
│ │ │ │ -
132
│ │ │ │ -
133
│ │ │ │ -
134 template<class... Implementations>
│ │ │ │ -
135 class LocalCoefficientsVariant
│ │ │ │ -
136 {
│ │ │ │ -
137 public:
│ │ │ │ -
138
│ │ │ │ -
139 template<class Implementation>
│ │ │ │ -
140 LocalCoefficientsVariant(const Implementation& impl) :
│ │ │ │ -
141 impl_(&impl),
│ │ │ │ -
142 size_(impl.size())
│ │ │ │ -
143 {}
│ │ │ │ -
144
│ │ │ │ -
145 LocalCoefficientsVariant() = default;
│ │ │ │ -
146 LocalCoefficientsVariant(const LocalCoefficientsVariant& other) = default;
│ │ │ │ -
147 LocalCoefficientsVariant(LocalCoefficientsVariant&& other) = default;
│ │ │ │ -
148 LocalCoefficientsVariant& operator=(const LocalCoefficientsVariant& other) = default;
│ │ │ │ -
149 LocalCoefficientsVariant& operator=(LocalCoefficientsVariant&& other) = default;
│ │ │ │ -
150
│ │ │ │ -
154 unsigned int size() const
│ │ │ │ -
155 {
│ │ │ │ -
156 return size_;
│ │ │ │ -
157 }
│ │ │ │ -
158
│ │ │ │ -
159 const Dune::LocalKey& localKey (std::size_t i) const
│ │ │ │ -
160 {
│ │ │ │ -
161 // We can't use visitIf since we have to return something
│ │ │ │ -
162 // even for a monostate value. Since the return type is
│ │ │ │ -
163 // an l-value reference, we use a default constructed
│ │ │ │ -
164 // dummy LocalKey value.
│ │ │ │ -
165 static const Dune::LocalKey dummyLocalKey;
│ │ │ │ -
166 return std::visit(overload(
│ │ │ │ -
167 [&](const std::monostate&) -> decltype(auto) { return (dummyLocalKey);},
│ │ │ │ -
168 [&](const auto* impl) -> decltype(auto) { return impl->localKey(i); }), impl_);
│ │ │ │ -
169 }
│ │ │ │ -
170
│ │ │ │ -
171 private:
│ │ │ │ -
172 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ -
173 std::size_t size_;
│ │ │ │ -
174 };
│ │ │ │ -
175
│ │ │ │ -
176
│ │ │ │ -
177 template<class... Implementations>
│ │ │ │ -
178 class LocalInterpolationVariant
│ │ │ │ -
179 {
│ │ │ │ -
180 public:
│ │ │ │ -
181
│ │ │ │ -
182 template<class Implementation>
│ │ │ │ -
183 LocalInterpolationVariant(const Implementation& impl) :
│ │ │ │ -
184 impl_(&impl)
│ │ │ │ -
185 {}
│ │ │ │ -
186
│ │ │ │ -
187 LocalInterpolationVariant() = default;
│ │ │ │ -
188 LocalInterpolationVariant(const LocalInterpolationVariant& other) = default;
│ │ │ │ -
189 LocalInterpolationVariant(LocalInterpolationVariant&& other) = default;
│ │ │ │ -
190 LocalInterpolationVariant& operator=(const LocalInterpolationVariant& other) = default;
│ │ │ │ -
191 LocalInterpolationVariant& operator=(LocalInterpolationVariant&& other) = default;
│ │ │ │ -
192
│ │ │ │ -
193 template<typename F, typename C>
│ │ │ │ -
194 void interpolate (const F& ff, std::vector<C>& out) const
│ │ │ │ -
195 {
│ │ │ │ -
196 Impl::visitIf([&](const auto* impl) { impl->interpolate(ff, out); }, impl_);
│ │ │ │ -
197 }
│ │ │ │ -
198
│ │ │ │ -
199 private:
│ │ │ │ -
200 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ -
201 };
│ │ │ │ -
202
│ │ │ │ -
203} // namespace Impl
│ │ │ │ -
204
│ │ │ │ -
205
│ │ │ │ -
234 template<class... Implementations>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
236 {
│ │ │ │ -
237
│ │ │ │ -
238 // In each LocalFooVariant we store a std::variant<std::monostate, const FooImpl*...>, i.e. a std::variant
│ │ │ │ -
239 // with the pointer to the Foo implementation unless LocalFiniteElementVariant stores a monostate. In this
│ │ │ │ -
240 // case each LocalFooVariant also stores a monostate (and not a monostate*).
│ │ │ │ -
241 using LocalBasis = Impl::LocalBasisVariant<typename Implementations::Traits::LocalBasisType...>;
│ │ │ │ -
242 using LocalCoefficients = Impl::LocalCoefficientsVariant<typename Implementations::Traits::LocalCoefficientsType...>;
│ │ │ │ -
243 using LocalInterpolation = Impl::LocalInterpolationVariant<typename Implementations::Traits::LocalInterpolationType...>;
│ │ │ │ -
244
│ │ │ │ -
245 // Update members after changing impl_
│ │ │ │ -
246 void updateMembers()
│ │ │ │ -
247 {
│ │ │ │ -
248 std::visit(overload(
│ │ │ │ -
249 [&](std::monostate&) {
│ │ │ │ -
250 localBasis_ = LocalBasis();
│ │ │ │ -
251 localCoefficients_ = LocalCoefficients();
│ │ │ │ -
252 localInterpolation_ = LocalInterpolation();
│ │ │ │ -
253 size_ = 0;
│ │ │ │ -
254 geometryType_ = GeometryType{};
│ │ │ │ -
255 }, [&](auto&& impl) {
│ │ │ │ -
256 localBasis_ = LocalBasis(impl.localBasis());
│ │ │ │ -
257 localCoefficients_ = LocalCoefficients(impl.localCoefficients());
│ │ │ │ -
258 localInterpolation_ = LocalInterpolation(impl.localInterpolation());
│ │ │ │ -
259 size_ = impl.size();
│ │ │ │ -
260 geometryType_ = impl.type();
│ │ │ │ -
261 }), impl_);
│ │ │ │ -
262 }
│ │ │ │ -
263
│ │ │ │ -
264 public:
│ │ │ │ -
265
│ │ │ │ - │ │ │ │ -
270
│ │ │ │ - │ │ │ │ -
275
│ │ │ │ -
│ │ │ │ -
279 LocalFiniteElementVariant(const std::monostate& monostate)
│ │ │ │ -
280 {}
│ │ │ │ -
│ │ │ │ -
281
│ │ │ │ -
288 template<class Implementation,
│ │ │ │ -
289 std::enable_if_t<std::disjunction<std::is_same<std::decay_t<Implementation>, Implementations>...>::value, int> = 0>
│ │ │ │ -
│ │ │ │ -
290 LocalFiniteElementVariant(Implementation&& impl) :
│ │ │ │ -
291 impl_(std::forward<Implementation>(impl))
│ │ │ │ -
292 {
│ │ │ │ -
293 updateMembers();
│ │ │ │ -
294 }
│ │ │ │ -
│ │ │ │ -
295
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
300 impl_(other.impl_)
│ │ │ │ -
301 {
│ │ │ │ -
302 updateMembers();
│ │ │ │ -
303 }
│ │ │ │ -
│ │ │ │ -
304
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
309 impl_(std::move(other.impl_))
│ │ │ │ -
310 {
│ │ │ │ -
311 updateMembers();
│ │ │ │ -
312 }
│ │ │ │ -
│ │ │ │ -
313
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
318 {
│ │ │ │ -
319 impl_ = other.impl_;
│ │ │ │ -
320 updateMembers();
│ │ │ │ -
321 return *this;
│ │ │ │ -
322 }
│ │ │ │ -
│ │ │ │ -
323
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
328 {
│ │ │ │ -
329 impl_ = std::move(other.impl_);
│ │ │ │ -
330 updateMembers();
│ │ │ │ -
331 return *this;
│ │ │ │ -
332 }
│ │ │ │ -
│ │ │ │ -
333
│ │ │ │ -
337 template<class Implementation,
│ │ │ │ -
338 std::enable_if_t<std::disjunction<std::is_same<std::decay_t<Implementation>, Implementations>...>::value, int> = 0>
│ │ │ │ -
│ │ │ │ -
339 LocalFiniteElementVariant& operator=(Implementation&& impl)
│ │ │ │ -
340 {
│ │ │ │ -
341 impl_ = std::forward<Implementation>(impl);
│ │ │ │ -
342 updateMembers();
│ │ │ │ -
343 return *this;
│ │ │ │ -
344 }
│ │ │ │ -
│ │ │ │ -
345
│ │ │ │ -
346
│ │ │ │ -
│ │ │ │ -
350 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ -
351 {
│ │ │ │ -
352 return localBasis_;
│ │ │ │ -
353 }
│ │ │ │ -
│ │ │ │ -
354
│ │ │ │ -
│ │ │ │ -
358 const typename Traits::LocalCoefficientsType& localCoefficients() const
│ │ │ │ -
359 {
│ │ │ │ -
360 return localCoefficients_;
│ │ │ │ -
361 }
│ │ │ │ -
│ │ │ │ -
362
│ │ │ │ -
│ │ │ │ -
366 const typename Traits::LocalInterpolationType& localInterpolation() const
│ │ │ │ -
367 {
│ │ │ │ -
368 return localInterpolation_;
│ │ │ │ -
369 }
│ │ │ │ -
│ │ │ │ -
370
│ │ │ │ -
│ │ │ │ -
374 unsigned int size() const
│ │ │ │ -
375 {
│ │ │ │ -
376 return size_;
│ │ │ │ -
377 }
│ │ │ │ -
│ │ │ │ -
378
│ │ │ │ -
│ │ │ │ -
382 constexpr GeometryType type() const
│ │ │ │ -
383 {
│ │ │ │ -
384 return geometryType_;
│ │ │ │ -
385 }
│ │ │ │ -
│ │ │ │ -
386
│ │ │ │ -
│ │ │ │ -
398 const auto& variant() const
│ │ │ │ -
399 {
│ │ │ │ -
400 return impl_;
│ │ │ │ -
401 }
│ │ │ │ -
│ │ │ │ -
402
│ │ │ │ -
│ │ │ │ -
408 operator bool () const
│ │ │ │ -
409 {
│ │ │ │ -
410 return not(std::holds_alternative<std::monostate>(variant()));
│ │ │ │ -
411 }
│ │ │ │ -
│ │ │ │ -
412
│ │ │ │ -
413 private:
│ │ │ │ -
414 std::variant<std::monostate, Implementations...> impl_;
│ │ │ │ -
415 std::size_t size_;
│ │ │ │ -
416 GeometryType geometryType_;
│ │ │ │ -
417 LocalBasis localBasis_;
│ │ │ │ -
418 LocalCoefficients localCoefficients_;
│ │ │ │ -
419 LocalInterpolation localInterpolation_;
│ │ │ │ -
420 };
│ │ │ │ -
│ │ │ │ -
421
│ │ │ │ -
422} // end namespace Dune
│ │ │ │ -
423
│ │ │ │ -
424#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
Type erasure class for wrapping LocalFiniteElement classes.
Definition localfiniteelementvariant.hh:236
│ │ │ │ -
typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation > Traits
Export LocalFiniteElementTraits.
Definition localfiniteelementvariant.hh:269
│ │ │ │ -
const auto & variant() const
Provide access to underlying std::variant.
Definition localfiniteelementvariant.hh:398
│ │ │ │ -
unsigned int size() const
Number of shape functions.
Definition localfiniteelementvariant.hh:374
│ │ │ │ -
constexpr GeometryType type() const
Number of shape functions.
Definition localfiniteelementvariant.hh:382
│ │ │ │ -
LocalFiniteElementVariant(LocalFiniteElementVariant &&other)
Move constructor.
Definition localfiniteelementvariant.hh:308
│ │ │ │ -
LocalFiniteElementVariant & operator=(Implementation &&impl)
Assignment from implementation.
Definition localfiniteelementvariant.hh:339
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Provide access to LocalBasis implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:350
│ │ │ │ -
LocalFiniteElementVariant & operator=(const LocalFiniteElementVariant &other)
Copy assignment.
Definition localfiniteelementvariant.hh:317
│ │ │ │ -
LocalFiniteElementVariant(const std::monostate &monostate)
Construct empty LocalFiniteElementVariant.
Definition localfiniteelementvariant.hh:279
│ │ │ │ -
LocalFiniteElementVariant(const LocalFiniteElementVariant &other)
Copy constructor.
Definition localfiniteelementvariant.hh:299
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Provide access to LocalCoefficients implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:358
│ │ │ │ -
LocalFiniteElementVariant(Implementation &&impl)
Construct LocalFiniteElementVariant.
Definition localfiniteelementvariant.hh:290
│ │ │ │ -
LocalFiniteElementVariant & operator=(LocalFiniteElementVariant &&other)
Move assignment.
Definition localfiniteelementvariant.hh:327
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Provide access to LocalInterpolation implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:366
│ │ │ │ -
LocalFiniteElementVariant()=default
Construct empty LocalFiniteElementVariant.
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ - │ │ │ │ +
12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,423 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementvariant.hh │ │ │ │ │ +brezzidouglasmarini.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8// BDM implementations with compile-time order │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h> │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ 11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -21 │ │ │ │ │ -22 │ │ │ │ │ -23namespace _D_u_n_e { │ │ │ │ │ -24 │ │ │ │ │ -25namespace Impl { │ │ │ │ │ -26 │ │ │ │ │ -27 // Helper for visiting a variant containing monostate. │ │ │ │ │ -28 // Since a generic lambda will in most cases not compile │ │ │ │ │ -29 // for monostate, we add special empty overloads for monostate. │ │ │ │ │ -30 // Hence visitIf will simply do nothing in the case of a │ │ │ │ │ -31 // monostate value. │ │ │ │ │ -32 template │ │ │ │ │ -33 void visitIf(Visitor&& visitor, Variant&& variant) │ │ │ │ │ -34 { │ │ │ │ │ -35 auto visitorWithFallback = overload([&](std::monostate&) {}, [&](const std:: │ │ │ │ │ -monostate&) {}, visitor); │ │ │ │ │ -36 std::visit(visitorWithFallback, variant); │ │ │ │ │ -37 } │ │ │ │ │ -38 │ │ │ │ │ -39 template │ │ │ │ │ -40 class LocalBasisVariant │ │ │ │ │ -41 { │ │ │ │ │ -42 │ │ │ │ │ -43 template │ │ │ │ │ -44 struct FirstType │ │ │ │ │ -45 { using type = I0; }; │ │ │ │ │ -46 │ │ │ │ │ -47 using FirstImpTraits = typename FirstType::type::Traits; │ │ │ │ │ -48 │ │ │ │ │ -49 public: │ │ │ │ │ -50 │ │ │ │ │ -51 // We do not simply copy Implementation::LocalBasisTraits because this │ │ │ │ │ -52 // may be implementation specific. To stay clean, we simply put all its │ │ │ │ │ -53 // data into the default LocalBasisTraits. │ │ │ │ │ -54 using Traits = typename _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s< │ │ │ │ │ -55 typename FirstImpTraits::DomainFieldType, │ │ │ │ │ -56 FirstImpTraits::dimDomain, │ │ │ │ │ -57 typename FirstImpTraits::DomainType, │ │ │ │ │ -58 typename FirstImpTraits::RangeFieldType, │ │ │ │ │ -59 FirstImpTraits::dimRange, │ │ │ │ │ -60 typename FirstImpTraits::RangeType, │ │ │ │ │ -61 typename FirstImpTraits::JacobianType>; │ │ │ │ │ -62 │ │ │ │ │ -63 template │ │ │ │ │ -64 LocalBasisVariant(const Implementation& impl) : │ │ │ │ │ -65 impl_(&impl), │ │ │ │ │ -66 size_(impl.size()), │ │ │ │ │ -67 order_(impl.order()) │ │ │ │ │ -68 {} │ │ │ │ │ -69 │ │ │ │ │ -70 LocalBasisVariant() = default; │ │ │ │ │ -71 LocalBasisVariant(const LocalBasisVariant& other) = default; │ │ │ │ │ -72 LocalBasisVariant(LocalBasisVariant&& other) = default; │ │ │ │ │ -73 LocalBasisVariant& operator=(const LocalBasisVariant& other) = default; │ │ │ │ │ -74 LocalBasisVariant& operator=(LocalBasisVariant&& other) = default; │ │ │ │ │ -75 │ │ │ │ │ -79 unsigned int size() const │ │ │ │ │ -80 { │ │ │ │ │ -81 return size_; │ │ │ │ │ -82 } │ │ │ │ │ -83 │ │ │ │ │ -87 unsigned int order() const │ │ │ │ │ -88 { │ │ │ │ │ -89 return order_; │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -95 inline void evaluateFunction( │ │ │ │ │ -96 const typename Traits::DomainType& x, │ │ │ │ │ -97 std::vector& out) const │ │ │ │ │ -98 { │ │ │ │ │ -99 Impl::visitIf([&](const auto* impl) { impl->evaluateFunction(x, out); }, │ │ │ │ │ -impl_); │ │ │ │ │ -100 } │ │ │ │ │ -101 │ │ │ │ │ -105 inline void evaluateJacobian( │ │ │ │ │ -106 const typename Traits::DomainType& x, │ │ │ │ │ -107 std::vector& out) const │ │ │ │ │ -108 { │ │ │ │ │ -109 Impl::visitIf([&](const auto* impl) { impl->evaluateJacobian(x, out); }, │ │ │ │ │ -impl_); │ │ │ │ │ -110 } │ │ │ │ │ -111 │ │ │ │ │ -119 void partial( │ │ │ │ │ -120 const std::array& order, │ │ │ │ │ -121 const typename Traits::DomainType& x, │ │ │ │ │ -122 std::vector& out) const │ │ │ │ │ -123 { │ │ │ │ │ -124 Impl::visitIf([&](const auto* impl) { impl->partial(order, x, out); }, │ │ │ │ │ -impl_); │ │ │ │ │ -125 } │ │ │ │ │ -126 │ │ │ │ │ -127 private: │ │ │ │ │ -128 std::variant impl_; │ │ │ │ │ -129 std::size_t size_; │ │ │ │ │ -130 std::size_t order_; │ │ │ │ │ -131 }; │ │ │ │ │ -132 │ │ │ │ │ -133 │ │ │ │ │ -134 template │ │ │ │ │ -135 class LocalCoefficientsVariant │ │ │ │ │ -136 { │ │ │ │ │ -137 public: │ │ │ │ │ -138 │ │ │ │ │ -139 template │ │ │ │ │ -140 LocalCoefficientsVariant(const Implementation& impl) : │ │ │ │ │ -141 impl_(&impl), │ │ │ │ │ -142 size_(impl.size()) │ │ │ │ │ -143 {} │ │ │ │ │ -144 │ │ │ │ │ -145 LocalCoefficientsVariant() = default; │ │ │ │ │ -146 LocalCoefficientsVariant(const LocalCoefficientsVariant& other) = default; │ │ │ │ │ -147 LocalCoefficientsVariant(LocalCoefficientsVariant&& other) = default; │ │ │ │ │ -148 LocalCoefficientsVariant& operator=(const LocalCoefficientsVariant& other) │ │ │ │ │ -= default; │ │ │ │ │ -149 LocalCoefficientsVariant& operator=(LocalCoefficientsVariant&& other) = │ │ │ │ │ -default; │ │ │ │ │ -150 │ │ │ │ │ -154 unsigned int size() const │ │ │ │ │ -155 { │ │ │ │ │ -156 return size_; │ │ │ │ │ -157 } │ │ │ │ │ -158 │ │ │ │ │ -159 const _D_u_n_e_:_:_L_o_c_a_l_K_e_y& localKey (std::size_t i) const │ │ │ │ │ -160 { │ │ │ │ │ -161 // We can't use visitIf since we have to return something │ │ │ │ │ -162 // even for a monostate value. Since the return type is │ │ │ │ │ -163 // an l-value reference, we use a default constructed │ │ │ │ │ -164 // dummy LocalKey value. │ │ │ │ │ -165 static const _D_u_n_e_:_:_L_o_c_a_l_K_e_y dummyLocalKey; │ │ │ │ │ -166 return std::visit(overload( │ │ │ │ │ -167 [&](const std::monostate&) -> decltype(auto) { return (dummyLocalKey);}, │ │ │ │ │ -168 [&](const auto* impl) -> decltype(auto) { return impl->localKey(i); }), │ │ │ │ │ -impl_); │ │ │ │ │ -169 } │ │ │ │ │ -170 │ │ │ │ │ -171 private: │ │ │ │ │ -172 std::variant impl_; │ │ │ │ │ -173 std::size_t size_; │ │ │ │ │ -174 }; │ │ │ │ │ -175 │ │ │ │ │ -176 │ │ │ │ │ -177 template │ │ │ │ │ -178 class LocalInterpolationVariant │ │ │ │ │ -179 { │ │ │ │ │ -180 public: │ │ │ │ │ -181 │ │ │ │ │ -182 template │ │ │ │ │ -183 LocalInterpolationVariant(const Implementation& impl) : │ │ │ │ │ -184 impl_(&impl) │ │ │ │ │ -185 {} │ │ │ │ │ -186 │ │ │ │ │ -187 LocalInterpolationVariant() = default; │ │ │ │ │ -188 LocalInterpolationVariant(const LocalInterpolationVariant& other) = │ │ │ │ │ -default; │ │ │ │ │ -189 LocalInterpolationVariant(LocalInterpolationVariant&& other) = default; │ │ │ │ │ -190 LocalInterpolationVariant& operator=(const LocalInterpolationVariant& │ │ │ │ │ -other) = default; │ │ │ │ │ -191 LocalInterpolationVariant& operator=(LocalInterpolationVariant&& other) = │ │ │ │ │ -default; │ │ │ │ │ -192 │ │ │ │ │ -193 template │ │ │ │ │ -194 void interpolate (const F& ff, std::vector& out) const │ │ │ │ │ -195 { │ │ │ │ │ -196 Impl::visitIf([&](const auto* impl) { impl->interpolate(ff, out); }, │ │ │ │ │ -impl_); │ │ │ │ │ -197 } │ │ │ │ │ -198 │ │ │ │ │ -199 private: │ │ │ │ │ -200 std::variant impl_; │ │ │ │ │ -201 }; │ │ │ │ │ -202 │ │ │ │ │ -203} // namespace Impl │ │ │ │ │ -204 │ │ │ │ │ -205 │ │ │ │ │ -234 template │ │ │ │ │ -_2_3_5 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -236 { │ │ │ │ │ -237 │ │ │ │ │ -238 // In each LocalFooVariant we store a std::variant, i.e. a std::variant │ │ │ │ │ -239 // with the pointer to the Foo implementation unless │ │ │ │ │ -LocalFiniteElementVariant stores a monostate. In this │ │ │ │ │ -240 // case each LocalFooVariant also stores a monostate (and not a │ │ │ │ │ -monostate*). │ │ │ │ │ -241 using LocalBasis = Impl::LocalBasisVariant; │ │ │ │ │ -242 using LocalCoefficients = Impl::LocalCoefficientsVariant; │ │ │ │ │ -243 using LocalInterpolation = Impl::LocalInterpolationVariant; │ │ │ │ │ -244 │ │ │ │ │ -245 // Update members after changing impl_ │ │ │ │ │ -246 void updateMembers() │ │ │ │ │ -247 { │ │ │ │ │ -248 std::visit(overload( │ │ │ │ │ -249 [&](std::monostate&) { │ │ │ │ │ -250 localBasis_ = LocalBasis(); │ │ │ │ │ -251 localCoefficients_ = LocalCoefficients(); │ │ │ │ │ -252 localInterpolation_ = LocalInterpolation(); │ │ │ │ │ -253 size_ = 0; │ │ │ │ │ -254 geometryType_ = GeometryType{}; │ │ │ │ │ -255 }, [&](auto&& impl) { │ │ │ │ │ -256 localBasis_ = LocalBasis(impl.localBasis()); │ │ │ │ │ -257 localCoefficients_ = LocalCoefficients(impl.localCoefficients()); │ │ │ │ │ -258 localInterpolation_ = LocalInterpolation(impl.localInterpolation()); │ │ │ │ │ -259 size_ = impl.size(); │ │ │ │ │ -260 geometryType_ = impl.type(); │ │ │ │ │ -261 }), impl_); │ │ │ │ │ -262 } │ │ │ │ │ -263 │ │ │ │ │ -264 public: │ │ │ │ │ -265 │ │ │ │ │ -_2_6_9 using _T_r_a_i_t_s = typename _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_, │ │ │ │ │ -_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_,_ _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_>; │ │ │ │ │ -270 │ │ │ │ │ -_2_7_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t() = default; │ │ │ │ │ -275 │ │ │ │ │ -_2_7_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(const std::monostate& monostate) │ │ │ │ │ -280 {} │ │ │ │ │ -281 │ │ │ │ │ -288 template, Implementations>...>::value, int> = 0> │ │ │ │ │ -_2_9_0 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(Implementation&& impl) : │ │ │ │ │ -291 impl_(std::forward(impl)) │ │ │ │ │ -292 { │ │ │ │ │ -293 updateMembers(); │ │ │ │ │ -294 } │ │ │ │ │ -295 │ │ │ │ │ -_2_9_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& other) : │ │ │ │ │ -300 impl_(other.impl_) │ │ │ │ │ -301 { │ │ │ │ │ -302 updateMembers(); │ │ │ │ │ -303 } │ │ │ │ │ -304 │ │ │ │ │ -_3_0_8 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t&& other) : │ │ │ │ │ -309 impl_(std::move(other.impl_)) │ │ │ │ │ -310 { │ │ │ │ │ -311 updateMembers(); │ │ │ │ │ -312 } │ │ │ │ │ -313 │ │ │ │ │ -_3_1_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& │ │ │ │ │ -other) │ │ │ │ │ -318 { │ │ │ │ │ -319 impl_ = other.impl_; │ │ │ │ │ -320 updateMembers(); │ │ │ │ │ -321 return *this; │ │ │ │ │ -322 } │ │ │ │ │ -323 │ │ │ │ │ -_3_2_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t&& other) │ │ │ │ │ -328 { │ │ │ │ │ -329 impl_ = std::move(other.impl_); │ │ │ │ │ -330 updateMembers(); │ │ │ │ │ -331 return *this; │ │ │ │ │ -332 } │ │ │ │ │ -333 │ │ │ │ │ -337 template, Implementations>...>::value, int> = 0> │ │ │ │ │ -_3_3_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(Implementation&& impl) │ │ │ │ │ -340 { │ │ │ │ │ -341 impl_ = std::forward(impl); │ │ │ │ │ -342 updateMembers(); │ │ │ │ │ -343 return *this; │ │ │ │ │ -344 } │ │ │ │ │ -345 │ │ │ │ │ -346 │ │ │ │ │ -_3_5_0 const typename Traits::LocalBasisType& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ -351 { │ │ │ │ │ -352 return localBasis_; │ │ │ │ │ -353 } │ │ │ │ │ -354 │ │ │ │ │ -_3_5_8 const typename Traits::LocalCoefficientsType& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -359 { │ │ │ │ │ -360 return localCoefficients_; │ │ │ │ │ -361 } │ │ │ │ │ -362 │ │ │ │ │ -_3_6_6 const typename Traits::LocalInterpolationType& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -367 { │ │ │ │ │ -368 return localInterpolation_; │ │ │ │ │ -369 } │ │ │ │ │ -370 │ │ │ │ │ -_3_7_4 unsigned int _s_i_z_e() const │ │ │ │ │ -375 { │ │ │ │ │ -376 return size_; │ │ │ │ │ -377 } │ │ │ │ │ -378 │ │ │ │ │ -_3_8_2 constexpr GeometryType _t_y_p_e() const │ │ │ │ │ -383 { │ │ │ │ │ -384 return geometryType_; │ │ │ │ │ -385 } │ │ │ │ │ -386 │ │ │ │ │ -_3_9_8 const auto& _v_a_r_i_a_n_t() const │ │ │ │ │ -399 { │ │ │ │ │ -400 return impl_; │ │ │ │ │ -401 } │ │ │ │ │ -402 │ │ │ │ │ -_4_0_8 operator bool () const │ │ │ │ │ -409 { │ │ │ │ │ -410 return not(std::holds_alternative(_v_a_r_i_a_n_t())); │ │ │ │ │ -411 } │ │ │ │ │ -412 │ │ │ │ │ -413 private: │ │ │ │ │ -414 std::variant impl_; │ │ │ │ │ -415 std::size_t size_; │ │ │ │ │ -416 GeometryType geometryType_; │ │ │ │ │ -417 LocalBasis localBasis_; │ │ │ │ │ -418 LocalCoefficients localCoefficients_; │ │ │ │ │ -419 LocalInterpolation localInterpolation_; │ │ │ │ │ -420 }; │ │ │ │ │ -421 │ │ │ │ │ -422} // end namespace Dune │ │ │ │ │ -423 │ │ │ │ │ -424#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -Type erasure class for wrapping LocalFiniteElement classes. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:236 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, │ │ │ │ │ -LocalInterpolation > Traits │ │ │ │ │ -Export LocalFiniteElementTraits. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:269 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_v_a_r_i_a_n_t │ │ │ │ │ -const auto & variant() const │ │ │ │ │ -Provide access to underlying std::variant. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:398 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:374 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_t_y_p_e │ │ │ │ │ -constexpr GeometryType type() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:382 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -LocalFiniteElementVariant(LocalFiniteElementVariant &&other) │ │ │ │ │ -Move constructor. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:308 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -LocalFiniteElementVariant & operator=(Implementation &&impl) │ │ │ │ │ -Assignment from implementation. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:339 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Provide access to LocalBasis implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:350 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -LocalFiniteElementVariant & operator=(const LocalFiniteElementVariant &other) │ │ │ │ │ -Copy assignment. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:317 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -LocalFiniteElementVariant(const std::monostate &monostate) │ │ │ │ │ -Construct empty LocalFiniteElementVariant. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:279 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -LocalFiniteElementVariant(const LocalFiniteElementVariant &other) │ │ │ │ │ -Copy constructor. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:299 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Provide access to LocalCoefficients implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:358 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -LocalFiniteElementVariant(Implementation &&impl) │ │ │ │ │ -Construct LocalFiniteElementVariant. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:290 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -LocalFiniteElementVariant & operator=(LocalFiniteElementVariant &&other) │ │ │ │ │ -Move assignment. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:327 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Provide access to LocalInterpolation implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:366 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ -LocalFiniteElementVariant()=default │ │ │ │ │ -Construct empty LocalFiniteElementVariant. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h │ │ │ │ │ +_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariantcache.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localfiniteelementvariantcache.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <tuple>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <type_traits>
│ │ │ │ -#include <dune/common/std/type_traits.hh>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/common/typelist.hh>
│ │ │ │ -#include <dune/common/hybridutilities.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementvariant.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalFiniteElementVariantCache< Base >
 A cache storing a compile time selection of local finite element implementations. More...
class  Dune::RT0PrismLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on prisms. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,31 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localfiniteelementvariantcache.hh File Reference │ │ │ │ │ +raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_ _B_a_s_e_ _> │ │ │ │ │ -  A cache storing a compile time selection of local finite element │ │ │ │ │ - implementations. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-1 elements on prisms. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00119_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localfiniteelementvariantcache.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,143 +70,75 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
localfiniteelementvariantcache.hh
│ │ │ │ +
raviartthomas0prismlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9#include <tuple>
│ │ │ │ -
10#include <utility>
│ │ │ │ -
11#include <type_traits>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │ -
13#include <dune/common/std/type_traits.hh>
│ │ │ │ -
14#include <dune/common/exceptions.hh>
│ │ │ │ -
15#include <dune/common/typelist.hh>
│ │ │ │ -
16#include <dune/common/hybridutilities.hh>
│ │ │ │ -
17
│ │ │ │ -
18#include <dune/geometry/type.hh>
│ │ │ │ -
19#include <dune/geometry/typeindex.hh>
│ │ │ │ -
20
│ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23
│ │ │ │ -
24namespace Dune {
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │
25
│ │ │ │ -
26namespace Impl {
│ │ │ │ -
27
│ │ │ │ -
28 // This class provides the index method of LocalGeometryTypeIndex
│ │ │ │ -
29 // but throws a Dune::RangeError if the dimension does not match.
│ │ │ │ -
30 // This can be helpful to catch errors in a LocalFiniteElementVariantCache
│ │ │ │ -
31 // instance based on dimension specific GeometryType indices.
│ │ │ │ -
32 template<std::size_t dim>
│ │ │ │ -
33 struct FixedDimLocalGeometryTypeIndex {
│ │ │ │ -
34 inline static std::size_t index(const GeometryType &gt)
│ │ │ │ -
35 {
│ │ │ │ -
36 if (gt.dim() != dim)
│ │ │ │ -
37 DUNE_THROW(Dune::RangeError, "Asking for dim=" << dim << " specific index of GeometryType with dimension " << gt.dim());
│ │ │ │ -
38 return LocalGeometryTypeIndex::index(gt);
│ │ │ │ -
39 }
│ │ │ │ -
40 };
│ │ │ │ -
41
│ │ │ │ -
42} // end namespace Impl
│ │ │ │ -
43
│ │ │ │ -
66template<class Base>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
68{
│ │ │ │ -
69
│ │ │ │ -
70 template<class LFEImplTuple>
│ │ │ │ -
71 struct GenerateLFEVariant;
│ │ │ │ -
72
│ │ │ │ -
73 template<class Index, class... LFEImpl>
│ │ │ │ -
74 struct GenerateLFEVariant<std::tuple<std::pair<Index, LFEImpl>...>>
│ │ │ │ -
75 {
│ │ │ │ -
76 using type = UniqueTypes_t<LocalFiniteElementVariant, decltype(std::declval<LFEImpl>()())...>;
│ │ │ │ -
77 };
│ │ │ │ -
78
│ │ │ │ -
79 using Base::getImplementations;
│ │ │ │ -
80 using Base::index;
│ │ │ │ -
81 using Implementations = decltype(std::declval<Base>().getImplementations());
│ │ │ │ -
82
│ │ │ │ -
83public:
│ │ │ │ -
84
│ │ │ │ -
92 using FiniteElementType = typename GenerateLFEVariant<Implementations>::type;
│ │ │ │ -
93
│ │ │ │ -
98 template<class... Args>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
100 Base(std::forward<Args>(args)...)
│ │ │ │ -
101 {
│ │ │ │ -
102 Dune::Hybrid::forEach(getImplementations(), [&,this](auto feImpl) {
│ │ │ │ -
103 auto implIndex = feImpl.first;
│ │ │ │ -
104 if (cache_.size() < implIndex+1)
│ │ │ │ -
105 cache_.resize(implIndex+1);
│ │ │ │ -
106 cache_[implIndex] = feImpl.second();
│ │ │ │ -
107 });
│ │ │ │ -
108 }
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ - │ │ │ │ -
112
│ │ │ │ - │ │ │ │ -
115
│ │ │ │ - │ │ │ │ -
118
│ │ │ │ - │ │ │ │ -
121
│ │ │ │ -
126 template<class... Key>
│ │ │ │ -
│ │ │ │ -
127 const auto& get(const Key&... key) const
│ │ │ │ -
128 {
│ │ │ │ -
129 auto implIndex = index(key...);
│ │ │ │ -
130 if (implIndex >= cache_.size())
│ │ │ │ -
131 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the requested type.");
│ │ │ │ -
132 if (not(cache_[implIndex]))
│ │ │ │ -
133 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the requested type.");
│ │ │ │ -
134 return cache_[implIndex];
│ │ │ │ -
135 }
│ │ │ │ -
│ │ │ │ -
136
│ │ │ │ -
137private:
│ │ │ │ -
138 std::vector<FiniteElementType> cache_;
│ │ │ │ -
139};
│ │ │ │ -
│ │ │ │ -
140
│ │ │ │ -
141
│ │ │ │ -
142
│ │ │ │ -
143} // namespace Dune
│ │ │ │ -
144
│ │ │ │ -
145
│ │ │ │ -
146
│ │ │ │ -
147
│ │ │ │ -
148#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ - │ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for(std::size_t i=0; i< size(); i++)
│ │ │ │ +
31 li[i] = LocalKey(i,1,0);
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
35 std::size_t size () const
│ │ │ │ +
36 {
│ │ │ │ +
37 return 5;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
42 {
│ │ │ │ +
43 return li[i];
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector<LocalKey> li;
│ │ │ │ +
48 };
│ │ │ │ +
│ │ │ │ +
49}
│ │ │ │ +
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ -
LocalFiniteElementVariantCache & operator=(const LocalFiniteElementVariantCache &other)=default
Copy assignment.
│ │ │ │ -
LocalFiniteElementVariantCache(Args &&... args)
Default constructor.
Definition localfiniteelementvariantcache.hh:99
│ │ │ │ -
LocalFiniteElementVariantCache(LocalFiniteElementVariantCache &&other)=default
Move constructor.
│ │ │ │ -
const auto & get(const Key &... key) const
Get the LocalFiniteElement for the given key data.
Definition localfiniteelementvariantcache.hh:127
│ │ │ │ -
LocalFiniteElementVariantCache(const LocalFiniteElementVariantCache &other)=default
Copy constructor.
│ │ │ │ -
typename GenerateLFEVariant< Implementations >::type FiniteElementType
Type of exported LocalFiniteElement's.
Definition localfiniteelementvariantcache.hh:92
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on prisms.
Definition raviartthomas0prismlocalcoefficients.hh:24
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0prismlocalcoefficients.hh:41
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas0prismlocalcoefficients.hh:35
│ │ │ │ +
RT0PrismLocalCoefficients()
Standard constructor.
Definition raviartthomas0prismlocalcoefficients.hh:28
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,158 +1,73 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -localfiniteelementvariantcache.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ +raviartthomas0prismlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include │ │ │ │ │ -19#include │ │ │ │ │ -20 │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ -22 │ │ │ │ │ -23 │ │ │ │ │ -24namespace _D_u_n_e { │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ 25 │ │ │ │ │ -26namespace Impl { │ │ │ │ │ -27 │ │ │ │ │ -28 // This class provides the index method of LocalGeometryTypeIndex │ │ │ │ │ -29 // but throws a Dune::RangeError if the dimension does not match. │ │ │ │ │ -30 // This can be helpful to catch errors in a LocalFiniteElementVariantCache │ │ │ │ │ -31 // instance based on dimension specific GeometryType indices. │ │ │ │ │ -32 template │ │ │ │ │ -33 struct FixedDimLocalGeometryTypeIndex { │ │ │ │ │ -34 inline static std::size_t index(const GeometryType >) │ │ │ │ │ -35 { │ │ │ │ │ -36 if (gt.dim() != dim) │ │ │ │ │ -37 DUNE_THROW(Dune::RangeError, "Asking for dim=" << dim << " specific index of │ │ │ │ │ -GeometryType with dimension " << gt.dim()); │ │ │ │ │ -38 return LocalGeometryTypeIndex::index(gt); │ │ │ │ │ -39 } │ │ │ │ │ -40 }; │ │ │ │ │ -41 │ │ │ │ │ -42} // end namespace Impl │ │ │ │ │ -43 │ │ │ │ │ -66template │ │ │ │ │ -_6_7class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e : Base │ │ │ │ │ -68{ │ │ │ │ │ -69 │ │ │ │ │ -70 template │ │ │ │ │ -71 struct GenerateLFEVariant; │ │ │ │ │ -72 │ │ │ │ │ -73 template │ │ │ │ │ -74 struct GenerateLFEVariant...>> │ │ │ │ │ -75 { │ │ │ │ │ -76 using type = UniqueTypes_t()())...>; │ │ │ │ │ -77 }; │ │ │ │ │ -78 │ │ │ │ │ -79 using Base::getImplementations; │ │ │ │ │ -80 using Base::index; │ │ │ │ │ -81 using Implementations = decltype(std::declval().getImplementations()); │ │ │ │ │ -82 │ │ │ │ │ -83public: │ │ │ │ │ -84 │ │ │ │ │ -_9_2 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e = typename GenerateLFEVariant:: │ │ │ │ │ -type; │ │ │ │ │ -93 │ │ │ │ │ -98 template │ │ │ │ │ -_9_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(Args&&... args) : │ │ │ │ │ -100 Base(std::forward(args)...) │ │ │ │ │ -101 { │ │ │ │ │ -102 Dune::Hybrid::forEach(getImplementations(), [&,this](auto feImpl) { │ │ │ │ │ -103 auto implIndex = feImpl.first; │ │ │ │ │ -104 if (cache_.size() < implIndex+1) │ │ │ │ │ -105 cache_.resize(implIndex+1); │ │ │ │ │ -106 cache_[implIndex] = feImpl.second(); │ │ │ │ │ -107 }); │ │ │ │ │ -108 } │ │ │ │ │ -109 │ │ │ │ │ -_1_1_1 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& other) │ │ │ │ │ -= default; │ │ │ │ │ -112 │ │ │ │ │ -_1_1_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e&& other) = │ │ │ │ │ -default; │ │ │ │ │ -115 │ │ │ │ │ -_1_1_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& _o_p_e_r_a_t_o_r_=_ (const │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& other) = default; │ │ │ │ │ -118 │ │ │ │ │ -_1_2_0 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& _o_p_e_r_a_t_o_r_=_ (_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e&& │ │ │ │ │ -other) = default; │ │ │ │ │ -121 │ │ │ │ │ -126 template │ │ │ │ │ -_1_2_7 const auto& _g_e_t(const Key&... key) const │ │ │ │ │ -128 { │ │ │ │ │ -129 auto implIndex = index(key...); │ │ │ │ │ -130 if (implIndex >= cache_.size()) │ │ │ │ │ -131 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the │ │ │ │ │ -requested type."); │ │ │ │ │ -132 if (not(cache_[implIndex])) │ │ │ │ │ -133 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the │ │ │ │ │ -requested type."); │ │ │ │ │ -134 return cache_[implIndex]; │ │ │ │ │ -135 } │ │ │ │ │ -136 │ │ │ │ │ -137private: │ │ │ │ │ -138 std::vector cache_; │ │ │ │ │ -139}; │ │ │ │ │ -140 │ │ │ │ │ -141 │ │ │ │ │ -142 │ │ │ │ │ -143} // namespace Dune │ │ │ │ │ -144 │ │ │ │ │ -145 │ │ │ │ │ -146 │ │ │ │ │ -147 │ │ │ │ │ -148#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ +29 { │ │ │ │ │ +30 for(std::size_t i=0; i< _s_i_z_e(); i++) │ │ │ │ │ +31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ +36 { │ │ │ │ │ +37 return 5; │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +42 { │ │ │ │ │ +43 return li[i]; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector li; │ │ │ │ │ +48 }; │ │ │ │ │ +49} │ │ │ │ │ +50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -A cache storing a compile time selection of local finite element │ │ │ │ │ -implementations. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -LocalFiniteElementVariantCache & operator=(const LocalFiniteElementVariantCache │ │ │ │ │ -&other)=default │ │ │ │ │ -Copy assignment. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -LocalFiniteElementVariantCache(Args &&... args) │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:99 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -LocalFiniteElementVariantCache(LocalFiniteElementVariantCache &&other)=default │ │ │ │ │ -Move constructor. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ -const auto & get(const Key &... key) const │ │ │ │ │ -Get the LocalFiniteElement for the given key data. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -LocalFiniteElementVariantCache(const LocalFiniteElementVariantCache │ │ │ │ │ -&other)=default │ │ │ │ │ -Copy constructor. │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -typename GenerateLFEVariant< Implementations >::type FiniteElementType │ │ │ │ │ -Type of exported LocalFiniteElement's. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:92 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on prisms. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT0PrismLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:28 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualwrappers.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
virtualwrappers.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LocalFiniteElementCloneFactoryHelper< Imp, IsInterface >
 
struct  Dune::LocalFiniteElementCloneFactory< Imp >
 
class  Dune::LocalBasisVirtualImp< T, Imp >
 class for wrapping a basis using the virtual interface More...
 
class  Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp >
 class for wrapping a local interpolation using the virtual interface More...
 
class  Dune::LocalCoefficientsVirtualImp< Imp >
 class for wrapping local coefficients using the virtual interface More...
 
class  Dune::LocalFiniteElementVirtualImp< Imp >
 class for wrapping a finite element using the virtual interface More...
class  Dune::RT0PrismLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference prism. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,39 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -virtualwrappers.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ +raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_<_ _I_m_p_,_ _I_s_I_n_t_e_r_f_a_c_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_<_ _I_m_p_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_<_ _T_,_ _I_m_p_ _> │ │ │ │ │ -  class for wrapping a basis using the virtual interface _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_,_ _I_m_p_ _> │ │ │ │ │ -  class for wrapping a local interpolation using the virtual interface │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_<_ _I_m_p_ _> │ │ │ │ │ -  class for wrapping local coefficients using the virtual interface │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_ _I_m_p_ _> │ │ │ │ │ -  class for wrapping a finite element using the virtual interface │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00122_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: virtualwrappers.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,410 +70,146 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
virtualwrappers.hh
│ │ │ │ +
raviartthomas0prismlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16
│ │ │ │ -
17 // forward declaration needed by friend declarations
│ │ │ │ -
18 template<class Imp>
│ │ │ │ -
19 class LocalFiniteElementVirtualImp;
│ │ │ │ -
20
│ │ │ │ -
21 // default clone method is the copy constructor
│ │ │ │ -
22 template<class Imp, bool IsInterface>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
│ │ │ │ -
25 static Imp* clone(const Imp& imp)
│ │ │ │ -
26 {
│ │ │ │ -
27 return new Imp(imp);
│ │ │ │ -
28 }
│ │ │ │ -
│ │ │ │ -
29 };
│ │ │ │ -
│ │ │ │ -
30
│ │ │ │ -
31 // if FE derives from virtual interface the clone method is used
│ │ │ │ -
32 template<class Imp>
│ │ │ │ -
33 struct LocalFiniteElementCloneFactoryHelper<Imp, true>
│ │ │ │ -
34 {
│ │ │ │ -
35 static Imp* clone(const Imp& imp)
│ │ │ │ -
36 {
│ │ │ │ -
37 return imp.clone();
│ │ │ │ -
38 }
│ │ │ │ -
39 };
│ │ │ │ -
40
│ │ │ │ -
41 // factory template to clone and create an objects
│ │ │ │ -
42 template<class Imp>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
44 {
│ │ │ │ - │ │ │ │ -
46
│ │ │ │ -
│ │ │ │ -
47 static Imp* clone(const Imp& imp)
│ │ │ │ -
48 {
│ │ │ │ - │ │ │ │ -
50 }
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
│ │ │ │ -
52 static Imp* create()
│ │ │ │ -
53 {
│ │ │ │ -
54 return new Imp;
│ │ │ │ -
55 }
│ │ │ │ -
│ │ │ │ -
56 };
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
58
│ │ │ │ -
59
│ │ │ │ -
60 // -----------------------------------------------------------------
│ │ │ │ -
61 // Basis
│ │ │ │ -
62 // -----------------------------------------------------------------
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ +
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
39 RT0PrismLocalBasis (std::bitset<5> s = 0)
│ │ │ │ +
40 {
│ │ │ │ +
41 for (size_t i=0; i<size(); i++)
│ │ │ │ +
42 sign[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 unsigned int size () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return 5;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
59 {
│ │ │ │ +
60 out.resize(5);
│ │ │ │ +
61
│ │ │ │ +
62 out[0] = { in[0], -1.0 + in[1], 0.0};
│ │ │ │
63
│ │ │ │ -
64
│ │ │ │ +
64 out[1] = { -1.0 + in[0], in[1], 0.0};
│ │ │ │
65
│ │ │ │ -
72 template<class T , class Imp>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
75 {
│ │ │ │ -
76 template<class FEImp>
│ │ │ │ - │ │ │ │ -
78
│ │ │ │ -
79 protected:
│ │ │ │ -
80
│ │ │ │ -
│ │ │ │ -
82 LocalBasisVirtualImp( const Imp &imp )
│ │ │ │ -
83 : impl_(imp)
│ │ │ │ -
84 {}
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86 public:
│ │ │ │ -
87 using Traits = T;
│ │ │ │ -
88
│ │ │ │ -
│ │ │ │ -
90 unsigned int size () const
│ │ │ │ -
91 {
│ │ │ │ -
92 return impl_.size();
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ +
66 out[2] = { in[0], in[1], 0.0};
│ │ │ │ +
67
│ │ │ │ +
68 out[3] = { 0.0, 0.0, -2.0 + 2.0*in[2]};
│ │ │ │ +
69
│ │ │ │ +
70 out[4] = { 0.0, 0.0, 2.0*in[2]};
│ │ │ │ +
71
│ │ │ │ +
72 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
73 out[i] *= sign[i];
│ │ │ │ +
74
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
│ │ │ │ +
83 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
84 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
85 {
│ │ │ │ +
86 out.resize(5);
│ │ │ │ +
87
│ │ │ │ +
88 for(int i=0; i<size(); i++)
│ │ │ │ +
89 for(int j=0; j<3; j++)
│ │ │ │ +
90 out[i][j] = {0.0, 0.0, 0.0};
│ │ │ │ +
91
│ │ │ │ +
92 out[0][0][0] = sign[0];
│ │ │ │ +
93 out[0][1][1] = sign[0];
│ │ │ │
94
│ │ │ │ -
│ │ │ │ -
96 unsigned int order () const
│ │ │ │ -
97 {
│ │ │ │ -
98 return impl_.order();
│ │ │ │ -
99 }
│ │ │ │ -
│ │ │ │ +
95 out[1][0][0] = sign[1];
│ │ │ │ +
96 out[1][1][1] = sign[1];
│ │ │ │ +
97
│ │ │ │ +
98 out[2][0][0] = sign[2];
│ │ │ │ +
99 out[2][1][1] = sign[2];
│ │ │ │
100
│ │ │ │ -
│ │ │ │ -
102 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
103 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
104 {
│ │ │ │ -
105 impl_.evaluateFunction(in,out);
│ │ │ │ -
106 }
│ │ │ │ -
│ │ │ │ -
107
│ │ │ │ -
│ │ │ │ -
109 inline void evaluateJacobian(
│ │ │ │ -
110 const typename Traits::DomainType& in,
│ │ │ │ -
111 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
112 {
│ │ │ │ -
113 impl_.evaluateJacobian(in,out);
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
115
│ │ │ │ -
│ │ │ │ -
121 void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ -
122 const typename Traits::DomainType& in,
│ │ │ │ -
123 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
124 {
│ │ │ │ -
125 impl_.partial(order,in,out);
│ │ │ │ -
126 }
│ │ │ │ -
│ │ │ │ -
127
│ │ │ │ -
128 protected:
│ │ │ │ -
129 const Imp& impl_;
│ │ │ │ -
130 };
│ │ │ │ -
│ │ │ │ -
131
│ │ │ │ -
132
│ │ │ │ -
133
│ │ │ │ -
134 // -----------------------------------------------------------------
│ │ │ │ -
135 // Interpolation
│ │ │ │ -
136 // -----------------------------------------------------------------
│ │ │ │ -
137
│ │ │ │ -
146 template<class DomainType, class RangeType, class Imp>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
148 : public LocalInterpolationVirtualInterface< DomainType, RangeType >
│ │ │ │ -
149 {
│ │ │ │ -
150 template<class FEImp>
│ │ │ │ - │ │ │ │ -
152
│ │ │ │ - │ │ │ │ -
154
│ │ │ │ -
155 protected:
│ │ │ │ -
156
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
159 : impl_(imp) {}
│ │ │ │ -
│ │ │ │ -
160
│ │ │ │ -
161 public:
│ │ │ │ -
162
│ │ │ │ - │ │ │ │ -
164
│ │ │ │ - │ │ │ │ -
166
│ │ │ │ -
│ │ │ │ -
168 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const
│ │ │ │ -
169 {
│ │ │ │ -
170 impl_.interpolate(f,out);
│ │ │ │ -
171 }
│ │ │ │ -
│ │ │ │ -
172
│ │ │ │ -
173 protected:
│ │ │ │ -
174 const Imp& impl_;
│ │ │ │ -
175
│ │ │ │ -
176 };
│ │ │ │ -
│ │ │ │ -
177
│ │ │ │ -
178
│ │ │ │ -
179
│ │ │ │ -
180 // -----------------------------------------------------------------
│ │ │ │ -
181 // Coefficients
│ │ │ │ -
182 // -----------------------------------------------------------------
│ │ │ │ -
183
│ │ │ │ -
190 template<class Imp>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
193 {
│ │ │ │ -
194 template<class FEImp>
│ │ │ │ - │ │ │ │ -
196
│ │ │ │ -
197 protected:
│ │ │ │ -
198
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
201 : impl_(imp)
│ │ │ │ -
202 {}
│ │ │ │ -
│ │ │ │ -
203
│ │ │ │ -
204 public:
│ │ │ │ -
205
│ │ │ │ -
│ │ │ │ -
207 std::size_t size () const
│ │ │ │ -
208 {
│ │ │ │ -
209 return impl_.size();
│ │ │ │ -
210 }
│ │ │ │ -
│ │ │ │ -
211
│ │ │ │ -
│ │ │ │ -
213 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
214 {
│ │ │ │ -
215 return impl_.localKey(i);
│ │ │ │ -
216 }
│ │ │ │ -
│ │ │ │ -
217
│ │ │ │ -
218 protected:
│ │ │ │ -
219 const Imp& impl_;
│ │ │ │ -
220
│ │ │ │ -
221 };
│ │ │ │ -
│ │ │ │ -
222
│ │ │ │ -
223
│ │ │ │ -
224
│ │ │ │ -
225 // -----------------------------------------------------------------
│ │ │ │ -
226 // Finite Element
│ │ │ │ -
227 // -----------------------------------------------------------------
│ │ │ │ -
228
│ │ │ │ -
237 template<class Imp>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
239 : public LocalFiniteElementVirtualInterface<typename Imp::Traits::LocalBasisType::Traits>
│ │ │ │ -
240 {
│ │ │ │ -
241 using LocalBasisTraits = typename Imp::Traits::LocalBasisType::Traits;
│ │ │ │ - │ │ │ │ -
243
│ │ │ │ -
244 public:
│ │ │ │ -
245 typedef typename Interface::Traits Traits;
│ │ │ │ -
246
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
253 {}
│ │ │ │ -
│ │ │ │ -
254
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
257 : impl_(LocalFiniteElementCloneFactory<Imp>::create()),
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
261 {}
│ │ │ │ -
│ │ │ │ -
262
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
269 {}
│ │ │ │ -
│ │ │ │ -
270
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
272 {
│ │ │ │ -
273 delete impl_;
│ │ │ │ -
274 }
│ │ │ │ -
│ │ │ │ -
275
│ │ │ │ -
│ │ │ │ -
277 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
278 {
│ │ │ │ -
279 return localBasisImp_;
│ │ │ │ -
280 }
│ │ │ │ -
│ │ │ │ -
281
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
284 {
│ │ │ │ - │ │ │ │ -
286 }
│ │ │ │ -
│ │ │ │ -
287
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
290 {
│ │ │ │ - │ │ │ │ -
292 }
│ │ │ │ -
│ │ │ │ -
293
│ │ │ │ -
│ │ │ │ -
295 unsigned int size () const
│ │ │ │ -
296 {
│ │ │ │ -
297 return impl_->size();
│ │ │ │ -
298 }
│ │ │ │ -
│ │ │ │ -
299
│ │ │ │ -
│ │ │ │ -
301 const GeometryType type () const
│ │ │ │ -
302 {
│ │ │ │ -
303 return impl_->type();
│ │ │ │ -
304 }
│ │ │ │ -
│ │ │ │ -
305
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
312 {
│ │ │ │ -
313 return new LocalFiniteElementVirtualImp<Imp>(*this);
│ │ │ │ -
314 }
│ │ │ │ -
│ │ │ │ -
315
│ │ │ │ -
316 protected:
│ │ │ │ -
317 const Imp* impl_;
│ │ │ │ -
318
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
323 typename Imp::Traits::LocalInterpolationType> localInterpolationImp_;
│ │ │ │ -
324 };
│ │ │ │ -
│ │ │ │ -
325}
│ │ │ │ -
326#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
101 out[3][2][2] = sign[3]*(2.0);
│ │ │ │ +
102
│ │ │ │ +
103 out[4][2][2] = sign[4]*(2.0);
│ │ │ │ +
104 }
│ │ │ │ +
│ │ │ │ +
105
│ │ │ │ +
│ │ │ │ +
107 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
108 const typename Traits::DomainType& in, // position
│ │ │ │ +
109 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
110 {
│ │ │ │ +
111 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
112 if (totalOrder == 0) {
│ │ │ │ +
113 evaluateFunction(in, out);
│ │ │ │ +
114 } else {
│ │ │ │ +
115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
116 }
│ │ │ │ +
117 }
│ │ │ │ +
│ │ │ │ +
118
│ │ │ │ +
│ │ │ │ +
120 unsigned int order () const
│ │ │ │ +
121 {
│ │ │ │ +
122 return 1;
│ │ │ │ +
123 }
│ │ │ │ +
│ │ │ │ +
124
│ │ │ │ +
125 private:
│ │ │ │ +
126 std::array<R,5> sign;
│ │ │ │ +
127 };
│ │ │ │ +
│ │ │ │ +
128}
│ │ │ │ +
129#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
virtual base class for a local interpolation
Definition virtualinterface.hh:133
│ │ │ │ -
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:137
│ │ │ │ -
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:140
│ │ │ │ -
virtual base class for a local basis
Definition virtualinterface.hh:40
│ │ │ │ -
virtual base class for local coefficients
Definition virtualinterface.hh:198
│ │ │ │ -
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ -
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition virtualwrappers.hh:277
│ │ │ │ -
virtual LocalFiniteElementVirtualImp< Imp > * clone() const
clone this wrapper
Definition virtualwrappers.hh:311
│ │ │ │ -
const LocalInterpolationVirtualImp< typename LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType, typename Imp::Traits::LocalInterpolationType > localInterpolationImp_
Definition virtualwrappers.hh:323
│ │ │ │ -
LocalFiniteElementVirtualImp(const Imp &imp)
taking a LocalFiniteElementVirtualInterface implementation
Definition virtualwrappers.hh:248
│ │ │ │ -
Interface::Traits Traits
Definition virtualwrappers.hh:245
│ │ │ │ -
LocalFiniteElementVirtualImp()
Default constructor. Assumes that the implementation class is default constructible as well.
Definition virtualwrappers.hh:256
│ │ │ │ -
LocalFiniteElementVirtualImp(const LocalFiniteElementVirtualImp &other)
Copy constructor needed for deep copy.
Definition virtualwrappers.hh:264
│ │ │ │ -
~LocalFiniteElementVirtualImp()
Definition virtualwrappers.hh:271
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition virtualwrappers.hh:295
│ │ │ │ -
const GeometryType type() const
Definition virtualwrappers.hh:301
│ │ │ │ -
const Imp * impl_
Definition virtualwrappers.hh:317
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition virtualwrappers.hh:283
│ │ │ │ -
const LocalBasisVirtualImp< LocalBasisTraits, typename Imp::Traits::LocalBasisType > localBasisImp_
Definition virtualwrappers.hh:319
│ │ │ │ -
const LocalCoefficientsVirtualImp< typename Imp::Traits::LocalCoefficientsType > localCoefficientsImp_
Definition virtualwrappers.hh:320
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition virtualwrappers.hh:289
│ │ │ │ -
Definition virtualwrappers.hh:24
│ │ │ │ -
static Imp * clone(const Imp &imp)
Definition virtualwrappers.hh:25
│ │ │ │ -
Definition virtualwrappers.hh:44
│ │ │ │ -
static Imp * clone(const Imp &imp)
Definition virtualwrappers.hh:47
│ │ │ │ -
static Imp * create()
Definition virtualwrappers.hh:52
│ │ │ │ -
LocalFiniteElementVirtualInterface< typename Imp::Traits::LocalBasisType::Traits > Interface
Definition virtualwrappers.hh:45
│ │ │ │ -
class for wrapping a basis using the virtual interface
Definition virtualwrappers.hh:75
│ │ │ │ -
void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition virtualwrappers.hh:121
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all basis function at given position.
Definition virtualwrappers.hh:102
│ │ │ │ -
const Imp & impl_
Definition virtualwrappers.hh:129
│ │ │ │ -
unsigned int size() const
Number of shape functions.
Definition virtualwrappers.hh:90
│ │ │ │ -
T Traits
Definition virtualwrappers.hh:87
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate jacobian of all shape functions at given position.
Definition virtualwrappers.hh:109
│ │ │ │ -
LocalBasisVirtualImp(const Imp &imp)
constructor taking an implementation of the interface
Definition virtualwrappers.hh:82
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition virtualwrappers.hh:96
│ │ │ │ -
class for wrapping a local interpolation using the virtual interface
Definition virtualwrappers.hh:149
│ │ │ │ -
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition virtualwrappers.hh:168
│ │ │ │ -
const Imp & impl_
Definition virtualwrappers.hh:174
│ │ │ │ -
Base::FunctionType FunctionType
Definition virtualwrappers.hh:163
│ │ │ │ -
LocalInterpolationVirtualImp(const Imp &imp)
constructor taking an implementation of the Dune::LocalInterpolationVirtualInterface
Definition virtualwrappers.hh:158
│ │ │ │ -
Base::CoefficientType CoefficientType
Definition virtualwrappers.hh:165
│ │ │ │ -
class for wrapping local coefficients using the virtual interface
Definition virtualwrappers.hh:193
│ │ │ │ -
LocalCoefficientsVirtualImp(const Imp &imp)
constructor taking an implementation of the Dune::LocalCoefficientsVirtualInterface
Definition virtualwrappers.hh:200
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition virtualwrappers.hh:213
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition virtualwrappers.hh:207
│ │ │ │ -
const Imp & impl_
Definition virtualwrappers.hh:219
│ │ │ │ - │ │ │ │ +
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalbasis.hh:28
│ │ │ │ +
RT0PrismLocalBasis(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prismlocalbasis.hh:39
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0prismlocalbasis.hh:57
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas0prismlocalbasis.hh:46
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0prismlocalbasis.hh:120
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0prismlocalbasis.hh:83
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0prismlocalbasis.hh:107
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0prismlocalbasis.hh:32
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,489 +1,157 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -virtualwrappers.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ +raviartthomas0prismlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 │ │ │ │ │ -17 // forward declaration needed by friend declarations │ │ │ │ │ -18 template │ │ │ │ │ -19 class LocalFiniteElementVirtualImp; │ │ │ │ │ -20 │ │ │ │ │ -21 // default clone method is the copy constructor │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r │ │ │ │ │ -24 { │ │ │ │ │ -_2_5 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ -26 { │ │ │ │ │ -27 return new Imp(imp); │ │ │ │ │ -28 } │ │ │ │ │ -29 }; │ │ │ │ │ -30 │ │ │ │ │ -31 // if FE derives from virtual interface the clone method is used │ │ │ │ │ -32 template │ │ │ │ │ -33 struct LocalFiniteElementCloneFactoryHelper │ │ │ │ │ -34 { │ │ │ │ │ -35 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ -36 { │ │ │ │ │ -37 return imp.clone(); │ │ │ │ │ -38 } │ │ │ │ │ -39 }; │ │ │ │ │ -40 │ │ │ │ │ -41 // factory template to clone and create an objects │ │ │ │ │ -42 template │ │ │ │ │ -_4_3 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y │ │ │ │ │ -44 { │ │ │ │ │ -_4_5 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ -_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s_> _I_n_t_e_r_f_a_c_e; │ │ │ │ │ -46 │ │ │ │ │ -_4_7 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ -48 { │ │ │ │ │ -49 return _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_<_I_m_p_,_ _s_t_d_:_:_i_s___b_a_s_e___o_f_<_I_n_t_e_r_f_a_c_e_, │ │ │ │ │ -_I_m_p_>_:_:_v_a_l_u_e>_:_:_c_l_o_n_e(imp); │ │ │ │ │ -50 } │ │ │ │ │ -51 │ │ │ │ │ -_5_2 static Imp* _c_r_e_a_t_e() │ │ │ │ │ -53 { │ │ │ │ │ -54 return new Imp; │ │ │ │ │ -55 } │ │ │ │ │ -56 }; │ │ │ │ │ -57 │ │ │ │ │ -58 │ │ │ │ │ -59 │ │ │ │ │ -60 // ----------------------------------------------------------------- │ │ │ │ │ -61 // Basis │ │ │ │ │ -62 // ----------------------------------------------------------------- │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s (std::bitset<5> s = 0) │ │ │ │ │ +40 { │ │ │ │ │ +41 for (size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +42 sign[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return 5; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +58 std::vector& out) const │ │ │ │ │ +59 { │ │ │ │ │ +60 out.resize(5); │ │ │ │ │ +61 │ │ │ │ │ +62 out[0] = { in[0], -1.0 + in[1], 0.0}; │ │ │ │ │ 63 │ │ │ │ │ -64 │ │ │ │ │ +64 out[1] = { -1.0 + in[0], in[1], 0.0}; │ │ │ │ │ 65 │ │ │ │ │ -72 template │ │ │ │ │ -_7_3 class _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -74 : public _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -75 { │ │ │ │ │ -76 template │ │ │ │ │ -_7_7 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ -78 │ │ │ │ │ -79 protected: │ │ │ │ │ -80 │ │ │ │ │ -_8_2 _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ -83 : _i_m_p_l__(imp) │ │ │ │ │ -84 {} │ │ │ │ │ -85 │ │ │ │ │ -86 public: │ │ │ │ │ -_8_7 using _T_r_a_i_t_s = T; │ │ │ │ │ -88 │ │ │ │ │ -_9_0 unsigned int _s_i_z_e () const │ │ │ │ │ -91 { │ │ │ │ │ -92 return _i_m_p_l__.size(); │ │ │ │ │ -93 } │ │ │ │ │ +66 out[2] = { in[0], in[1], 0.0}; │ │ │ │ │ +67 │ │ │ │ │ +68 out[3] = { 0.0, 0.0, -2.0 + 2.0*in[2]}; │ │ │ │ │ +69 │ │ │ │ │ +70 out[4] = { 0.0, 0.0, 2.0*in[2]}; │ │ │ │ │ +71 │ │ │ │ │ +72 for (std::size_t i=0; i& out) const │ │ │ │ │ +85 { │ │ │ │ │ +86 out.resize(5); │ │ │ │ │ +87 │ │ │ │ │ +88 for(int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +89 for(int j=0; j<3; j++) │ │ │ │ │ +90 out[i][j] = {0.0, 0.0, 0.0}; │ │ │ │ │ +91 │ │ │ │ │ +92 out[0][0][0] = sign[0]; │ │ │ │ │ +93 out[0][1][1] = sign[0]; │ │ │ │ │ 94 │ │ │ │ │ -_9_6 unsigned int _o_r_d_e_r () const │ │ │ │ │ -97 { │ │ │ │ │ -98 return _i_m_p_l__.order(); │ │ │ │ │ -99 } │ │ │ │ │ +95 out[1][0][0] = sign[1]; │ │ │ │ │ +96 out[1][1][1] = sign[1]; │ │ │ │ │ +97 │ │ │ │ │ +98 out[2][0][0] = sign[2]; │ │ │ │ │ +99 out[2][1][1] = sign[2]; │ │ │ │ │ 100 │ │ │ │ │ -_1_0_2 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename Traits::DomainType& in, │ │ │ │ │ -103 std::vector& out) const │ │ │ │ │ -104 { │ │ │ │ │ -105 _i_m_p_l__.evaluateFunction(in,out); │ │ │ │ │ -106 } │ │ │ │ │ -107 │ │ │ │ │ -_1_0_9 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n( │ │ │ │ │ -110 const typename Traits::DomainType& in, │ │ │ │ │ -111 std::vector& out) const │ │ │ │ │ -112 { │ │ │ │ │ -113 _i_m_p_l__.evaluateJacobian(in,out); │ │ │ │ │ -114 } │ │ │ │ │ -115 │ │ │ │ │ -_1_2_1 void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ -122 const typename Traits::DomainType& in, │ │ │ │ │ -123 std::vector& out) const │ │ │ │ │ -124 { │ │ │ │ │ -125 _i_m_p_l__.partial(_o_r_d_e_r,in,out); │ │ │ │ │ -126 } │ │ │ │ │ -127 │ │ │ │ │ -128 protected: │ │ │ │ │ -_1_2_9 const Imp& _i_m_p_l__; │ │ │ │ │ -130 }; │ │ │ │ │ -131 │ │ │ │ │ -132 │ │ │ │ │ -133 │ │ │ │ │ -134 // ----------------------------------------------------------------- │ │ │ │ │ -135 // Interpolation │ │ │ │ │ -136 // ----------------------------------------------------------------- │ │ │ │ │ -137 │ │ │ │ │ -146 template │ │ │ │ │ -_1_4_7 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -148 : public _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e< DomainType, RangeType > │ │ │ │ │ -149 { │ │ │ │ │ -150 template │ │ │ │ │ -_1_5_1 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ -152 │ │ │ │ │ -153 typedef _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> _B_a_s_e; │ │ │ │ │ -154 │ │ │ │ │ -155 protected: │ │ │ │ │ -156 │ │ │ │ │ -_1_5_8 _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p( const Imp &imp) │ │ │ │ │ -159 : _i_m_p_l__(imp) {} │ │ │ │ │ -160 │ │ │ │ │ -161 public: │ │ │ │ │ -162 │ │ │ │ │ -_1_6_3 typedef typename _B_a_s_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e _F_u_n_c_t_i_o_n_T_y_p_e; │ │ │ │ │ -164 │ │ │ │ │ -_1_6_5 typedef typename _B_a_s_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ -166 │ │ │ │ │ -_1_6_8 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ -vector& out) const │ │ │ │ │ -169 { │ │ │ │ │ -170 _i_m_p_l__.interpolate(f,out); │ │ │ │ │ -171 } │ │ │ │ │ -172 │ │ │ │ │ -173 protected: │ │ │ │ │ -_1_7_4 const Imp& _i_m_p_l__; │ │ │ │ │ -175 │ │ │ │ │ -176 }; │ │ │ │ │ -177 │ │ │ │ │ -178 │ │ │ │ │ -179 │ │ │ │ │ -180 // ----------------------------------------------------------------- │ │ │ │ │ -181 // Coefficients │ │ │ │ │ -182 // ----------------------------------------------------------------- │ │ │ │ │ -183 │ │ │ │ │ -190 template │ │ │ │ │ -_1_9_1 class _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -192 : public _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -193 { │ │ │ │ │ -194 template │ │ │ │ │ -_1_9_5 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ -196 │ │ │ │ │ -197 protected: │ │ │ │ │ -198 │ │ │ │ │ -_2_0_0 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ -201 : _i_m_p_l__(imp) │ │ │ │ │ -202 {} │ │ │ │ │ -203 │ │ │ │ │ -204 public: │ │ │ │ │ -205 │ │ │ │ │ -_2_0_7 std::size_t _s_i_z_e () const │ │ │ │ │ -208 { │ │ │ │ │ -209 return _i_m_p_l__.size(); │ │ │ │ │ -210 } │ │ │ │ │ -211 │ │ │ │ │ -_2_1_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -214 { │ │ │ │ │ -215 return _i_m_p_l__.localKey(i); │ │ │ │ │ -216 } │ │ │ │ │ -217 │ │ │ │ │ -218 protected: │ │ │ │ │ -_2_1_9 const Imp& _i_m_p_l__; │ │ │ │ │ -220 │ │ │ │ │ -221 }; │ │ │ │ │ -222 │ │ │ │ │ -223 │ │ │ │ │ -224 │ │ │ │ │ -225 // ----------------------------------------------------------------- │ │ │ │ │ -226 // Finite Element │ │ │ │ │ -227 // ----------------------------------------------------------------- │ │ │ │ │ -228 │ │ │ │ │ -237 template │ │ │ │ │ -_2_3_8 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -239 : public _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -240 { │ │ │ │ │ -241 using LocalBasisTraits = typename Imp::Traits::LocalBasisType::Traits; │ │ │ │ │ -242 using _I_n_t_e_r_f_a_c_e = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_>; │ │ │ │ │ -243 │ │ │ │ │ -244 public: │ │ │ │ │ -_2_4_5 typedef typename _I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ -246 │ │ │ │ │ -_2_4_8 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ -249 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::_c_l_o_n_e(imp)), │ │ │ │ │ -250 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ -251 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ -252 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ -253 {} │ │ │ │ │ -254 │ │ │ │ │ -_2_5_6 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p() │ │ │ │ │ -257 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::create()), │ │ │ │ │ -258 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ -259 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ -260 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ -261 {} │ │ │ │ │ -262 │ │ │ │ │ -_2_6_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p& other) │ │ │ │ │ -265 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::_c_l_o_n_e(*other._i_m_p_l__)), │ │ │ │ │ -266 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ -267 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ -268 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ -269 {} │ │ │ │ │ -270 │ │ │ │ │ -_2_7_1 _~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p() │ │ │ │ │ -272 { │ │ │ │ │ -273 delete _i_m_p_l__; │ │ │ │ │ -274 } │ │ │ │ │ -275 │ │ │ │ │ -_2_7_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -278 { │ │ │ │ │ -279 return _l_o_c_a_l_B_a_s_i_s_I_m_p__; │ │ │ │ │ -280 } │ │ │ │ │ -281 │ │ │ │ │ -_2_8_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -284 { │ │ │ │ │ -285 return _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__; │ │ │ │ │ -286 } │ │ │ │ │ -287 │ │ │ │ │ -_2_8_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -290 { │ │ │ │ │ -291 return _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__; │ │ │ │ │ -292 } │ │ │ │ │ -293 │ │ │ │ │ -_2_9_5 unsigned int _s_i_z_e () const │ │ │ │ │ -296 { │ │ │ │ │ -297 return _i_m_p_l__->size(); │ │ │ │ │ -298 } │ │ │ │ │ -299 │ │ │ │ │ -_3_0_1 const GeometryType _t_y_p_e () const │ │ │ │ │ -302 { │ │ │ │ │ -303 return _i_m_p_l__->type(); │ │ │ │ │ -304 } │ │ │ │ │ -305 │ │ │ │ │ -_3_1_1 virtual _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_I_m_p_>* _c_l_o_n_e() const │ │ │ │ │ -312 { │ │ │ │ │ -313 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_I_m_p_>(*this); │ │ │ │ │ -314 } │ │ │ │ │ -315 │ │ │ │ │ -316 protected: │ │ │ │ │ -_3_1_7 const Imp* _i_m_p_l__; │ │ │ │ │ -318 │ │ │ │ │ -_3_1_9 const _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_<_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_,_ _t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ -_L_o_c_a_l_B_a_s_i_s_T_y_p_e_> _l_o_c_a_l_B_a_s_i_s_I_m_p__; │ │ │ │ │ -_3_2_0 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_<_t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ -_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_> _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__; │ │ │ │ │ -321 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__; │ │ │ │ │ -324 }; │ │ │ │ │ -325} │ │ │ │ │ -326#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +101 out[3][2][2] = sign[3]*(2.0); │ │ │ │ │ +102 │ │ │ │ │ +103 out[4][2][2] = sign[4]*(2.0); │ │ │ │ │ +104 } │ │ │ │ │ +105 │ │ │ │ │ +_1_0_7 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +108 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +109 std::vector& out) const // return value │ │ │ │ │ +110 { │ │ │ │ │ +111 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +112 if (totalOrder == 0) { │ │ │ │ │ +113 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +114 } else { │ │ │ │ │ +115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +116 } │ │ │ │ │ +117 } │ │ │ │ │ +118 │ │ │ │ │ +_1_2_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ +121 { │ │ │ │ │ +122 return 1; │ │ │ │ │ +123 } │ │ │ │ │ +124 │ │ │ │ │ +125 private: │ │ │ │ │ +126 std::array sign; │ │ │ │ │ +127 }; │ │ │ │ │ +128} │ │ │ │ │ +129#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -R RangeType │ │ │ │ │ -range type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for a local interpolation │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ -std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ -type of function to interpolate │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:137 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ -RangeType::field_type CoefficientType │ │ │ │ │ -type of the coefficient vector in the interpolate method │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:140 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for a local basis │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local coefficients │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:198 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local finite elements with functions │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping a finite element using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:277 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_c_l_o_n_e │ │ │ │ │ -virtual LocalFiniteElementVirtualImp< Imp > * clone() const │ │ │ │ │ -clone this wrapper │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:311 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__ │ │ │ │ │ -const LocalInterpolationVirtualImp< typename LocalBasisTraits::DomainType, │ │ │ │ │ -typename LocalBasisTraits::RangeType, typename Imp::Traits:: │ │ │ │ │ -LocalInterpolationType > localInterpolationImp_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:323 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalFiniteElementVirtualImp(const Imp &imp) │ │ │ │ │ -taking a LocalFiniteElementVirtualInterface implementation │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:248 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_T_r_a_i_t_s │ │ │ │ │ -Interface::Traits Traits │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:245 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalFiniteElementVirtualImp() │ │ │ │ │ -Default constructor. Assumes that the implementation class is default │ │ │ │ │ -constructible as well. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:256 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalFiniteElementVirtualImp(const LocalFiniteElementVirtualImp &other) │ │ │ │ │ -Copy constructor needed for deep copy. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:264 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -~LocalFiniteElementVirtualImp() │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:271 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:295 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_t_y_p_e │ │ │ │ │ -const GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:301 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ -const Imp * impl_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:317 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:283 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_B_a_s_i_s_I_m_p__ │ │ │ │ │ -const LocalBasisVirtualImp< LocalBasisTraits, typename Imp::Traits:: │ │ │ │ │ -LocalBasisType > localBasisImp_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:319 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__ │ │ │ │ │ -const LocalCoefficientsVirtualImp< typename Imp::Traits::LocalCoefficientsType │ │ │ │ │ -> localCoefficientsImp_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:320 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:289 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_:_:_c_l_o_n_e │ │ │ │ │ -static Imp * clone(const Imp &imp) │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_c_l_o_n_e │ │ │ │ │ -static Imp * clone(const Imp &imp) │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Imp * create() │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_I_n_t_e_r_f_a_c_e │ │ │ │ │ -LocalFiniteElementVirtualInterface< typename Imp::Traits::LocalBasisType:: │ │ │ │ │ -Traits > Interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping a basis using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, Traits::dimDomain > &order, const │ │ │ │ │ -typename Traits::DomainType &in, std::vector< typename Traits::RangeType > │ │ │ │ │ -&out) const │ │ │ │ │ -Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:121 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT0PrismLocalBasis(std::bitset< 5 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all basis function at given position. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:102 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ -const Imp & impl_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:129 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_T_r_a_i_t_s │ │ │ │ │ -T Traits │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate jacobian of all shape functions at given position. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:109 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalBasisVirtualImp(const Imp &imp) │ │ │ │ │ -constructor taking an implementation of the interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:82 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_o_r_d_e_r │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ unsigned int order() const │ │ │ │ │ Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:96 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping a local interpolation using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ -&out) const │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:168 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ -const Imp & impl_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:174 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ -Base::FunctionType FunctionType │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalInterpolationVirtualImp(const Imp &imp) │ │ │ │ │ -constructor taking an implementation of the Dune:: │ │ │ │ │ -LocalInterpolationVirtualInterface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:158 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ -Base::CoefficientType CoefficientType │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:165 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping local coefficients using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:193 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -LocalCoefficientsVirtualImp(const Imp &imp) │ │ │ │ │ -constructor taking an implementation of the Dune:: │ │ │ │ │ -LocalCoefficientsVirtualInterface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:200 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:213 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:207 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ -const Imp & impl_ │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:219 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:120 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:32 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: bdfmcube.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,32 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
bdfmcube.hh File Reference
│ │ │ │ +
raviartthomas0prismlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localcoefficients.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localinterpolation.hh>
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDFMCubeLocalFiniteElement< D, R, dim, order >
 Brezzi-Douglas-Fortin-Marini finite elements for cubes. More...
class  Dune::RT0PrismLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference prism. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -bdfmcube.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ -_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ -_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ -  Brezzi-Douglas-Fortin-Marini finite elements for cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00125_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: bdfmcube.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prismlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,95 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
bdfmcube.hh
│ │ │ │ +
raviartthomas0prismlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ - │ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16
│ │ │ │ -
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
19
│ │ │ │ -
43 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
49
│ │ │ │ -
50 public:
│ │ │ │ - │ │ │ │ -
52
│ │ │ │ - │ │ │ │ -
55
│ │ │ │ -
│ │ │ │ -
61 BDFMCubeLocalFiniteElement (std::bitset<2*dim> s)
│ │ │ │ -
62 : basis( s ), interpolation( s )
│ │ │ │ -
63 {}
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
65 auto localBasis () const -> const LocalBasis& { return basis; }
│ │ │ │ -
66 auto localCoefficients () const -> const LocalCoefficients& { return coefficients; }
│ │ │ │ -
67 auto localInterpolation () const -> const LocalInterpolation& { return interpolation; }
│ │ │ │ -
68
│ │ │ │ -
70 unsigned int size () const { return basis.size(); }
│ │ │ │ -
71 static constexpr auto type () -> GeometryType { return GeometryTypes::cube(dim); }
│ │ │ │ -
72
│ │ │ │ -
73 private:
│ │ │ │ -
74 LocalBasis basis;
│ │ │ │ -
75 LocalCoefficients coefficients;
│ │ │ │ -
76 LocalInterpolation interpolation;
│ │ │ │ -
77 };
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79} // namespace Dune
│ │ │ │ -
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
20 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 {
│ │ │ │ +
23
│ │ │ │ +
24 public:
│ │ │ │ +
25
│ │ │ │ +
│ │ │ │ +
31 RT0PrismLocalInterpolation (std::bitset<5> s = 0)
│ │ │ │ +
32 {
│ │ │ │ +
33 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
34
│ │ │ │ +
35 for (size_t i=0; i<5; i++)
│ │ │ │ +
36 sign[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
37
│ │ │ │ +
38 Scalar r = 1/std::sqrt(2);
│ │ │ │ +
39
│ │ │ │ +
40 n[0] = { 0.0, -1.0, 0.0};
│ │ │ │ +
41 n[1] = {-1.0, 0.0, 0.0};
│ │ │ │ +
42 n[2] = { r, r, 0.0};
│ │ │ │ +
43 n[3] = { 0.0, 0.0, -1.0};
│ │ │ │ +
44 n[4] = { 0.0, 0.0, 1.0};
│ │ │ │ +
45
│ │ │ │ +
46 c[0] = 1.0;
│ │ │ │ +
47 c[1] = 1.0;
│ │ │ │ +
48 c[2] = std::sqrt(2);
│ │ │ │ +
49 c[3] = 1/2.0;
│ │ │ │ +
50 c[4] = 1/2.0;
│ │ │ │ +
51
│ │ │ │ +
52 m[0] = { 0.5, 0.0, 0.5};
│ │ │ │ +
53 m[1] = { 0.0, 0.5, 0.5};
│ │ │ │ +
54 m[2] = { 0.5, 0.5, 0.5};
│ │ │ │ +
55 m[3] = { 1/3.0, 1/3.0, 0.0};
│ │ │ │ +
56 m[4] = { 1/3.0, 1/3.0, 1.0};
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
67 template<class F, class C>
│ │ │ │ +
│ │ │ │ +
68 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
69 {
│ │ │ │ +
70 out.resize(5);
│ │ │ │ +
71 for(int i=0; i<5; i++)
│ │ │ │ +
72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i];
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ +
76 // Facet orientations
│ │ │ │ +
77 std::array<typename LB::Traits::RangeFieldType, 5> sign;
│ │ │ │ +
78 // Facet area
│ │ │ │ +
79 std::array<typename LB::Traits::RangeFieldType, 5> c;
│ │ │ │
80
│ │ │ │ -
81#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH
│ │ │ │ - │ │ │ │ +
81 // Facet normals
│ │ │ │ +
82 std::array<typename LB::Traits::DomainType, 5> n;
│ │ │ │ +
83 // Facet midpoints
│ │ │ │ +
84 std::array<typename LB::Traits::DomainType, 5> m;
│ │ │ │ +
85 };
│ │ │ │ +
│ │ │ │ +
86}
│ │ │ │ +
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Brezzi-Douglas-Fortin-Marini finite elements for cubes.
Definition bdfmcube.hh:45
│ │ │ │ -
auto localCoefficients() const -> const LocalCoefficients &
Definition bdfmcube.hh:66
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition bdfmcube.hh:70
│ │ │ │ -
BDFMCubeLocalFiniteElement()
Standard constructor.
Definition bdfmcube.hh:54
│ │ │ │ -
auto localBasis() const -> const LocalBasis &
Definition bdfmcube.hh:65
│ │ │ │ -
static constexpr auto type() -> GeometryType
Definition bdfmcube.hh:71
│ │ │ │ -
auto localInterpolation() const -> const LocalInterpolation &
Definition bdfmcube.hh:67
│ │ │ │ -
BDFMCubeLocalFiniteElement(std::bitset< 2 *dim > s)
Make set number s, where 0 <= s < 2^(2*dim)
Definition bdfmcube.hh:61
│ │ │ │ -
Brezzi-Douglas-Fortin-Marini shape functions on a reference cube.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:37
│ │ │ │ -
Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:33
│ │ │ │ -
Interpolation for Brezzi-Douglas-Fortin-Marini shape functions on cubes.
Definition brezzidouglasfortinmarini/cube/localinterpolation.hh:36
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalinterpolation.hh:22
│ │ │ │ +
RT0PrismLocalInterpolation(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prismlocalinterpolation.hh:31
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas0prismlocalinterpolation.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,114 +1,92 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ -bdfmcube.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ +raviartthomas0prismlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ -_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i_/_c_u_b_e_/ │ │ │ │ │ -_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16 │ │ │ │ │ -_1_7namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -19 │ │ │ │ │ -43 template │ │ │ │ │ -_4_4 class _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -45 { │ │ │ │ │ -46 using _L_o_c_a_l_B_a_s_i_s = _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ -47 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s = _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ -48 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n = _B_D_F_M_C_u_b_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_>; │ │ │ │ │ -49 │ │ │ │ │ -50 public: │ │ │ │ │ -_5_1 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_,_ _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_, │ │ │ │ │ -_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_ _>; │ │ │ │ │ -52 │ │ │ │ │ -_5_4 _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () {} │ │ │ │ │ -55 │ │ │ │ │ -_6_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<2*dim> s) │ │ │ │ │ -62 : basis( s ), interpolation( s ) │ │ │ │ │ -63 {} │ │ │ │ │ -64 │ │ │ │ │ -_6_5 auto _l_o_c_a_l_B_a_s_i_s () const -> const _L_o_c_a_l_B_a_s_i_s& { return basis; } │ │ │ │ │ -_6_6 auto _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const -> const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s& { return │ │ │ │ │ -coefficients; } │ │ │ │ │ -_6_7 auto _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const -> const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n& { return │ │ │ │ │ -interpolation; } │ │ │ │ │ -68 │ │ │ │ │ -_7_0 unsigned int _s_i_z_e () const { return basis.size(); } │ │ │ │ │ -_7_1 static constexpr auto _t_y_p_e () -> GeometryType { return GeometryTypes::cube │ │ │ │ │ -(dim); } │ │ │ │ │ -72 │ │ │ │ │ -73 private: │ │ │ │ │ -74 LocalBasis basis; │ │ │ │ │ -75 LocalCoefficients coefficients; │ │ │ │ │ -76 LocalInterpolation interpolation; │ │ │ │ │ -77 }; │ │ │ │ │ -78 │ │ │ │ │ -79} // namespace Dune │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 class _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +22 { │ │ │ │ │ +23 │ │ │ │ │ +24 public: │ │ │ │ │ +25 │ │ │ │ │ +_3_1 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<5> s = 0) │ │ │ │ │ +32 { │ │ │ │ │ +33 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +34 │ │ │ │ │ +35 for (size_t i=0; i<5; i++) │ │ │ │ │ +36 sign[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +37 │ │ │ │ │ +38 Scalar r = 1/std::sqrt(2); │ │ │ │ │ +39 │ │ │ │ │ +40 n[0] = { 0.0, -1.0, 0.0}; │ │ │ │ │ +41 n[1] = {-1.0, 0.0, 0.0}; │ │ │ │ │ +42 n[2] = { r, r, 0.0}; │ │ │ │ │ +43 n[3] = { 0.0, 0.0, -1.0}; │ │ │ │ │ +44 n[4] = { 0.0, 0.0, 1.0}; │ │ │ │ │ +45 │ │ │ │ │ +46 c[0] = 1.0; │ │ │ │ │ +47 c[1] = 1.0; │ │ │ │ │ +48 c[2] = std::sqrt(2); │ │ │ │ │ +49 c[3] = 1/2.0; │ │ │ │ │ +50 c[4] = 1/2.0; │ │ │ │ │ +51 │ │ │ │ │ +52 m[0] = { 0.5, 0.0, 0.5}; │ │ │ │ │ +53 m[1] = { 0.0, 0.5, 0.5}; │ │ │ │ │ +54 m[2] = { 0.5, 0.5, 0.5}; │ │ │ │ │ +55 m[3] = { 1/3.0, 1/3.0, 0.0}; │ │ │ │ │ +56 m[4] = { 1/3.0, 1/3.0, 1.0}; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +67 template │ │ │ │ │ +_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +69 { │ │ │ │ │ +70 out.resize(5); │ │ │ │ │ +71 for(int i=0; i<5; i++) │ │ │ │ │ +72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i]; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 // Facet orientations │ │ │ │ │ +77 std::array sign; │ │ │ │ │ +78 // Facet area │ │ │ │ │ +79 std::array c; │ │ │ │ │ 80 │ │ │ │ │ -81#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_BDFMCUBE_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +81 // Facet normals │ │ │ │ │ +82 std::array n; │ │ │ │ │ +83 // Facet midpoints │ │ │ │ │ +84 std::array m; │ │ │ │ │ +85 }; │ │ │ │ │ +86} │ │ │ │ │ +87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Brezzi-Douglas-Fortin-Marini finite elements for cubes. │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -auto localCoefficients() const -> const LocalCoefficients & │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDFMCubeLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -auto localBasis() const -> const LocalBasis & │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr auto type() -> GeometryType │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -auto localInterpolation() const -> const LocalInterpolation & │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -BDFMCubeLocalFiniteElement(std::bitset< 2 *dim > s) │ │ │ │ │ -Make set number s, where 0 <= s < 2^(2*dim) │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Interpolation for Brezzi-Douglas-Fortin-Marini shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localinterpolation.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT0PrismLocalInterpolation(std::bitset< 5 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:68 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimeticall.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0prism.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mimeticall.hh File Reference
│ │ │ │ +
raviartthomas0prism.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localbasis.hh"
│ │ │ │ -#include "../common/localkey.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas0prism/raviartthomas0prismlocalbasis.hh"
│ │ │ │ +#include "raviartthomas0prism/raviartthomas0prismlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas0prism/raviartthomas0prismlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MimeticLocalBasis< D, R, dim >
 
class  Dune::MimeticLocalInterpolation< LB >
 
class  Dune::MimeticLocalCoefficients
 ! More...
class  Dune::RT0PrismLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on prisms. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_i_m_e_t_i_c │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -mimeticall.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0prism.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  ! _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on prisms. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00131_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimeticall.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0prism.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,173 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mimeticall.hh
│ │ │ │ +
raviartthomas0prism.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_MIMETIC_ALL_HH
│ │ │ │ -
6#define DUNE_MIMETIC_ALL_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10#include <dune/common/exceptions.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ -
15
│ │ │ │ -
16#include "../common/localbasis.hh"
│ │ │ │ -
17#include "../common/localkey.hh"
│ │ │ │ -
18
│ │ │ │ -
19namespace Dune
│ │ │ │ -
20{
│ │ │ │ -
21 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24 public:
│ │ │ │ - │ │ │ │ -
26 R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ -
27
│ │ │ │ -
│ │ │ │ -
28 MimeticLocalBasis (unsigned int variant_)
│ │ │ │ -
29 : variant(variant_)
│ │ │ │ -
30 {}
│ │ │ │ -
│ │ │ │ -
31
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 : variant(0)
│ │ │ │ -
34 {}
│ │ │ │ -
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │
35
│ │ │ │ -
36 unsigned int size () const { return variant; }
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
39 inline void evaluateFunction (
│ │ │ │ -
40 const typename Traits::DomainType& in,
│ │ │ │ -
41 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
42 {
│ │ │ │ -
43 DUNE_THROW(Dune::Exception,"mimetic basis evaluation not available");
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ -
47 inline void evaluateJacobian (
│ │ │ │ -
48 const typename Traits::DomainType& in,
│ │ │ │ -
49 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
50 {
│ │ │ │ -
51 DUNE_THROW(Dune::Exception,"mimetic basis Jacobian evaluation not available");
│ │ │ │ -
52 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {}
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 basis(s),
│ │ │ │ +
47 interpolation(s)
│ │ │ │ +
48 {}
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
51 {
│ │ │ │ +
52 return basis;
│ │ │ │ +
53 }
│ │ │ │
│ │ │ │ -
53
│ │ │ │ +
54
│ │ │ │
│ │ │ │ -
55 void partial (const std::array<unsigned int, dim>& /*order*/,
│ │ │ │ -
56 const typename Traits::DomainType& /*in*/, // position
│ │ │ │ -
57 std::vector<typename Traits::RangeType>& /*out*/) const // return value
│ │ │ │ -
58 {
│ │ │ │ -
59 DUNE_THROW(Dune::Exception,"mimetic basis partial derivative evaluation not available");
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
63 unsigned int order () const
│ │ │ │ -
64 {
│ │ │ │ -
65 DUNE_THROW(Dune::Exception,"mimetic order evaluation not available");
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
68 private:
│ │ │ │ -
69 unsigned int variant;
│ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
72 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
74 {
│ │ │ │ -
75 public:
│ │ │ │ -
76
│ │ │ │ -
78 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
79 void interpolate (const F& f, std::vector<C>& out) const {
│ │ │ │ -
80 DUNE_THROW(Dune::Exception,"mimetic local interpolation not available");
│ │ │ │ -
81 }
│ │ │ │ -
│ │ │ │ -
82 };
│ │ │ │ -
│ │ │ │ -
83
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
88 {
│ │ │ │ -
89 public:
│ │ │ │ -
│ │ │ │ -
90 MimeticLocalCoefficients (unsigned int variant_)
│ │ │ │ -
91 : variant(variant_), li(variant_)
│ │ │ │ -
92 {
│ │ │ │ -
93 for (unsigned int i=0; i<variant; i++)
│ │ │ │ - │ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
98 : variant(0), li(0)
│ │ │ │ -
99 {}
│ │ │ │ -
│ │ │ │ -
100
│ │ │ │ -
102 std::size_t size () const { return variant; }
│ │ │ │ -
103
│ │ │ │ -
│ │ │ │ -
105 const Dune::LocalKey& localKey (std::size_t i) const {
│ │ │ │ -
106 return li[i];
│ │ │ │ -
107 }
│ │ │ │ -
│ │ │ │ -
108
│ │ │ │ -
109 private:
│ │ │ │ -
110 unsigned int variant;
│ │ │ │ -
111 std::vector<Dune::LocalKey> li;
│ │ │ │ -
112 };
│ │ │ │ -
│ │ │ │ -
113}
│ │ │ │ -
114
│ │ │ │ -
115#endif
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ +
57 return coefficients;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
61 {
│ │ │ │ +
62 return interpolation;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ +
66 unsigned int size () const
│ │ │ │ +
67 {
│ │ │ │ +
68 return basis.size();
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
│ │ │ │ +
71 static constexpr GeometryType type ()
│ │ │ │ +
72 {
│ │ │ │ +
73 return GeometryTypes::prism;
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76 private:
│ │ │ │ + │ │ │ │ +
78 RT0PrismLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81}
│ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
@ intersectionCodim
Codimension returned by LocalKey::codim() for degrees of freedom attached to an intersection.
Definition localkey.hh:37
│ │ │ │ -
Definition mimeticall.hh:23
│ │ │ │ -
MimeticLocalBasis(unsigned int variant_)
Definition mimeticall.hh:28
│ │ │ │ -
Dune::LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
Definition mimeticall.hh:26
│ │ │ │ -
MimeticLocalBasis()
Definition mimeticall.hh:32
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition mimeticall.hh:47
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition mimeticall.hh:63
│ │ │ │ -
void partial(const std::array< unsigned int, dim > &, const typename Traits::DomainType &, std::vector< typename Traits::RangeType > &) const
Evaluate partial derivatives of all shape functions.
Definition mimeticall.hh:55
│ │ │ │ -
unsigned int size() const
Definition mimeticall.hh:36
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition mimeticall.hh:39
│ │ │ │ -
Definition mimeticall.hh:74
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition mimeticall.hh:79
│ │ │ │ -
!
Definition mimeticall.hh:88
│ │ │ │ -
const Dune::LocalKey & localKey(std::size_t i) const
map index i to local key
Definition mimeticall.hh:105
│ │ │ │ -
MimeticLocalCoefficients(unsigned int variant_)
Definition mimeticall.hh:90
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition mimeticall.hh:102
│ │ │ │ -
MimeticLocalCoefficients()
Definition mimeticall.hh:97
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on prisms.
Definition raviartthomas0prism.hh:27
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0prism.hh:66
│ │ │ │ +
LocalFiniteElementTraits< RT0PrismLocalBasis< D, R >, RT0PrismLocalCoefficients, RT0PrismLocalInterpolation< RT0PrismLocalBasis< D, R > > > Traits
Definition raviartthomas0prism.hh:33
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0prism.hh:60
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0prism.hh:50
│ │ │ │ +
RT0PrismLocalFiniteElement()
Standard constructor.
Definition raviartthomas0prism.hh:37
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0prism.hh:55
│ │ │ │ +
RT0PrismLocalFiniteElement(int s)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prism.hh:45
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas0prism.hh:71
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalbasis.hh:28
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on prisms.
Definition raviartthomas0prismlocalcoefficients.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalinterpolation.hh:22
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,193 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_i_m_e_t_i_c │ │ │ │ │ -mimeticall.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas0prism.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_MIMETIC_ALL_HH │ │ │ │ │ -6#define DUNE_MIMETIC_ALL_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include "../common/localbasis.hh" │ │ │ │ │ -17#include "../common/localkey.hh" │ │ │ │ │ -18 │ │ │ │ │ -19namespace _D_u_n_e │ │ │ │ │ -20{ │ │ │ │ │ -21 template │ │ │ │ │ -_2_2 class _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -23 { │ │ │ │ │ -24 public: │ │ │ │ │ -25 typedef _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>, │ │ │ │ │ -_2_6 R,1,Dune::FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -27 │ │ │ │ │ -_2_8 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s (unsigned int variant_) │ │ │ │ │ -29 : variant(variant_) │ │ │ │ │ -30 {} │ │ │ │ │ -31 │ │ │ │ │ -_3_2 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -33 : variant(0) │ │ │ │ │ -34 {} │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ 35 │ │ │ │ │ -_3_6 unsigned int _s_i_z_e () const { return variant; } │ │ │ │ │ -37 │ │ │ │ │ -_3_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( │ │ │ │ │ -40 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -41 std::vector& out) const │ │ │ │ │ -42 { │ │ │ │ │ -43 DUNE_THROW(Dune::Exception,"mimetic basis evaluation not available"); │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -_4_7 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( │ │ │ │ │ -48 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -49 std::vector& out) const │ │ │ │ │ -50 { │ │ │ │ │ -51 DUNE_THROW(Dune::Exception,"mimetic basis Jacobian evaluation not │ │ │ │ │ -available"); │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_5 void _p_a_r_t_i_a_l (const std::array& /*order*/, │ │ │ │ │ -56 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& /*in*/, // position │ │ │ │ │ -57 std::vector& /*out*/) const // return value │ │ │ │ │ -58 { │ │ │ │ │ -59 DUNE_THROW(Dune::Exception,"mimetic basis partial derivative evaluation not │ │ │ │ │ -available"); │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ -64 { │ │ │ │ │ -65 DUNE_THROW(Dune::Exception,"mimetic order evaluation not available"); │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -68 private: │ │ │ │ │ -69 unsigned int variant; │ │ │ │ │ -70 }; │ │ │ │ │ -71 │ │ │ │ │ -72 template │ │ │ │ │ -_7_3 class _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -74 { │ │ │ │ │ -75 public: │ │ │ │ │ -76 │ │ │ │ │ -78 template │ │ │ │ │ -_7_9 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const { │ │ │ │ │ -80 DUNE_THROW(Dune::Exception,"mimetic local interpolation not available"); │ │ │ │ │ -81 } │ │ │ │ │ -82 }; │ │ │ │ │ -83 │ │ │ │ │ -_8_7 class _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -88 { │ │ │ │ │ -89 public: │ │ │ │ │ -_9_0 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s (unsigned int variant_) │ │ │ │ │ -91 : variant(variant_), li(variant_) │ │ │ │ │ -92 { │ │ │ │ │ -93 for (unsigned int i=0; i li; │ │ │ │ │ -112 }; │ │ │ │ │ -113} │ │ │ │ │ -114 │ │ │ │ │ -115#endif │ │ │ │ │ +_3_7 _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +38 {} │ │ │ │ │ +39 │ │ │ │ │ +_4_5 _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +46 basis(s), │ │ │ │ │ +47 interpolation(s) │ │ │ │ │ +48 {} │ │ │ │ │ +49 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return basis; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return coefficients; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return interpolation; │ │ │ │ │ +63 } │ │ │ │ │ +64 │ │ │ │ │ +_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ +67 { │ │ │ │ │ +68 return basis.size(); │ │ │ │ │ +69 } │ │ │ │ │ +70 │ │ │ │ │ +_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +72 { │ │ │ │ │ +73 return GeometryTypes::prism; │ │ │ │ │ +74 } │ │ │ │ │ +75 │ │ │ │ │ +76 private: │ │ │ │ │ +77 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +78 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +79 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +80 }; │ │ │ │ │ +81} │ │ │ │ │ +82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m │ │ │ │ │ -@ intersectionCodim │ │ │ │ │ -Codimension returned by LocalKey::codim() for degrees of freedom attached to an │ │ │ │ │ -intersection. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -MimeticLocalBasis(unsigned int variant_) │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -Dune::LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune:: │ │ │ │ │ -FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -MimeticLocalBasis() │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dim > &, const typename Traits:: │ │ │ │ │ -DomainType &, std::vector< typename Traits::RangeType > &) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on prisms. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Local interpolation of a function. │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -! │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const Dune::LocalKey & localKey(std::size_t i) const │ │ │ │ │ -map index i to local key │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -MimeticLocalCoefficients(unsigned int variant_) │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:102 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -MimeticLocalCoefficients() │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:97 │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT0PrismLocalBasis< D, R >, │ │ │ │ │ +RT0PrismLocalCoefficients, RT0PrismLocalInterpolation< RT0PrismLocalBasis< D, R │ │ │ │ │ +> > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0PrismLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0PrismLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prism.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on prisms. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:22 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: enriched.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,24 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas02dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/enriched/simplexp1bubble.hh>
│ │ │ │ +
#include <cmath>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT02DLocalInterpolation< LB >
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,11 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -enriched.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00134_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: enriched.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,32 +70,94 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched.hh
│ │ │ │ +
raviartthomas02dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ +
5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ -
9
│ │ │ │ -
10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ - │ │ │ │ +
8#include <cmath>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <bitset>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
18 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
20 {
│ │ │ │ +
21 public:
│ │ │ │ +
22
│ │ │ │ +
│ │ │ │ +
24 RT02DLocalInterpolation (std::bitset<3> s = 0)
│ │ │ │ +
25 {
│ │ │ │ +
26 using std::sqrt;
│ │ │ │ +
27 for (std::size_t i=0; i<sign_.size(); i++)
│ │ │ │ +
28 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
29
│ │ │ │ +
30 m_[0] = {0.5, 0.0};
│ │ │ │ +
31 m_[1] = {0.0, 0.5};
│ │ │ │ +
32 m_[2] = {0.5, 0.5};
│ │ │ │ +
33 n_[0] = {0.0, -1.0};
│ │ │ │ +
34 n_[1] = {-1.0, 0.0};
│ │ │ │ +
35 n_[2] = {1.0/sqrt(2.0), 1.0/sqrt(2.0)};
│ │ │ │ +
36 c_[0] = ( 0.5*n_[0][0] - 1.0*n_[0][1]);
│ │ │ │ +
37 c_[1] = (-1.0*n_[1][0] + 0.5*n_[1][1]);
│ │ │ │ +
38 c_[2] = ( 0.5*n_[2][0] + 0.5*n_[2][1]);
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
41 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
42 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
43 {
│ │ │ │ +
44 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
45
│ │ │ │ +
46 out.resize(3);
│ │ │ │ +
47
│ │ │ │ +
48 for (int i=0; i<3; i++)
│ │ │ │ +
49 {
│ │ │ │ +
50 auto y = f(m_[i]);
│ │ │ │ +
51 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1])*sign_[i]/c_[i];
│ │ │ │ +
52 }
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 private:
│ │ │ │ +
56 // Edge orientations
│ │ │ │ +
57 std::array<typename LB::Traits::RangeFieldType,3> sign_;
│ │ │ │ +
58 // Edge midpoints of the reference triangle
│ │ │ │ +
59 std::array<typename LB::Traits::DomainType,3> m_;
│ │ │ │ +
60 // Unit outer normals of the reference triangle
│ │ │ │ +
61 std::array<typename LB::Traits::DomainType,3> n_;
│ │ │ │ +
62 // Inverse triangle edge length
│ │ │ │ +
63 std::array<typename LB::Traits::RangeFieldType,3> c_;
│ │ │ │ +
64 };
│ │ │ │ +
│ │ │ │ +
65}
│ │ │ │ +
66
│ │ │ │ +
67#endif
│ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
Definition raviartthomas02dlocalinterpolation.hh:20
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas02dlocalinterpolation.hh:42
│ │ │ │ +
RT02DLocalInterpolation(std::bitset< 3 > s=0)
Constructor with given set of edge orientations.
Definition raviartthomas02dlocalinterpolation.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,87 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -enriched.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ +raviartthomas02dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ +5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ -9 │ │ │ │ │ -10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ -_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +18 template │ │ │ │ │ +_1_9 class _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +20 { │ │ │ │ │ +21 public: │ │ │ │ │ +22 │ │ │ │ │ +_2_4 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<3> s = 0) │ │ │ │ │ +25 { │ │ │ │ │ +26 using std::sqrt; │ │ │ │ │ +27 for (std::size_t i=0; i │ │ │ │ │ +_4_2 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +43 { │ │ │ │ │ +44 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +45 │ │ │ │ │ +46 out.resize(3); │ │ │ │ │ +47 │ │ │ │ │ +48 for (int i=0; i<3; i++) │ │ │ │ │ +49 { │ │ │ │ │ +50 auto y = f(m_[i]); │ │ │ │ │ +51 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1])*sign_[i]/c_[i]; │ │ │ │ │ +52 } │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 private: │ │ │ │ │ +56 // Edge orientations │ │ │ │ │ +57 std::array sign_; │ │ │ │ │ +58 // Edge midpoints of the reference triangle │ │ │ │ │ +59 std::array m_; │ │ │ │ │ +60 // Unit outer normals of the reference triangle │ │ │ │ │ +61 std::array n_; │ │ │ │ │ +62 // Inverse triangle edge length │ │ │ │ │ +63 std::array c_; │ │ │ │ │ +64 }; │ │ │ │ │ +65} │ │ │ │ │ +66 │ │ │ │ │ +67#endif │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT02DLocalInterpolation(std::bitset< 3 > s=0) │ │ │ │ │ +Constructor with given set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: simplexp1bubble.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
simplexp1bubble.hh File Reference
│ │ │ │ +
raviartthomas02dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/enriched/simplexp1bubble/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/enriched/simplexp1bubble/localcoefficients.hh>
│ │ │ │ -#include <dune/localfunctions/enriched/simplexp1bubble/localinterpolation.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function. More...
class  Dune::RT02DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -simplexp1bubble.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +raviartthomas02dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00137_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: simplexp1bubble.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,116 +70,138 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
simplexp1bubble.hh
│ │ │ │ +
raviartthomas02dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ +
5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <numeric>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
43 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 {
│ │ │ │ -
46 public:
│ │ │ │ - │ │ │ │ -
49
│ │ │ │ - │ │ │ │ -
52
│ │ │ │ - │ │ │ │ -
55
│ │ │ │ - │ │ │ │ -
58
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
61 const LocalBasisType& localBasis () const
│ │ │ │ -
62 {
│ │ │ │ -
63 return basis_;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
68 {
│ │ │ │ -
69 return coefficients_;
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
74 {
│ │ │ │ -
75 return interpolation_;
│ │ │ │ -
76 }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
│ │ │ │ -
79 static constexpr std::size_t size () noexcept
│ │ │ │ -
80 {
│ │ │ │ -
81 return LocalBasisType::size();
│ │ │ │ -
82 }
│ │ │ │ -
│ │ │ │ -
83
│ │ │ │ -
│ │ │ │ -
85 static constexpr GeometryType type () noexcept
│ │ │ │ -
86 {
│ │ │ │ -
87 return GeometryTypes::simplex(dim);
│ │ │ │ -
88 }
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
90 private:
│ │ │ │ -
91 LocalCoefficientsType coefficients_{};
│ │ │ │ -
92 [[no_unique_address]] LocalBasisType basis_{};
│ │ │ │ -
93 [[no_unique_address]] LocalInterpolationType interpolation_{};
│ │ │ │ -
94 };
│ │ │ │ -
│ │ │ │ -
95
│ │ │ │ -
96} // end namespace Dune
│ │ │ │ -
97
│ │ │ │ -
98#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ - │ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28 public:
│ │ │ │ +
29 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
30 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
33 RT02DLocalBasis (std::bitset<3> s = 0)
│ │ │ │ +
34 {
│ │ │ │ +
35 for (int i=0; i<3; i++)
│ │ │ │ +
36 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ +
40 unsigned int size () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return 3;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
47 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
48 {
│ │ │ │ +
49 out.resize(3);
│ │ │ │ +
50 out[0] = {sign_[0]*in[0], sign_[0]*(in[1]-D(1))};
│ │ │ │ +
51 out[1] = {sign_[1]*(in[0]-D(1)), sign_[1]*in[1]};
│ │ │ │ +
52 out[2] = {sign_[2]*in[0], sign_[2]*in[1]};
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
56 inline void
│ │ │ │ +
│ │ │ │ +
57 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
58 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
59 {
│ │ │ │ +
60 out.resize(3);
│ │ │ │ +
61 for (int i=0; i<3; i++)
│ │ │ │ +
62 {
│ │ │ │ +
63 out[i][0] = {sign_[i], 0};
│ │ │ │ +
64 out[i][1] = { 0, sign_[i]};
│ │ │ │ +
65 }
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
69 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
70 const typename Traits::DomainType& in, // position
│ │ │ │ +
71 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
72 {
│ │ │ │ +
73 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
74 if (totalOrder == 0) {
│ │ │ │ +
75 evaluateFunction(in, out);
│ │ │ │ +
76 } else if (totalOrder == 1) {
│ │ │ │ +
77 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
78 out.resize(size());
│ │ │ │ +
79
│ │ │ │ +
80 for (int i=0; i<3; i++)
│ │ │ │ +
81 {
│ │ │ │ +
82 out[i][direction] = sign_[i];
│ │ │ │ +
83 out[i][1-direction] = 0;
│ │ │ │ +
84 }
│ │ │ │ +
85 } else {
│ │ │ │ +
86 out.resize(size());
│ │ │ │ +
87 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
88 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ +
89 out[i][j] = 0;
│ │ │ │ +
90 }
│ │ │ │ +
91
│ │ │ │ +
92 }
│ │ │ │ +
│ │ │ │ +
93
│ │ │ │ +
│ │ │ │ +
95 unsigned int order () const
│ │ │ │ +
96 {
│ │ │ │ +
97 return 1;
│ │ │ │ +
98 }
│ │ │ │ +
│ │ │ │ +
99
│ │ │ │ +
100 private:
│ │ │ │ +
101
│ │ │ │ +
102 // Signs of the edge normals
│ │ │ │ +
103 std::array<R,3> sign_;
│ │ │ │ +
104 };
│ │ │ │ +
│ │ │ │ +
105}
│ │ │ │ +
106#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
Linear Lagrange functions enriched with an element bubble function.
Definition simplexp1bubble.hh:45
│ │ │ │ -
const LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition simplexp1bubble.hh:73
│ │ │ │ -
SimplexP1BubbleLocalBasis< D, R, dim > LocalBasisType
Type of the local basis.
Definition simplexp1bubble.hh:48
│ │ │ │ -
const LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition simplexp1bubble.hh:67
│ │ │ │ -
const LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition simplexp1bubble.hh:61
│ │ │ │ -
SimplexP1BubbleLocalCoefficients< dim > LocalCoefficientsType
Type of the local coefficients.
Definition simplexp1bubble.hh:51
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns the number of shape functions in this finite-element.
Definition simplexp1bubble.hh:79
│ │ │ │ -
SimplexP1BubbleLocalInterpolation< LocalBasisType > LocalInterpolationType
Type of the local interpolation.
Definition simplexp1bubble.hh:54
│ │ │ │ -
static constexpr GeometryType type() noexcept
Returns the type of the geometry the finite-element is attached to.
Definition simplexp1bubble.hh:85
│ │ │ │ -
P1 basis in dim-d enriched by an (order dim+1) element bubble function.
Definition enriched/simplexp1bubble/localbasis.hh:35
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:55
│ │ │ │ -
The Local keys associated to the dim-d local basis functions.
Definition enriched/simplexp1bubble/localcoefficients.hh:24
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition raviartthomas02dlocalbasis.hh:27
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas02dlocalbasis.hh:95
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas02dlocalbasis.hh:57
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas02dlocalbasis.hh:30
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas02dlocalbasis.hh:46
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas02dlocalbasis.hh:40
│ │ │ │ +
RT02DLocalBasis(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas02dlocalbasis.hh:33
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas02dlocalbasis.hh:69
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,133 +1,149 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ -simplexp1bubble.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ +raviartthomas02dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ +5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -43 template │ │ │ │ │ -_4_4 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -45 { │ │ │ │ │ -46 public: │ │ │ │ │ -_4_8 using _L_o_c_a_l_B_a_s_i_s_T_y_p_e = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>; │ │ │ │ │ -49 │ │ │ │ │ -_5_1 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>; │ │ │ │ │ -52 │ │ │ │ │ -_5_4 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e = │ │ │ │ │ -_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_>; │ │ │ │ │ -55 │ │ │ │ │ -_5_7 using _T_r_a_i_t_s = │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_,_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e_>; │ │ │ │ │ -58 │ │ │ │ │ -59 │ │ │ │ │ -_6_1 const _L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +27 { │ │ │ │ │ +28 public: │ │ │ │ │ +29 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_3 _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<3> s = 0) │ │ │ │ │ +34 { │ │ │ │ │ +35 for (int i=0; i<3; i++) │ │ │ │ │ +36 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ +41 { │ │ │ │ │ +42 return 3; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +47 std::vector& out) const │ │ │ │ │ +48 { │ │ │ │ │ +49 out.resize(3); │ │ │ │ │ +50 out[0] = {sign_[0]*in[0], sign_[0]*(in[1]-D(1))}; │ │ │ │ │ +51 out[1] = {sign_[1]*(in[0]-D(1)), sign_[1]*in[1]}; │ │ │ │ │ +52 out[2] = {sign_[2]*in[0], sign_[2]*in[1]}; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +56 inline void │ │ │ │ │ +_5_7 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +58 std::vector& out) const // return value │ │ │ │ │ +59 { │ │ │ │ │ +60 out.resize(3); │ │ │ │ │ +61 for (int i=0; i<3; i++) │ │ │ │ │ 62 { │ │ │ │ │ -63 return basis_; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_7 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -68 { │ │ │ │ │ -69 return coefficients_; │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -_7_3 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -74 { │ │ │ │ │ -75 return interpolation_; │ │ │ │ │ -76 } │ │ │ │ │ -77 │ │ │ │ │ -_7_9 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -80 { │ │ │ │ │ -81 return _L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_s_i_z_e(); │ │ │ │ │ -82 } │ │ │ │ │ -83 │ │ │ │ │ -_8_5 static constexpr GeometryType _t_y_p_e () noexcept │ │ │ │ │ -86 { │ │ │ │ │ -87 return GeometryTypes::simplex(dim); │ │ │ │ │ -88 } │ │ │ │ │ -89 │ │ │ │ │ -90 private: │ │ │ │ │ -91 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_{}; │ │ │ │ │ -92 [[no_unique_address]] _L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_{}; │ │ │ │ │ -93 [[no_unique_address]] _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_{}; │ │ │ │ │ -94 }; │ │ │ │ │ -95 │ │ │ │ │ -96} // end namespace Dune │ │ │ │ │ -97 │ │ │ │ │ -98#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +63 out[i][0] = {sign_[i], 0}; │ │ │ │ │ +64 out[i][1] = { 0, sign_[i]}; │ │ │ │ │ +65 } │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +70 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +71 std::vector& out) const // return value │ │ │ │ │ +72 { │ │ │ │ │ +73 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +74 if (totalOrder == 0) { │ │ │ │ │ +75 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +76 } else if (totalOrder == 1) { │ │ │ │ │ +77 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +78 out.resize(_s_i_z_e()); │ │ │ │ │ +79 │ │ │ │ │ +80 for (int i=0; i<3; i++) │ │ │ │ │ +81 { │ │ │ │ │ +82 out[i][direction] = sign_[i]; │ │ │ │ │ +83 out[i][1-direction] = 0; │ │ │ │ │ +84 } │ │ │ │ │ +85 } else { │ │ │ │ │ +86 out.resize(_s_i_z_e()); │ │ │ │ │ +87 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +88 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ +89 out[i][j] = 0; │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +92 } │ │ │ │ │ +93 │ │ │ │ │ +_9_5 unsigned int _o_r_d_e_r () const │ │ │ │ │ +96 { │ │ │ │ │ +97 return 1; │ │ │ │ │ +98 } │ │ │ │ │ +99 │ │ │ │ │ +100 private: │ │ │ │ │ +101 │ │ │ │ │ +102 // Signs of the edge normals │ │ │ │ │ +103 std::array sign_; │ │ │ │ │ +104 }; │ │ │ │ │ +105} │ │ │ │ │ +106#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -SimplexP1BubbleLocalBasis< D, R, dim > LocalBasisType │ │ │ │ │ -Type of the local basis. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -SimplexP1BubbleLocalCoefficients< dim > LocalCoefficientsType │ │ │ │ │ -Type of the local coefficients. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns the number of shape functions in this finite-element. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -SimplexP1BubbleLocalInterpolation< LocalBasisType > LocalInterpolationType │ │ │ │ │ -Type of the local interpolation. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() noexcept │ │ │ │ │ -Returns the type of the geometry the finite-element is attached to. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -The Local keys associated to the dim-d local basis functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_o_c_a_l_B_a_s_i_s_T_y_p_e_ _> │ │ │ │ │ -_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT02DLocalBasis(std::bitset< 3 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:69 │ │ │ │ │ _l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualmortarbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualmortarbasis.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas02dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/dualmortarbasis/dualp1.hh>
│ │ │ │ -#include <dune/localfunctions/dualmortarbasis/dualq1.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT02DLocalCoefficients
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -dualmortarbasis.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_p_1_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_q_1_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00140_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualmortarbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,34 +70,78 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualmortarbasis.hh
│ │ │ │ +
raviartthomas02dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ -
10
│ │ │ │ -
11#endif // #ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i=0; i<3; i++)
│ │ │ │ +
31 li[i] = LocalKey(i,1,0);
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
35 std::size_t size () const
│ │ │ │ +
36 {
│ │ │ │ +
37 return 3;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
42 {
│ │ │ │ +
43 return li[i];
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector<LocalKey> li;
│ │ │ │ +
48 };
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
50}
│ │ │ │ +
51
│ │ │ │ +
52#endif
│ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition raviartthomas02dlocalcoefficients.hh:25
│ │ │ │ +
RT02DLocalCoefficients()
Standard constructor.
Definition raviartthomas02dlocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas02dlocalcoefficients.hh:41
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas02dlocalcoefficients.hh:35
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,75 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -dualmortarbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ +raviartthomas02dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_p_1_._h_h> │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_q_1_._h_h> │ │ │ │ │ -10 │ │ │ │ │ -11#endif // #ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ -_d_u_a_l_p_1_._h_h │ │ │ │ │ -_d_u_a_l_q_1_._h_h │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 │ │ │ │ │ +_2_4 class _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(3) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i=0; i<3; i++) │ │ │ │ │ +31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ +36 { │ │ │ │ │ +37 return 3; │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +42 { │ │ │ │ │ +43 return li[i]; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector li; │ │ │ │ │ +48 }; │ │ │ │ │ +49 │ │ │ │ │ +50} │ │ │ │ │ +51 │ │ │ │ │ +52#endif │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT02DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:35 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas4cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>
│ │ │ │ -#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT4Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference triangle. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,13 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -brezzidouglasmarini.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00143_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: brezzidouglasmarini.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,35 +70,173 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasmarini.hh
│ │ │ │ +
raviartthomas4cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8// BDM implementations with compile-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │
11
│ │ │ │ -
12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
28
│ │ │ │ +
│ │ │ │ +
34 RT4Cube2DLocalInterpolation (unsigned int s = 0)
│ │ │ │ +
35 {
│ │ │ │ +
36 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ +
37 if (s & 1)
│ │ │ │ +
38 {
│ │ │ │ +
39 sign0 *= -1.0;
│ │ │ │ +
40 }
│ │ │ │ +
41 if (s & 2)
│ │ │ │ +
42 {
│ │ │ │ +
43 sign1 *= -1.0;
│ │ │ │ +
44 }
│ │ │ │ +
45 if (s & 4)
│ │ │ │ +
46 {
│ │ │ │ +
47 sign2 *= -1.0;
│ │ │ │ +
48 }
│ │ │ │ +
49 if (s & 8)
│ │ │ │ +
50 {
│ │ │ │ +
51 sign3 *= -1.0;
│ │ │ │ +
52 }
│ │ │ │ +
53
│ │ │ │ +
54 n0[0] = -1.0;
│ │ │ │ +
55 n0[1] = 0.0;
│ │ │ │ +
56 n1[0] = 1.0;
│ │ │ │ +
57 n1[1] = 0.0;
│ │ │ │ +
58 n2[0] = 0.0;
│ │ │ │ +
59 n2[1] = -1.0;
│ │ │ │ +
60 n3[0] = 0.0;
│ │ │ │ +
61 n3[1] = 1.0;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
72 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
73 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
74 {
│ │ │ │ +
75 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
76 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
77 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
78
│ │ │ │ +
79 out.resize(60);
│ │ │ │ +
80 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
81
│ │ │ │ +
82 const int qOrder = 12;
│ │ │ │ +
83 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
84
│ │ │ │ +
85 for (typename QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ +
86 {
│ │ │ │ +
87 Scalar qPos = it->position();
│ │ │ │ +
88 typename LB::Traits::DomainType localPos;
│ │ │ │ +
89
│ │ │ │ +
90 localPos[0] = 0.0;
│ │ │ │ +
91 localPos[1] = qPos;
│ │ │ │ +
92 auto y = f(localPos);
│ │ │ │ +
93 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0;
│ │ │ │ +
94 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
95 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign0;
│ │ │ │ +
96 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*it->weight();
│ │ │ │ +
97 out[4] += (y[0]*n0[0] + y[1]*n0[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign0;
│ │ │ │ +
98
│ │ │ │ +
99 localPos[0] = 1.0;
│ │ │ │ +
100 localPos[1] = qPos;
│ │ │ │ +
101 y = f(localPos);
│ │ │ │ +
102 out[5] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1;
│ │ │ │ +
103 out[6] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
104 out[7] += (y[0]*n1[0] + y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign1;
│ │ │ │ +
105 out[8] += (y[0]*n1[0] + y[1]*n1[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*it->weight();
│ │ │ │ +
106 out[9] += (y[0]*n1[0] + y[1]*n1[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign1;
│ │ │ │ +
107
│ │ │ │ +
108 localPos[0] = qPos;
│ │ │ │ +
109 localPos[1] = 0.0;
│ │ │ │ +
110 y = f(localPos);
│ │ │ │ +
111 out[10] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2;
│ │ │ │ +
112 out[11] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ +
113 out[12] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign2;
│ │ │ │ +
114 out[13] += (y[0]*n2[0] + y[1]*n2[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*it->weight();
│ │ │ │ +
115 out[14] += (y[0]*n2[0] + y[1]*n2[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign2;
│ │ │ │ +
116
│ │ │ │ +
117 localPos[0] = qPos;
│ │ │ │ +
118 localPos[1] = 1.0;
│ │ │ │ +
119 y = f(localPos);
│ │ │ │ +
120 out[15] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3;
│ │ │ │ +
121 out[16] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ +
122 out[17] += (y[0]*n3[0] + y[1]*n3[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign3;
│ │ │ │ +
123 out[18] += (y[0]*n3[0] + y[1]*n3[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*it->weight();
│ │ │ │ +
124 out[19] += (y[0]*n3[0] + y[1]*n3[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign3;
│ │ │ │ +
125 }
│ │ │ │ +
126
│ │ │ │ +
127 const QuadratureRule<Vector,2>& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
128
│ │ │ │ +
129 for (typename QuadratureRule<Vector,2>::const_iterator it = rule2.begin();
│ │ │ │ +
130 it != rule2.end(); ++it)
│ │ │ │ +
131 {
│ │ │ │ +
132 FieldVector<double,2> qPos = it->position();
│ │ │ │ +
133
│ │ │ │ +
134 auto y = f(qPos);
│ │ │ │ +
135 std::vector<std::vector<double> > l(2,std::vector<double> (5));
│ │ │ │ +
136 l[0][0]=1.0;
│ │ │ │ +
137 l[1][0]=1.0;
│ │ │ │ +
138 l[0][1]=2.0*qPos[0]-1.0;
│ │ │ │ +
139 l[1][1]=2.0*qPos[1]-1.0;
│ │ │ │ +
140 l[0][2]=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0;
│ │ │ │ +
141 l[1][2]=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0;
│ │ │ │ +
142 l[0][3]=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] - 1.0;
│ │ │ │ +
143 l[1][3]=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] - 1.0;
│ │ │ │ +
144 l[0][4]=1.0-20.0*qPos[0]+90.0*pow(qPos[0],2)-140.0*pow(qPos[0],3)+70.0*pow(qPos[0],4);
│ │ │ │ +
145 l[1][4]=1.0-20.0*qPos[1]+90.0*pow(qPos[1],2)-140.0*pow(qPos[1],3)+70.0*pow(qPos[1],4);
│ │ │ │ +
146
│ │ │ │ +
147 for (int i=0;i<4;i++)
│ │ │ │ +
148 for (int j=0;j<5;j++)
│ │ │ │ +
149 out[20+i*5+j] +=y[0]*l[0][i]*l[1][j]*it->weight();
│ │ │ │ +
150
│ │ │ │ +
151 for (int i=0;i<5;i++)
│ │ │ │ +
152 for (int j=0;j<4;j++)
│ │ │ │ +
153 out[40+i*4+j] +=y[1]*l[0][i]*l[1][j]*it->weight();
│ │ │ │ +
154 }
│ │ │ │ +
155 }
│ │ │ │ +
│ │ │ │ +
156
│ │ │ │ +
157 private:
│ │ │ │ +
158 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3;
│ │ │ │ +
159 typename LB::Traits::DomainType n0, n1, n2, n3;
│ │ │ │ +
160 };
│ │ │ │ +
│ │ │ │ +
161}
│ │ │ │ +
162
│ │ │ │ +
163#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas4cube2dlocalinterpolation.hh:25
│ │ │ │ +
RT4Cube2DLocalInterpolation(unsigned int s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2dlocalinterpolation.hh:34
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas4cube2dlocalinterpolation.hh:73
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,187 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -brezzidouglasmarini.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ +raviartthomas4cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8// BDM implementations with compile-time order │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h> │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_/ │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ -12#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASMARINI_HH │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_c_u_b_e_._h_h │ │ │ │ │ -_b_r_e_z_z_i_d_o_u_g_l_a_s_m_a_r_i_n_i_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +28 │ │ │ │ │ +_3_4 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s = 0) │ │ │ │ │ +35 { │ │ │ │ │ +36 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ +37 if (s & 1) │ │ │ │ │ +38 { │ │ │ │ │ +39 sign0 *= -1.0; │ │ │ │ │ +40 } │ │ │ │ │ +41 if (s & 2) │ │ │ │ │ +42 { │ │ │ │ │ +43 sign1 *= -1.0; │ │ │ │ │ +44 } │ │ │ │ │ +45 if (s & 4) │ │ │ │ │ +46 { │ │ │ │ │ +47 sign2 *= -1.0; │ │ │ │ │ +48 } │ │ │ │ │ +49 if (s & 8) │ │ │ │ │ +50 { │ │ │ │ │ +51 sign3 *= -1.0; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +54 n0[0] = -1.0; │ │ │ │ │ +55 n0[1] = 0.0; │ │ │ │ │ +56 n1[0] = 1.0; │ │ │ │ │ +57 n1[1] = 0.0; │ │ │ │ │ +58 n2[0] = 0.0; │ │ │ │ │ +59 n2[1] = -1.0; │ │ │ │ │ +60 n3[0] = 0.0; │ │ │ │ │ +61 n3[1] = 1.0; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +72 template │ │ │ │ │ +_7_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +74 { │ │ │ │ │ +75 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +76 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +77 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +78 │ │ │ │ │ +79 out.resize(60); │ │ │ │ │ +80 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +81 │ │ │ │ │ +82 const int qOrder = 12; │ │ │ │ │ +83 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(1), qOrder); │ │ │ │ │ +84 │ │ │ │ │ +85 for (typename QuadratureRule::const_iterator it=rule.begin(); │ │ │ │ │ +it!=rule.end(); ++it) │ │ │ │ │ +86 { │ │ │ │ │ +87 Scalar qPos = it->position(); │ │ │ │ │ +88 typename LB::Traits::DomainType localPos; │ │ │ │ │ +89 │ │ │ │ │ +90 localPos[0] = 0.0; │ │ │ │ │ +91 localPos[1] = qPos; │ │ │ │ │ +92 auto y = f(localPos); │ │ │ │ │ +93 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0; │ │ │ │ │ +94 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +95 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign0; │ │ │ │ │ +96 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + │ │ │ │ │ +12.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +97 out[4] += (y[0]*n0[0] + y[1]*n0[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ +140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign0; │ │ │ │ │ +98 │ │ │ │ │ +99 localPos[0] = 1.0; │ │ │ │ │ +100 localPos[1] = qPos; │ │ │ │ │ +101 y = f(localPos); │ │ │ │ │ +102 out[5] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1; │ │ │ │ │ +103 out[6] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +104 out[7] += (y[0]*n1[0] + y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign1; │ │ │ │ │ +105 out[8] += (y[0]*n1[0] + y[1]*n1[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos │ │ │ │ │ +- 12.0*qPos + 1.0)*it->weight(); │ │ │ │ │ +106 out[9] += (y[0]*n1[0] + y[1]*n1[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ +140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign1; │ │ │ │ │ +107 │ │ │ │ │ +108 localPos[0] = qPos; │ │ │ │ │ +109 localPos[1] = 0.0; │ │ │ │ │ +110 y = f(localPos); │ │ │ │ │ +111 out[10] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2; │ │ │ │ │ +112 out[11] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ +113 out[12] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign2; │ │ │ │ │ +114 out[13] += (y[0]*n2[0] + y[1]*n2[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos │ │ │ │ │ +- 12.0*qPos + 1.0)*it->weight(); │ │ │ │ │ +115 out[14] += (y[0]*n2[0] + y[1]*n2[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ +140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign2; │ │ │ │ │ +116 │ │ │ │ │ +117 localPos[0] = qPos; │ │ │ │ │ +118 localPos[1] = 1.0; │ │ │ │ │ +119 y = f(localPos); │ │ │ │ │ +120 out[15] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3; │ │ │ │ │ +121 out[16] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +122 out[17] += (y[0]*n3[0] + y[1]*n3[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ +>weight()*sign3; │ │ │ │ │ +123 out[18] += (y[0]*n3[0] + y[1]*n3[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos │ │ │ │ │ ++ 12.0*qPos - 1.0)*it->weight(); │ │ │ │ │ +124 out[19] += (y[0]*n3[0] + y[1]*n3[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ +140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign3; │ │ │ │ │ +125 } │ │ │ │ │ +126 │ │ │ │ │ +127 const QuadratureRule& rule2 = QuadratureRules::rule │ │ │ │ │ +(GeometryTypes::cube(2), qOrder); │ │ │ │ │ +128 │ │ │ │ │ +129 for (typename QuadratureRule::const_iterator it = rule2.begin(); │ │ │ │ │ +130 it != rule2.end(); ++it) │ │ │ │ │ +131 { │ │ │ │ │ +132 FieldVector qPos = it->position(); │ │ │ │ │ +133 │ │ │ │ │ +134 auto y = f(qPos); │ │ │ │ │ +135 std::vector > l(2,std::vector (5)); │ │ │ │ │ +136 l[0][0]=1.0; │ │ │ │ │ +137 l[1][0]=1.0; │ │ │ │ │ +138 l[0][1]=2.0*qPos[0]-1.0; │ │ │ │ │ +139 l[1][1]=2.0*qPos[1]-1.0; │ │ │ │ │ +140 l[0][2]=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0; │ │ │ │ │ +141 l[1][2]=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0; │ │ │ │ │ +142 l[0][3]=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] │ │ │ │ │ +- 1.0; │ │ │ │ │ +143 l[1][3]=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] │ │ │ │ │ +- 1.0; │ │ │ │ │ +144 l[0][4]=1.0-20.0*qPos[0]+90.0*pow(qPos[0],2)-140.0*pow(qPos[0],3)+70.0*pow │ │ │ │ │ +(qPos[0],4); │ │ │ │ │ +145 l[1][4]=1.0-20.0*qPos[1]+90.0*pow(qPos[1],2)-140.0*pow(qPos[1],3)+70.0*pow │ │ │ │ │ +(qPos[1],4); │ │ │ │ │ +146 │ │ │ │ │ +147 for (int i=0;i<4;i++) │ │ │ │ │ +148 for (int j=0;j<5;j++) │ │ │ │ │ +149 out[20+i*5+j] +=y[0]*l[0][i]*l[1][j]*it->weight(); │ │ │ │ │ +150 │ │ │ │ │ +151 for (int i=0;i<5;i++) │ │ │ │ │ +152 for (int j=0;j<4;j++) │ │ │ │ │ +153 out[40+i*4+j] +=y[1]*l[0][i]*l[1][j]*it->weight(); │ │ │ │ │ +154 } │ │ │ │ │ +155 } │ │ │ │ │ +156 │ │ │ │ │ +157 private: │ │ │ │ │ +158 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3; │ │ │ │ │ +159 typename LB::Traits::DomainType n0, n1, n2, n3; │ │ │ │ │ +160 }; │ │ │ │ │ +161} │ │ │ │ │ +162 │ │ │ │ │ +163#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT4Cube2DLocalInterpolation(unsigned int s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:73 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannacherturek2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas4cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RannacherTurek2DLocalBasis< D, R >
class  Dune::RT4Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-4 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannacherturek2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-4 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00146_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,159 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek2dlocalbasis.hh
│ │ │ │ +
raviartthomas4cube2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ +
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
22 template< class D, class R >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ - │ │ │ │ -
26 R, 1, FieldVector< R, 1 >,
│ │ │ │ -
27 FieldMatrix< R, 1, 2 > > Traits;
│ │ │ │ -
28
│ │ │ │ -
│ │ │ │ -
30 unsigned int size () const
│ │ │ │ -
31 {
│ │ │ │ -
32 return 4;
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
36 inline void evaluateFunction ( const typename Traits::DomainType &in,
│ │ │ │ -
37 std::vector< typename Traits::RangeType > &out ) const
│ │ │ │ -
38 {
│ │ │ │ -
39 out.resize(4);
│ │ │ │ -
40 typename Traits::DomainFieldType qbase = in[0]*in[0]-in[1]*in[1];
│ │ │ │ -
41 out[0] = .75 - 2*in[0] + in[1] + qbase;
│ │ │ │ -
42 out[1] = -.25 + in[1] + qbase;
│ │ │ │ -
43 out[2] = .75 + in[0] - 2*in[1] - qbase;
│ │ │ │ -
44 out[3] = -.25 + in[0] - qbase;
│ │ │ │ -
45 }
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
│ │ │ │ -
48 inline void evaluateJacobian ( const typename Traits::DomainType &in,
│ │ │ │ -
49 std::vector< typename Traits::JacobianType > &out ) const
│ │ │ │ -
50 {
│ │ │ │ -
51 out.resize(4);
│ │ │ │ -
52
│ │ │ │ -
53 // see http://www.dune-project.org/doc/doxygen/html/classDune_1_1C1LocalBasisInterface.html#d6f8368f8aa43439cc7ef10419f6e2ea
│ │ │ │ -
54 // out[i][j][k] = d_k \phi^i_j , where \phi^i_j is the j'th component of the i'th shape function.
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24
│ │ │ │ +
25 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ +
30 {
│ │ │ │ +
31 li[5*i] = LocalKey(i,1,0);
│ │ │ │ +
32 li[5*i + 1] = LocalKey(i,1,1);
│ │ │ │ +
33 li[5*i + 2] = LocalKey(i,1,2);
│ │ │ │ +
34 li[5*i + 3] = LocalKey(i,1,3);
│ │ │ │ +
35 li[5*i + 4] = LocalKey(i,1,4);
│ │ │ │ +
36 }
│ │ │ │ +
37
│ │ │ │ +
38 for (std::size_t i=0; i<40; i++)
│ │ │ │ +
39 {
│ │ │ │ +
40 li[20 + i] = LocalKey(0,0,i);
│ │ │ │ +
41 }
│ │ │ │ +
42 }
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
45 std::size_t size () const
│ │ │ │ +
46 {
│ │ │ │ +
47 return 60;
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
51 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
52 {
│ │ │ │ +
53 return li[i];
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │
55
│ │ │ │ -
56 out[0][0][0] = -2 + 2*in[0]; out[0][0][1] = 1 - 2*in[1];
│ │ │ │ -
57 out[1][0][0] = 2*in[0]; out[1][0][1] = 1 - 2*in[1];
│ │ │ │ -
58 out[2][0][0] = 1 - 2*in[0]; out[2][0][1] = -2 + 2*in[1];
│ │ │ │ -
59 out[3][0][0] = 1 - 2*in[0]; out[3][0][1] = 2*in[1];
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
63 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
64 const typename Traits::DomainType& in, // position
│ │ │ │ -
65 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
66 {
│ │ │ │ -
67 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
68 if (totalOrder == 0) {
│ │ │ │ -
69 evaluateFunction(in, out);
│ │ │ │ -
70 } else if (totalOrder == 1) {
│ │ │ │ -
71 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
72 out.resize(size());
│ │ │ │ -
73
│ │ │ │ -
74 switch (direction) {
│ │ │ │ -
75 case 0:
│ │ │ │ -
76 out[0] = -2 + 2*in[0];
│ │ │ │ -
77 out[1] = 2*in[0];
│ │ │ │ -
78 out[2] = 1 - 2*in[0];
│ │ │ │ -
79 out[3] = 1 - 2*in[0];
│ │ │ │ -
80 break;
│ │ │ │ -
81 case 1:
│ │ │ │ -
82 out[0] = 1 - 2*in[1];
│ │ │ │ -
83 out[1] = 1 - 2*in[1];
│ │ │ │ -
84 out[2] = -2 + 2*in[1];
│ │ │ │ -
85 out[3] = 2*in[1];
│ │ │ │ -
86 break;
│ │ │ │ -
87 default:
│ │ │ │ -
88 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
89 }
│ │ │ │ -
90 } else if (totalOrder == 2) {
│ │ │ │ -
91 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 2));
│ │ │ │ -
92 out.resize(size());
│ │ │ │ -
93
│ │ │ │ -
94 switch (direction) {
│ │ │ │ -
95 case 0:
│ │ │ │ -
96 out[0] = out[1] = 2;
│ │ │ │ -
97 out[2] = out[3] =-2;
│ │ │ │ -
98 break;
│ │ │ │ -
99 case 1:
│ │ │ │ -
100 out[0] = out[1] =-2;
│ │ │ │ -
101 out[2] = out[3] = 2;
│ │ │ │ -
102 break;
│ │ │ │ -
103 default:
│ │ │ │ -
104 out[0] = out[1] = out[2] = out[3] = 0;
│ │ │ │ -
105 break;
│ │ │ │ -
106 }
│ │ │ │ -
107 } else {
│ │ │ │ -
108 out[0] = out[1] = out[2] = out[3] = 0;
│ │ │ │ -
109 }
│ │ │ │ -
110 }
│ │ │ │ -
│ │ │ │ -
111
│ │ │ │ -
│ │ │ │ -
113 unsigned int order () const
│ │ │ │ -
114 {
│ │ │ │ -
115 // must be 2 here since it contains x^2 and x^2
│ │ │ │ -
116 return 2;
│ │ │ │ -
117 }
│ │ │ │ -
│ │ │ │ -
118 };
│ │ │ │ -
│ │ │ │ -
119
│ │ │ │ -
120} //namespace Dune
│ │ │ │ -
121
│ │ │ │ -
122#endif // #ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ +
56 private:
│ │ │ │ +
57 std::vector<LocalKey> li;
│ │ │ │ +
58 };
│ │ │ │ +
│ │ │ │ +
59}
│ │ │ │ +
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ -
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ -
LocalBasisTraits< D, 2, FieldVector< D, 2 >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, 2 > > Traits
Definition rannacherturek2dlocalbasis.hh:27
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition rannacherturek2dlocalbasis.hh:63
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition rannacherturek2dlocalbasis.hh:30
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
evaluate all shape functions
Definition rannacherturek2dlocalbasis.hh:36
│ │ │ │ -
unsigned int order() const
polynomial order of the shape functions
Definition rannacherturek2dlocalbasis.hh:113
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
evaluate jacobian of all shape functions
Definition rannacherturek2dlocalbasis.hh:48
│ │ │ │ - │ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for Raviart-Thomas-4 elements on quadrilaterals.
Definition raviartthomas4cube2dlocalcoefficients.hh:23
│ │ │ │ +
RT4Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas4cube2dlocalcoefficients.hh:27
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas4cube2dlocalcoefficients.hh:45
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas4cube2dlocalcoefficients.hh:51
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,174 +1,83 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d │ │ │ │ │ -rannacherturek2dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ +raviartthomas4cube2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -22 template< class D, class R > │ │ │ │ │ -_2_3 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -24 { │ │ │ │ │ -25 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _2_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _2_ _>, │ │ │ │ │ -26 R, 1, FieldVector< R, 1 >, │ │ │ │ │ -_2_7 FieldMatrix< R, 1, 2 > > _T_r_a_i_t_s; │ │ │ │ │ -28 │ │ │ │ │ -_3_0 unsigned int _s_i_z_e () const │ │ │ │ │ -31 { │ │ │ │ │ -32 return 4; │ │ │ │ │ -33 } │ │ │ │ │ -34 │ │ │ │ │ -_3_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ -37 std::vector< typename Traits::RangeType > &out ) const │ │ │ │ │ -38 { │ │ │ │ │ -39 out.resize(4); │ │ │ │ │ -40 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e qbase = in[0]*in[0]-in[1]*in[1]; │ │ │ │ │ -41 out[0] = .75 - 2*in[0] + in[1] + qbase; │ │ │ │ │ -42 out[1] = -.25 + in[1] + qbase; │ │ │ │ │ -43 out[2] = .75 + in[0] - 2*in[1] - qbase; │ │ │ │ │ -44 out[3] = -.25 + in[0] - qbase; │ │ │ │ │ -45 } │ │ │ │ │ -46 │ │ │ │ │ -_4_8 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ -49 std::vector< typename Traits::JacobianType > &out ) const │ │ │ │ │ -50 { │ │ │ │ │ -51 out.resize(4); │ │ │ │ │ -52 │ │ │ │ │ -53 // see http://www.dune-project.org/doc/doxygen/html/ │ │ │ │ │ -classDune_1_1C1LocalBasisInterface.html#d6f8368f8aa43439cc7ef10419f6e2ea │ │ │ │ │ -54 // out[i][j][k] = d_k \phi^i_j , where \phi^i_j is the j'th component of the │ │ │ │ │ -i'th shape function. │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +_2_2 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +23 { │ │ │ │ │ +24 │ │ │ │ │ +25 public: │ │ │ │ │ +_2_7 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(60) │ │ │ │ │ +28 { │ │ │ │ │ +29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ +30 { │ │ │ │ │ +31 li[5*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 li[5*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +33 li[5*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +34 li[5*i + 3] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ +35 li[5*i + 4] = _L_o_c_a_l_K_e_y(i,1,4); │ │ │ │ │ +36 } │ │ │ │ │ +37 │ │ │ │ │ +38 for (std::size_t i=0; i<40; i++) │ │ │ │ │ +39 { │ │ │ │ │ +40 li[20 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +41 } │ │ │ │ │ +42 } │ │ │ │ │ +43 │ │ │ │ │ +_4_5 std::size_t _s_i_z_e () const │ │ │ │ │ +46 { │ │ │ │ │ +47 return 60; │ │ │ │ │ +48 } │ │ │ │ │ +49 │ │ │ │ │ +_5_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +52 { │ │ │ │ │ +53 return li[i]; │ │ │ │ │ +54 } │ │ │ │ │ 55 │ │ │ │ │ -56 out[0][0][0] = -2 + 2*in[0]; out[0][0][1] = 1 - 2*in[1]; │ │ │ │ │ -57 out[1][0][0] = 2*in[0]; out[1][0][1] = 1 - 2*in[1]; │ │ │ │ │ -58 out[2][0][0] = 1 - 2*in[0]; out[2][0][1] = -2 + 2*in[1]; │ │ │ │ │ -59 out[3][0][0] = 1 - 2*in[0]; out[3][0][1] = 2*in[1]; │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -64 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -65 std::vector& out) const // return value │ │ │ │ │ -66 { │ │ │ │ │ -67 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -68 if (totalOrder == 0) { │ │ │ │ │ -69 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -70 } else if (totalOrder == 1) { │ │ │ │ │ -71 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -72 out.resize(_s_i_z_e()); │ │ │ │ │ -73 │ │ │ │ │ -74 switch (direction) { │ │ │ │ │ -75 case 0: │ │ │ │ │ -76 out[0] = -2 + 2*in[0]; │ │ │ │ │ -77 out[1] = 2*in[0]; │ │ │ │ │ -78 out[2] = 1 - 2*in[0]; │ │ │ │ │ -79 out[3] = 1 - 2*in[0]; │ │ │ │ │ -80 break; │ │ │ │ │ -81 case 1: │ │ │ │ │ -82 out[0] = 1 - 2*in[1]; │ │ │ │ │ -83 out[1] = 1 - 2*in[1]; │ │ │ │ │ -84 out[2] = -2 + 2*in[1]; │ │ │ │ │ -85 out[3] = 2*in[1]; │ │ │ │ │ -86 break; │ │ │ │ │ -87 default: │ │ │ │ │ -88 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -89 } │ │ │ │ │ -90 } else if (totalOrder == 2) { │ │ │ │ │ -91 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 2)); │ │ │ │ │ -92 out.resize(_s_i_z_e()); │ │ │ │ │ -93 │ │ │ │ │ -94 switch (direction) { │ │ │ │ │ -95 case 0: │ │ │ │ │ -96 out[0] = out[1] = 2; │ │ │ │ │ -97 out[2] = out[3] =-2; │ │ │ │ │ -98 break; │ │ │ │ │ -99 case 1: │ │ │ │ │ -100 out[0] = out[1] =-2; │ │ │ │ │ -101 out[2] = out[3] = 2; │ │ │ │ │ -102 break; │ │ │ │ │ -103 default: │ │ │ │ │ -104 out[0] = out[1] = out[2] = out[3] = 0; │ │ │ │ │ -105 break; │ │ │ │ │ -106 } │ │ │ │ │ -107 } else { │ │ │ │ │ -108 out[0] = out[1] = out[2] = out[3] = 0; │ │ │ │ │ -109 } │ │ │ │ │ -110 } │ │ │ │ │ -111 │ │ │ │ │ -_1_1_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ -114 { │ │ │ │ │ -115 // must be 2 here since it contains x^2 and x^2 │ │ │ │ │ -116 return 2; │ │ │ │ │ -117 } │ │ │ │ │ -118 }; │ │ │ │ │ -119 │ │ │ │ │ -120} //namespace Dune │ │ │ │ │ -121 │ │ │ │ │ -122#endif // #ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ +56 private: │ │ │ │ │ +57 std::vector li; │ │ │ │ │ +58 }; │ │ │ │ │ +59} │ │ │ │ │ +60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ -DF DomainFieldType │ │ │ │ │ -Export type for domain field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, FieldVector< D, 2 >, R, 1, FieldVector< R, 1 >, │ │ │ │ │ -FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -evaluate all shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -polynomial order of the shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:113 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -evaluate jacobian of all shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:48 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-4 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT4Cube2DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:51 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannacherturek3dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas4cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RannacherTurek3DLocalBasis< D, R >
class  Dune::RT4Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannacherturek3dlocalbasis.hh File Reference │ │ │ │ │ +raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00149_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,167 +70,814 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek3dlocalbasis.hh
│ │ │ │ +
raviartthomas4cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ +
8#include <bitset>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │
12#include <dune/common/fmatrix.hh>
│ │ │ │
13
│ │ │ │ - │ │ │ │ +
14#include "../../common/localbasis.hh"
│ │ │ │
15
│ │ │ │
16namespace Dune
│ │ │ │
17{
│ │ │ │ -
18
│ │ │ │ -
22 template< class D, class R >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25 static const int coefficients[ 6 ][ 6 ];
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ - │ │ │ │ -
29 R, 1, FieldVector< R, 1 >,
│ │ │ │ -
30 FieldMatrix< R, 1, 3 > > Traits;
│ │ │ │ -
31
│ │ │ │ -
│ │ │ │ -
33 unsigned int size () const
│ │ │ │ -
34 {
│ │ │ │ -
35 return 6;
│ │ │ │ -
36 }
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
39 inline void evaluateFunction ( const typename Traits::DomainType &in,
│ │ │ │ -
40 std::vector< typename Traits::RangeType > &out ) const
│ │ │ │ -
41 {
│ │ │ │ -
42 typedef typename Traits::RangeFieldType RangeFieldType;
│ │ │ │ -
43 RangeFieldType y[ 6 ] = { 1, in[ 0 ], in[ 1 ], in[ 2 ],
│ │ │ │ -
44 in[ 0 ]*in[ 0 ] - in[ 1 ]*in[ 1 ],
│ │ │ │ -
45 in[ 1 ]*in[ 1 ] - in[ 2 ]*in[ 2 ] };
│ │ │ │ -
46 out.resize( size() );
│ │ │ │ -
47 for( unsigned int i = 0; i < size(); ++i )
│ │ │ │ -
48 {
│ │ │ │ -
49 out[ i ] = RangeFieldType( 0 );
│ │ │ │ -
50 for( unsigned int j = 0; j < 6; ++j )
│ │ │ │ -
51 out[ i ] += coefficients[ i ][ j ]*y[ j ];
│ │ │ │ -
52 out[ i ] /= RangeFieldType( 3 );
│ │ │ │ -
53 }
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ -
57 inline void evaluateJacobian ( const typename Traits::DomainType &in,
│ │ │ │ -
58 std::vector< typename Traits::JacobianType > &out ) const
│ │ │ │ -
59 {
│ │ │ │ -
60 typedef typename Traits::RangeFieldType RangeFieldType;
│ │ │ │ -
61 RangeFieldType y0[ 5 ] = { 1, 0, 0, 2*in[ 0 ], 0 };
│ │ │ │ -
62 RangeFieldType y1[ 5 ] = { 0, 1, 0, -2*in[ 1 ], 2*in[ 1 ] };
│ │ │ │ -
63 RangeFieldType y2[ 5 ] = { 0, 0, 1, 0, -2*in[ 2 ] };
│ │ │ │ +
27 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ +
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
40 RT4Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
41 {
│ │ │ │ +
42 sign0 = (s[0]) ? -1.0 : 1.0;
│ │ │ │ +
43 sign1 = (s[1]) ? -1.0 : 1.0;
│ │ │ │ +
44 sign2 = (s[2]) ? -1.0 : 1.0;
│ │ │ │ +
45 sign3 = (s[3]) ? -1.0 : 1.0;
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 unsigned int size () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return 60;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
60 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
61 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
62 {
│ │ │ │ +
63 out.resize(60);
│ │ │ │
64
│ │ │ │ -
65 out.resize( size() );
│ │ │ │ -
66 for( unsigned int i = 0; i < size(); ++i )
│ │ │ │ -
67 {
│ │ │ │ -
68 out[ i ] = RangeFieldType( 0 );
│ │ │ │ -
69 for( unsigned int j = 0; j < 5; ++j )
│ │ │ │ -
70 {
│ │ │ │ -
71 out[ i ][ 0 ][ 0 ] += coefficients[ i ][ j+1 ]*y0[ j ];
│ │ │ │ -
72 out[ i ][ 0 ][ 1 ] += coefficients[ i ][ j+1 ]*y1[ j ];
│ │ │ │ -
73 out[ i ][ 0 ][ 2 ] += coefficients[ i ][ j+1 ]*y2[ j ];
│ │ │ │ -
74 }
│ │ │ │ -
75 out[ i ] /= RangeFieldType( 3 );
│ │ │ │ -
76 }
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
80 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
81 const typename Traits::DomainType& in, // position
│ │ │ │ -
82 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
83 {
│ │ │ │ -
84 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
85 if (totalOrder == 0) {
│ │ │ │ -
86 evaluateFunction(in, out);
│ │ │ │ -
87 } else if (totalOrder == 1) {
│ │ │ │ -
88 out.resize(size());
│ │ │ │ -
89 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
90
│ │ │ │ -
91 using RangeFieldType = typename Traits::RangeFieldType;
│ │ │ │ -
92 RangeFieldType y[3][5] = { { 1.0, 0.0, 0.0, 2*in[0], 0.0 },
│ │ │ │ -
93 { 0.0, 1.0, 0.0, -2*in[1], 2*in[1] },
│ │ │ │ -
94 { 0.0, 0.0, 1.0, 0.0, -2*in[2] } };
│ │ │ │ -
95
│ │ │ │ -
96 for (std::size_t i = 0; i < size(); ++i) {
│ │ │ │ -
97 out[i] = RangeFieldType{0};
│ │ │ │ -
98 for (std::size_t j = 0; j < 5; ++j)
│ │ │ │ -
99 out[i] += coefficients[i][j+1] * y[direction][j];
│ │ │ │ -
100 out[i] /= RangeFieldType{3};
│ │ │ │ -
101 }
│ │ │ │ -
102 } else {
│ │ │ │ -
103 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
104 }
│ │ │ │ -
105 }
│ │ │ │ -
│ │ │ │ -
106
│ │ │ │ -
│ │ │ │ -
108 unsigned int order () const
│ │ │ │ -
109 {
│ │ │ │ -
110 return 2;
│ │ │ │ -
111 }
│ │ │ │ -
│ │ │ │ -
112 };
│ │ │ │ -
│ │ │ │ -
113
│ │ │ │ -
114
│ │ │ │ -
115
│ │ │ │ -
116 // RannacherTurek3DLocalBasis::coefficients
│ │ │ │ -
117 // ----------------------------------------
│ │ │ │ -
118
│ │ │ │ -
119 template< class D, class R >
│ │ │ │ -
120 const int RannacherTurek3DLocalBasis< D, R >
│ │ │ │ -
121 ::coefficients[ 6 ][ 6 ] = {{ 2, -7, 2, 2, 4, 2 },
│ │ │ │ -
122 { -1, -1, 2, 2, 4, 2 },
│ │ │ │ -
123 { 2, 2, -7, 2, -2, 2 },
│ │ │ │ -
124 { -1, 2, -1, 2, -2, 2 },
│ │ │ │ -
125 { 2, 2, 2, -7, -2, -4 },
│ │ │ │ -
126 { -1, 2, 2, -1, -2, -4 }};
│ │ │ │ -
127
│ │ │ │ -
128} //namespace Dune
│ │ │ │ -
129
│ │ │ │ -
130#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
65 auto const& x = in[0], y = in[1];
│ │ │ │ +
66
│ │ │ │ +
67 const auto l1_x = 2*x - 1;
│ │ │ │ +
68 const auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ +
69 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
70 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ +
71 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
72 const auto l1_y = 2*y - 1;
│ │ │ │ +
73 const auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ +
74 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
75 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ +
76 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
77
│ │ │ │ +
78 out[0][0]=sign0*(0.5*(-l4_x)+0.5*l5_x);
│ │ │ │ +
79 out[0][1]=0.0;
│ │ │ │ +
80 out[1][0]=-(1.5)*l4_x*l1_y+1.5*l5_x*l1_y;
│ │ │ │ +
81 out[1][1]=0.0;
│ │ │ │ +
82 out[2][0]=sign0*(-(2.5)*l4_x*l2_y+2.5*l5_x*l2_y);
│ │ │ │ +
83 out[2][1]=0.0;
│ │ │ │ +
84 out[3][0]=-(3.5)*l4_x*l3_y+3.5*l5_x*l3_y;
│ │ │ │ +
85 out[3][1]=0.0;
│ │ │ │ +
86 out[4][0]=sign0*(-(4.5)*l4_x*l4_y+4.5*l5_x*l4_y);
│ │ │ │ +
87 out[4][1]=0.0;
│ │ │ │ +
88
│ │ │ │ +
89 out[5][0]=sign1*(0.5*l4_x+0.5*l5_x);
│ │ │ │ +
90 out[5][1]=0.0;
│ │ │ │ +
91 out[6][0]=-(1.5)*l4_x*l1_y-1.5*l5_x*l1_y;
│ │ │ │ +
92 out[6][1]=0.0;
│ │ │ │ +
93 out[7][0]=sign1*(2.5*l4_x*l2_y+2.5*l5_x*l2_y);
│ │ │ │ +
94 out[7][1]=0.0;
│ │ │ │ +
95 out[8][0]=-(3.5)*l4_x*l3_y-3.5*l5_x*l3_y;
│ │ │ │ +
96 out[8][1]=0.0;
│ │ │ │ +
97 out[9][0]=sign1*(4.5*l4_x*l4_y+4.5*l5_x*l4_y);
│ │ │ │ +
98 out[9][1]=0.0;
│ │ │ │ +
99
│ │ │ │ +
100 out[10][0]=0.0;
│ │ │ │ +
101 out[10][1]=sign2*(0.5*(-l4_y)+0.5*l5_y);
│ │ │ │ +
102 out[11][0]=0.0;
│ │ │ │ +
103 out[11][1]=1.5*l1_x*l4_y-1.5*l1_x*l5_y;
│ │ │ │ +
104 out[12][0]=0.0;
│ │ │ │ +
105 out[12][1]=sign2*(-(2.5)*l2_x*l4_y+2.5*l2_x*l5_y);
│ │ │ │ +
106 out[13][0]=0.0;
│ │ │ │ +
107 out[13][1]=3.5*l3_x*l4_y-3.5*l3_x*l5_y;
│ │ │ │ +
108 out[14][0]=0.0;
│ │ │ │ +
109 out[14][1]=sign2*(-(4.5)*l4_x*l4_y+4.5*l4_x*l5_y);
│ │ │ │ +
110
│ │ │ │ +
111 out[15][0]=0.0;
│ │ │ │ +
112 out[15][1]=sign3*(0.5*l4_y+0.5*l5_y);
│ │ │ │ +
113 out[16][0]=0.0;
│ │ │ │ +
114 out[16][1]=1.5*l1_x*l4_y+1.5*l1_x*l5_y;
│ │ │ │ +
115 out[17][0]=0.0;
│ │ │ │ +
116 out[17][1]=sign3*(2.5*l2_x*l4_y+2.5*l2_x*l5_y);
│ │ │ │ +
117 out[18][0]=0.0;
│ │ │ │ +
118 out[18][1]=3.5*l3_x*l4_y+3.5*l3_x*l5_y;
│ │ │ │ +
119 out[19][0]=0.0;
│ │ │ │ +
120 out[19][1]=sign3*(4.5*l4_x*l4_y+4.5*l4_x*l5_y);
│ │ │ │ +
121
│ │ │ │ +
122 out[20][0]=1.0-l4_x;
│ │ │ │ +
123 out[20][1]=0.0;
│ │ │ │ +
124 out[21][0]=3.0*l1_y-3.0*l4_x*l1_y;
│ │ │ │ +
125 out[21][1]=0.0;
│ │ │ │ +
126 out[22][0]=5.0*l2_y-5.0*l4_x*l2_y;
│ │ │ │ +
127 out[22][1]=0.0;
│ │ │ │ +
128 out[23][0]=7.0*l3_y-7.0*l4_x*l3_y;
│ │ │ │ +
129 out[23][1]=0.0;
│ │ │ │ +
130 out[24][0]=9.0*l4_y-9.0*l4_x*l4_y;
│ │ │ │ +
131 out[24][1]=0.0;
│ │ │ │ +
132 out[25][0]=3.0*l1_x-3.0*l5_x;
│ │ │ │ +
133 out[25][1]=0.0;
│ │ │ │ +
134 out[26][0]=9.0*l1_x*l1_y-9.0*l5_x*l1_y;
│ │ │ │ +
135 out[26][1]=0.0;
│ │ │ │ +
136 out[27][0]=15.0*l1_x*l2_y-15.0*l5_x*l2_y;
│ │ │ │ +
137 out[27][1]=0.0;
│ │ │ │ +
138 out[28][0]=21.0*l1_x*l3_y-21.0*l5_x*l3_y;
│ │ │ │ +
139 out[28][1]=0.0;
│ │ │ │ +
140 out[29][0]=27.0*l1_x*l4_y-27.0*l5_x*l4_y;
│ │ │ │ +
141 out[29][1]=0.0;
│ │ │ │ +
142 out[30][0]=5.0*l2_x-5.0*l4_x;
│ │ │ │ +
143 out[30][1]=0.0;
│ │ │ │ +
144 out[31][0]=15.0*l2_x*l1_y-15.0*l4_x*l1_y;
│ │ │ │ +
145 out[31][1]=0.0;
│ │ │ │ +
146 out[32][0]=25.0*l2_x*l2_y-25.0*l4_x*l2_y;
│ │ │ │ +
147 out[32][1]=0.0;
│ │ │ │ +
148 out[33][0]=35.0*l2_x*l3_y-35.0*l4_x*l3_y;
│ │ │ │ +
149 out[33][1]=0.0;
│ │ │ │ +
150 out[34][0]=45.0*l2_x*l4_y-45.0*l4_x*l4_y;
│ │ │ │ +
151 out[34][1]=0.0;
│ │ │ │ +
152 out[35][0]=7.0*l3_x-7.0*l5_x;
│ │ │ │ +
153 out[35][1]=0.0;
│ │ │ │ +
154 out[36][0]=21.0*l3_x*l1_y-21.0*l5_x*l1_y;
│ │ │ │ +
155 out[36][1]=0.0;
│ │ │ │ +
156 out[37][0]=35.0*l3_x*l2_y-35.0*l5_x*l2_y;
│ │ │ │ +
157 out[37][1]=0.0;
│ │ │ │ +
158 out[38][0]=49.0*l3_x*l3_y-49.0*l5_x*l3_y;
│ │ │ │ +
159 out[38][1]=0.0;
│ │ │ │ +
160 out[39][0]=63.0*l3_x*l4_y-63.0*l5_x*l4_y;
│ │ │ │ +
161 out[39][1]=0.0;
│ │ │ │ +
162 out[40][0]=0.0;
│ │ │ │ +
163 out[40][1]=1.0-l4_y;
│ │ │ │ +
164 out[41][0]=0.0;
│ │ │ │ +
165 out[41][1]=3.0*l1_y-3.0*l5_y;
│ │ │ │ +
166 out[42][0]=0.0;
│ │ │ │ +
167 out[42][1]=5.0*l2_y-5.0*l4_y;
│ │ │ │ +
168 out[43][0]=0.0;
│ │ │ │ +
169 out[43][1]=7.0*l3_y-7.0*l5_y;
│ │ │ │ +
170 out[44][0]=0.0;
│ │ │ │ +
171 out[44][1]=3.0*l1_x-3.0*l1_x*l4_y;
│ │ │ │ +
172 out[45][0]=0.0;
│ │ │ │ +
173 out[45][1]=9.0*l1_x*l1_y-9.0*l1_x*l5_y;
│ │ │ │ +
174 out[46][0]=0.0;
│ │ │ │ +
175 out[46][1]=15.0*l1_x*l2_y-15.0*l1_x*l4_y;
│ │ │ │ +
176 out[47][0]=0.0;
│ │ │ │ +
177 out[47][1]=21.0*l1_x*l3_y-21.0*l1_x*l5_y;
│ │ │ │ +
178 out[48][0]=0.0;
│ │ │ │ +
179 out[48][1]=5.0*l2_x-5.0*l2_x*l4_y;
│ │ │ │ +
180 out[49][0]=0.0;
│ │ │ │ +
181 out[49][1]=15.0*l2_x*l1_y-15.0*l2_x*l5_y;
│ │ │ │ +
182 out[50][0]=0.0;
│ │ │ │ +
183 out[50][1]=25.0*l2_x*l2_y-25.0*l2_x*l4_y;
│ │ │ │ +
184 out[51][0]=0.0;
│ │ │ │ +
185 out[51][1]=35.0*l2_x*l3_y-35.0*l2_x*l5_y;
│ │ │ │ +
186 out[52][0]=0.0;
│ │ │ │ +
187 out[52][1]=7.0*l3_x-7.0*l3_x*l4_y;
│ │ │ │ +
188 out[53][0]=0.0;
│ │ │ │ +
189 out[53][1]=21.0*l3_x*l1_y-21.0*l3_x*l5_y;
│ │ │ │ +
190 out[54][0]=0.0;
│ │ │ │ +
191 out[54][1]=35.0*l3_x*l2_y-35.0*l3_x*l4_y;
│ │ │ │ +
192 out[55][0]=0.0;
│ │ │ │ +
193 out[55][1]=49.0*l3_x*l3_y-49.0*l3_x*l5_y;
│ │ │ │ +
194 out[56][0]=0.0;
│ │ │ │ +
195 out[56][1]=9.0*l4_x-9.0*l4_x*l4_y;
│ │ │ │ +
196 out[57][0]=0.0;
│ │ │ │ +
197 out[57][1]=27.0*l4_x*l1_y-27.0*l4_x*l5_y;
│ │ │ │ +
198 out[58][0]=0.0;
│ │ │ │ +
199 out[58][1]=45.0*l4_x*l2_y-45.0*l4_x*l4_y;
│ │ │ │ +
200 out[59][0]=0.0;
│ │ │ │ +
201 out[59][1]=63.0*l4_x*l3_y-63.0*l4_x*l5_y;
│ │ │ │ +
202 }
│ │ │ │ +
│ │ │ │ +
203
│ │ │ │ +
│ │ │ │ +
210 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
211 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
212 {
│ │ │ │ +
213 out.resize(60);
│ │ │ │ +
214 auto const& x = in[0], y = in[1];
│ │ │ │ +
215
│ │ │ │ +
216 const auto l1_x = 2*x - 1;
│ │ │ │ +
217 const auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ +
218 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
219 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ +
220 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
221 const auto l1_y = 2*y - 1;
│ │ │ │ +
222 const auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ +
223 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
224 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ +
225 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
226
│ │ │ │ +
227 const auto dxl1_x = 2.0;
│ │ │ │ +
228 const auto dxl2_x = 12*x - 6;
│ │ │ │ +
229 const auto dxl3_x = x*(60*x - 60) + 12;
│ │ │ │ +
230 const auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
│ │ │ │ +
231 const auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
│ │ │ │ +
232 const auto dyl1_y = 2.0;
│ │ │ │ +
233 const auto dyl2_y = 12*y - 6;
│ │ │ │ +
234 const auto dyl3_y = y*(60*y - 60) + 12;
│ │ │ │ +
235 const auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
│ │ │ │ +
236 const auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
│ │ │ │ +
237
│ │ │ │ +
238 // x-component
│ │ │ │ +
239 out[0][0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
│ │ │ │ +
240 out[0][1][0]=0.0;
│ │ │ │ +
241 out[1][0][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
│ │ │ │ +
242 out[1][1][0]=0.0;
│ │ │ │ +
243 out[2][0][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ +
244 out[2][1][0]=0.0;
│ │ │ │ +
245 out[3][0][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
│ │ │ │ +
246 out[3][1][0]=0.0;
│ │ │ │ +
247 out[4][0][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ +
248 out[4][1][0]=0.0;
│ │ │ │ +
249
│ │ │ │ +
250 out[5][0][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
│ │ │ │ +
251 out[5][1][0]=0.0;
│ │ │ │ +
252 out[6][0][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
│ │ │ │ +
253 out[6][1][0]=0.0;
│ │ │ │ +
254 out[7][0][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ +
255 out[7][1][0]=0.0;
│ │ │ │ +
256 out[8][0][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
│ │ │ │ +
257 out[8][1][0]=0.0;
│ │ │ │ +
258 out[9][0][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ +
259 out[9][1][0]=0.0;
│ │ │ │ +
260
│ │ │ │ +
261 out[10][0][0]=0.0;
│ │ │ │ +
262 out[10][1][0]=0.0;
│ │ │ │ +
263 out[11][0][0]=0.0;
│ │ │ │ +
264 out[11][1][0]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
│ │ │ │ +
265 out[12][0][0]=0.0;
│ │ │ │ +
266 out[12][1][0]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ +
267 out[13][0][0]=0.0;
│ │ │ │ +
268 out[13][1][0]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
│ │ │ │ +
269 out[14][0][0]=0.0;
│ │ │ │ +
270 out[14][1][0]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ +
271
│ │ │ │ +
272 out[15][0][0]=0.0;
│ │ │ │ +
273 out[15][1][0]=0.0;
│ │ │ │ +
274 out[16][0][0]=0.0;
│ │ │ │ +
275 out[16][1][0]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
│ │ │ │ +
276 out[17][0][0]=0.0;
│ │ │ │ +
277 out[17][1][0]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ +
278 out[18][0][0]=0.0;
│ │ │ │ +
279 out[18][1][0]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
│ │ │ │ +
280 out[19][0][0]=0.0;
│ │ │ │ +
281 out[19][1][0]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ +
282
│ │ │ │ +
283 out[20][0][0]=-dxl4_x;
│ │ │ │ +
284 out[20][1][0]=0.0;
│ │ │ │ +
285 out[21][0][0]=-3.0*dxl4_x*l1_y;
│ │ │ │ +
286 out[21][1][0]=0.0;
│ │ │ │ +
287 out[22][0][0]=-5.0*dxl4_x*l2_y;
│ │ │ │ +
288 out[22][1][0]=0.0;
│ │ │ │ +
289 out[23][0][0]=-7.0*dxl4_x*l3_y;
│ │ │ │ +
290 out[23][1][0]=0.0;
│ │ │ │ +
291 out[24][0][0]=-9.0*dxl4_x*l4_y;
│ │ │ │ +
292 out[24][1][0]=0.0;
│ │ │ │ +
293 out[25][0][0]=3.0*dxl1_x-3.0*dxl5_x;
│ │ │ │ +
294 out[25][1][0]=0.0;
│ │ │ │ +
295 out[26][0][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
│ │ │ │ +
296 out[26][1][0]=0.0;
│ │ │ │ +
297 out[27][0][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
│ │ │ │ +
298 out[27][1][0]=0.0;
│ │ │ │ +
299 out[28][0][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
│ │ │ │ +
300 out[28][1][0]=0.0;
│ │ │ │ +
301 out[29][0][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
│ │ │ │ +
302 out[29][1][0]=0.0;
│ │ │ │ +
303 out[30][0][0]=5.0*dxl2_x-5.0*dxl4_x;
│ │ │ │ +
304 out[30][1][0]=0.0;
│ │ │ │ +
305 out[31][0][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
│ │ │ │ +
306 out[31][1][0]=0.0;
│ │ │ │ +
307 out[32][0][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
│ │ │ │ +
308 out[32][1][0]=0.0;
│ │ │ │ +
309 out[33][0][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
│ │ │ │ +
310 out[33][1][0]=0.0;
│ │ │ │ +
311 out[34][0][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
│ │ │ │ +
312 out[34][1][0]=0.0;
│ │ │ │ +
313 out[35][0][0]=7.0*dxl3_x-7.0*dxl5_x;
│ │ │ │ +
314 out[35][1][0]=0.0;
│ │ │ │ +
315 out[36][0][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
│ │ │ │ +
316 out[36][1][0]=0.0;
│ │ │ │ +
317 out[37][0][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
│ │ │ │ +
318 out[37][1][0]=0.0;
│ │ │ │ +
319 out[38][0][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
│ │ │ │ +
320 out[38][1][0]=0.0;
│ │ │ │ +
321 out[39][0][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
│ │ │ │ +
322 out[39][1][0]=0.0;
│ │ │ │ +
323 out[40][0][0]=0.0;
│ │ │ │ +
324 out[40][1][0]=0.0;
│ │ │ │ +
325 out[41][0][0]=0.0;
│ │ │ │ +
326 out[41][1][0]=0.0;
│ │ │ │ +
327 out[42][0][0]=0.0;
│ │ │ │ +
328 out[42][1][0]=0.0;
│ │ │ │ +
329 out[43][0][0]=0.0;
│ │ │ │ +
330 out[43][1][0]=0.0;
│ │ │ │ +
331 out[44][0][0]=0.0;
│ │ │ │ +
332 out[44][1][0]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
│ │ │ │ +
333 out[45][0][0]=0.0;
│ │ │ │ +
334 out[45][1][0]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
│ │ │ │ +
335 out[46][0][0]=0.0;
│ │ │ │ +
336 out[46][1][0]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
│ │ │ │ +
337 out[47][0][0]=0.0;
│ │ │ │ +
338 out[47][1][0]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
│ │ │ │ +
339 out[48][0][0]=0.0;
│ │ │ │ +
340 out[48][1][0]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
│ │ │ │ +
341 out[49][0][0]=0.0;
│ │ │ │ +
342 out[49][1][0]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
│ │ │ │ +
343 out[50][0][0]=0.0;
│ │ │ │ +
344 out[50][1][0]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
│ │ │ │ +
345 out[51][0][0]=0.0;
│ │ │ │ +
346 out[51][1][0]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
│ │ │ │ +
347 out[52][0][0]=0.0;
│ │ │ │ +
348 out[52][1][0]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
│ │ │ │ +
349 out[53][0][0]=0.0;
│ │ │ │ +
350 out[53][1][0]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
│ │ │ │ +
351 out[54][0][0]=0.0;
│ │ │ │ +
352 out[54][1][0]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
│ │ │ │ +
353 out[55][0][0]=0.0;
│ │ │ │ +
354 out[55][1][0]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
│ │ │ │ +
355 out[56][0][0]=0.0;
│ │ │ │ +
356 out[56][1][0]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
│ │ │ │ +
357 out[57][0][0]=0.0;
│ │ │ │ +
358 out[57][1][0]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
│ │ │ │ +
359 out[58][0][0]=0.0;
│ │ │ │ +
360 out[58][1][0]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
│ │ │ │ +
361 out[59][0][0]=0.0;
│ │ │ │ +
362 out[59][1][0]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
│ │ │ │ +
363
│ │ │ │ +
364 // y-component
│ │ │ │ +
365 out[0][0][1]=0.0;
│ │ │ │ +
366 out[0][1][1]=0.0;
│ │ │ │ +
367 out[1][0][1]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
│ │ │ │ +
368 out[1][1][1]=0.0;
│ │ │ │ +
369 out[2][0][1]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ +
370 out[2][1][1]=0.0;
│ │ │ │ +
371 out[3][0][1]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
│ │ │ │ +
372 out[3][1][1]=0.0;
│ │ │ │ +
373 out[4][0][1]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ +
374 out[4][1][1]=0.0;
│ │ │ │ +
375
│ │ │ │ +
376 out[5][0][1]=0.0;
│ │ │ │ +
377 out[5][1][1]=0.0;
│ │ │ │ +
378 out[6][0][1]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
│ │ │ │ +
379 out[6][1][1]=0.0;
│ │ │ │ +
380 out[7][0][1]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ +
381 out[7][1][1]=0.0;
│ │ │ │ +
382 out[8][0][1]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
│ │ │ │ +
383 out[8][1][1]=0.0;
│ │ │ │ +
384 out[9][0][1]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ +
385 out[9][1][1]=0.0;
│ │ │ │ +
386
│ │ │ │ +
387 out[10][0][1]=0.0;
│ │ │ │ +
388 out[10][1][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
│ │ │ │ +
389 out[11][0][1]=0.0;
│ │ │ │ +
390 out[11][1][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
│ │ │ │ +
391 out[12][0][1]=0.0;
│ │ │ │ +
392 out[12][1][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ +
393 out[13][0][1]=0.0;
│ │ │ │ +
394 out[13][1][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
│ │ │ │ +
395 out[14][0][1]=0.0;
│ │ │ │ +
396 out[14][1][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ +
397
│ │ │ │ +
398 out[15][0][1]=0.0;
│ │ │ │ +
399 out[15][1][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
│ │ │ │ +
400 out[16][0][1]=0.0;
│ │ │ │ +
401 out[16][1][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
│ │ │ │ +
402 out[17][0][1]=0.0;
│ │ │ │ +
403 out[17][1][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ +
404 out[18][0][1]=0.0;
│ │ │ │ +
405 out[18][1][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
│ │ │ │ +
406 out[19][0][1]=0.0;
│ │ │ │ +
407 out[19][1][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ +
408
│ │ │ │ +
409 out[20][0][1]=0.0;
│ │ │ │ +
410 out[20][1][1]=0.0;
│ │ │ │ +
411 out[21][0][1]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
│ │ │ │ +
412 out[21][1][1]=0.0;
│ │ │ │ +
413 out[22][0][1]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
│ │ │ │ +
414 out[22][1][1]=0.0;
│ │ │ │ +
415 out[23][0][1]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
│ │ │ │ +
416 out[23][1][1]=0.0;
│ │ │ │ +
417 out[24][0][1]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
│ │ │ │ +
418 out[24][1][1]=0.0;
│ │ │ │ +
419 out[25][0][1]=0.0;
│ │ │ │ +
420 out[25][1][1]=0.0;
│ │ │ │ +
421 out[26][0][1]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
│ │ │ │ +
422 out[26][1][1]=0.0;
│ │ │ │ +
423 out[27][0][1]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
│ │ │ │ +
424 out[27][1][1]=0.0;
│ │ │ │ +
425 out[28][0][1]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
│ │ │ │ +
426 out[28][1][1]=0.0;
│ │ │ │ +
427 out[29][0][1]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
│ │ │ │ +
428 out[29][1][1]=0.0;
│ │ │ │ +
429 out[30][0][1]=0.0;
│ │ │ │ +
430 out[30][1][1]=0.0;
│ │ │ │ +
431 out[31][0][1]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
│ │ │ │ +
432 out[31][1][1]=0.0;
│ │ │ │ +
433 out[32][0][1]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
│ │ │ │ +
434 out[32][1][1]=0.0;
│ │ │ │ +
435 out[33][0][1]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
│ │ │ │ +
436 out[33][1][1]=0.0;
│ │ │ │ +
437 out[34][0][1]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
│ │ │ │ +
438 out[34][1][1]=0.0;
│ │ │ │ +
439 out[35][0][1]=0.0;
│ │ │ │ +
440 out[35][1][1]=0.0;
│ │ │ │ +
441 out[36][0][1]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
│ │ │ │ +
442 out[36][1][1]=0.0;
│ │ │ │ +
443 out[37][0][1]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
│ │ │ │ +
444 out[37][1][1]=0.0;
│ │ │ │ +
445 out[38][0][1]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
│ │ │ │ +
446 out[38][1][1]=0.0;
│ │ │ │ +
447 out[39][0][1]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
│ │ │ │ +
448 out[39][1][1]=0.0;
│ │ │ │ +
449 out[40][0][1]=0.0;
│ │ │ │ +
450 out[40][1][1]=-dyl4_y;
│ │ │ │ +
451 out[41][0][1]=0.0;
│ │ │ │ +
452 out[41][1][1]=3.0*dyl1_y-3.0*dyl5_y;
│ │ │ │ +
453 out[42][0][1]=0.0;
│ │ │ │ +
454 out[42][1][1]=5.0*dyl2_y-5.0*dyl4_y;
│ │ │ │ +
455 out[43][0][1]=0.0;
│ │ │ │ +
456 out[43][1][1]=7.0*dyl3_y-7.0*dyl5_y;
│ │ │ │ +
457 out[44][0][1]=0.0;
│ │ │ │ +
458 out[44][1][1]=-3.0*l1_x*dyl4_y;
│ │ │ │ +
459 out[45][0][1]=0.0;
│ │ │ │ +
460 out[45][1][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
│ │ │ │ +
461 out[46][0][1]=0.0;
│ │ │ │ +
462 out[46][1][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
│ │ │ │ +
463 out[47][0][1]=0.0;
│ │ │ │ +
464 out[47][1][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
│ │ │ │ +
465 out[48][0][1]=0.0;
│ │ │ │ +
466 out[48][1][1]=-5.0*l2_x*dyl4_y;
│ │ │ │ +
467 out[49][0][1]=0.0;
│ │ │ │ +
468 out[49][1][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
│ │ │ │ +
469 out[50][0][1]=0.0;
│ │ │ │ +
470 out[50][1][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
│ │ │ │ +
471 out[51][0][1]=0.0;
│ │ │ │ +
472 out[51][1][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
│ │ │ │ +
473 out[52][0][1]=0.0;
│ │ │ │ +
474 out[52][1][1]=-7.0*l3_x*dyl4_y;
│ │ │ │ +
475 out[53][0][1]=0.0;
│ │ │ │ +
476 out[53][1][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
│ │ │ │ +
477 out[54][0][1]=0.0;
│ │ │ │ +
478 out[54][1][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
│ │ │ │ +
479 out[55][0][1]=0.0;
│ │ │ │ +
480 out[55][1][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
│ │ │ │ +
481 out[56][0][1]=0.0;
│ │ │ │ +
482 out[56][1][1]=-9.0*l4_x*dyl4_y;
│ │ │ │ +
483 out[57][0][1]=0.0;
│ │ │ │ +
484 out[57][1][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
│ │ │ │ +
485 out[58][0][1]=0.0;
│ │ │ │ +
486 out[58][1][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
│ │ │ │ +
487 out[59][0][1]=0.0;
│ │ │ │ +
488 out[59][1][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
│ │ │ │ +
489 }
│ │ │ │ +
│ │ │ │ +
490
│ │ │ │ +
│ │ │ │ +
492 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
493 const typename Traits::DomainType& in, // position
│ │ │ │ +
494 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
495 {
│ │ │ │ +
496 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
497 if (totalOrder == 0) {
│ │ │ │ +
498 evaluateFunction(in, out);
│ │ │ │ +
499 } else if (totalOrder == 1) {
│ │ │ │ +
500 out.resize(size());
│ │ │ │ +
501 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
502 auto const& x = in[0], y = in[1];
│ │ │ │ +
503
│ │ │ │ +
504 auto l1_x = 2*x - 1;
│ │ │ │ +
505 auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ +
506 auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
507 auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ +
508 auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
509 auto l1_y = 2*y - 1;
│ │ │ │ +
510 auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ +
511 auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
512 auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ +
513 auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ +
514
│ │ │ │ +
515 if (direction == 0) {
│ │ │ │ +
516 auto dxl1_x = 2.0;
│ │ │ │ +
517 auto dxl2_x = 12*x - 6;
│ │ │ │ +
518 auto dxl3_x = x*(60*x - 60) + 12;
│ │ │ │ +
519 auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
│ │ │ │ +
520 auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
│ │ │ │ +
521
│ │ │ │ +
522 out[0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
│ │ │ │ +
523 out[0][1]=0.0;
│ │ │ │ +
524 out[1][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
│ │ │ │ +
525 out[1][1]=0.0;
│ │ │ │ +
526 out[2][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ +
527 out[2][1]=0.0;
│ │ │ │ +
528 out[3][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
│ │ │ │ +
529 out[3][1]=0.0;
│ │ │ │ +
530 out[4][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ +
531 out[4][1]=0.0;
│ │ │ │ +
532
│ │ │ │ +
533 out[5][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
│ │ │ │ +
534 out[5][1]=0.0;
│ │ │ │ +
535 out[6][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
│ │ │ │ +
536 out[6][1]=0.0;
│ │ │ │ +
537 out[7][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ +
538 out[7][1]=0.0;
│ │ │ │ +
539 out[8][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
│ │ │ │ +
540 out[8][1]=0.0;
│ │ │ │ +
541 out[9][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ +
542 out[9][1]=0.0;
│ │ │ │ +
543
│ │ │ │ +
544 out[10][0]=0.0;
│ │ │ │ +
545 out[10][1]=0.0;
│ │ │ │ +
546 out[11][0]=0.0;
│ │ │ │ +
547 out[11][1]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
│ │ │ │ +
548 out[12][0]=0.0;
│ │ │ │ +
549 out[12][1]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ +
550 out[13][0]=0.0;
│ │ │ │ +
551 out[13][1]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
│ │ │ │ +
552 out[14][0]=0.0;
│ │ │ │ +
553 out[14][1]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ +
554
│ │ │ │ +
555 out[15][0]=0.0;
│ │ │ │ +
556 out[15][1]=0.0;
│ │ │ │ +
557 out[16][0]=0.0;
│ │ │ │ +
558 out[16][1]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
│ │ │ │ +
559 out[17][0]=0.0;
│ │ │ │ +
560 out[17][1]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ +
561 out[18][0]=0.0;
│ │ │ │ +
562 out[18][1]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
│ │ │ │ +
563 out[19][0]=0.0;
│ │ │ │ +
564 out[19][1]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ +
565
│ │ │ │ +
566 out[20][0]=-dxl4_x;
│ │ │ │ +
567 out[20][1]=0.0;
│ │ │ │ +
568 out[21][0]=-3.0*dxl4_x*l1_y;
│ │ │ │ +
569 out[21][1]=0.0;
│ │ │ │ +
570 out[22][0]=-5.0*dxl4_x*l2_y;
│ │ │ │ +
571 out[22][1]=0.0;
│ │ │ │ +
572 out[23][0]=-7.0*dxl4_x*l3_y;
│ │ │ │ +
573 out[23][1]=0.0;
│ │ │ │ +
574 out[24][0]=-9.0*dxl4_x*l4_y;
│ │ │ │ +
575 out[24][1]=0.0;
│ │ │ │ +
576 out[25][0]=3.0*dxl1_x-3.0*dxl5_x;
│ │ │ │ +
577 out[25][1]=0.0;
│ │ │ │ +
578 out[26][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
│ │ │ │ +
579 out[26][1]=0.0;
│ │ │ │ +
580 out[27][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
│ │ │ │ +
581 out[27][1]=0.0;
│ │ │ │ +
582 out[28][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
│ │ │ │ +
583 out[28][1]=0.0;
│ │ │ │ +
584 out[29][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
│ │ │ │ +
585 out[29][1]=0.0;
│ │ │ │ +
586 out[30][0]=5.0*dxl2_x-5.0*dxl4_x;
│ │ │ │ +
587 out[30][1]=0.0;
│ │ │ │ +
588 out[31][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
│ │ │ │ +
589 out[31][1]=0.0;
│ │ │ │ +
590 out[32][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
│ │ │ │ +
591 out[32][1]=0.0;
│ │ │ │ +
592 out[33][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
│ │ │ │ +
593 out[33][1]=0.0;
│ │ │ │ +
594 out[34][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
│ │ │ │ +
595 out[34][1]=0.0;
│ │ │ │ +
596 out[35][0]=7.0*dxl3_x-7.0*dxl5_x;
│ │ │ │ +
597 out[35][1]=0.0;
│ │ │ │ +
598 out[36][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
│ │ │ │ +
599 out[36][1]=0.0;
│ │ │ │ +
600 out[37][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
│ │ │ │ +
601 out[37][1]=0.0;
│ │ │ │ +
602 out[38][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
│ │ │ │ +
603 out[38][1]=0.0;
│ │ │ │ +
604 out[39][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
│ │ │ │ +
605 out[39][1]=0.0;
│ │ │ │ +
606 out[40][0]=0.0;
│ │ │ │ +
607 out[40][1]=0.0;
│ │ │ │ +
608 out[41][0]=0.0;
│ │ │ │ +
609 out[41][1]=0.0;
│ │ │ │ +
610 out[42][0]=0.0;
│ │ │ │ +
611 out[42][1]=0.0;
│ │ │ │ +
612 out[43][0]=0.0;
│ │ │ │ +
613 out[43][1]=0.0;
│ │ │ │ +
614 out[44][0]=0.0;
│ │ │ │ +
615 out[44][1]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
│ │ │ │ +
616 out[45][0]=0.0;
│ │ │ │ +
617 out[45][1]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
│ │ │ │ +
618 out[46][0]=0.0;
│ │ │ │ +
619 out[46][1]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
│ │ │ │ +
620 out[47][0]=0.0;
│ │ │ │ +
621 out[47][1]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
│ │ │ │ +
622 out[48][0]=0.0;
│ │ │ │ +
623 out[48][1]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
│ │ │ │ +
624 out[49][0]=0.0;
│ │ │ │ +
625 out[49][1]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
│ │ │ │ +
626 out[50][0]=0.0;
│ │ │ │ +
627 out[50][1]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
│ │ │ │ +
628 out[51][0]=0.0;
│ │ │ │ +
629 out[51][1]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
│ │ │ │ +
630 out[52][0]=0.0;
│ │ │ │ +
631 out[52][1]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
│ │ │ │ +
632 out[53][0]=0.0;
│ │ │ │ +
633 out[53][1]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
│ │ │ │ +
634 out[54][0]=0.0;
│ │ │ │ +
635 out[54][1]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
│ │ │ │ +
636 out[55][0]=0.0;
│ │ │ │ +
637 out[55][1]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
│ │ │ │ +
638 out[56][0]=0.0;
│ │ │ │ +
639 out[56][1]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
│ │ │ │ +
640 out[57][0]=0.0;
│ │ │ │ +
641 out[57][1]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
│ │ │ │ +
642 out[58][0]=0.0;
│ │ │ │ +
643 out[58][1]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
│ │ │ │ +
644 out[59][0]=0.0;
│ │ │ │ +
645 out[59][1]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
│ │ │ │ +
646
│ │ │ │ +
647 } else if (direction == 1) {
│ │ │ │ +
648 auto dyl1_y = 2.0;
│ │ │ │ +
649 auto dyl2_y = 12*y - 6;
│ │ │ │ +
650 auto dyl3_y = y*(60*y - 60) + 12;
│ │ │ │ +
651 auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
│ │ │ │ +
652 auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
│ │ │ │ +
653
│ │ │ │ +
654 out[0][0]=0.0;
│ │ │ │ +
655 out[0][1]=0.0;
│ │ │ │ +
656 out[1][0]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
│ │ │ │ +
657 out[1][1]=0.0;
│ │ │ │ +
658 out[2][0]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ +
659 out[2][1]=0.0;
│ │ │ │ +
660 out[3][0]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
│ │ │ │ +
661 out[3][1]=0.0;
│ │ │ │ +
662 out[4][0]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ +
663 out[4][1]=0.0;
│ │ │ │ +
664
│ │ │ │ +
665 out[5][0]=0.0;
│ │ │ │ +
666 out[5][1]=0.0;
│ │ │ │ +
667 out[6][0]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
│ │ │ │ +
668 out[6][1]=0.0;
│ │ │ │ +
669 out[7][0]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ +
670 out[7][1]=0.0;
│ │ │ │ +
671 out[8][0]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
│ │ │ │ +
672 out[8][1]=0.0;
│ │ │ │ +
673 out[9][0]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ +
674 out[9][1]=0.0;
│ │ │ │ +
675
│ │ │ │ +
676 out[10][0]=0.0;
│ │ │ │ +
677 out[10][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
│ │ │ │ +
678 out[11][0]=0.0;
│ │ │ │ +
679 out[11][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
│ │ │ │ +
680 out[12][0]=0.0;
│ │ │ │ +
681 out[12][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ +
682 out[13][0]=0.0;
│ │ │ │ +
683 out[13][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
│ │ │ │ +
684 out[14][0]=0.0;
│ │ │ │ +
685 out[14][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ +
686
│ │ │ │ +
687 out[15][0]=0.0;
│ │ │ │ +
688 out[15][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
│ │ │ │ +
689 out[16][0]=0.0;
│ │ │ │ +
690 out[16][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
│ │ │ │ +
691 out[17][0]=0.0;
│ │ │ │ +
692 out[17][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ +
693 out[18][0]=0.0;
│ │ │ │ +
694 out[18][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
│ │ │ │ +
695 out[19][0]=0.0;
│ │ │ │ +
696 out[19][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ +
697
│ │ │ │ +
698 out[20][0]=0.0;
│ │ │ │ +
699 out[20][1]=0.0;
│ │ │ │ +
700 out[21][0]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
│ │ │ │ +
701 out[21][1]=0.0;
│ │ │ │ +
702 out[22][0]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
│ │ │ │ +
703 out[22][1]=0.0;
│ │ │ │ +
704 out[23][0]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
│ │ │ │ +
705 out[23][1]=0.0;
│ │ │ │ +
706 out[24][0]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
│ │ │ │ +
707 out[24][1]=0.0;
│ │ │ │ +
708 out[25][0]=0.0;
│ │ │ │ +
709 out[25][1]=0.0;
│ │ │ │ +
710 out[26][0]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
│ │ │ │ +
711 out[26][1]=0.0;
│ │ │ │ +
712 out[27][0]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
│ │ │ │ +
713 out[27][1]=0.0;
│ │ │ │ +
714 out[28][0]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
│ │ │ │ +
715 out[28][1]=0.0;
│ │ │ │ +
716 out[29][0]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
│ │ │ │ +
717 out[29][1]=0.0;
│ │ │ │ +
718 out[30][0]=0.0;
│ │ │ │ +
719 out[30][1]=0.0;
│ │ │ │ +
720 out[31][0]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
│ │ │ │ +
721 out[31][1]=0.0;
│ │ │ │ +
722 out[32][0]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
│ │ │ │ +
723 out[32][1]=0.0;
│ │ │ │ +
724 out[33][0]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
│ │ │ │ +
725 out[33][1]=0.0;
│ │ │ │ +
726 out[34][0]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
│ │ │ │ +
727 out[34][1]=0.0;
│ │ │ │ +
728 out[35][0]=0.0;
│ │ │ │ +
729 out[35][1]=0.0;
│ │ │ │ +
730 out[36][0]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
│ │ │ │ +
731 out[36][1]=0.0;
│ │ │ │ +
732 out[37][0]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
│ │ │ │ +
733 out[37][1]=0.0;
│ │ │ │ +
734 out[38][0]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
│ │ │ │ +
735 out[38][1]=0.0;
│ │ │ │ +
736 out[39][0]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
│ │ │ │ +
737 out[39][1]=0.0;
│ │ │ │ +
738 out[40][0]=0.0;
│ │ │ │ +
739 out[40][1]=-dyl4_y;
│ │ │ │ +
740 out[41][0]=0.0;
│ │ │ │ +
741 out[41][1]=3.0*dyl1_y-3.0*dyl5_y;
│ │ │ │ +
742 out[42][0]=0.0;
│ │ │ │ +
743 out[42][1]=5.0*dyl2_y-5.0*dyl4_y;
│ │ │ │ +
744 out[43][0]=0.0;
│ │ │ │ +
745 out[43][1]=7.0*dyl3_y-7.0*dyl5_y;
│ │ │ │ +
746 out[44][0]=0.0;
│ │ │ │ +
747 out[44][1]=-3.0*l1_x*dyl4_y;
│ │ │ │ +
748 out[45][0]=0.0;
│ │ │ │ +
749 out[45][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
│ │ │ │ +
750 out[46][0]=0.0;
│ │ │ │ +
751 out[46][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
│ │ │ │ +
752 out[47][0]=0.0;
│ │ │ │ +
753 out[47][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
│ │ │ │ +
754 out[48][0]=0.0;
│ │ │ │ +
755 out[48][1]=-5.0*l2_x*dyl4_y;
│ │ │ │ +
756 out[49][0]=0.0;
│ │ │ │ +
757 out[49][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
│ │ │ │ +
758 out[50][0]=0.0;
│ │ │ │ +
759 out[50][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
│ │ │ │ +
760 out[51][0]=0.0;
│ │ │ │ +
761 out[51][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
│ │ │ │ +
762 out[52][0]=0.0;
│ │ │ │ +
763 out[52][1]=-7.0*l3_x*dyl4_y;
│ │ │ │ +
764 out[53][0]=0.0;
│ │ │ │ +
765 out[53][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
│ │ │ │ +
766 out[54][0]=0.0;
│ │ │ │ +
767 out[54][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
│ │ │ │ +
768 out[55][0]=0.0;
│ │ │ │ +
769 out[55][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
│ │ │ │ +
770 out[56][0]=0.0;
│ │ │ │ +
771 out[56][1]=-9.0*l4_x*dyl4_y;
│ │ │ │ +
772 out[57][0]=0.0;
│ │ │ │ +
773 out[57][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
│ │ │ │ +
774 out[58][0]=0.0;
│ │ │ │ +
775 out[58][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
│ │ │ │ +
776 out[59][0]=0.0;
│ │ │ │ +
777 out[59][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
│ │ │ │ +
778 } else {
│ │ │ │ +
779 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
780 }
│ │ │ │ +
781 } else {
│ │ │ │ +
782 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
783 }
│ │ │ │ +
784 }
│ │ │ │ +
│ │ │ │ +
785
│ │ │ │ +
│ │ │ │ +
787 unsigned int order () const
│ │ │ │ +
788 {
│ │ │ │ +
789 return 9;
│ │ │ │ +
790 }
│ │ │ │ +
│ │ │ │ +
791
│ │ │ │ +
792 private:
│ │ │ │ +
793 R sign0, sign1, sign2, sign3;
│ │ │ │ +
794 };
│ │ │ │ +
│ │ │ │ +
795}
│ │ │ │ +
796
│ │ │ │ +
797#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ -
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ -
LocalBasisTraits< D, 3, FieldVector< D, 3 >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, 3 > > Traits
Definition rannacherturek3dlocalbasis.hh:30
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
evaluate all shape functions
Definition rannacherturek3dlocalbasis.hh:39
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition rannacherturek3dlocalbasis.hh:33
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
evaluate jacobian of all shape functions
Definition rannacherturek3dlocalbasis.hh:57
│ │ │ │ -
unsigned int order() const
polynomial order of the shape functions
Definition rannacherturek3dlocalbasis.hh:108
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition rannacherturek3dlocalbasis.hh:80
│ │ │ │ - │ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas4cube2dlocalbasis.hh:29
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:492
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:60
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas4cube2dlocalbasis.hh:33
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas4cube2dlocalbasis.hh:49
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:787
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:210
│ │ │ │ +
RT4Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2dlocalbasis.hh:40
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,179 +1,826 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d │ │ │ │ │ -rannacherturek3dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ +raviartthomas4cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ 12#include │ │ │ │ │ 13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +14#include "../../common/localbasis.hh" │ │ │ │ │ 15 │ │ │ │ │ 16namespace _D_u_n_e │ │ │ │ │ 17{ │ │ │ │ │ -18 │ │ │ │ │ -22 template< class D, class R > │ │ │ │ │ -_2_3 class _R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -24 { │ │ │ │ │ -25 static const int coefficients[ 6 ][ 6 ]; │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -28 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _3_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _3_ _>, │ │ │ │ │ -29 R, 1, FieldVector< R, 1 >, │ │ │ │ │ -_3_0 FieldMatrix< R, 1, 3 > > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_3 unsigned int _s_i_z_e () const │ │ │ │ │ -34 { │ │ │ │ │ -35 return 6; │ │ │ │ │ -36 } │ │ │ │ │ -37 │ │ │ │ │ -_3_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ -40 std::vector< typename Traits::RangeType > &out ) const │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +29 { │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_4_0 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ 41 { │ │ │ │ │ -42 typedef typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e RangeFieldType; │ │ │ │ │ -43 RangeFieldType y[ 6 ] = { 1, in[ 0 ], in[ 1 ], in[ 2 ], │ │ │ │ │ -44 in[ 0 ]*in[ 0 ] - in[ 1 ]*in[ 1 ], │ │ │ │ │ -45 in[ 1 ]*in[ 1 ] - in[ 2 ]*in[ 2 ] }; │ │ │ │ │ -46 out.resize( _s_i_z_e() ); │ │ │ │ │ -47 for( unsigned int i = 0; i < _s_i_z_e(); ++i ) │ │ │ │ │ -48 { │ │ │ │ │ -49 out[ i ] = RangeFieldType( 0 ); │ │ │ │ │ -50 for( unsigned int j = 0; j < 6; ++j ) │ │ │ │ │ -51 out[ i ] += coefficients[ i ][ j ]*y[ j ]; │ │ │ │ │ -52 out[ i ] /= RangeFieldType( 3 ); │ │ │ │ │ -53 } │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_7 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ -58 std::vector< typename Traits::JacobianType > &out ) const │ │ │ │ │ -59 { │ │ │ │ │ -60 typedef typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e RangeFieldType; │ │ │ │ │ -61 RangeFieldType y0[ 5 ] = { 1, 0, 0, 2*in[ 0 ], 0 }; │ │ │ │ │ -62 RangeFieldType y1[ 5 ] = { 0, 1, 0, -2*in[ 1 ], 2*in[ 1 ] }; │ │ │ │ │ -63 RangeFieldType y2[ 5 ] = { 0, 0, 1, 0, -2*in[ 2 ] }; │ │ │ │ │ +42 sign0 = (s[0]) ? -1.0 : 1.0; │ │ │ │ │ +43 sign1 = (s[1]) ? -1.0 : 1.0; │ │ │ │ │ +44 sign2 = (s[2]) ? -1.0 : 1.0; │ │ │ │ │ +45 sign3 = (s[3]) ? -1.0 : 1.0; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return 60; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_6_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +61 std::vector& out) const │ │ │ │ │ +62 { │ │ │ │ │ +63 out.resize(60); │ │ │ │ │ 64 │ │ │ │ │ -65 out.resize( _s_i_z_e() ); │ │ │ │ │ -66 for( unsigned int i = 0; i < _s_i_z_e(); ++i ) │ │ │ │ │ -67 { │ │ │ │ │ -68 out[ i ] = RangeFieldType( 0 ); │ │ │ │ │ -69 for( unsigned int j = 0; j < 5; ++j ) │ │ │ │ │ -70 { │ │ │ │ │ -71 out[ i ][ 0 ][ 0 ] += coefficients[ i ][ j+1 ]*y0[ j ]; │ │ │ │ │ -72 out[ i ][ 0 ][ 1 ] += coefficients[ i ][ j+1 ]*y1[ j ]; │ │ │ │ │ -73 out[ i ][ 0 ][ 2 ] += coefficients[ i ][ j+1 ]*y2[ j ]; │ │ │ │ │ -74 } │ │ │ │ │ -75 out[ i ] /= RangeFieldType( 3 ); │ │ │ │ │ -76 } │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_8_0 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -81 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -82 std::vector& out) const // return value │ │ │ │ │ -83 { │ │ │ │ │ -84 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -85 if (totalOrder == 0) { │ │ │ │ │ -86 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -87 } else if (totalOrder == 1) { │ │ │ │ │ -88 out.resize(_s_i_z_e()); │ │ │ │ │ -89 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -90 │ │ │ │ │ -91 using RangeFieldType = typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ -92 RangeFieldType y[3][5] = { { 1.0, 0.0, 0.0, 2*in[0], 0.0 }, │ │ │ │ │ -93 { 0.0, 1.0, 0.0, -2*in[1], 2*in[1] }, │ │ │ │ │ -94 { 0.0, 0.0, 1.0, 0.0, -2*in[2] } }; │ │ │ │ │ -95 │ │ │ │ │ -96 for (std::size_t i = 0; i < _s_i_z_e(); ++i) { │ │ │ │ │ -97 out[i] = RangeFieldType{0}; │ │ │ │ │ -98 for (std::size_t j = 0; j < 5; ++j) │ │ │ │ │ -99 out[i] += coefficients[i][j+1] * y[direction][j]; │ │ │ │ │ -100 out[i] /= RangeFieldType{3}; │ │ │ │ │ -101 } │ │ │ │ │ -102 } else { │ │ │ │ │ -103 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -104 } │ │ │ │ │ -105 } │ │ │ │ │ -106 │ │ │ │ │ -_1_0_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ -109 { │ │ │ │ │ -110 return 2; │ │ │ │ │ -111 } │ │ │ │ │ -112 }; │ │ │ │ │ -113 │ │ │ │ │ -114 │ │ │ │ │ -115 │ │ │ │ │ -116 // RannacherTurek3DLocalBasis::coefficients │ │ │ │ │ -117 // ---------------------------------------- │ │ │ │ │ -118 │ │ │ │ │ -119 template< class D, class R > │ │ │ │ │ -120 const int RannacherTurek3DLocalBasis< D, R > │ │ │ │ │ -121 ::coefficients[ 6 ][ 6 ] = {{ 2, -7, 2, 2, 4, 2 }, │ │ │ │ │ -122 { -1, -1, 2, 2, 4, 2 }, │ │ │ │ │ -123 { 2, 2, -7, 2, -2, 2 }, │ │ │ │ │ -124 { -1, 2, -1, 2, -2, 2 }, │ │ │ │ │ -125 { 2, 2, 2, -7, -2, -4 }, │ │ │ │ │ -126 { -1, 2, 2, -1, -2, -4 }}; │ │ │ │ │ -127 │ │ │ │ │ -128} //namespace Dune │ │ │ │ │ -129 │ │ │ │ │ -130#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ +65 auto const& x = in[0], y = in[1]; │ │ │ │ │ +66 │ │ │ │ │ +67 const auto l1_x = 2*x - 1; │ │ │ │ │ +68 const auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ +69 const auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +70 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ +71 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +72 const auto l1_y = 2*y - 1; │ │ │ │ │ +73 const auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ +74 const auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +75 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ +76 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +77 │ │ │ │ │ +78 out[0][0]=sign0*(0.5*(-l4_x)+0.5*l5_x); │ │ │ │ │ +79 out[0][1]=0.0; │ │ │ │ │ +80 out[1][0]=-(1.5)*l4_x*l1_y+1.5*l5_x*l1_y; │ │ │ │ │ +81 out[1][1]=0.0; │ │ │ │ │ +82 out[2][0]=sign0*(-(2.5)*l4_x*l2_y+2.5*l5_x*l2_y); │ │ │ │ │ +83 out[2][1]=0.0; │ │ │ │ │ +84 out[3][0]=-(3.5)*l4_x*l3_y+3.5*l5_x*l3_y; │ │ │ │ │ +85 out[3][1]=0.0; │ │ │ │ │ +86 out[4][0]=sign0*(-(4.5)*l4_x*l4_y+4.5*l5_x*l4_y); │ │ │ │ │ +87 out[4][1]=0.0; │ │ │ │ │ +88 │ │ │ │ │ +89 out[5][0]=sign1*(0.5*l4_x+0.5*l5_x); │ │ │ │ │ +90 out[5][1]=0.0; │ │ │ │ │ +91 out[6][0]=-(1.5)*l4_x*l1_y-1.5*l5_x*l1_y; │ │ │ │ │ +92 out[6][1]=0.0; │ │ │ │ │ +93 out[7][0]=sign1*(2.5*l4_x*l2_y+2.5*l5_x*l2_y); │ │ │ │ │ +94 out[7][1]=0.0; │ │ │ │ │ +95 out[8][0]=-(3.5)*l4_x*l3_y-3.5*l5_x*l3_y; │ │ │ │ │ +96 out[8][1]=0.0; │ │ │ │ │ +97 out[9][0]=sign1*(4.5*l4_x*l4_y+4.5*l5_x*l4_y); │ │ │ │ │ +98 out[9][1]=0.0; │ │ │ │ │ +99 │ │ │ │ │ +100 out[10][0]=0.0; │ │ │ │ │ +101 out[10][1]=sign2*(0.5*(-l4_y)+0.5*l5_y); │ │ │ │ │ +102 out[11][0]=0.0; │ │ │ │ │ +103 out[11][1]=1.5*l1_x*l4_y-1.5*l1_x*l5_y; │ │ │ │ │ +104 out[12][0]=0.0; │ │ │ │ │ +105 out[12][1]=sign2*(-(2.5)*l2_x*l4_y+2.5*l2_x*l5_y); │ │ │ │ │ +106 out[13][0]=0.0; │ │ │ │ │ +107 out[13][1]=3.5*l3_x*l4_y-3.5*l3_x*l5_y; │ │ │ │ │ +108 out[14][0]=0.0; │ │ │ │ │ +109 out[14][1]=sign2*(-(4.5)*l4_x*l4_y+4.5*l4_x*l5_y); │ │ │ │ │ +110 │ │ │ │ │ +111 out[15][0]=0.0; │ │ │ │ │ +112 out[15][1]=sign3*(0.5*l4_y+0.5*l5_y); │ │ │ │ │ +113 out[16][0]=0.0; │ │ │ │ │ +114 out[16][1]=1.5*l1_x*l4_y+1.5*l1_x*l5_y; │ │ │ │ │ +115 out[17][0]=0.0; │ │ │ │ │ +116 out[17][1]=sign3*(2.5*l2_x*l4_y+2.5*l2_x*l5_y); │ │ │ │ │ +117 out[18][0]=0.0; │ │ │ │ │ +118 out[18][1]=3.5*l3_x*l4_y+3.5*l3_x*l5_y; │ │ │ │ │ +119 out[19][0]=0.0; │ │ │ │ │ +120 out[19][1]=sign3*(4.5*l4_x*l4_y+4.5*l4_x*l5_y); │ │ │ │ │ +121 │ │ │ │ │ +122 out[20][0]=1.0-l4_x; │ │ │ │ │ +123 out[20][1]=0.0; │ │ │ │ │ +124 out[21][0]=3.0*l1_y-3.0*l4_x*l1_y; │ │ │ │ │ +125 out[21][1]=0.0; │ │ │ │ │ +126 out[22][0]=5.0*l2_y-5.0*l4_x*l2_y; │ │ │ │ │ +127 out[22][1]=0.0; │ │ │ │ │ +128 out[23][0]=7.0*l3_y-7.0*l4_x*l3_y; │ │ │ │ │ +129 out[23][1]=0.0; │ │ │ │ │ +130 out[24][0]=9.0*l4_y-9.0*l4_x*l4_y; │ │ │ │ │ +131 out[24][1]=0.0; │ │ │ │ │ +132 out[25][0]=3.0*l1_x-3.0*l5_x; │ │ │ │ │ +133 out[25][1]=0.0; │ │ │ │ │ +134 out[26][0]=9.0*l1_x*l1_y-9.0*l5_x*l1_y; │ │ │ │ │ +135 out[26][1]=0.0; │ │ │ │ │ +136 out[27][0]=15.0*l1_x*l2_y-15.0*l5_x*l2_y; │ │ │ │ │ +137 out[27][1]=0.0; │ │ │ │ │ +138 out[28][0]=21.0*l1_x*l3_y-21.0*l5_x*l3_y; │ │ │ │ │ +139 out[28][1]=0.0; │ │ │ │ │ +140 out[29][0]=27.0*l1_x*l4_y-27.0*l5_x*l4_y; │ │ │ │ │ +141 out[29][1]=0.0; │ │ │ │ │ +142 out[30][0]=5.0*l2_x-5.0*l4_x; │ │ │ │ │ +143 out[30][1]=0.0; │ │ │ │ │ +144 out[31][0]=15.0*l2_x*l1_y-15.0*l4_x*l1_y; │ │ │ │ │ +145 out[31][1]=0.0; │ │ │ │ │ +146 out[32][0]=25.0*l2_x*l2_y-25.0*l4_x*l2_y; │ │ │ │ │ +147 out[32][1]=0.0; │ │ │ │ │ +148 out[33][0]=35.0*l2_x*l3_y-35.0*l4_x*l3_y; │ │ │ │ │ +149 out[33][1]=0.0; │ │ │ │ │ +150 out[34][0]=45.0*l2_x*l4_y-45.0*l4_x*l4_y; │ │ │ │ │ +151 out[34][1]=0.0; │ │ │ │ │ +152 out[35][0]=7.0*l3_x-7.0*l5_x; │ │ │ │ │ +153 out[35][1]=0.0; │ │ │ │ │ +154 out[36][0]=21.0*l3_x*l1_y-21.0*l5_x*l1_y; │ │ │ │ │ +155 out[36][1]=0.0; │ │ │ │ │ +156 out[37][0]=35.0*l3_x*l2_y-35.0*l5_x*l2_y; │ │ │ │ │ +157 out[37][1]=0.0; │ │ │ │ │ +158 out[38][0]=49.0*l3_x*l3_y-49.0*l5_x*l3_y; │ │ │ │ │ +159 out[38][1]=0.0; │ │ │ │ │ +160 out[39][0]=63.0*l3_x*l4_y-63.0*l5_x*l4_y; │ │ │ │ │ +161 out[39][1]=0.0; │ │ │ │ │ +162 out[40][0]=0.0; │ │ │ │ │ +163 out[40][1]=1.0-l4_y; │ │ │ │ │ +164 out[41][0]=0.0; │ │ │ │ │ +165 out[41][1]=3.0*l1_y-3.0*l5_y; │ │ │ │ │ +166 out[42][0]=0.0; │ │ │ │ │ +167 out[42][1]=5.0*l2_y-5.0*l4_y; │ │ │ │ │ +168 out[43][0]=0.0; │ │ │ │ │ +169 out[43][1]=7.0*l3_y-7.0*l5_y; │ │ │ │ │ +170 out[44][0]=0.0; │ │ │ │ │ +171 out[44][1]=3.0*l1_x-3.0*l1_x*l4_y; │ │ │ │ │ +172 out[45][0]=0.0; │ │ │ │ │ +173 out[45][1]=9.0*l1_x*l1_y-9.0*l1_x*l5_y; │ │ │ │ │ +174 out[46][0]=0.0; │ │ │ │ │ +175 out[46][1]=15.0*l1_x*l2_y-15.0*l1_x*l4_y; │ │ │ │ │ +176 out[47][0]=0.0; │ │ │ │ │ +177 out[47][1]=21.0*l1_x*l3_y-21.0*l1_x*l5_y; │ │ │ │ │ +178 out[48][0]=0.0; │ │ │ │ │ +179 out[48][1]=5.0*l2_x-5.0*l2_x*l4_y; │ │ │ │ │ +180 out[49][0]=0.0; │ │ │ │ │ +181 out[49][1]=15.0*l2_x*l1_y-15.0*l2_x*l5_y; │ │ │ │ │ +182 out[50][0]=0.0; │ │ │ │ │ +183 out[50][1]=25.0*l2_x*l2_y-25.0*l2_x*l4_y; │ │ │ │ │ +184 out[51][0]=0.0; │ │ │ │ │ +185 out[51][1]=35.0*l2_x*l3_y-35.0*l2_x*l5_y; │ │ │ │ │ +186 out[52][0]=0.0; │ │ │ │ │ +187 out[52][1]=7.0*l3_x-7.0*l3_x*l4_y; │ │ │ │ │ +188 out[53][0]=0.0; │ │ │ │ │ +189 out[53][1]=21.0*l3_x*l1_y-21.0*l3_x*l5_y; │ │ │ │ │ +190 out[54][0]=0.0; │ │ │ │ │ +191 out[54][1]=35.0*l3_x*l2_y-35.0*l3_x*l4_y; │ │ │ │ │ +192 out[55][0]=0.0; │ │ │ │ │ +193 out[55][1]=49.0*l3_x*l3_y-49.0*l3_x*l5_y; │ │ │ │ │ +194 out[56][0]=0.0; │ │ │ │ │ +195 out[56][1]=9.0*l4_x-9.0*l4_x*l4_y; │ │ │ │ │ +196 out[57][0]=0.0; │ │ │ │ │ +197 out[57][1]=27.0*l4_x*l1_y-27.0*l4_x*l5_y; │ │ │ │ │ +198 out[58][0]=0.0; │ │ │ │ │ +199 out[58][1]=45.0*l4_x*l2_y-45.0*l4_x*l4_y; │ │ │ │ │ +200 out[59][0]=0.0; │ │ │ │ │ +201 out[59][1]=63.0*l4_x*l3_y-63.0*l4_x*l5_y; │ │ │ │ │ +202 } │ │ │ │ │ +203 │ │ │ │ │ +_2_1_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +211 std::vector& out) const │ │ │ │ │ +212 { │ │ │ │ │ +213 out.resize(60); │ │ │ │ │ +214 auto const& x = in[0], y = in[1]; │ │ │ │ │ +215 │ │ │ │ │ +216 const auto l1_x = 2*x - 1; │ │ │ │ │ +217 const auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ +218 const auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +219 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ +220 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +221 const auto l1_y = 2*y - 1; │ │ │ │ │ +222 const auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ +223 const auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +224 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ +225 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +226 │ │ │ │ │ +227 const auto dxl1_x = 2.0; │ │ │ │ │ +228 const auto dxl2_x = 12*x - 6; │ │ │ │ │ +229 const auto dxl3_x = x*(60*x - 60) + 12; │ │ │ │ │ +230 const auto dxl4_x = x*(x*(280*x - 420) + 180) - 20; │ │ │ │ │ +231 const auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30; │ │ │ │ │ +232 const auto dyl1_y = 2.0; │ │ │ │ │ +233 const auto dyl2_y = 12*y - 6; │ │ │ │ │ +234 const auto dyl3_y = y*(60*y - 60) + 12; │ │ │ │ │ +235 const auto dyl4_y = y*(y*(280*y - 420) + 180) - 20; │ │ │ │ │ +236 const auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30; │ │ │ │ │ +237 │ │ │ │ │ +238 // x-component │ │ │ │ │ +239 out[0][0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x); │ │ │ │ │ +240 out[0][1][0]=0.0; │ │ │ │ │ +241 out[1][0][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y; │ │ │ │ │ +242 out[1][1][0]=0.0; │ │ │ │ │ +243 out[2][0][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ +244 out[2][1][0]=0.0; │ │ │ │ │ +245 out[3][0][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y; │ │ │ │ │ +246 out[3][1][0]=0.0; │ │ │ │ │ +247 out[4][0][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ +248 out[4][1][0]=0.0; │ │ │ │ │ +249 │ │ │ │ │ +250 out[5][0][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x); │ │ │ │ │ +251 out[5][1][0]=0.0; │ │ │ │ │ +252 out[6][0][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y; │ │ │ │ │ +253 out[6][1][0]=0.0; │ │ │ │ │ +254 out[7][0][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ +255 out[7][1][0]=0.0; │ │ │ │ │ +256 out[8][0][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y; │ │ │ │ │ +257 out[8][1][0]=0.0; │ │ │ │ │ +258 out[9][0][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ +259 out[9][1][0]=0.0; │ │ │ │ │ +260 │ │ │ │ │ +261 out[10][0][0]=0.0; │ │ │ │ │ +262 out[10][1][0]=0.0; │ │ │ │ │ +263 out[11][0][0]=0.0; │ │ │ │ │ +264 out[11][1][0]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y; │ │ │ │ │ +265 out[12][0][0]=0.0; │ │ │ │ │ +266 out[12][1][0]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ +267 out[13][0][0]=0.0; │ │ │ │ │ +268 out[13][1][0]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y; │ │ │ │ │ +269 out[14][0][0]=0.0; │ │ │ │ │ +270 out[14][1][0]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ +271 │ │ │ │ │ +272 out[15][0][0]=0.0; │ │ │ │ │ +273 out[15][1][0]=0.0; │ │ │ │ │ +274 out[16][0][0]=0.0; │ │ │ │ │ +275 out[16][1][0]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y; │ │ │ │ │ +276 out[17][0][0]=0.0; │ │ │ │ │ +277 out[17][1][0]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ +278 out[18][0][0]=0.0; │ │ │ │ │ +279 out[18][1][0]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y; │ │ │ │ │ +280 out[19][0][0]=0.0; │ │ │ │ │ +281 out[19][1][0]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ +282 │ │ │ │ │ +283 out[20][0][0]=-dxl4_x; │ │ │ │ │ +284 out[20][1][0]=0.0; │ │ │ │ │ +285 out[21][0][0]=-3.0*dxl4_x*l1_y; │ │ │ │ │ +286 out[21][1][0]=0.0; │ │ │ │ │ +287 out[22][0][0]=-5.0*dxl4_x*l2_y; │ │ │ │ │ +288 out[22][1][0]=0.0; │ │ │ │ │ +289 out[23][0][0]=-7.0*dxl4_x*l3_y; │ │ │ │ │ +290 out[23][1][0]=0.0; │ │ │ │ │ +291 out[24][0][0]=-9.0*dxl4_x*l4_y; │ │ │ │ │ +292 out[24][1][0]=0.0; │ │ │ │ │ +293 out[25][0][0]=3.0*dxl1_x-3.0*dxl5_x; │ │ │ │ │ +294 out[25][1][0]=0.0; │ │ │ │ │ +295 out[26][0][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y; │ │ │ │ │ +296 out[26][1][0]=0.0; │ │ │ │ │ +297 out[27][0][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y; │ │ │ │ │ +298 out[27][1][0]=0.0; │ │ │ │ │ +299 out[28][0][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y; │ │ │ │ │ +300 out[28][1][0]=0.0; │ │ │ │ │ +301 out[29][0][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y; │ │ │ │ │ +302 out[29][1][0]=0.0; │ │ │ │ │ +303 out[30][0][0]=5.0*dxl2_x-5.0*dxl4_x; │ │ │ │ │ +304 out[30][1][0]=0.0; │ │ │ │ │ +305 out[31][0][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y; │ │ │ │ │ +306 out[31][1][0]=0.0; │ │ │ │ │ +307 out[32][0][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y; │ │ │ │ │ +308 out[32][1][0]=0.0; │ │ │ │ │ +309 out[33][0][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y; │ │ │ │ │ +310 out[33][1][0]=0.0; │ │ │ │ │ +311 out[34][0][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y; │ │ │ │ │ +312 out[34][1][0]=0.0; │ │ │ │ │ +313 out[35][0][0]=7.0*dxl3_x-7.0*dxl5_x; │ │ │ │ │ +314 out[35][1][0]=0.0; │ │ │ │ │ +315 out[36][0][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y; │ │ │ │ │ +316 out[36][1][0]=0.0; │ │ │ │ │ +317 out[37][0][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y; │ │ │ │ │ +318 out[37][1][0]=0.0; │ │ │ │ │ +319 out[38][0][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y; │ │ │ │ │ +320 out[38][1][0]=0.0; │ │ │ │ │ +321 out[39][0][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y; │ │ │ │ │ +322 out[39][1][0]=0.0; │ │ │ │ │ +323 out[40][0][0]=0.0; │ │ │ │ │ +324 out[40][1][0]=0.0; │ │ │ │ │ +325 out[41][0][0]=0.0; │ │ │ │ │ +326 out[41][1][0]=0.0; │ │ │ │ │ +327 out[42][0][0]=0.0; │ │ │ │ │ +328 out[42][1][0]=0.0; │ │ │ │ │ +329 out[43][0][0]=0.0; │ │ │ │ │ +330 out[43][1][0]=0.0; │ │ │ │ │ +331 out[44][0][0]=0.0; │ │ │ │ │ +332 out[44][1][0]=3.0*dxl1_x-3.0*dxl1_x*l4_y; │ │ │ │ │ +333 out[45][0][0]=0.0; │ │ │ │ │ +334 out[45][1][0]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y; │ │ │ │ │ +335 out[46][0][0]=0.0; │ │ │ │ │ +336 out[46][1][0]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y; │ │ │ │ │ +337 out[47][0][0]=0.0; │ │ │ │ │ +338 out[47][1][0]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y; │ │ │ │ │ +339 out[48][0][0]=0.0; │ │ │ │ │ +340 out[48][1][0]=5.0*dxl2_x-5.0*dxl2_x*l4_y; │ │ │ │ │ +341 out[49][0][0]=0.0; │ │ │ │ │ +342 out[49][1][0]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y; │ │ │ │ │ +343 out[50][0][0]=0.0; │ │ │ │ │ +344 out[50][1][0]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y; │ │ │ │ │ +345 out[51][0][0]=0.0; │ │ │ │ │ +346 out[51][1][0]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y; │ │ │ │ │ +347 out[52][0][0]=0.0; │ │ │ │ │ +348 out[52][1][0]=7.0*dxl3_x-7.0*dxl3_x*l4_y; │ │ │ │ │ +349 out[53][0][0]=0.0; │ │ │ │ │ +350 out[53][1][0]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y; │ │ │ │ │ +351 out[54][0][0]=0.0; │ │ │ │ │ +352 out[54][1][0]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y; │ │ │ │ │ +353 out[55][0][0]=0.0; │ │ │ │ │ +354 out[55][1][0]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y; │ │ │ │ │ +355 out[56][0][0]=0.0; │ │ │ │ │ +356 out[56][1][0]=9.0*dxl4_x-9.0*dxl4_x*l4_y; │ │ │ │ │ +357 out[57][0][0]=0.0; │ │ │ │ │ +358 out[57][1][0]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y; │ │ │ │ │ +359 out[58][0][0]=0.0; │ │ │ │ │ +360 out[58][1][0]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y; │ │ │ │ │ +361 out[59][0][0]=0.0; │ │ │ │ │ +362 out[59][1][0]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y; │ │ │ │ │ +363 │ │ │ │ │ +364 // y-component │ │ │ │ │ +365 out[0][0][1]=0.0; │ │ │ │ │ +366 out[0][1][1]=0.0; │ │ │ │ │ +367 out[1][0][1]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y; │ │ │ │ │ +368 out[1][1][1]=0.0; │ │ │ │ │ +369 out[2][0][1]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ +370 out[2][1][1]=0.0; │ │ │ │ │ +371 out[3][0][1]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y; │ │ │ │ │ +372 out[3][1][1]=0.0; │ │ │ │ │ +373 out[4][0][1]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ +374 out[4][1][1]=0.0; │ │ │ │ │ +375 │ │ │ │ │ +376 out[5][0][1]=0.0; │ │ │ │ │ +377 out[5][1][1]=0.0; │ │ │ │ │ +378 out[6][0][1]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y; │ │ │ │ │ +379 out[6][1][1]=0.0; │ │ │ │ │ +380 out[7][0][1]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ +381 out[7][1][1]=0.0; │ │ │ │ │ +382 out[8][0][1]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y; │ │ │ │ │ +383 out[8][1][1]=0.0; │ │ │ │ │ +384 out[9][0][1]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ +385 out[9][1][1]=0.0; │ │ │ │ │ +386 │ │ │ │ │ +387 out[10][0][1]=0.0; │ │ │ │ │ +388 out[10][1][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y); │ │ │ │ │ +389 out[11][0][1]=0.0; │ │ │ │ │ +390 out[11][1][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y; │ │ │ │ │ +391 out[12][0][1]=0.0; │ │ │ │ │ +392 out[12][1][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ +393 out[13][0][1]=0.0; │ │ │ │ │ +394 out[13][1][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y; │ │ │ │ │ +395 out[14][0][1]=0.0; │ │ │ │ │ +396 out[14][1][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ +397 │ │ │ │ │ +398 out[15][0][1]=0.0; │ │ │ │ │ +399 out[15][1][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y); │ │ │ │ │ +400 out[16][0][1]=0.0; │ │ │ │ │ +401 out[16][1][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y; │ │ │ │ │ +402 out[17][0][1]=0.0; │ │ │ │ │ +403 out[17][1][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ +404 out[18][0][1]=0.0; │ │ │ │ │ +405 out[18][1][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y; │ │ │ │ │ +406 out[19][0][1]=0.0; │ │ │ │ │ +407 out[19][1][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ +408 │ │ │ │ │ +409 out[20][0][1]=0.0; │ │ │ │ │ +410 out[20][1][1]=0.0; │ │ │ │ │ +411 out[21][0][1]=3.0*dyl1_y-3.0*l4_x*dyl1_y; │ │ │ │ │ +412 out[21][1][1]=0.0; │ │ │ │ │ +413 out[22][0][1]=5.0*dyl2_y-5.0*l4_x*dyl2_y; │ │ │ │ │ +414 out[22][1][1]=0.0; │ │ │ │ │ +415 out[23][0][1]=7.0*dyl3_y-7.0*l4_x*dyl3_y; │ │ │ │ │ +416 out[23][1][1]=0.0; │ │ │ │ │ +417 out[24][0][1]=9.0*dyl4_y-9.0*l4_x*dyl4_y; │ │ │ │ │ +418 out[24][1][1]=0.0; │ │ │ │ │ +419 out[25][0][1]=0.0; │ │ │ │ │ +420 out[25][1][1]=0.0; │ │ │ │ │ +421 out[26][0][1]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y; │ │ │ │ │ +422 out[26][1][1]=0.0; │ │ │ │ │ +423 out[27][0][1]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y; │ │ │ │ │ +424 out[27][1][1]=0.0; │ │ │ │ │ +425 out[28][0][1]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y; │ │ │ │ │ +426 out[28][1][1]=0.0; │ │ │ │ │ +427 out[29][0][1]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y; │ │ │ │ │ +428 out[29][1][1]=0.0; │ │ │ │ │ +429 out[30][0][1]=0.0; │ │ │ │ │ +430 out[30][1][1]=0.0; │ │ │ │ │ +431 out[31][0][1]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y; │ │ │ │ │ +432 out[31][1][1]=0.0; │ │ │ │ │ +433 out[32][0][1]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y; │ │ │ │ │ +434 out[32][1][1]=0.0; │ │ │ │ │ +435 out[33][0][1]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y; │ │ │ │ │ +436 out[33][1][1]=0.0; │ │ │ │ │ +437 out[34][0][1]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y; │ │ │ │ │ +438 out[34][1][1]=0.0; │ │ │ │ │ +439 out[35][0][1]=0.0; │ │ │ │ │ +440 out[35][1][1]=0.0; │ │ │ │ │ +441 out[36][0][1]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y; │ │ │ │ │ +442 out[36][1][1]=0.0; │ │ │ │ │ +443 out[37][0][1]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y; │ │ │ │ │ +444 out[37][1][1]=0.0; │ │ │ │ │ +445 out[38][0][1]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y; │ │ │ │ │ +446 out[38][1][1]=0.0; │ │ │ │ │ +447 out[39][0][1]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y; │ │ │ │ │ +448 out[39][1][1]=0.0; │ │ │ │ │ +449 out[40][0][1]=0.0; │ │ │ │ │ +450 out[40][1][1]=-dyl4_y; │ │ │ │ │ +451 out[41][0][1]=0.0; │ │ │ │ │ +452 out[41][1][1]=3.0*dyl1_y-3.0*dyl5_y; │ │ │ │ │ +453 out[42][0][1]=0.0; │ │ │ │ │ +454 out[42][1][1]=5.0*dyl2_y-5.0*dyl4_y; │ │ │ │ │ +455 out[43][0][1]=0.0; │ │ │ │ │ +456 out[43][1][1]=7.0*dyl3_y-7.0*dyl5_y; │ │ │ │ │ +457 out[44][0][1]=0.0; │ │ │ │ │ +458 out[44][1][1]=-3.0*l1_x*dyl4_y; │ │ │ │ │ +459 out[45][0][1]=0.0; │ │ │ │ │ +460 out[45][1][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y; │ │ │ │ │ +461 out[46][0][1]=0.0; │ │ │ │ │ +462 out[46][1][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y; │ │ │ │ │ +463 out[47][0][1]=0.0; │ │ │ │ │ +464 out[47][1][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y; │ │ │ │ │ +465 out[48][0][1]=0.0; │ │ │ │ │ +466 out[48][1][1]=-5.0*l2_x*dyl4_y; │ │ │ │ │ +467 out[49][0][1]=0.0; │ │ │ │ │ +468 out[49][1][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y; │ │ │ │ │ +469 out[50][0][1]=0.0; │ │ │ │ │ +470 out[50][1][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y; │ │ │ │ │ +471 out[51][0][1]=0.0; │ │ │ │ │ +472 out[51][1][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y; │ │ │ │ │ +473 out[52][0][1]=0.0; │ │ │ │ │ +474 out[52][1][1]=-7.0*l3_x*dyl4_y; │ │ │ │ │ +475 out[53][0][1]=0.0; │ │ │ │ │ +476 out[53][1][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y; │ │ │ │ │ +477 out[54][0][1]=0.0; │ │ │ │ │ +478 out[54][1][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y; │ │ │ │ │ +479 out[55][0][1]=0.0; │ │ │ │ │ +480 out[55][1][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y; │ │ │ │ │ +481 out[56][0][1]=0.0; │ │ │ │ │ +482 out[56][1][1]=-9.0*l4_x*dyl4_y; │ │ │ │ │ +483 out[57][0][1]=0.0; │ │ │ │ │ +484 out[57][1][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y; │ │ │ │ │ +485 out[58][0][1]=0.0; │ │ │ │ │ +486 out[58][1][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y; │ │ │ │ │ +487 out[59][0][1]=0.0; │ │ │ │ │ +488 out[59][1][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y; │ │ │ │ │ +489 } │ │ │ │ │ +490 │ │ │ │ │ +_4_9_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +493 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +494 std::vector& out) const // return value │ │ │ │ │ +495 { │ │ │ │ │ +496 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +497 if (totalOrder == 0) { │ │ │ │ │ +498 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +499 } else if (totalOrder == 1) { │ │ │ │ │ +500 out.resize(_s_i_z_e()); │ │ │ │ │ +501 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +502 auto const& x = in[0], y = in[1]; │ │ │ │ │ +503 │ │ │ │ │ +504 auto l1_x = 2*x - 1; │ │ │ │ │ +505 auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ +506 auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +507 auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ +508 auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +509 auto l1_y = 2*y - 1; │ │ │ │ │ +510 auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ +511 auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +512 auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ +513 auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ +514 │ │ │ │ │ +515 if (direction == 0) { │ │ │ │ │ +516 auto dxl1_x = 2.0; │ │ │ │ │ +517 auto dxl2_x = 12*x - 6; │ │ │ │ │ +518 auto dxl3_x = x*(60*x - 60) + 12; │ │ │ │ │ +519 auto dxl4_x = x*(x*(280*x - 420) + 180) - 20; │ │ │ │ │ +520 auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30; │ │ │ │ │ +521 │ │ │ │ │ +522 out[0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x); │ │ │ │ │ +523 out[0][1]=0.0; │ │ │ │ │ +524 out[1][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y; │ │ │ │ │ +525 out[1][1]=0.0; │ │ │ │ │ +526 out[2][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ +527 out[2][1]=0.0; │ │ │ │ │ +528 out[3][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y; │ │ │ │ │ +529 out[3][1]=0.0; │ │ │ │ │ +530 out[4][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ +531 out[4][1]=0.0; │ │ │ │ │ +532 │ │ │ │ │ +533 out[5][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x); │ │ │ │ │ +534 out[5][1]=0.0; │ │ │ │ │ +535 out[6][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y; │ │ │ │ │ +536 out[6][1]=0.0; │ │ │ │ │ +537 out[7][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ +538 out[7][1]=0.0; │ │ │ │ │ +539 out[8][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y; │ │ │ │ │ +540 out[8][1]=0.0; │ │ │ │ │ +541 out[9][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ +542 out[9][1]=0.0; │ │ │ │ │ +543 │ │ │ │ │ +544 out[10][0]=0.0; │ │ │ │ │ +545 out[10][1]=0.0; │ │ │ │ │ +546 out[11][0]=0.0; │ │ │ │ │ +547 out[11][1]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y; │ │ │ │ │ +548 out[12][0]=0.0; │ │ │ │ │ +549 out[12][1]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ +550 out[13][0]=0.0; │ │ │ │ │ +551 out[13][1]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y; │ │ │ │ │ +552 out[14][0]=0.0; │ │ │ │ │ +553 out[14][1]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ +554 │ │ │ │ │ +555 out[15][0]=0.0; │ │ │ │ │ +556 out[15][1]=0.0; │ │ │ │ │ +557 out[16][0]=0.0; │ │ │ │ │ +558 out[16][1]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y; │ │ │ │ │ +559 out[17][0]=0.0; │ │ │ │ │ +560 out[17][1]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ +561 out[18][0]=0.0; │ │ │ │ │ +562 out[18][1]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y; │ │ │ │ │ +563 out[19][0]=0.0; │ │ │ │ │ +564 out[19][1]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ +565 │ │ │ │ │ +566 out[20][0]=-dxl4_x; │ │ │ │ │ +567 out[20][1]=0.0; │ │ │ │ │ +568 out[21][0]=-3.0*dxl4_x*l1_y; │ │ │ │ │ +569 out[21][1]=0.0; │ │ │ │ │ +570 out[22][0]=-5.0*dxl4_x*l2_y; │ │ │ │ │ +571 out[22][1]=0.0; │ │ │ │ │ +572 out[23][0]=-7.0*dxl4_x*l3_y; │ │ │ │ │ +573 out[23][1]=0.0; │ │ │ │ │ +574 out[24][0]=-9.0*dxl4_x*l4_y; │ │ │ │ │ +575 out[24][1]=0.0; │ │ │ │ │ +576 out[25][0]=3.0*dxl1_x-3.0*dxl5_x; │ │ │ │ │ +577 out[25][1]=0.0; │ │ │ │ │ +578 out[26][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y; │ │ │ │ │ +579 out[26][1]=0.0; │ │ │ │ │ +580 out[27][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y; │ │ │ │ │ +581 out[27][1]=0.0; │ │ │ │ │ +582 out[28][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y; │ │ │ │ │ +583 out[28][1]=0.0; │ │ │ │ │ +584 out[29][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y; │ │ │ │ │ +585 out[29][1]=0.0; │ │ │ │ │ +586 out[30][0]=5.0*dxl2_x-5.0*dxl4_x; │ │ │ │ │ +587 out[30][1]=0.0; │ │ │ │ │ +588 out[31][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y; │ │ │ │ │ +589 out[31][1]=0.0; │ │ │ │ │ +590 out[32][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y; │ │ │ │ │ +591 out[32][1]=0.0; │ │ │ │ │ +592 out[33][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y; │ │ │ │ │ +593 out[33][1]=0.0; │ │ │ │ │ +594 out[34][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y; │ │ │ │ │ +595 out[34][1]=0.0; │ │ │ │ │ +596 out[35][0]=7.0*dxl3_x-7.0*dxl5_x; │ │ │ │ │ +597 out[35][1]=0.0; │ │ │ │ │ +598 out[36][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y; │ │ │ │ │ +599 out[36][1]=0.0; │ │ │ │ │ +600 out[37][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y; │ │ │ │ │ +601 out[37][1]=0.0; │ │ │ │ │ +602 out[38][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y; │ │ │ │ │ +603 out[38][1]=0.0; │ │ │ │ │ +604 out[39][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y; │ │ │ │ │ +605 out[39][1]=0.0; │ │ │ │ │ +606 out[40][0]=0.0; │ │ │ │ │ +607 out[40][1]=0.0; │ │ │ │ │ +608 out[41][0]=0.0; │ │ │ │ │ +609 out[41][1]=0.0; │ │ │ │ │ +610 out[42][0]=0.0; │ │ │ │ │ +611 out[42][1]=0.0; │ │ │ │ │ +612 out[43][0]=0.0; │ │ │ │ │ +613 out[43][1]=0.0; │ │ │ │ │ +614 out[44][0]=0.0; │ │ │ │ │ +615 out[44][1]=3.0*dxl1_x-3.0*dxl1_x*l4_y; │ │ │ │ │ +616 out[45][0]=0.0; │ │ │ │ │ +617 out[45][1]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y; │ │ │ │ │ +618 out[46][0]=0.0; │ │ │ │ │ +619 out[46][1]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y; │ │ │ │ │ +620 out[47][0]=0.0; │ │ │ │ │ +621 out[47][1]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y; │ │ │ │ │ +622 out[48][0]=0.0; │ │ │ │ │ +623 out[48][1]=5.0*dxl2_x-5.0*dxl2_x*l4_y; │ │ │ │ │ +624 out[49][0]=0.0; │ │ │ │ │ +625 out[49][1]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y; │ │ │ │ │ +626 out[50][0]=0.0; │ │ │ │ │ +627 out[50][1]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y; │ │ │ │ │ +628 out[51][0]=0.0; │ │ │ │ │ +629 out[51][1]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y; │ │ │ │ │ +630 out[52][0]=0.0; │ │ │ │ │ +631 out[52][1]=7.0*dxl3_x-7.0*dxl3_x*l4_y; │ │ │ │ │ +632 out[53][0]=0.0; │ │ │ │ │ +633 out[53][1]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y; │ │ │ │ │ +634 out[54][0]=0.0; │ │ │ │ │ +635 out[54][1]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y; │ │ │ │ │ +636 out[55][0]=0.0; │ │ │ │ │ +637 out[55][1]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y; │ │ │ │ │ +638 out[56][0]=0.0; │ │ │ │ │ +639 out[56][1]=9.0*dxl4_x-9.0*dxl4_x*l4_y; │ │ │ │ │ +640 out[57][0]=0.0; │ │ │ │ │ +641 out[57][1]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y; │ │ │ │ │ +642 out[58][0]=0.0; │ │ │ │ │ +643 out[58][1]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y; │ │ │ │ │ +644 out[59][0]=0.0; │ │ │ │ │ +645 out[59][1]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y; │ │ │ │ │ +646 │ │ │ │ │ +647 } else if (direction == 1) { │ │ │ │ │ +648 auto dyl1_y = 2.0; │ │ │ │ │ +649 auto dyl2_y = 12*y - 6; │ │ │ │ │ +650 auto dyl3_y = y*(60*y - 60) + 12; │ │ │ │ │ +651 auto dyl4_y = y*(y*(280*y - 420) + 180) - 20; │ │ │ │ │ +652 auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30; │ │ │ │ │ +653 │ │ │ │ │ +654 out[0][0]=0.0; │ │ │ │ │ +655 out[0][1]=0.0; │ │ │ │ │ +656 out[1][0]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y; │ │ │ │ │ +657 out[1][1]=0.0; │ │ │ │ │ +658 out[2][0]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ +659 out[2][1]=0.0; │ │ │ │ │ +660 out[3][0]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y; │ │ │ │ │ +661 out[3][1]=0.0; │ │ │ │ │ +662 out[4][0]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ +663 out[4][1]=0.0; │ │ │ │ │ +664 │ │ │ │ │ +665 out[5][0]=0.0; │ │ │ │ │ +666 out[5][1]=0.0; │ │ │ │ │ +667 out[6][0]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y; │ │ │ │ │ +668 out[6][1]=0.0; │ │ │ │ │ +669 out[7][0]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ +670 out[7][1]=0.0; │ │ │ │ │ +671 out[8][0]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y; │ │ │ │ │ +672 out[8][1]=0.0; │ │ │ │ │ +673 out[9][0]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ +674 out[9][1]=0.0; │ │ │ │ │ +675 │ │ │ │ │ +676 out[10][0]=0.0; │ │ │ │ │ +677 out[10][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y); │ │ │ │ │ +678 out[11][0]=0.0; │ │ │ │ │ +679 out[11][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y; │ │ │ │ │ +680 out[12][0]=0.0; │ │ │ │ │ +681 out[12][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ +682 out[13][0]=0.0; │ │ │ │ │ +683 out[13][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y; │ │ │ │ │ +684 out[14][0]=0.0; │ │ │ │ │ +685 out[14][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ +686 │ │ │ │ │ +687 out[15][0]=0.0; │ │ │ │ │ +688 out[15][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y); │ │ │ │ │ +689 out[16][0]=0.0; │ │ │ │ │ +690 out[16][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y; │ │ │ │ │ +691 out[17][0]=0.0; │ │ │ │ │ +692 out[17][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ +693 out[18][0]=0.0; │ │ │ │ │ +694 out[18][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y; │ │ │ │ │ +695 out[19][0]=0.0; │ │ │ │ │ +696 out[19][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ +697 │ │ │ │ │ +698 out[20][0]=0.0; │ │ │ │ │ +699 out[20][1]=0.0; │ │ │ │ │ +700 out[21][0]=3.0*dyl1_y-3.0*l4_x*dyl1_y; │ │ │ │ │ +701 out[21][1]=0.0; │ │ │ │ │ +702 out[22][0]=5.0*dyl2_y-5.0*l4_x*dyl2_y; │ │ │ │ │ +703 out[22][1]=0.0; │ │ │ │ │ +704 out[23][0]=7.0*dyl3_y-7.0*l4_x*dyl3_y; │ │ │ │ │ +705 out[23][1]=0.0; │ │ │ │ │ +706 out[24][0]=9.0*dyl4_y-9.0*l4_x*dyl4_y; │ │ │ │ │ +707 out[24][1]=0.0; │ │ │ │ │ +708 out[25][0]=0.0; │ │ │ │ │ +709 out[25][1]=0.0; │ │ │ │ │ +710 out[26][0]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y; │ │ │ │ │ +711 out[26][1]=0.0; │ │ │ │ │ +712 out[27][0]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y; │ │ │ │ │ +713 out[27][1]=0.0; │ │ │ │ │ +714 out[28][0]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y; │ │ │ │ │ +715 out[28][1]=0.0; │ │ │ │ │ +716 out[29][0]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y; │ │ │ │ │ +717 out[29][1]=0.0; │ │ │ │ │ +718 out[30][0]=0.0; │ │ │ │ │ +719 out[30][1]=0.0; │ │ │ │ │ +720 out[31][0]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y; │ │ │ │ │ +721 out[31][1]=0.0; │ │ │ │ │ +722 out[32][0]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y; │ │ │ │ │ +723 out[32][1]=0.0; │ │ │ │ │ +724 out[33][0]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y; │ │ │ │ │ +725 out[33][1]=0.0; │ │ │ │ │ +726 out[34][0]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y; │ │ │ │ │ +727 out[34][1]=0.0; │ │ │ │ │ +728 out[35][0]=0.0; │ │ │ │ │ +729 out[35][1]=0.0; │ │ │ │ │ +730 out[36][0]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y; │ │ │ │ │ +731 out[36][1]=0.0; │ │ │ │ │ +732 out[37][0]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y; │ │ │ │ │ +733 out[37][1]=0.0; │ │ │ │ │ +734 out[38][0]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y; │ │ │ │ │ +735 out[38][1]=0.0; │ │ │ │ │ +736 out[39][0]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y; │ │ │ │ │ +737 out[39][1]=0.0; │ │ │ │ │ +738 out[40][0]=0.0; │ │ │ │ │ +739 out[40][1]=-dyl4_y; │ │ │ │ │ +740 out[41][0]=0.0; │ │ │ │ │ +741 out[41][1]=3.0*dyl1_y-3.0*dyl5_y; │ │ │ │ │ +742 out[42][0]=0.0; │ │ │ │ │ +743 out[42][1]=5.0*dyl2_y-5.0*dyl4_y; │ │ │ │ │ +744 out[43][0]=0.0; │ │ │ │ │ +745 out[43][1]=7.0*dyl3_y-7.0*dyl5_y; │ │ │ │ │ +746 out[44][0]=0.0; │ │ │ │ │ +747 out[44][1]=-3.0*l1_x*dyl4_y; │ │ │ │ │ +748 out[45][0]=0.0; │ │ │ │ │ +749 out[45][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y; │ │ │ │ │ +750 out[46][0]=0.0; │ │ │ │ │ +751 out[46][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y; │ │ │ │ │ +752 out[47][0]=0.0; │ │ │ │ │ +753 out[47][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y; │ │ │ │ │ +754 out[48][0]=0.0; │ │ │ │ │ +755 out[48][1]=-5.0*l2_x*dyl4_y; │ │ │ │ │ +756 out[49][0]=0.0; │ │ │ │ │ +757 out[49][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y; │ │ │ │ │ +758 out[50][0]=0.0; │ │ │ │ │ +759 out[50][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y; │ │ │ │ │ +760 out[51][0]=0.0; │ │ │ │ │ +761 out[51][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y; │ │ │ │ │ +762 out[52][0]=0.0; │ │ │ │ │ +763 out[52][1]=-7.0*l3_x*dyl4_y; │ │ │ │ │ +764 out[53][0]=0.0; │ │ │ │ │ +765 out[53][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y; │ │ │ │ │ +766 out[54][0]=0.0; │ │ │ │ │ +767 out[54][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y; │ │ │ │ │ +768 out[55][0]=0.0; │ │ │ │ │ +769 out[55][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y; │ │ │ │ │ +770 out[56][0]=0.0; │ │ │ │ │ +771 out[56][1]=-9.0*l4_x*dyl4_y; │ │ │ │ │ +772 out[57][0]=0.0; │ │ │ │ │ +773 out[57][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y; │ │ │ │ │ +774 out[58][0]=0.0; │ │ │ │ │ +775 out[58][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y; │ │ │ │ │ +776 out[59][0]=0.0; │ │ │ │ │ +777 out[59][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y; │ │ │ │ │ +778 } else { │ │ │ │ │ +779 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +780 } │ │ │ │ │ +781 } else { │ │ │ │ │ +782 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +783 } │ │ │ │ │ +784 } │ │ │ │ │ +785 │ │ │ │ │ +_7_8_7 unsigned int _o_r_d_e_r () const │ │ │ │ │ +788 { │ │ │ │ │ +789 return 9; │ │ │ │ │ +790 } │ │ │ │ │ +791 │ │ │ │ │ +792 private: │ │ │ │ │ +793 R sign0, sign1, sign2, sign3; │ │ │ │ │ +794 }; │ │ │ │ │ +795} │ │ │ │ │ +796 │ │ │ │ │ +797#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ -RF RangeFieldType │ │ │ │ │ -Export type for range field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, FieldVector< D, 3 >, R, 1, FieldVector< R, 1 >, │ │ │ │ │ -FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:492 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ -evaluate all shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:787 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ -evaluate jacobian of all shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -polynomial order of the shape functions │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:108 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:80 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:210 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT4Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:40 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube3d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,29 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas0cube3d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Convenience header that includes all available Rannacher-Turek LocalFiniteElements. │ │ │ │ -More...

│ │ │ │ -
#include <dune/localfunctions/rannacherturek/rannacherturek.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "raviartthomas0cube3d/raviartthomas0cube3dall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available Rannacher-Turek LocalFiniteElements.

│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT0Cube3DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,16 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -rannacherturek.hh File Reference │ │ │ │ │ -Convenience header that includes all available Rannacher-Turek │ │ │ │ │ -LocalFiniteElements. _M_o_r_e_._._. │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas0cube3d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available Rannacher-Turek │ │ │ │ │ -LocalFiniteElements. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  _Z_e_r_o order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00152_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube3d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,27 +70,119 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek.hh
│ │ │ │ +
raviartthomas0cube3d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
23 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
31
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {}
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 basis(s),
│ │ │ │ +
37 interpolation(s)
│ │ │ │ +
38 {}
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return basis;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 {
│ │ │ │ +
47 return coefficients;
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
51 {
│ │ │ │ +
52 return interpolation;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ +
56 unsigned int size () const
│ │ │ │ +
57 {
│ │ │ │ +
58 return basis.size();
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ +
61 static constexpr GeometryType type ()
│ │ │ │ +
62 {
│ │ │ │ +
63 return GeometryTypes::hexahedron;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66 private:
│ │ │ │ + │ │ │ │ +
68 RT0Cube3DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71}
│ │ │ │ +
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Zero order Raviart-Thomas shape functions on cubes.
Definition raviartthomas0cube3d.hh:25
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas0cube3d.hh:61
│ │ │ │ +
RT0Cube3DLocalFiniteElement(int s)
Definition raviartthomas0cube3d.hh:35
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0cube3d.hh:56
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0cube3d.hh:40
│ │ │ │ +
RT0Cube3DLocalFiniteElement()
Definition raviartthomas0cube3d.hh:32
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0cube3d.hh:50
│ │ │ │ +
LocalFiniteElementTraits< RT0Cube3DLocalBasis< D, R >, RT0Cube3DLocalCoefficients, RT0Cube3DLocalInterpolation< RT0Cube3DLocalBasis< D, R > > > Traits
Definition raviartthomas0cube3d.hh:30
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0cube3d.hh:45
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:30
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:158
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:216
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,17 +1,127 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -rannacherturek.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas0cube3d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h> │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +27 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +28 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +29 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_0 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_2 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +33 {} │ │ │ │ │ +34 │ │ │ │ │ +_3_5 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +36 basis(s), │ │ │ │ │ +37 interpolation(s) │ │ │ │ │ +38 {} │ │ │ │ │ +39 │ │ │ │ │ +_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +41 { │ │ │ │ │ +42 return basis; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +46 { │ │ │ │ │ +47 return coefficients; │ │ │ │ │ +48 } │ │ │ │ │ +49 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return interpolation; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return basis.size(); │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +62 { │ │ │ │ │ +63 return GeometryTypes::hexahedron; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +66 private: │ │ │ │ │ +67 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +68 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +69 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +70 }; │ │ │ │ │ +71} │ │ │ │ │ +72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Zero order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0Cube3DLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0Cube3DLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT0Cube3DLocalBasis< D, R >, │ │ │ │ │ +RT0Cube3DLocalCoefficients, RT0Cube3DLocalInterpolation< RT0Cube3DLocalBasis< │ │ │ │ │ +D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:158 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:216 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomaslfecache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
rannachertureklocalinterpolation.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
raviartthomaslfecache.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <tuple>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/typeindex.hh>
│ │ │ │ +#include <dune/localfunctions/raviartthomas.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::RannacherTurekLocalInterpolation< D, R, d >
 please doc me More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Typedefs

template<class D , class R , std::size_t dim, std::size_t order>
using Dune::RaviartThomasLocalFiniteElementCache = LocalFiniteElementVariantCache< Impl::ImplementedRaviartThomasLocalFiniteElements< D, R, dim, order > >
 A cache that stores all available Raviart-Thomas local finite elements for the given dimension and order.
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannachertureklocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ +raviartthomaslfecache.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ -  please doc me _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +TTyyppeeddeeffss │ │ │ │ │ +template │ │ │ │ │ +using  _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ + _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e< Impl:: │ │ │ │ │ + ImplementedRaviartThomasLocalFiniteElements< D, R, dim, order > > │ │ │ │ │ +  A cache that stores all available Raviart-Thomas local finite elements │ │ │ │ │ + for the given dimension and order. │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00155_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomaslfecache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,124 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalinterpolation.hh
│ │ │ │ +
raviartthomaslfecache.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <tuple>
│ │ │ │ +
9#include <utility>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
14
│ │ │ │ - │ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │ +
12#include <dune/geometry/typeindex.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
19
│ │ │ │ -
29 template< class D, class R, unsigned int d >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ - │ │ │ │ -
33 R, 1, FieldVector< R, 1 >,
│ │ │ │ -
34 FieldMatrix< R, 1, d > > Traits;
│ │ │ │ -
35
│ │ │ │ -
36 public:
│ │ │ │ -
37 template< class F, class C >
│ │ │ │ -
│ │ │ │ -
38 void interpolate ( const F &f, std::vector< C > &out ) const
│ │ │ │ -
39 {
│ │ │ │ -
40 typedef typename Traits::DomainType DomainType;
│ │ │ │ -
41
│ │ │ │ -
42 // get cubic reference element
│ │ │ │ -
43 auto referenceElement = ReferenceElements< D, d >::cube();
│ │ │ │ -
44
│ │ │ │ -
45 const int size = 2*d;
│ │ │ │ -
46 assert( size == referenceElement.size( 1 ) );
│ │ │ │ -
47
│ │ │ │ -
48 // resize vector
│ │ │ │ -
49 out.resize( size );
│ │ │ │ -
50
│ │ │ │ -
51 // evaluate local function in barycenter of codim 1 subentities
│ │ │ │ -
52 for( int i = 0; i < size; ++i )
│ │ │ │ -
53 {
│ │ │ │ -
54 const DomainType &x = referenceElement.position( i, 1 );
│ │ │ │ -
55 out[ i ] = f(x);
│ │ │ │ -
56 }
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
59 };
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
61} // namespace Dune
│ │ │ │ -
62
│ │ │ │ -
63#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ +
17namespace Dune {
│ │ │ │ +
18
│ │ │ │ +
19namespace Impl {
│ │ │ │ +
20
│ │ │ │ +
21 // Provide implemented Raviart-Thomas local finite elements
│ │ │ │ +
22
│ │ │ │ +
23 template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ +
24 struct ImplementedRaviartThomasLocalFiniteElements
│ │ │ │ +
25 {};
│ │ │ │ +
26
│ │ │ │ +
27 template<class D, class R>
│ │ │ │ +
28 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,0> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ +
29 {
│ │ │ │ +
30 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ +
31 static auto getImplementations()
│ │ │ │ +
32 {
│ │ │ │ +
33 return std::make_tuple(
│ │ │ │ +
34 std::make_pair(index(GeometryTypes::triangle), []() { return RT02DLocalFiniteElement<D,R>(); }),
│ │ │ │ +
35 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT0Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ +
36 );
│ │ │ │ +
37 }
│ │ │ │ +
38 };
│ │ │ │ +
39
│ │ │ │ +
40 template<class D, class R>
│ │ │ │ +
41 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,1> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ +
42 {
│ │ │ │ +
43 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ +
44 static auto getImplementations()
│ │ │ │ +
45 {
│ │ │ │ +
46 return std::make_tuple(
│ │ │ │ +
47 std::make_pair(index(GeometryTypes::triangle), []() { return RT12DLocalFiniteElement<D,R>(); }),
│ │ │ │ +
48 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT1Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ +
49 );
│ │ │ │ +
50 }
│ │ │ │ +
51 };
│ │ │ │ +
52
│ │ │ │ +
53 template<class D, class R>
│ │ │ │ +
54 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,2> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ +
55 {
│ │ │ │ +
56 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ +
57 static auto getImplementations()
│ │ │ │ +
58 {
│ │ │ │ +
59 return std::make_tuple(
│ │ │ │ +
60 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT2Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ +
61 );
│ │ │ │ +
62 }
│ │ │ │ +
63 };
│ │ │ │ +
64
│ │ │ │ +
65 template<class D, class R>
│ │ │ │ +
66 struct ImplementedRaviartThomasLocalFiniteElements<D,R,3,0> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ +
67 {
│ │ │ │ +
68 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ +
69 static auto getImplementations()
│ │ │ │ +
70 {
│ │ │ │ +
71 return std::make_tuple(
│ │ │ │ +
72 std::make_pair(index(GeometryTypes::tetrahedron), []() { return RT03DLocalFiniteElement<D,R>(); }),
│ │ │ │ +
73 std::make_pair(index(GeometryTypes::hexahedron), []() { return RT0Cube3DLocalFiniteElement<D,R>(); })
│ │ │ │ +
74 );
│ │ │ │ +
75 }
│ │ │ │ +
76 };
│ │ │ │ +
77
│ │ │ │ +
78 template<class D, class R>
│ │ │ │ +
79 struct ImplementedRaviartThomasLocalFiniteElements<D,R,3,1> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ +
80 {
│ │ │ │ +
81 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ +
82 static auto getImplementations()
│ │ │ │ +
83 {
│ │ │ │ +
84 return std::make_tuple(
│ │ │ │ +
85 std::make_pair(index(GeometryTypes::hexahedron), []() { RT1Cube3DLocalFiniteElement<D,R>(); })
│ │ │ │ +
86 );
│ │ │ │ +
87 }
│ │ │ │ +
88 };
│ │ │ │ +
89
│ │ │ │ +
90} // namespace Impl
│ │ │ │ +
91
│ │ │ │ +
92
│ │ │ │ +
93
│ │ │ │ +
103template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ + │ │ │ │ +
105
│ │ │ │ +
106} // namespace Dune
│ │ │ │ +
107
│ │ │ │ +
108#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
please doc me
Definition rannachertureklocalinterpolation.hh:31
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition rannachertureklocalinterpolation.hh:38
│ │ │ │ - │ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,82 +1,134 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -rannachertureklocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomaslfecache.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ 16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -19 │ │ │ │ │ -29 template< class D, class R, unsigned int d > │ │ │ │ │ -_3_0 class _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -31 { │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _d_ _>, │ │ │ │ │ -33 R, 1, FieldVector< R, 1 >, │ │ │ │ │ -34 FieldMatrix< R, 1, d > > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -36 public: │ │ │ │ │ -37 template< class F, class C > │ │ │ │ │ -_3_8 void _i_n_t_e_r_p_o_l_a_t_e ( const F &f, std::vector< C > &out ) const │ │ │ │ │ -39 { │ │ │ │ │ -40 typedef typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e DomainType; │ │ │ │ │ -41 │ │ │ │ │ -42 // get cubic reference element │ │ │ │ │ -43 auto referenceElement = ReferenceElements< D, d >::cube(); │ │ │ │ │ -44 │ │ │ │ │ -45 const int size = 2*d; │ │ │ │ │ -46 assert( size == referenceElement.size( 1 ) ); │ │ │ │ │ -47 │ │ │ │ │ -48 // resize vector │ │ │ │ │ -49 out.resize( size ); │ │ │ │ │ -50 │ │ │ │ │ -51 // evaluate local function in barycenter of codim 1 subentities │ │ │ │ │ -52 for( int i = 0; i < size; ++i ) │ │ │ │ │ -53 { │ │ │ │ │ -54 const DomainType &x = referenceElement.position( i, 1 ); │ │ │ │ │ -55 out[ i ] = f(x); │ │ │ │ │ -56 } │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -59 }; │ │ │ │ │ -60 │ │ │ │ │ -61} // namespace Dune │ │ │ │ │ -62 │ │ │ │ │ -63#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ +17namespace _D_u_n_e { │ │ │ │ │ +18 │ │ │ │ │ +19namespace Impl { │ │ │ │ │ +20 │ │ │ │ │ +21 // Provide implemented Raviart-Thomas local finite elements │ │ │ │ │ +22 │ │ │ │ │ +23 template │ │ │ │ │ +24 struct ImplementedRaviartThomasLocalFiniteElements │ │ │ │ │ +25 {}; │ │ │ │ │ +26 │ │ │ │ │ +27 template │ │ │ │ │ +28 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ +29 { │ │ │ │ │ +30 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ +31 static auto getImplementations() │ │ │ │ │ +32 { │ │ │ │ │ +33 return std::make_tuple( │ │ │ │ │ +34 std::make_pair(index(GeometryTypes::triangle), []() { return │ │ │ │ │ +RT02DLocalFiniteElement(); }), │ │ │ │ │ +35 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ +RT0Cube2DLocalFiniteElement(); }) │ │ │ │ │ +36 ); │ │ │ │ │ +37 } │ │ │ │ │ +38 }; │ │ │ │ │ +39 │ │ │ │ │ +40 template │ │ │ │ │ +41 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ +42 { │ │ │ │ │ +43 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ +44 static auto getImplementations() │ │ │ │ │ +45 { │ │ │ │ │ +46 return std::make_tuple( │ │ │ │ │ +47 std::make_pair(index(GeometryTypes::triangle), []() { return │ │ │ │ │ +RT12DLocalFiniteElement(); }), │ │ │ │ │ +48 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ +RT1Cube2DLocalFiniteElement(); }) │ │ │ │ │ +49 ); │ │ │ │ │ +50 } │ │ │ │ │ +51 }; │ │ │ │ │ +52 │ │ │ │ │ +53 template │ │ │ │ │ +54 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ +55 { │ │ │ │ │ +56 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ +57 static auto getImplementations() │ │ │ │ │ +58 { │ │ │ │ │ +59 return std::make_tuple( │ │ │ │ │ +60 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ +RT2Cube2DLocalFiniteElement(); }) │ │ │ │ │ +61 ); │ │ │ │ │ +62 } │ │ │ │ │ +63 }; │ │ │ │ │ +64 │ │ │ │ │ +65 template │ │ │ │ │ +66 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ +67 { │ │ │ │ │ +68 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ +69 static auto getImplementations() │ │ │ │ │ +70 { │ │ │ │ │ +71 return std::make_tuple( │ │ │ │ │ +72 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ +RT03DLocalFiniteElement(); }), │ │ │ │ │ +73 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ +RT0Cube3DLocalFiniteElement(); }) │ │ │ │ │ +74 ); │ │ │ │ │ +75 } │ │ │ │ │ +76 }; │ │ │ │ │ +77 │ │ │ │ │ +78 template │ │ │ │ │ +79 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ +80 { │ │ │ │ │ +81 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ +82 static auto getImplementations() │ │ │ │ │ +83 { │ │ │ │ │ +84 return std::make_tuple( │ │ │ │ │ +85 std::make_pair(index(GeometryTypes::hexahedron), []() │ │ │ │ │ +{ RT1Cube3DLocalFiniteElement(); }) │ │ │ │ │ +86 ); │ │ │ │ │ +87 } │ │ │ │ │ +88 }; │ │ │ │ │ +89 │ │ │ │ │ +90} // namespace Impl │ │ │ │ │ +91 │ │ │ │ │ +92 │ │ │ │ │ +93 │ │ │ │ │ +103template │ │ │ │ │ +_1_0_4using _R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_I_m_p_l_:_: │ │ │ │ │ +_I_m_p_l_e_m_e_n_t_e_d_R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_s_<_D_,_R_,_d_i_m_,_o_r_d_e_r_>>; │ │ │ │ │ +105 │ │ │ │ │ +106} // namespace Dune │ │ │ │ │ +107 │ │ │ │ │ +108#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -please doc me │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:38 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +A cache storing a compile time selection of local finite element │ │ │ │ │ +implementations. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas02d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannachertureklocalbasis.hh File Reference
│ │ │ │ +
raviartthomas02d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include "rannacherturek2d/rannacherturek2dlocalbasis.hh"
│ │ │ │ -#include "rannacherturek3d/rannacherturek3dlocalbasis.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "raviartthomas02d/raviartthomas02dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas02d/raviartthomas02dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas02d/raviartthomas02dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalBasis< D, R, 2 >
 
struct  Dune::RannacherTurekLocalBasis< D, R, 3 >
class  Dune::RT02DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannachertureklocalbasis.hh File Reference │ │ │ │ │ -#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +raviartthomas02d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  _Z_e_r_o order Raviart-Thomas shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00158_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas02d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,60 +70,125 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalbasis.hh
│ │ │ │ +
raviartthomas02d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ -
10
│ │ │ │ -
11namespace Dune
│ │ │ │ -
12{
│ │ │ │ -
13
│ │ │ │ -
24 template< class D, class R, unsigned int d >
│ │ │ │ - │ │ │ │ -
26
│ │ │ │ -
27 template< class D, class R >
│ │ │ │ -
│ │ │ │ -
28 struct RannacherTurekLocalBasis< D, R, 2 >
│ │ │ │ -
29 : public RannacherTurek2DLocalBasis< D, R >
│ │ │ │ -
30 {};
│ │ │ │ -
│ │ │ │ -
31
│ │ │ │ -
32 template< class D, class R >
│ │ │ │ -
│ │ │ │ -
33 struct RannacherTurekLocalBasis< D, R, 3 >
│ │ │ │ -
34 : public RannacherTurek3DLocalBasis< D, R >
│ │ │ │ -
35 {};
│ │ │ │ -
│ │ │ │ -
36
│ │ │ │ -
37} // namespace Dune
│ │ │ │ -
38
│ │ │ │ -
39#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ +
27 class
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 {}
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
43 RT02DLocalFiniteElement (std::bitset<3> s) :
│ │ │ │ +
44 basis(s),
│ │ │ │ +
45 interpolation(s)
│ │ │ │ +
46 {}
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
48 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
49 {
│ │ │ │ +
50 return basis;
│ │ │ │ +
51 }
│ │ │ │ +
│ │ │ │ +
52
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
54 {
│ │ │ │ +
55 return coefficients;
│ │ │ │ +
56 }
│ │ │ │ +
│ │ │ │ +
57
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
59 {
│ │ │ │ +
60 return interpolation;
│ │ │ │ +
61 }
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ +
63 unsigned int size () const
│ │ │ │ +
64 {
│ │ │ │ +
65 return 3;
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
68 static constexpr GeometryType type ()
│ │ │ │ +
69 {
│ │ │ │ +
70 return GeometryTypes::triangle;
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
73 private:
│ │ │ │ + │ │ │ │ +
75 RT02DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
77 };
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79}
│ │ │ │ +
80
│ │ │ │ +
81#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ -
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ -
Rannacher-Turek shape functions.
Definition rannachertureklocalbasis.hh:25
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Zero order Raviart-Thomas shape functions on triangles.
Definition raviartthomas02d.hh:29
│ │ │ │ +
RT02DLocalFiniteElement()
Standard constructor.
Definition raviartthomas02d.hh:35
│ │ │ │ +
LocalFiniteElementTraits< RT02DLocalBasis< D, R >, RT02DLocalCoefficients, RT02DLocalInterpolation< RT02DLocalBasis< D, R > > > Traits
Definition raviartthomas02d.hh:32
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas02d.hh:68
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas02d.hh:58
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas02d.hh:48
│ │ │ │ +
RT02DLocalFiniteElement(std::bitset< 3 > s)
Constructor with explicitly given edge orientations.
Definition raviartthomas02d.hh:43
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas02d.hh:53
│ │ │ │ +
unsigned int size() const
Definition raviartthomas02d.hh:63
│ │ │ │ +
Definition raviartthomas02dlocalbasis.hh:27
│ │ │ │ +
Definition raviartthomas02dlocalcoefficients.hh:25
│ │ │ │ +
Definition raviartthomas02dlocalinterpolation.hh:20
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,52 +1,134 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -rannachertureklocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas02d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -9#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -10 │ │ │ │ │ -11namespace _D_u_n_e │ │ │ │ │ -12{ │ │ │ │ │ -13 │ │ │ │ │ -24 template< class D, class R, unsigned int d > │ │ │ │ │ -_2_5 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s; │ │ │ │ │ -26 │ │ │ │ │ -27 template< class D, class R > │ │ │ │ │ -_2_8 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s< D, R, 2 > │ │ │ │ │ -29 : public _R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s< D, R > │ │ │ │ │ -30 {}; │ │ │ │ │ -31 │ │ │ │ │ -32 template< class D, class R > │ │ │ │ │ -_3_3 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s< D, R, 3 > │ │ │ │ │ -34 : public _R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s< D, R > │ │ │ │ │ -35 {}; │ │ │ │ │ -36 │ │ │ │ │ -37} // namespace Dune │ │ │ │ │ -38 │ │ │ │ │ -39#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class │ │ │ │ │ +28 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_2 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_5 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +36 {} │ │ │ │ │ +37 │ │ │ │ │ +_4_3 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<3> s) : │ │ │ │ │ +44 basis(s), │ │ │ │ │ +45 interpolation(s) │ │ │ │ │ +46 {} │ │ │ │ │ +47 │ │ │ │ │ +_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +49 { │ │ │ │ │ +50 return basis; │ │ │ │ │ +51 } │ │ │ │ │ +52 │ │ │ │ │ +_5_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +54 { │ │ │ │ │ +55 return coefficients; │ │ │ │ │ +56 } │ │ │ │ │ +57 │ │ │ │ │ +_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +59 { │ │ │ │ │ +60 return interpolation; │ │ │ │ │ +61 } │ │ │ │ │ +62 │ │ │ │ │ +_6_3 unsigned int _s_i_z_e () const │ │ │ │ │ +64 { │ │ │ │ │ +65 return 3; │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +69 { │ │ │ │ │ +70 return GeometryTypes::triangle; │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +73 private: │ │ │ │ │ +74 _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +75 _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +76 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +77 }; │ │ │ │ │ +78 │ │ │ │ │ +79} │ │ │ │ │ +80 │ │ │ │ │ +81#endif │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Rannacher-Turek shape functions. │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalbasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Zero order Raviart-Thomas shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT02DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT02DLocalBasis< D, R >, RT02DLocalCoefficients, │ │ │ │ │ +RT02DLocalInterpolation< RT02DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:58 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT02DLocalFiniteElement(std::bitset< 3 > s) │ │ │ │ │ +Constructor with explicitly given edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02d.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:20 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramid.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannachertureklocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas0pyramid.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <algorithm>
│ │ │ │ -#include <array>
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas0pyramid/raviartthomas0pyramidlocalbasis.hh"
│ │ │ │ +#include "raviartthomas0pyramid/raviartthomas0pyramidlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas0pyramid/raviartthomas0pyramidlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalCoefficients< d >
 layout for Rannacher-Turek elements More...
class  Dune::RT0PyramidLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on pyramids. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannachertureklocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +raviartthomas0pyramid.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_ _> │ │ │ │ │ -  layout for Rannacher-Turek elements _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on pyramids. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00161_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannachertureklocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramid.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,96 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannachertureklocalcoefficients.hh
│ │ │ │ +
raviartthomas0pyramid.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │
7
│ │ │ │ -
8#include <algorithm>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <cassert>
│ │ │ │ -
11#include <cstddef>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │ -
25 template< unsigned int d >
│ │ │ │ +
25 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
27 {
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for( std::size_t i = 0; i < 2*d; ++i )
│ │ │ │ -
31 localKeys_[ i ] = LocalKey( i, 1, 0 );
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {
│ │ │ │ -
36 (*this) = other;
│ │ │ │ -
37 }
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │
│ │ │ │
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {
│ │ │ │ -
41 std::copy( other.localKeys_.begin(), other.localKeys_.end(), localKeys_.begin() );
│ │ │ │ -
42 return *this;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 std::size_t size () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return 2*d;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
52 const LocalKey &localKey ( std::size_t i ) const
│ │ │ │ -
53 {
│ │ │ │ -
54 assert( i < 2*d );
│ │ │ │ -
55 return localKeys_[ i ];
│ │ │ │ -
56 }
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
58 private:
│ │ │ │ -
59 std::array< LocalKey, 2*d > localKeys_;
│ │ │ │ -
60 };
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │
│ │ │ │ -
61
│ │ │ │ -
62} // namespace Dune
│ │ │ │
63
│ │ │ │ -
64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::pyramid;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 RT0PyramidLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
layout for Rannacher-Turek elements
Definition rannachertureklocalcoefficients.hh:27
│ │ │ │ -
RannacherTurekLocalCoefficients()
Definition rannachertureklocalcoefficients.hh:28
│ │ │ │ -
RannacherTurekLocalCoefficients(const RannacherTurekLocalCoefficients &other)
Definition rannachertureklocalcoefficients.hh:34
│ │ │ │ -
RannacherTurekLocalCoefficients & operator=(const RannacherTurekLocalCoefficients &other)
Definition rannachertureklocalcoefficients.hh:39
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
map index i to local key
Definition rannachertureklocalcoefficients.hh:52
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition rannachertureklocalcoefficients.hh:46
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on pyramids.
Definition raviartthomas0pyramid.hh:27
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0pyramid.hh:54
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0pyramid.hh:65
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas0pyramid.hh:70
│ │ │ │ +
RT0PyramidLocalFiniteElement(int s)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramid.hh:44
│ │ │ │ +
LocalFiniteElementTraits< RT0PyramidLocalBasis< D, R >, RT0PyramidLocalCoefficients, RT0PyramidLocalInterpolation< RT0PyramidLocalBasis< D, R > > > Traits
Definition raviartthomas0pyramid.hh:33
│ │ │ │ +
RT0PyramidLocalFiniteElement()
Standard constructor.
Definition raviartthomas0pyramid.hh:36
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0pyramid.hh:49
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0pyramid.hh:59
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference pyramid.
Definition raviartthomas0pyramidlocalbasis.hh:28
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on pyramids.
Definition raviartthomas0pyramidlocalcoefficients.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas0pyramidlocalinterpolation.hh:22
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,96 +1,136 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -rannachertureklocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas0pyramid.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ -25 template< unsigned int d > │ │ │ │ │ -_2_6 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ 27 { │ │ │ │ │ -_2_8 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ -29 { │ │ │ │ │ -30 for( std::size_t i = 0; i < 2*d; ++i ) │ │ │ │ │ -31 localKeys_[ i ] = _L_o_c_a_l_K_e_y( i, 1, 0 ); │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_4 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s ( const _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -&other ) │ │ │ │ │ -35 { │ │ │ │ │ -36 (*this) = other; │ │ │ │ │ -37 } │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ 38 │ │ │ │ │ -_3_9 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s &_o_p_e_r_a_t_o_r_=_ ( const │ │ │ │ │ -_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s &other ) │ │ │ │ │ -40 { │ │ │ │ │ -41 std::copy( other.localKeys_.begin(), other.localKeys_.end(), │ │ │ │ │ -localKeys_.begin() ); │ │ │ │ │ -42 return *this; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_6 std::size_t _s_i_z_e () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return 2*d; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_2 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( std::size_t i ) const │ │ │ │ │ -53 { │ │ │ │ │ -54 assert( i < 2*d ); │ │ │ │ │ -55 return localKeys_[ i ]; │ │ │ │ │ -56 } │ │ │ │ │ -57 │ │ │ │ │ -58 private: │ │ │ │ │ -59 std::array< LocalKey, 2*d > localKeys_; │ │ │ │ │ -60 }; │ │ │ │ │ -61 │ │ │ │ │ -62} // namespace Dune │ │ │ │ │ +_4_4 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ 63 │ │ │ │ │ -64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::pyramid; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -layout for Rannacher-Turek elements │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RannacherTurekLocalCoefficients() │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RannacherTurekLocalCoefficients(const RannacherTurekLocalCoefficients &other) │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -RannacherTurekLocalCoefficients & operator=(const │ │ │ │ │ -RannacherTurekLocalCoefficients &other) │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -map index i to local key │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on pyramids. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0PyramidLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT0PyramidLocalBasis< D, R >, │ │ │ │ │ +RT0PyramidLocalCoefficients, RT0PyramidLocalInterpolation< │ │ │ │ │ +RT0PyramidLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0PyramidLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramid.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on pyramids. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:22 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomial.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas4cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,45 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomial.hh File Reference
│ │ │ │ +
raviartthomas4cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <cstddef>
│ │ │ │ -#include <cstdlib>
│ │ │ │ -#include <memory>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include "common/localfiniteelementtraits.hh"
│ │ │ │ -#include "common/localtoglobaladaptors.hh"
│ │ │ │ -#include "monomial/monomiallocalbasis.hh"
│ │ │ │ -#include "monomial/monomiallocalcoefficients.hh"
│ │ │ │ -#include "monomial/monomiallocalinterpolation.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas4cube2d/raviartthomas4cube2dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas4cube2d/raviartthomas4cube2dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas4cube2d/raviartthomas4cube2dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MonomialLocalFiniteElement< D, R, d, p >
 Monomial basis for discontinuous Galerkin methods. More...
 
class  Dune::MonomialFiniteElementFactory< Geometry, RF, p >
 Factory for global-valued MonomFiniteElement objects. More...
class  Dune::RT4Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,32 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomial.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas4cube2d.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h" │ │ │ │ │ -#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_,_ _p_ _> │ │ │ │ │ -  Monomial basis for discontinuous Galerkin methods. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _p_ _> │ │ │ │ │ -  Factory for global-valued MonomFiniteElement objects. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00164_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomial.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas4cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,223 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomial.hh
│ │ │ │ +
raviartthomas4cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cassert>
│ │ │ │ -
10#include <cstddef>
│ │ │ │ -
11#include <cstdlib>
│ │ │ │ -
12#include <memory>
│ │ │ │ -
13#include <vector>
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
15#include <dune/geometry/type.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23namespace Dune
│ │ │ │ -
24{
│ │ │ │ -
25
│ │ │ │ -
26
│ │ │ │ -
39 template<class D, class R, int d, int p>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
41 {
│ │ │ │ -
42 constexpr static int static_size = MonomialLocalBasis<D,R,d,p>::size();
│ │ │ │ -
43
│ │ │ │ -
44 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
52
│ │ │ │ -
│ │ │ │ -
54 MonomialLocalFiniteElement (const GeometryType &gt_)
│ │ │ │ -
55 : basis(), interpolation(gt_, basis), gt(gt_)
│ │ │ │ -
56 {}
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
│ │ │ │ -
60 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
61 {
│ │ │ │ -
62 return basis;
│ │ │ │ -
63 }
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
27 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {}
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
47 basis(s),
│ │ │ │ +
48 interpolation(s)
│ │ │ │ +
49 {}
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
51 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
52 {
│ │ │ │ +
53 return basis;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 return coefficients;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
62 {
│ │ │ │ +
63 return interpolation;
│ │ │ │ +
64 }
│ │ │ │
│ │ │ │ -
64
│ │ │ │ +
65
│ │ │ │
│ │ │ │ - │ │ │ │ +
67 unsigned int size () const
│ │ │ │
68 {
│ │ │ │ -
69 return coefficients;
│ │ │ │ +
69 return basis.size();
│ │ │ │
70 }
│ │ │ │
│ │ │ │
71
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
75 {
│ │ │ │ -
76 return interpolation;
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
80 unsigned int size () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return basis.size();
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
│ │ │ │ -
87 GeometryType type () const
│ │ │ │ -
88 {
│ │ │ │ -
89 return gt;
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
92 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
96 GeometryType gt;
│ │ │ │ -
97 };
│ │ │ │ -
│ │ │ │ -
98
│ │ │ │ -
100
│ │ │ │ -
112 template<class Geometry, class RF, std::size_t p>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
114 typedef typename Geometry::ctype DF;
│ │ │ │ -
115 static const std::size_t dim = Geometry::mydimension;
│ │ │ │ -
116
│ │ │ │ - │ │ │ │ -
118
│ │ │ │ -
119 std::vector<std::shared_ptr<const LocalFE> > localFEs;
│ │ │ │ -
120
│ │ │ │ -
121 void init(const GeometryType &gt) {
│ │ │ │ -
122 std::size_t index = gt.id() >> 1;
│ │ │ │ -
123 if(localFEs.size() <= index)
│ │ │ │ -
124 localFEs.resize(index+1);
│ │ │ │ -
125 localFEs[index].reset(new LocalFE(gt));
│ │ │ │ -
126 }
│ │ │ │ -
127
│ │ │ │ -
128 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
131
│ │ │ │ -
133
│ │ │ │ -
137 template<class ForwardIterator>
│ │ │ │ -
│ │ │ │ -
138 MonomialFiniteElementFactory(const ForwardIterator &begin,
│ │ │ │ -
139 const ForwardIterator &end)
│ │ │ │ -
140 {
│ │ │ │ -
141 for(ForwardIterator it = begin; it != end; ++it)
│ │ │ │ -
142 init(*it);
│ │ │ │ -
143 }
│ │ │ │ -
│ │ │ │ -
144
│ │ │ │ -
146
│ │ │ │ -
│ │ │ │ -
149 MonomialFiniteElementFactory(const GeometryType &gt)
│ │ │ │ -
150 { init(gt); }
│ │ │ │ -
│ │ │ │ -
151
│ │ │ │ -
153
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
157 static_assert(dim <= 3, "MonomFiniteElementFactory knows the "
│ │ │ │ -
158 "available geometry types only up to dimension 3");
│ │ │ │ -
159
│ │ │ │ -
160 GeometryType gt;
│ │ │ │ -
161 switch(dim) {
│ │ │ │ -
162 case 0 :
│ │ │ │ -
163 gt = Dune::GeometryTypes::vertex; init(gt);
│ │ │ │ -
164 break;
│ │ │ │ -
165 case 1 :
│ │ │ │ -
166 gt = Dune::GeometryTypes::line; init(gt);
│ │ │ │ -
167 break;
│ │ │ │ -
168 case 2 :
│ │ │ │ -
169 gt = Dune::GeometryTypes::triangle; init(gt);
│ │ │ │ -
170 gt = Dune::GeometryTypes::quadrilateral; init(gt);
│ │ │ │ -
171 break;
│ │ │ │ -
172 case 3 :
│ │ │ │ -
173 gt = Dune::GeometryTypes::tetrahedron; init(gt);
│ │ │ │ -
174 gt = Dune::GeometryTypes::pyramid; init(gt);
│ │ │ │ -
175 gt = Dune::GeometryTypes::prism; init(gt);
│ │ │ │ -
176 gt = Dune::GeometryTypes::hexahedron; init(gt);
│ │ │ │ -
177 break;
│ │ │ │ -
178 default :
│ │ │ │ -
179 // this should never happen -- it should be caught by the static
│ │ │ │ -
180 // assert above.
│ │ │ │ -
181 std::abort();
│ │ │ │ -
182 };
│ │ │ │ -
183 }
│ │ │ │ -
│ │ │ │ -
184
│ │ │ │ -
186
│ │ │ │ -
│ │ │ │ -
196 const FiniteElement make(const Geometry& geometry) {
│ │ │ │ -
197 std::size_t index = geometry.type().id() >> 1;
│ │ │ │ -
198 assert(localFEs.size() > index && localFEs[index]);
│ │ │ │ -
199 return FiniteElement(*localFEs[index], geometry);
│ │ │ │ -
200 }
│ │ │ │ -
│ │ │ │ -
201 };
│ │ │ │ -
│ │ │ │ -
202}
│ │ │ │ -
203
│ │ │ │ -
204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
72 static constexpr GeometryType type ()
│ │ │ │ +
73 {
│ │ │ │ +
74 return GeometryTypes::quadrilateral;
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
77 private:
│ │ │ │ + │ │ │ │ +
79 RT4Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
81 };
│ │ │ │ +
│ │ │ │ +
82}
│ │ │ │ +
83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Convert a simple scalar local finite element into a global finite element.
Definition localtoglobaladaptors.hh:187
│ │ │ │ -
GeometryType type() const
Definition localtoglobaladaptors.hh:229
│ │ │ │ -
Monomial basis for discontinuous Galerkin methods.
Definition monomial.hh:41
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition monomial.hh:80
│ │ │ │ -
GeometryType type() const
Definition monomial.hh:87
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition monomial.hh:74
│ │ │ │ -
LocalFiniteElementTraits< MonomialLocalBasis< D, R, d, p >, MonomialLocalCoefficients< static_size >, MonomialLocalInterpolation< MonomialLocalBasis< D, R, d, p >, static_size > > Traits
Definition monomial.hh:51
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition monomial.hh:67
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition monomial.hh:60
│ │ │ │ -
MonomialLocalFiniteElement(const GeometryType &gt_)
Construct a MonomLocalFiniteElement.
Definition monomial.hh:54
│ │ │ │ -
Factory for global-valued MonomFiniteElement objects.
Definition monomial.hh:113
│ │ │ │ -
MonomialFiniteElementFactory(const ForwardIterator &begin, const ForwardIterator &end)
construct a MonomialFiniteElementFactory from a list of GeometryType's
Definition monomial.hh:138
│ │ │ │ -
MonomialFiniteElementFactory(const GeometryType &gt)
construct a MonomialFiniteElementFactory from a single GeometryType
Definition monomial.hh:149
│ │ │ │ -
const FiniteElement make(const Geometry &geometry)
construct a global-valued MonomFiniteElement
Definition monomial.hh:196
│ │ │ │ -
ScalarLocalToGlobalFiniteElementAdaptor< LocalFE, Geometry > FiniteElement
Definition monomial.hh:130
│ │ │ │ -
MonomialFiniteElementFactory()
construct a MonomFiniteElementFactory for all applicable GeometryType's
Definition monomial.hh:156
│ │ │ │ -
Definition monomiallocalbasis.hh:202
│ │ │ │ -
static constexpr unsigned int size()
Number of shape functions.
Definition monomiallocalbasis.hh:217
│ │ │ │ -
Definition monomiallocalcoefficients.hh:25
│ │ │ │ -
Definition monomiallocalinterpolation.hh:24
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas4cube2d.hh:29
│ │ │ │ +
LocalFiniteElementTraits< RT4Cube2DLocalBasis< D, R >, RT4Cube2DLocalCoefficients, RT4Cube2DLocalInterpolation< RT4Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas4cube2d.hh:35
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas4cube2d.hh:67
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas4cube2d.hh:56
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas4cube2d.hh:61
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas4cube2d.hh:51
│ │ │ │ +
RT4Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2d.hh:46
│ │ │ │ +
RT4Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas4cube2d.hh:38
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas4cube2d.hh:72
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas4cube2dlocalbasis.hh:29
│ │ │ │ +
Layout map for Raviart-Thomas-4 elements on quadrilaterals.
Definition raviartthomas4cube2dlocalcoefficients.hh:23
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas4cube2dlocalinterpolation.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,246 +1,136 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -monomial.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas4cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -18#include "_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h" │ │ │ │ │ -19#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -20#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -21#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -22 │ │ │ │ │ -23namespace _D_u_n_e │ │ │ │ │ -24{ │ │ │ │ │ -25 │ │ │ │ │ -26 │ │ │ │ │ -39 template │ │ │ │ │ -_4_0 class _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -41 { │ │ │ │ │ -42 constexpr static int static_size = _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>_:_:_s_i_z_e(); │ │ │ │ │ -43 │ │ │ │ │ -44 public: │ │ │ │ │ -47 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -48 _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>, │ │ │ │ │ -49 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_s_t_a_t_i_c___s_i_z_e_>, │ │ │ │ │ -50 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>,static_size> │ │ │ │ │ -_5_1 > _T_r_a_i_t_s; │ │ │ │ │ -52 │ │ │ │ │ -_5_4 _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (const GeometryType >_) │ │ │ │ │ -55 : basis(), interpolation(gt_, basis), gt(gt_) │ │ │ │ │ -56 {} │ │ │ │ │ -57 │ │ │ │ │ -_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return basis; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +33 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +34 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_5 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +_3_8 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +39 {} │ │ │ │ │ +40 │ │ │ │ │ +_4_6 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +47 basis(s), │ │ │ │ │ +48 interpolation(s) │ │ │ │ │ +49 {} │ │ │ │ │ +50 │ │ │ │ │ +_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +52 { │ │ │ │ │ +53 return basis; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return coefficients; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return interpolation; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_6_7 unsigned int _s_i_z_e () const │ │ │ │ │ 68 { │ │ │ │ │ -69 return coefficients; │ │ │ │ │ +69 return basis.size(); │ │ │ │ │ 70 } │ │ │ │ │ 71 │ │ │ │ │ -_7_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -75 { │ │ │ │ │ -76 return interpolation; │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_8_0 unsigned int _s_i_z_e () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return basis.size(); │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_8_7 GeometryType _t_y_p_e () const │ │ │ │ │ -88 { │ │ │ │ │ -89 return gt; │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -92 private: │ │ │ │ │ -93 _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_> basis; │ │ │ │ │ -94 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_s_t_a_t_i_c___s_i_z_e_> coefficients; │ │ │ │ │ -95 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>,static_size> │ │ │ │ │ -interpolation; │ │ │ │ │ -96 GeometryType gt; │ │ │ │ │ -97 }; │ │ │ │ │ -98 │ │ │ │ │ -100 │ │ │ │ │ -112 template │ │ │ │ │ -_1_1_3 class _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ -114 typedef typename Geometry::ctype DF; │ │ │ │ │ -115 static const std::size_t dim = Geometry::mydimension; │ │ │ │ │ -116 │ │ │ │ │ -117 typedef _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_F_,_ _R_F_,_ _d_i_m_,_ _p_> _L_o_c_a_l_F_E; │ │ │ │ │ -118 │ │ │ │ │ -119 std::vector > localFEs; │ │ │ │ │ -120 │ │ │ │ │ -121 void init(const GeometryType >) { │ │ │ │ │ -122 std::size_t index = gt.id() >> 1; │ │ │ │ │ -123 if(localFEs.size() <= index) │ │ │ │ │ -124 localFEs.resize(index+1); │ │ │ │ │ -125 localFEs[index].reset(new _L_o_c_a_l_F_E(gt)); │ │ │ │ │ -126 } │ │ │ │ │ -127 │ │ │ │ │ -128 public: │ │ │ │ │ -129 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_L_o_c_a_l_F_E_,_ _G_e_o_m_e_t_r_y_> │ │ │ │ │ -_1_3_0 _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -131 │ │ │ │ │ -133 │ │ │ │ │ -137 template │ │ │ │ │ -_1_3_8 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y(const ForwardIterator &begin, │ │ │ │ │ -139 const ForwardIterator &end) │ │ │ │ │ -140 { │ │ │ │ │ -141 for(ForwardIterator it = begin; it != end; ++it) │ │ │ │ │ -142 init(*it); │ │ │ │ │ -143 } │ │ │ │ │ -144 │ │ │ │ │ -146 │ │ │ │ │ -_1_4_9 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y(const GeometryType >) │ │ │ │ │ -150 { init(gt); } │ │ │ │ │ -151 │ │ │ │ │ -153 │ │ │ │ │ -_1_5_6 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() { │ │ │ │ │ -157 static_assert(dim <= 3, "MonomFiniteElementFactory knows the " │ │ │ │ │ -158 "available geometry types only up to dimension 3"); │ │ │ │ │ -159 │ │ │ │ │ -160 GeometryType gt; │ │ │ │ │ -161 switch(dim) { │ │ │ │ │ -162 case 0 : │ │ │ │ │ -163 gt = Dune::GeometryTypes::vertex; init(gt); │ │ │ │ │ -164 break; │ │ │ │ │ -165 case 1 : │ │ │ │ │ -166 gt = Dune::GeometryTypes::line; init(gt); │ │ │ │ │ -167 break; │ │ │ │ │ -168 case 2 : │ │ │ │ │ -169 gt = Dune::GeometryTypes::triangle; init(gt); │ │ │ │ │ -170 gt = Dune::GeometryTypes::quadrilateral; init(gt); │ │ │ │ │ -171 break; │ │ │ │ │ -172 case 3 : │ │ │ │ │ -173 gt = Dune::GeometryTypes::tetrahedron; init(gt); │ │ │ │ │ -174 gt = Dune::GeometryTypes::pyramid; init(gt); │ │ │ │ │ -175 gt = Dune::GeometryTypes::prism; init(gt); │ │ │ │ │ -176 gt = Dune::GeometryTypes::hexahedron; init(gt); │ │ │ │ │ -177 break; │ │ │ │ │ -178 default : │ │ │ │ │ -179 // this should never happen -- it should be caught by the static │ │ │ │ │ -180 // assert above. │ │ │ │ │ -181 std::abort(); │ │ │ │ │ -182 }; │ │ │ │ │ -183 } │ │ │ │ │ -184 │ │ │ │ │ -186 │ │ │ │ │ -_1_9_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry) { │ │ │ │ │ -197 std::size_t index = geometry._t_y_p_e().id() >> 1; │ │ │ │ │ -198 assert(localFEs.size() > index && localFEs[index]); │ │ │ │ │ -199 return _F_i_n_i_t_e_E_l_e_m_e_n_t(*localFEs[index], geometry); │ │ │ │ │ -200 } │ │ │ │ │ -201 }; │ │ │ │ │ -202} │ │ │ │ │ -203 │ │ │ │ │ -204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_7_2 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +73 { │ │ │ │ │ +74 return GeometryTypes::quadrilateral; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +77 private: │ │ │ │ │ +78 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +79 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +80 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +81 }; │ │ │ │ │ +82} │ │ │ │ │ +83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ LB LocalBasisType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ LC LocalCoefficientsType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ LI LocalInterpolationType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local finite element into a global finite element. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:229 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Monomial basis for discontinuous Galerkin methods. │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT4Cube2DLocalBasis< D, R >, │ │ │ │ │ +RT4Cube2DLocalCoefficients, RT4Cube2DLocalInterpolation< RT4Cube2DLocalBasis< │ │ │ │ │ +D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< MonomialLocalBasis< D, R, d, p >, │ │ │ │ │ -MonomialLocalCoefficients< static_size >, MonomialLocalInterpolation< │ │ │ │ │ -MonomialLocalBasis< D, R, d, p >, static_size > > Traits │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -MonomialLocalFiniteElement(const GeometryType >_) │ │ │ │ │ -Construct a MonomLocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory for global-valued MonomFiniteElement objects. │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:113 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -MonomialFiniteElementFactory(const ForwardIterator &begin, const │ │ │ │ │ -ForwardIterator &end) │ │ │ │ │ -construct a MonomialFiniteElementFactory from a list of GeometryType's │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:138 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -MonomialFiniteElementFactory(const GeometryType >) │ │ │ │ │ -construct a MonomialFiniteElementFactory from a single GeometryType │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &geometry) │ │ │ │ │ -construct a global-valued MonomFiniteElement │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:196 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -ScalarLocalToGlobalFiniteElementAdaptor< LocalFE, Geometry > FiniteElement │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:130 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -MonomialFiniteElementFactory() │ │ │ │ │ -construct a MonomFiniteElementFactory for all applicable GeometryType's │ │ │ │ │ -DDeeffiinniittiioonn monomial.hh:156 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:202 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:217 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalinterpolation.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT4Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT4Cube2DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-4 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:25 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,25 +65,43 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas3cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/nedelec/nedelec1stkindsimplex.hh>
│ │ │ │ -#include <dune/localfunctions/nedelec/nedelec1stkindcube.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas3cube2d/raviartthomas3cube2dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas3cube2d/raviartthomas3cube2dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas3cube2d/raviartthomas3cube2dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT3Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,12 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -nedelec.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas3cube2d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00167_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,38 +70,123 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec.hh
│ │ │ │ +
raviartthomas3cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8// Nedelec element implementations with run-time order
│ │ │ │ -
9// [include them here once they exist]
│ │ │ │ -
10
│ │ │ │ -
11// Nedelec element implementations with compile-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
27 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {}
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
47 basis(s),
│ │ │ │ +
48 interpolation(s)
│ │ │ │ +
49 {}
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
51 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
52 {
│ │ │ │ +
53 return basis;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 return coefficients;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
62 {
│ │ │ │ +
63 return interpolation;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
67 unsigned int size () const
│ │ │ │ +
68 {
│ │ │ │ +
69 return basis.size();
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ +
72 static constexpr GeometryType type ()
│ │ │ │ +
73 {
│ │ │ │ +
74 return GeometryTypes::quadrilateral;
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
77 private:
│ │ │ │ + │ │ │ │ +
79 RT3Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
81 };
│ │ │ │ +
│ │ │ │ +
82}
│ │ │ │ +
83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas3cube2d.hh:29
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas3cube2d.hh:56
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas3cube2d.hh:72
│ │ │ │ +
LocalFiniteElementTraits< RT3Cube2DLocalBasis< D, R >, RT3Cube2DLocalCoefficients, RT3Cube2DLocalInterpolation< RT3Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas3cube2d.hh:35
│ │ │ │ +
RT3Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2d.hh:46
│ │ │ │ +
RT3Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas3cube2d.hh:38
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas3cube2d.hh:67
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas3cube2d.hh:51
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas3cube2d.hh:61
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalbasis.hh:29
│ │ │ │ +
Layout map for Raviart-Thomas-3 elements on quadrilaterals.
Definition raviartthomas3cube2dlocalcoefficients.hh:23
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalinterpolation.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,136 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -nedelec.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ +raviartthomas3cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8// Nedelec element implementations with run-time order │ │ │ │ │ -9// [include them here once they exist] │ │ │ │ │ -10 │ │ │ │ │ -11// Nedelec element implementations with compile-time order │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ -_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +33 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +34 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_5 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +_3_8 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +39 {} │ │ │ │ │ +40 │ │ │ │ │ +_4_6 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +47 basis(s), │ │ │ │ │ +48 interpolation(s) │ │ │ │ │ +49 {} │ │ │ │ │ +50 │ │ │ │ │ +_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +52 { │ │ │ │ │ +53 return basis; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return coefficients; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return interpolation; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_6_7 unsigned int _s_i_z_e () const │ │ │ │ │ +68 { │ │ │ │ │ +69 return basis.size(); │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +_7_2 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +73 { │ │ │ │ │ +74 return GeometryTypes::quadrilateral; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +77 private: │ │ │ │ │ +78 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +79 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +80 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +81 }; │ │ │ │ │ +82} │ │ │ │ │ +83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT3Cube2DLocalBasis< D, R >, │ │ │ │ │ +RT3Cube2DLocalCoefficients, RT3Cube2DLocalInterpolation< RT3Cube2DLocalBasis< │ │ │ │ │ +D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT3Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT3Cube2DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-3 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:25 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT03DLocalBasis< D, R >
class  Dune::RT2Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-2 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas03dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-2 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00170_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,143 +70,83 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalbasis.hh
│ │ │ │ +
raviartthomas2cube2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28 public:
│ │ │ │ -
29 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
30 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ -
31
│ │ │ │ -
│ │ │ │ -
33 RT03DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ -
34 {
│ │ │ │ -
35 for (int i=0; i<4; i++)
│ │ │ │ -
36 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ -
40 unsigned int size () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return 4;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
47 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
48 {
│ │ │ │ -
49 out.resize(4);
│ │ │ │ -
50 auto c = std::sqrt(2.0);
│ │ │ │ -
51 out[0] = {sign_[0]*c* in[0], sign_[0]*c* in[1], sign_[0]*c*(in[2]-D(1))};
│ │ │ │ -
52 out[1] = {sign_[1]*c* in[0], sign_[1]*c*(in[1]-D(1)), sign_[1]*c* in[2] };
│ │ │ │ -
53 out[2] = {sign_[2]*c*(in[0]-D(1)), sign_[2]*c* in[1], sign_[2]*c* in[2] };
│ │ │ │ -
54 out[3] = {sign_[3]*c* in[0], sign_[3]*c* in[1], sign_[3]*c* in[2] };
│ │ │ │ -
55 }
│ │ │ │ -
│ │ │ │ -
56
│ │ │ │ -
58 inline void
│ │ │ │ -
│ │ │ │ -
59 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
60 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
61 {
│ │ │ │ -
62 out.resize(4);
│ │ │ │ -
63 for (int i=0; i<4; i++)
│ │ │ │ -
64 {
│ │ │ │ -
65 auto c = std::sqrt(2.0);
│ │ │ │ -
66 out[i][0] = {c*sign_[i], 0, 0};
│ │ │ │ -
67 out[i][1] = { 0,c*sign_[i], 0};
│ │ │ │ -
68 out[i][2] = { 0, 0,c*sign_[i]};
│ │ │ │ -
69 }
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
│ │ │ │ -
73 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
74 const typename Traits::DomainType& in, // position
│ │ │ │ -
75 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
76 {
│ │ │ │ -
77 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
78 if (totalOrder == 0) {
│ │ │ │ -
79 evaluateFunction(in, out);
│ │ │ │ -
80 } else if (totalOrder == 1) {
│ │ │ │ -
81 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
82 out.resize(size());
│ │ │ │ -
83
│ │ │ │ -
84 for (int i=0; i<size(); i++)
│ │ │ │ -
85 {
│ │ │ │ -
86 out[i][direction] = sign_[i]* std::sqrt(2.0) ;
│ │ │ │ -
87 out[i][(direction+1)%3] = 0;
│ │ │ │ -
88 out[i][(direction+2)%3] = 0;
│ │ │ │ -
89 }
│ │ │ │ -
90 } else {
│ │ │ │ -
91 out.resize(size());
│ │ │ │ -
92 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
93 for (std::size_t j = 0; j < 3; ++j)
│ │ │ │ -
94 out[i][j] = 0;
│ │ │ │ -
95 }
│ │ │ │ -
96
│ │ │ │ -
97 }
│ │ │ │ -
│ │ │ │ -
98
│ │ │ │ -
│ │ │ │ -
100 unsigned int order () const
│ │ │ │ -
101 {
│ │ │ │ -
102 return 1;
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
105 private:
│ │ │ │ -
106
│ │ │ │ -
107 // Signs of the face normals
│ │ │ │ -
108 std::array<R,4> sign_;
│ │ │ │ -
109 };
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24
│ │ │ │ +
25 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ +
30 {
│ │ │ │ +
31 li[3*i] = LocalKey(i,1,0);
│ │ │ │ +
32 li[3*i + 1] = LocalKey(i,1,1);
│ │ │ │ +
33 li[3*i + 2] = LocalKey(i,1,2);
│ │ │ │ +
34 }
│ │ │ │ +
35
│ │ │ │ +
36 for (std::size_t i=0; i<12; i++)
│ │ │ │ +
37 {
│ │ │ │ +
38 li[12 + i] = LocalKey(0,0,i);
│ │ │ │ +
39 }
│ │ │ │ +
40 }
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
43 std::size_t size () const
│ │ │ │ +
44 {
│ │ │ │ +
45 return 24;
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
50 {
│ │ │ │ +
51 return li[i];
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
54 private:
│ │ │ │ +
55 std::vector<LocalKey> li;
│ │ │ │ +
56 };
│ │ │ │
│ │ │ │ -
110}
│ │ │ │ -
111#endif
│ │ │ │ +
57}
│ │ │ │ +
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition raviartthomas03dlocalbasis.hh:27
│ │ │ │ -
RT03DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas03dlocalbasis.hh:33
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas03dlocalbasis.hh:73
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas03dlocalbasis.hh:100
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas03dlocalbasis.hh:40
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas03dlocalbasis.hh:59
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas03dlocalbasis.hh:46
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas03dlocalbasis.hh:30
│ │ │ │ - │ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for Raviart-Thomas-2 elements on quadrilaterals.
Definition raviartthomas2cube2dlocalcoefficients.hh:23
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas2cube2dlocalcoefficients.hh:43
│ │ │ │ +
RT2Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas2cube2dlocalcoefficients.hh:27
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas2cube2dlocalcoefficients.hh:49
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,156 +1,81 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ -raviartthomas03dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ +raviartthomas2cube2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -27 { │ │ │ │ │ -28 public: │ │ │ │ │ -29 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_3 _R_T_0_3_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ -34 { │ │ │ │ │ -35 for (int i=0; i<4; i++) │ │ │ │ │ -36 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -37 } │ │ │ │ │ -38 │ │ │ │ │ -_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ -41 { │ │ │ │ │ -42 return 4; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -47 std::vector& out) const │ │ │ │ │ -48 { │ │ │ │ │ -49 out.resize(4); │ │ │ │ │ -50 auto c = std::sqrt(2.0); │ │ │ │ │ -51 out[0] = {sign_[0]*c* in[0], sign_[0]*c* in[1], sign_[0]*c*(in[2]-D(1))}; │ │ │ │ │ -52 out[1] = {sign_[1]*c* in[0], sign_[1]*c*(in[1]-D(1)), sign_[1]*c* in[2] }; │ │ │ │ │ -53 out[2] = {sign_[2]*c*(in[0]-D(1)), sign_[2]*c* in[1], sign_[2]*c* in[2] }; │ │ │ │ │ -54 out[3] = {sign_[3]*c* in[0], sign_[3]*c* in[1], sign_[3]*c* in[2] }; │ │ │ │ │ -55 } │ │ │ │ │ -56 │ │ │ │ │ -58 inline void │ │ │ │ │ -_5_9 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -60 std::vector& out) const // return value │ │ │ │ │ -61 { │ │ │ │ │ -62 out.resize(4); │ │ │ │ │ -63 for (int i=0; i<4; i++) │ │ │ │ │ -64 { │ │ │ │ │ -65 auto c = std::sqrt(2.0); │ │ │ │ │ -66 out[i][0] = {c*sign_[i], 0, 0}; │ │ │ │ │ -67 out[i][1] = { 0,c*sign_[i], 0}; │ │ │ │ │ -68 out[i][2] = { 0, 0,c*sign_[i]}; │ │ │ │ │ -69 } │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -_7_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -74 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -75 std::vector& out) const // return value │ │ │ │ │ -76 { │ │ │ │ │ -77 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -78 if (totalOrder == 0) { │ │ │ │ │ -79 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -80 } else if (totalOrder == 1) { │ │ │ │ │ -81 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -82 out.resize(_s_i_z_e()); │ │ │ │ │ -83 │ │ │ │ │ -84 for (int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -85 { │ │ │ │ │ -86 out[i][direction] = sign_[i]* std::sqrt(2.0) ; │ │ │ │ │ -87 out[i][(direction+1)%3] = 0; │ │ │ │ │ -88 out[i][(direction+2)%3] = 0; │ │ │ │ │ -89 } │ │ │ │ │ -90 } else { │ │ │ │ │ -91 out.resize(_s_i_z_e()); │ │ │ │ │ -92 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -93 for (std::size_t j = 0; j < 3; ++j) │ │ │ │ │ -94 out[i][j] = 0; │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -97 } │ │ │ │ │ -98 │ │ │ │ │ -_1_0_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -101 { │ │ │ │ │ -102 return 1; │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -105 private: │ │ │ │ │ -106 │ │ │ │ │ -107 // Signs of the face normals │ │ │ │ │ -108 std::array sign_; │ │ │ │ │ -109 }; │ │ │ │ │ -110} │ │ │ │ │ -111#endif │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +_2_2 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +23 { │ │ │ │ │ +24 │ │ │ │ │ +25 public: │ │ │ │ │ +_2_7 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(24) │ │ │ │ │ +28 { │ │ │ │ │ +29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ +30 { │ │ │ │ │ +31 li[3*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 li[3*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +33 li[3*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +34 } │ │ │ │ │ +35 │ │ │ │ │ +36 for (std::size_t i=0; i<12; i++) │ │ │ │ │ +37 { │ │ │ │ │ +38 li[12 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +39 } │ │ │ │ │ +40 } │ │ │ │ │ +41 │ │ │ │ │ +_4_3 std::size_t _s_i_z_e () const │ │ │ │ │ +44 { │ │ │ │ │ +45 return 24; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_9 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +50 { │ │ │ │ │ +51 return li[i]; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +54 private: │ │ │ │ │ +55 std::vector li; │ │ │ │ │ +56 }; │ │ │ │ │ +57} │ │ │ │ │ +58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT03DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:100 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:30 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-2 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT2Cube2DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:49 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cmath>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT03DLocalInterpolation< LB >
class  Dune::RT2Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00173_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,136 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalinterpolation.hh
│ │ │ │ +
raviartthomas2cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <cmath>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <bitset>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
17 {
│ │ │ │ -
18 public:
│ │ │ │ -
19
│ │ │ │ -
│ │ │ │ -
25 RT03DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ -
26 {
│ │ │ │ -
27 using std::sqrt;
│ │ │ │ -
28 for (std::size_t i=0; i<sign_.size(); i++)
│ │ │ │ -
29 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
30
│ │ │ │ -
31 m_[0] = {1/3.0, 1/3.0, 0.0};
│ │ │ │ -
32 m_[1] = {1/3.0, 0.0, 1/3.0};
│ │ │ │ -
33 m_[2] = { 0.0, 1/3.0, 1/3.0};
│ │ │ │ -
34 m_[3] = {1/3.0, 1/3.0, 1/3.0};
│ │ │ │ -
35 n_[0] = { 0.0, 0.0, -1.0};
│ │ │ │ -
36 n_[1] = { 0.0, -1.0, 0.0};
│ │ │ │ -
37 n_[2] = { -1.0, 0.0, 0.0};
│ │ │ │ -
38 n_[3] = {1.0/sqrt(3.0), 1.0/sqrt(3.0), 1.0/sqrt(3.0)};
│ │ │ │ -
39 c_[0] = sqrt(2.0);
│ │ │ │ -
40 c_[1] = sqrt(2.0);
│ │ │ │ -
41 c_[2] = sqrt(2.0);
│ │ │ │ -
42 c_[3] = sqrt(2.0)/sqrt(3.0);
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
28
│ │ │ │ +
│ │ │ │ +
34 RT2Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ +
35 {
│ │ │ │ +
36 for (size_t i=0; i<4; i++)
│ │ │ │ +
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
38
│ │ │ │ +
39 n_[0] = {-1.0, 0.0};
│ │ │ │ +
40 n_[1] = { 1.0, 0.0};
│ │ │ │ +
41 n_[2] = { 0.0, -1.0};
│ │ │ │ +
42 n_[3] = { 0.0, 1.0};
│ │ │ │
43 }
│ │ │ │
│ │ │ │
44
│ │ │ │ -
45 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
46 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
47 {
│ │ │ │ -
48 // f gives v*outer normal at a point on the face!
│ │ │ │ -
49
│ │ │ │ -
50 out.resize(4);
│ │ │ │ -
51
│ │ │ │ -
52 for (int i=0; i<4; i++)
│ │ │ │ -
53 {
│ │ │ │ -
54 auto y = f(m_[i]);
│ │ │ │ -
55 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1]+y[2]*n_[i][2])*sign_[i]/c_[i];
│ │ │ │ -
56 }
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
59 private:
│ │ │ │ -
60 // Face orientations
│ │ │ │ -
61 std::array<typename LB::Traits::RangeFieldType,4> sign_;
│ │ │ │ -
62 // Face midpoints of the reference tetrahedron
│ │ │ │ -
63 std::array<typename LB::Traits::DomainType,4> m_;
│ │ │ │ -
64 // Unit outer normals of the reference tetrahedron
│ │ │ │ -
65 std::array<typename LB::Traits::DomainType,4> n_;
│ │ │ │ -
66 // Inverse triangle face area
│ │ │ │ -
67 std::array<typename LB::Traits::RangeFieldType,4> c_;
│ │ │ │ -
68 };
│ │ │ │ -
│ │ │ │ -
69}
│ │ │ │ +
53 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
55 {
│ │ │ │ +
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
59
│ │ │ │ +
60 out.resize(24);
│ │ │ │ +
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
62
│ │ │ │ +
63 const int qOrder = 6;
│ │ │ │ +
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
65
│ │ │ │ +
66 for (auto&& qp : rule1)
│ │ │ │ +
67 {
│ │ │ │ +
68 Scalar qPos = qp.position();
│ │ │ │ +
69 typename LB::Traits::DomainType localPos;
│ │ │ │
70
│ │ │ │ -
71#endif
│ │ │ │ -
RT03DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with given set of face orientations.
Definition raviartthomas03dlocalinterpolation.hh:25
│ │ │ │ +
71 localPos = {0.0, qPos};
│ │ │ │ +
72 auto y = f(localPos);
│ │ │ │ +
73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ +
74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[0];
│ │ │ │ +
76
│ │ │ │ +
77 localPos = {1.0, qPos};
│ │ │ │ +
78 y = f(localPos);
│ │ │ │ +
79 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ +
80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[1];
│ │ │ │ +
82
│ │ │ │ +
83 localPos = {qPos, 0.0};
│ │ │ │ +
84 y = f(localPos);
│ │ │ │ +
85 out[6] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ +
86 out[7] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[2];
│ │ │ │ +
88
│ │ │ │ +
89 localPos = {qPos, 1.0};
│ │ │ │ +
90 y = f(localPos);
│ │ │ │ +
91 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ +
92 out[10] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
93 out[11] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[3];
│ │ │ │ +
94 }
│ │ │ │ +
95
│ │ │ │ +
96 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
97
│ │ │ │ +
98 for (auto&& qp : rule2)
│ │ │ │ +
99 {
│ │ │ │ +
100 FieldVector<double,2> qPos = qp.position();
│ │ │ │ +
101
│ │ │ │ +
102 auto y = f(qPos);
│ │ │ │ +
103 out[12] += y[0]*qp.weight();
│ │ │ │ +
104 out[13] += y[1]*qp.weight();
│ │ │ │ +
105 out[14] += y[0]*qPos[0]*qp.weight();
│ │ │ │ +
106 out[15] += y[1]*qPos[0]*qp.weight();
│ │ │ │ +
107 out[16] += y[0]*qPos[1]*qp.weight();
│ │ │ │ +
108 out[17] += y[1]*qPos[1]*qp.weight();
│ │ │ │ +
109 out[18] += y[0]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ +
110 out[19] += y[1]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ +
111 out[20] += y[0]*qPos[1]*qPos[1]*qp.weight();
│ │ │ │ +
112 out[21] += y[1]*qPos[0]*qPos[0]*qp.weight();
│ │ │ │ +
113 out[22] += y[0]*qPos[0]*qPos[1]*qPos[1]*qp.weight();
│ │ │ │ +
114 out[23] += y[1]*qPos[0]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ +
115 }
│ │ │ │ +
116 }
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
118 private:
│ │ │ │ +
119 // Edge orientations
│ │ │ │ +
120 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ +
121
│ │ │ │ +
122 // Edge normals
│ │ │ │ +
123 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ +
124 };
│ │ │ │ +
│ │ │ │ +
125}
│ │ │ │ +
126#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition raviartthomas03dlocalinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas03dlocalinterpolation.hh:46
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas2cube2dlocalinterpolation.hh:25
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas2cube2dlocalinterpolation.hh:54
│ │ │ │ +
RT2Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2dlocalinterpolation.hh:34
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,92 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ -raviartthomas03dlocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ +raviartthomas2cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 template │ │ │ │ │ -_1_6 class _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -17 { │ │ │ │ │ -18 public: │ │ │ │ │ -19 │ │ │ │ │ -_2_5 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ -26 { │ │ │ │ │ -27 using std::sqrt; │ │ │ │ │ -28 for (std::size_t i=0; i │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +28 │ │ │ │ │ +_3_4 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ +35 { │ │ │ │ │ +36 for (size_t i=0; i<4; i++) │ │ │ │ │ +37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +38 │ │ │ │ │ +39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ +40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ +41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ +42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ 43 } │ │ │ │ │ 44 │ │ │ │ │ -45 template │ │ │ │ │ -_4_6 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -47 { │ │ │ │ │ -48 // f gives v*outer normal at a point on the face! │ │ │ │ │ -49 │ │ │ │ │ -50 out.resize(4); │ │ │ │ │ -51 │ │ │ │ │ -52 for (int i=0; i<4; i++) │ │ │ │ │ -53 { │ │ │ │ │ -54 auto y = f(m_[i]); │ │ │ │ │ -55 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1]+y[2]*n_[i][2])*sign_[i]/c_[i]; │ │ │ │ │ -56 } │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -59 private: │ │ │ │ │ -60 // Face orientations │ │ │ │ │ -61 std::array sign_; │ │ │ │ │ -62 // Face midpoints of the reference tetrahedron │ │ │ │ │ -63 std::array m_; │ │ │ │ │ -64 // Unit outer normals of the reference tetrahedron │ │ │ │ │ -65 std::array n_; │ │ │ │ │ -66 // Inverse triangle face area │ │ │ │ │ -67 std::array c_; │ │ │ │ │ -68 }; │ │ │ │ │ -69} │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +55 { │ │ │ │ │ +56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +59 │ │ │ │ │ +60 out.resize(24); │ │ │ │ │ +61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +62 │ │ │ │ │ +63 const int qOrder = 6; │ │ │ │ │ +64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ +qOrder); │ │ │ │ │ +65 │ │ │ │ │ +66 for (auto&& qp : rule1) │ │ │ │ │ +67 { │ │ │ │ │ +68 Scalar qPos = qp.position(); │ │ │ │ │ +69 typename LB::Traits::DomainType localPos; │ │ │ │ │ 70 │ │ │ │ │ -71#endif │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT03DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ -Constructor with given set of face orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:25 │ │ │ │ │ +71 localPos = {0.0, qPos}; │ │ │ │ │ +72 auto y = f(localPos); │ │ │ │ │ +73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ +74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[0]; │ │ │ │ │ +76 │ │ │ │ │ +77 localPos = {1.0, qPos}; │ │ │ │ │ +78 y = f(localPos); │ │ │ │ │ +79 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ +80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[1]; │ │ │ │ │ +82 │ │ │ │ │ +83 localPos = {qPos, 0.0}; │ │ │ │ │ +84 y = f(localPos); │ │ │ │ │ +85 out[6] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ +86 out[7] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[2]; │ │ │ │ │ +88 │ │ │ │ │ +89 localPos = {qPos, 1.0}; │ │ │ │ │ +90 y = f(localPos); │ │ │ │ │ +91 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ +92 out[10] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +93 out[11] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[3]; │ │ │ │ │ +94 } │ │ │ │ │ +95 │ │ │ │ │ +96 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ +qOrder); │ │ │ │ │ +97 │ │ │ │ │ +98 for (auto&& qp : rule2) │ │ │ │ │ +99 { │ │ │ │ │ +100 FieldVector qPos = qp.position(); │ │ │ │ │ +101 │ │ │ │ │ +102 auto y = f(qPos); │ │ │ │ │ +103 out[12] += y[0]*qp.weight(); │ │ │ │ │ +104 out[13] += y[1]*qp.weight(); │ │ │ │ │ +105 out[14] += y[0]*qPos[0]*qp.weight(); │ │ │ │ │ +106 out[15] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ +107 out[16] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ +108 out[17] += y[1]*qPos[1]*qp.weight(); │ │ │ │ │ +109 out[18] += y[0]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ +110 out[19] += y[1]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ +111 out[20] += y[0]*qPos[1]*qPos[1]*qp.weight(); │ │ │ │ │ +112 out[21] += y[1]*qPos[0]*qPos[0]*qp.weight(); │ │ │ │ │ +113 out[22] += y[0]*qPos[0]*qPos[1]*qPos[1]*qp.weight(); │ │ │ │ │ +114 out[23] += y[1]*qPos[0]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ +115 } │ │ │ │ │ +116 } │ │ │ │ │ +117 │ │ │ │ │ +118 private: │ │ │ │ │ +119 // Edge orientations │ │ │ │ │ +120 std::array sign_; │ │ │ │ │ +121 │ │ │ │ │ +122 // Edge normals │ │ │ │ │ +123 std::array n_; │ │ │ │ │ +124 }; │ │ │ │ │ +125} │ │ │ │ │ +126#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:17 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:46 │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT2Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:34 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas2cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT03DLocalCoefficients
class  Dune::RT2Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00176_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,300 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03dlocalcoefficients.hh
│ │ │ │ +
raviartthomas2cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i=0; i<4; i++)
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ +
31 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │
33
│ │ │ │ -
│ │ │ │ -
35 std::size_t size () const
│ │ │ │ -
36 {
│ │ │ │ -
37 return 4;
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
42 {
│ │ │ │ -
43 return li[i];
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector<LocalKey> li;
│ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
50}
│ │ │ │ -
51
│ │ │ │ -
52#endif
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
39 RT2Cube2DLocalBasis (unsigned int s = 0)
│ │ │ │ +
40 {
│ │ │ │ +
41 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ +
42 if (s & 1)
│ │ │ │ +
43 {
│ │ │ │ +
44 sign0 = -1.0;
│ │ │ │ +
45 }
│ │ │ │ +
46 if (s & 2)
│ │ │ │ +
47 {
│ │ │ │ +
48 sign1 = -1.0;
│ │ │ │ +
49 }
│ │ │ │ +
50 if (s & 4)
│ │ │ │ +
51 {
│ │ │ │ +
52 sign2 = -1.0;
│ │ │ │ +
53 }
│ │ │ │ +
54 if (s & 8)
│ │ │ │ +
55 {
│ │ │ │ +
56 sign3 = -1.0;
│ │ │ │ +
57 }
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
61 unsigned int size () const
│ │ │ │ +
62 {
│ │ │ │ +
63 return 24;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
72 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
73 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
74 {
│ │ │ │ +
75 out.resize(24);
│ │ │ │ +
76
│ │ │ │ +
77 out[0][0] = sign0*(-1.0 + 9.0*in[0] - 18.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]);
│ │ │ │ +
78 out[0][1] = 0.0;
│ │ │ │ +
79 out[1][0] = 3.0 - 27.0*in[0] - 6.0*in[1] + 54.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1] - 30.0*in[0]*in[0]*in[0] + 60.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
80 out[1][1] = 0.0;
│ │ │ │ +
81 out[2][0] = sign0*(-5.0 + 45.0*in[0] + 30.0*in[1] - 270.0*in[0]*in[1] - 90.0*in[0]*in[0] - 30.0*in[1]*in[1] + 540.0*in[0]*in[0]*in[1] + 270.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ +
82 out[2][1] = 0.0;
│ │ │ │ +
83 out[3][0] = sign1*(3.0*in[0] - 12.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]);
│ │ │ │ +
84 out[3][1] = 0.0;
│ │ │ │ +
85 out[4][0] = 9.0*in[0] - 18.0*in[0]*in[1] - 36.0*in[0]*in[0] + 72.0*in[0]*in[0]*in[1] + 30.0*in[0]*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
86 out[4][1] = 0.0;
│ │ │ │ +
87 out[5][0] = sign1*(15.0*in[0] - 90.0*in[0]*in[1] - 60.0*in[0]*in[0] + 360.0*in[0]*in[0]*in[1] + 90.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ +
88 out[5][1] = 0.0;
│ │ │ │ +
89 out[6][0] = 0.0;
│ │ │ │ +
90 out[6][1] = sign2*(-1.0 + 9.0*in[1] - 18.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]);
│ │ │ │ +
91 out[7][0] = 0.0;
│ │ │ │ +
92 out[7][1] = -3.0 + 6.0*in[0] + 27.0*in[1] - 54.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1] + 30.0*in[1]*in[1]*in[1] - 60.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
93 out[8][0] = 0.0;
│ │ │ │ +
94 out[8][1] = sign2*(-5.0 + 30.0*in[0] + 45.0*in[1] - 270.0*in[0]*in[1] - 30.0*in[0]*in[0] - 90.0*in[1]*in[1] + 270.0*in[0]*in[0]*in[1] + 540.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ +
95 out[9][0] = 0.0;
│ │ │ │ +
96 out[9][1] = sign3*(3.0*in[1] - 12.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]);
│ │ │ │ +
97 out[10][0] = 0.0;
│ │ │ │ +
98 out[10][1] = -9.0*in[1] + 18.0*in[0]*in[1] + 36.0*in[1]*in[1] - 72.0*in[0]*in[1]*in[1] - 30.0*in[1]*in[1]*in[1] + 60.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
99 out[11][0] = 0.0;
│ │ │ │ +
100 out[11][1] = sign3*(15.0*in[1] - 90.0*in[0]*in[1] - 60.0*in[1]*in[1] + 90.0*in[0]*in[0]*in[1] + 360.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ +
101 out[12][0] = 324.0*in[0] -1296.0*in[0]*in[1] - 864.0*in[0]*in[0] + 3456.0*in[0]*in[0]*in[1] + 1080.0*in[0]*in[1]*in[1] + 540.0*in[0]*in[0]*in[0] - 2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[0]*in[0]*in[1] + 1800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
102 out[12][1] = 0.0;
│ │ │ │ +
103 out[13][0] = 0.0;
│ │ │ │ +
104 out[13][1] = 324.0*in[1] - 1296.0*in[0]*in[1] - 864.0*in[1]*in[1] + 1080.0*in[0]*in[0]*in[1] + 3456.0*in[0]*in[1]*in[1] + 540.0*in[1]*in[1]*in[1] - 2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[1]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1]*in[0]*in[0];
│ │ │ │ +
105 out[14][0] = -540.0*in[0] + 2160.0*in[0]*in[1] + 1620.0*in[0]*in[0] - 6480.0*in[0]*in[0]*in[1] - 1800.0*in[0]*in[1]*in[1] - 1080.0*in[0]*in[0]*in[0] + 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0]*in[1] - 3600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
106 out[14][1] = 0.0;
│ │ │ │ +
107 out[15][0] = 0.0;
│ │ │ │ +
108 out[15][1] = -1296.0*in[1] + 6912.0*in[0]*in[1] + 3456.0*in[1]*in[1] - 6480.0*in[0]*in[0]*in[1] - 18432.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[0]*in[1]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
109 out[16][0] = -1296.0*in[0] + 6912.0*in[0]*in[1] + 3456.0*in[0]*in[0] - 6480.0*in[0]*in[1]*in[1] - 18432.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[1]*in[0]*in[0]*in[0] - 10800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
110 out[16][1] = 0.0;
│ │ │ │ +
111 out[17][0] = 0.0;
│ │ │ │ +
112 out[17][1] = -540.0*in[1] + 2160.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 1800.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] - 1080.0*in[1]*in[1]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[1]*in[1]*in[1] - 3600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
113 out[18][0] = 2160.0*in[0] - 11520.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[0]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
114 out[18][1] = 0.0;
│ │ │ │ +
115 out[19][0] = 0.0;
│ │ │ │ +
116 out[19][1] = 2160.0*in[1] - 11520.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[1]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
117 out[20][0] = 1080.0*in[0] - 6480.0*in[0]*in[1] - 2880.0*in[0]*in[0] + 17280.0*in[0]*in[0]*in[1] + 6480.0*in[0]*in[1]*in[1] + 1800.0*in[0]*in[0]*in[0] - 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[0]*in[1] + 10800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
118 out[20][1] = 0.0;
│ │ │ │ +
119 out[21][0] = 0.0;
│ │ │ │ +
120 out[21][1] = 1080.0*in[1] - 6480.0*in[0]*in[1] - 2880.0*in[1]*in[1] + 6480.0*in[0]*in[0]*in[1] + 17280.0*in[0]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1] - 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[1]*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
121 out[22][0] = -1800.0*in[0] + 10800.0*in[0]*in[1] + 5400.0*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[1]*in[1] - 3600.0*in[0]*in[0]*in[0] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1] - 21600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
122 out[22][1] = 0.0;
│ │ │ │ +
123 out[23][0] = 0.0;
│ │ │ │ +
124 out[23][1] = -1800.0*in[1] + 10800.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] - 3600.0*in[1]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1] - 21600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
125 }
│ │ │ │ +
│ │ │ │ +
126
│ │ │ │ +
│ │ │ │ +
133 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
134 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
135 {
│ │ │ │ +
136 out.resize(24);
│ │ │ │ +
137
│ │ │ │ +
138 out[0][0][0] = sign0*(9.0 - 36.0*in[0] + 30.0*in[0]*in[0]);
│ │ │ │ +
139 out[0][0][1] = 0.0;
│ │ │ │ +
140 out[0][1][0] = 0.0;
│ │ │ │ +
141 out[0][1][1] = 0.0;
│ │ │ │ +
142
│ │ │ │ +
143 out[1][0][0] = -27.0 + 54.0*in[1] + 108.0*in[0] - 216.0*in[0]*in[1] - 90.0*in[0]*in[0] + 180.0*in[0]*in[0]*in[1];
│ │ │ │ +
144 out[1][0][1] = -6.0 + 54.0*in[0] - 108.0*in[0]*in[0] + 60.0*in[0]*in[0]*in[0];
│ │ │ │ +
145 out[1][1][0] = 0.0;
│ │ │ │ +
146 out[1][1][1] = 0.0;
│ │ │ │ +
147
│ │ │ │ +
148 out[2][0][0] = sign0*(45.0 - 270.0*in[1] - 180.0*in[0] + 1080.0*in[0]*in[1] + 270.0*in[1]*in[1] + 150.0*in[0]*in[0] - 1080.0*in[0]*in[1]*in[1] - 900.0*in[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ +
149 out[2][0][1] = sign0*(30.0 - 270.0*in[0] - 60.0*in[1] + 540.0*in[0]*in[0] + 540.0*in[0]*in[1] - 1080.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in[1]);
│ │ │ │ +
150 out[2][1][0] = 0.0;
│ │ │ │ +
151 out[2][1][1] = 0.0;
│ │ │ │ +
152
│ │ │ │ +
153 out[3][0][0] = sign1*(3.0 - 24.0*in[0] + 30.0*in[0]*in[0]);
│ │ │ │ +
154 out[3][0][1] = 0.0;
│ │ │ │ +
155 out[3][1][0] = 0.0;
│ │ │ │ +
156 out[3][1][1] = 0.0;
│ │ │ │ +
157
│ │ │ │ +
158 out[4][0][0] = 9.0 - 18.0*in[1] - 72.0*in[0] + 144.0*in[0]*in[1] + 90.0*in[0]*in[0] - 180.0*in[0]*in[0]*in[1];
│ │ │ │ +
159 out[4][0][1] = -18.0*in[0] + 72.0*in[0]*in[0] - 60.0*in[0]*in[0]*in[0];
│ │ │ │ +
160 out[4][1][0] = 0.0;
│ │ │ │ +
161 out[4][1][1] = 0.0;
│ │ │ │ +
162
│ │ │ │ +
163 out[5][0][0] = sign1*(15.0 - 90.0*in[1] - 120.0*in[0] + 720.0*in[0]*in[1] + 90.0*in[1]*in[1] + 150.0*in[0]*in[0] - 720.0*in[0]*in[1]*in[1] - 900.0*in[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ +
164 out[5][0][1] = sign1*(-90.0*in[0] + 360.0*in[0]*in[0] + 180.0*in[0]*in[1] - 720.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in[1]);
│ │ │ │ +
165 out[5][1][0] = 0.0;
│ │ │ │ +
166 out[5][1][1] = 0.0;
│ │ │ │ +
167
│ │ │ │ +
168
│ │ │ │ +
169 out[6][0][0] = 0.0;
│ │ │ │ +
170 out[6][0][1] = 0.0;
│ │ │ │ +
171 out[6][1][0] = 0.0;
│ │ │ │ +
172 out[6][1][1] = sign2*(9.0 - 36.0*in[1] + 30.0*in[1]*in[1]);
│ │ │ │ +
173
│ │ │ │ +
174 out[7][0][0] = 0.0;
│ │ │ │ +
175 out[7][0][1] = 0.0;
│ │ │ │ +
176 out[7][1][0] = 6.0 - 54.0*in[1] + 108.0*in[1]*in[1] - 60.0*in[1]*in[1]*in[1];
│ │ │ │ +
177 out[7][1][1] = 27.0 - 54.0*in[0] - 108.0*in[1] + 216.0*in[0]*in[1] + 90.0*in[1]*in[1] - 180.0*in[0]*in[1]*in[1];
│ │ │ │ +
178
│ │ │ │ +
179 out[8][0][0] = 0.0;
│ │ │ │ +
180 out[8][0][1] = 0.0;
│ │ │ │ +
181 out[8][1][0] = sign2*(30.0 - 270.0*in[1] - 60.0*in[0] + 540.0*in[0]*in[1] + 540.0*in[1]*in[1] - 1080.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in[1]*in[0]);
│ │ │ │ +
182 out[8][1][1] = sign2*(45.0 - 270.0*in[0] - 180.0*in[1] + 270.0*in[0]*in[0] + 1080.0*in[0]*in[1] + 150.0*in[1]*in[1] - 1080.0*in[0]*in[0]*in[1] - 900.0*in[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ +
183
│ │ │ │ +
184 out[9][0][0] = 0.0;
│ │ │ │ +
185 out[9][0][1] = 0.0;
│ │ │ │ +
186 out[9][1][0] = 0.0;
│ │ │ │ +
187 out[9][1][1] = sign3*(3.0 - 24.0*in[1] + 30.0*in[1]*in[1]);
│ │ │ │ +
188
│ │ │ │ +
189 out[10][0][0] = 0.0;
│ │ │ │ +
190 out[10][0][1] = 0.0;
│ │ │ │ +
191 out[10][1][0] = 18.0*in[1] - 72.0*in[1]*in[1] + 60.0*in[1]*in[1]*in[1];
│ │ │ │ +
192 out[10][1][1] = -9.0 + 18.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 90.0*in[1]*in[1] + 180.0*in[0]*in[1]*in[1];
│ │ │ │ +
193
│ │ │ │ +
194 out[11][0][0] = 0.0;
│ │ │ │ +
195 out[11][0][1] = 0.0;
│ │ │ │ +
196 out[11][1][0] = sign3*(-90.0*in[1] + 180.0*in[0]*in[1] + 360.0*in[1]*in[1] - 720.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in[1]*in[0]);
│ │ │ │ +
197 out[11][1][1] = sign3*(15.0 - 90.0*in[0] - 120.0*in[1] + 90.0*in[0]*in[0] + 720.0*in[0]*in[1] + 150.0*in[1]*in[1] - 720.0*in[0]*in[0]*in[1] - 900.0*in[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ +
198
│ │ │ │ +
199 out[12][0][0] = 324 -1296.0*in[1] - 1728.0*in[0] + 6912.0*in[0]*in[1] + 1080.0*in[1]*in[1] + 1620.0*in[0]*in[0] - 5760.0*in[0]*in[1]*in[1] - 6480.0*in[0]*in[0]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
200 out[12][0][1] = -1296.0*in[0] + 3456.0*in[0]*in[0] + 2160.0*in[0]*in[1] - 5760.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 3600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
201 out[12][1][0] = 0.0;
│ │ │ │ +
202 out[12][1][1] = 0.0;
│ │ │ │ +
203
│ │ │ │ +
204 out[13][0][0] = 0.0;
│ │ │ │ +
205 out[13][0][1] = 0.0;
│ │ │ │ +
206 out[13][1][0] = -1296.0*in[1] + 2160.0*in[0]*in[1] + 3456.0*in[1]*in[1] - 5760.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 3600.0*in[1]*in[1]*in[1]*in[0];
│ │ │ │ +
207 out[13][1][1] = 324.0 - 1296.0*in[0] - 1728.0*in[1] + 1080.0*in[0]*in[0] + 6912.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 5760.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] + 5400.0*in[1]*in[1]*in[0]*in[0];
│ │ │ │ +
208
│ │ │ │ +
209 out[14][0][0] = -540.0 + 2160.0*in[1] + 3240.0*in[0] - 12960.0*in[0]*in[1] - 1800.0*in[1]*in[1] - 3240.0*in[0]*in[0] + 10800.0*in[0]*in[1]*in[1] + 12960.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
210 out[14][0][1] = 2160.0*in[0] - 6480.0*in[0]*in[0] - 3600.0*in[0]*in[1] + 10800.0*in[0]*in[0]*in[1] + 4320.0*in[0]*in[0]*in[0] - 7200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
211 out[14][1][0] = 0.0;
│ │ │ │ +
212 out[14][1][1] = 0.0;
│ │ │ │ +
213
│ │ │ │ +
214 out[15][0][0] = 0.0;
│ │ │ │ +
215 out[15][0][1] = 0.0;
│ │ │ │ +
216 out[15][1][0] = 6912.0*in[1] - 12960.0*in[0]*in[1] - 18432.0*in[1]*in[1] + 34560.0*in[0]*in[1]*in[1] + 11520.0*in[1]*in[1]*in[1] - 21600.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
217 out[15][1][1] = -1296.0 + 6912.0*in[0] + 6912.0*in[1] - 6480.0*in[0]*in[0] - 36864.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 34560.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
218
│ │ │ │ +
219 out[16][0][0] = -1296.0 + 6912.0*in[1] + 6912.0*in[0] - 6480.0*in[1]*in[1] - 36864.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1]*in[1] + 34560.0*in[1]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
220 out[16][0][1] = 6912.0*in[0] - 12960.0*in[0]*in[1] - 18432.0*in[0]*in[0] + 34560.0*in[0]*in[0]*in[1] + 11520.0*in[0]*in[0]*in[0] - 21600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
221 out[16][1][0] = 0.0;
│ │ │ │ +
222 out[16][1][1] = 0.0;
│ │ │ │ +
223
│ │ │ │ +
224 out[17][0][0] = 0.0;
│ │ │ │ +
225 out[17][0][1] = 0.0;
│ │ │ │ +
226 out[17][1][0] = 2160.0*in[1] - 3600.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 7200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
227 out[17][1][1] = -540.0 + 2160.0*in[0] + 3240.0*in[1] - 1800.0*in[0]*in[0] - 12960.0*in[0]*in[1] - 3240.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + 12960.0*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
228
│ │ │ │ +
229 out[18][0][0] = 2160.0 - 11520.0*in[1] - 12960.0*in[0] + 69120.0*in[0]*in[1] + 10800.0*in[1]*in[1] + 12960.0*in[0]*in[0] - 64800.0*in[0]*in[1]*in[1] - 69120.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
230 out[18][0][1] = -11520.0*in[0] + 34560.0*in[0]*in[0] + 21600.0*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1] - 23040.0*in[0]*in[0]*in[0] + 43200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
231 out[18][1][0] = 0.0;
│ │ │ │ +
232 out[18][1][1] = 0.0;
│ │ │ │ +
233
│ │ │ │ +
234 out[19][0][0] = 0.0;
│ │ │ │ +
235 out[19][0][1] = 0.0;
│ │ │ │ +
236 out[19][1][0] = -11520.0*in[1] + 21600.0*in[0]*in[1] + 34560.0*in[1]*in[1] - 64800.0*in[0]*in[1]*in[1] - 23040.0*in[1]*in[1]*in[1] + 43200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
237 out[19][1][1] = 2160.0 - 11520.0*in[0] - 12960.0*in[1] + 10800.0*in[0]*in[0] + 69120.0*in[0]*in[1] + 12960.0*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1] - 69120.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
238
│ │ │ │ +
239 out[20][0][0] = 1080.0 - 6480.0*in[1] - 5760.0*in[0] + 34560.0*in[0]*in[1] + 6480.0*in[1]*in[1] + 5400.0*in[0]*in[0] - 34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
240 out[20][0][1] = -6480.0*in[0] + 17280.0*in[0]*in[0] + 12960.0*in[0]*in[1] - 34560.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[0] + 21600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
241 out[20][1][0] = 0.0;
│ │ │ │ +
242 out[20][1][1] = 0.0;
│ │ │ │ +
243
│ │ │ │ +
244 out[21][0][0] = 0.0;
│ │ │ │ +
245 out[21][0][1] = 0.0;
│ │ │ │ +
246 out[21][1][0] = -6480.0*in[1] + 12960.0*in[0]*in[1] + 17280.0*in[1]*in[1] - 34560.0*in[0]*in[1]*in[1] - 10800.0*in[1]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
247 out[21][1][1] = 1080.0 - 6480.0*in[0] - 5760.0*in[1] + 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 34560.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
248
│ │ │ │ +
249 out[22][0][0] = -1800.0 + 10800.0*in[1] + 10800.0*in[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] - 10800.0*in[0]*in[0] + 64800.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
250 out[22][0][1] = 10800.0*in[0] - 32400.0*in[0]*in[0] - 21600.0*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0] - 43200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ +
251 out[22][1][0] = 0.0;
│ │ │ │ +
252 out[22][1][1] = 0.0;
│ │ │ │ +
253
│ │ │ │ +
254 out[23][0][0] = 0.0;
│ │ │ │ +
255 out[23][0][1] = 0.0;
│ │ │ │ +
256 out[23][1][0] = 10800.0*in[1] - 21600.0*in[0]*in[1] - 32400.0*in[1]*in[1] + 64800.0*in[0]*in[1]*in[1] + 21600.0*in[1]*in[1]*in[1] - 43200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ +
257 out[23][1][1] = -1800.0 + 10800.0*in[0] + 10800.0*in[1] - 10800.0*in[0]*in[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ +
258 }
│ │ │ │ +
│ │ │ │ +
259
│ │ │ │ +
│ │ │ │ +
261 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
262 const typename Traits::DomainType& in, // position
│ │ │ │ +
263 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
264 {
│ │ │ │ +
265 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
266 if (totalOrder == 0) {
│ │ │ │ +
267 evaluateFunction(in, out);
│ │ │ │ +
268 } else {
│ │ │ │ +
269 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
270 }
│ │ │ │ +
271 }
│ │ │ │ +
│ │ │ │ +
272
│ │ │ │ +
│ │ │ │ +
274 unsigned int order () const
│ │ │ │ +
275 {
│ │ │ │ +
276 return 5;
│ │ │ │ +
277 }
│ │ │ │ +
│ │ │ │ +
278
│ │ │ │ +
279 private:
│ │ │ │ +
280 R sign0, sign1, sign2, sign3;
│ │ │ │ +
281 };
│ │ │ │ +
│ │ │ │ +
282}
│ │ │ │ +
283#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition raviartthomas03dlocalcoefficients.hh:25
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas03dlocalcoefficients.hh:41
│ │ │ │ -
RT03DLocalCoefficients()
Standard constructor.
Definition raviartthomas03dlocalcoefficients.hh:28
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas03dlocalcoefficients.hh:35
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas2cube2dlocalbasis.hh:28
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:261
│ │ │ │ +
RT2Cube2DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2dlocalbasis.hh:39
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:133
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:274
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas2cube2dlocalbasis.hh:32
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas2cube2dlocalbasis.hh:61
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:72
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,77 +1,437 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ -raviartthomas03dlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ +raviartthomas2cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 │ │ │ │ │ -_2_4 class _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(4) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i=0; i<4; i++) │ │ │ │ │ -31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 } │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 33 │ │ │ │ │ -_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ -36 { │ │ │ │ │ -37 return 4; │ │ │ │ │ -38 } │ │ │ │ │ -39 │ │ │ │ │ -_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -42 { │ │ │ │ │ -43 return li[i]; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -46 private: │ │ │ │ │ -47 std::vector li; │ │ │ │ │ -48 }; │ │ │ │ │ -49 │ │ │ │ │ -50} │ │ │ │ │ -51 │ │ │ │ │ -52#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_3_9 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ +40 { │ │ │ │ │ +41 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ +42 if (s & 1) │ │ │ │ │ +43 { │ │ │ │ │ +44 sign0 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 if (s & 2) │ │ │ │ │ +47 { │ │ │ │ │ +48 sign1 = -1.0; │ │ │ │ │ +49 } │ │ │ │ │ +50 if (s & 4) │ │ │ │ │ +51 { │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ +53 } │ │ │ │ │ +54 if (s & 8) │ │ │ │ │ +55 { │ │ │ │ │ +56 sign3 = -1.0; │ │ │ │ │ +57 } │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_1 unsigned int _s_i_z_e () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return 24; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_7_2 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +73 std::vector& out) const │ │ │ │ │ +74 { │ │ │ │ │ +75 out.resize(24); │ │ │ │ │ +76 │ │ │ │ │ +77 out[0][0] = sign0*(-1.0 + 9.0*in[0] - 18.0*in[0]*in[0] + 10.0*in[0]*in[0]*in │ │ │ │ │ +[0]); │ │ │ │ │ +78 out[0][1] = 0.0; │ │ │ │ │ +79 out[1][0] = 3.0 - 27.0*in[0] - 6.0*in[1] + 54.0*in[0]*in[1] + 54.0*in[0]*in │ │ │ │ │ +[0] - 108.0*in[0]*in[0]*in[1] - 30.0*in[0]*in[0]*in[0] + 60.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +80 out[1][1] = 0.0; │ │ │ │ │ +81 out[2][0] = sign0*(-5.0 + 45.0*in[0] + 30.0*in[1] - 270.0*in[0]*in[1] - │ │ │ │ │ +90.0*in[0]*in[0] - 30.0*in[1]*in[1] + 540.0*in[0]*in[0]*in[1] + 270.0*in[0]*in │ │ │ │ │ +[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in │ │ │ │ │ +[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ +82 out[2][1] = 0.0; │ │ │ │ │ +83 out[3][0] = sign1*(3.0*in[0] - 12.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]); │ │ │ │ │ +84 out[3][1] = 0.0; │ │ │ │ │ +85 out[4][0] = 9.0*in[0] - 18.0*in[0]*in[1] - 36.0*in[0]*in[0] + 72.0*in[0]*in │ │ │ │ │ +[0]*in[1] + 30.0*in[0]*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]*in[1]; │ │ │ │ │ +86 out[4][1] = 0.0; │ │ │ │ │ +87 out[5][0] = sign1*(15.0*in[0] - 90.0*in[0]*in[1] - 60.0*in[0]*in[0] + │ │ │ │ │ +360.0*in[0]*in[0]*in[1] + 90.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - │ │ │ │ │ +360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in │ │ │ │ │ +[0]*in[0]*in[1]*in[1]); │ │ │ │ │ +88 out[5][1] = 0.0; │ │ │ │ │ +89 out[6][0] = 0.0; │ │ │ │ │ +90 out[6][1] = sign2*(-1.0 + 9.0*in[1] - 18.0*in[1]*in[1] + 10.0*in[1]*in[1]*in │ │ │ │ │ +[1]); │ │ │ │ │ +91 out[7][0] = 0.0; │ │ │ │ │ +92 out[7][1] = -3.0 + 6.0*in[0] + 27.0*in[1] - 54.0*in[0]*in[1] - 54.0*in[1]*in │ │ │ │ │ +[1] + 108.0*in[0]*in[1]*in[1] + 30.0*in[1]*in[1]*in[1] - 60.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +93 out[8][0] = 0.0; │ │ │ │ │ +94 out[8][1] = sign2*(-5.0 + 30.0*in[0] + 45.0*in[1] - 270.0*in[0]*in[1] - │ │ │ │ │ +30.0*in[0]*in[0] - 90.0*in[1]*in[1] + 270.0*in[0]*in[0]*in[1] + 540.0*in[0]*in │ │ │ │ │ +[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in │ │ │ │ │ +[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ +95 out[9][0] = 0.0; │ │ │ │ │ +96 out[9][1] = sign3*(3.0*in[1] - 12.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]); │ │ │ │ │ +97 out[10][0] = 0.0; │ │ │ │ │ +98 out[10][1] = -9.0*in[1] + 18.0*in[0]*in[1] + 36.0*in[1]*in[1] - 72.0*in │ │ │ │ │ +[0]*in[1]*in[1] - 30.0*in[1]*in[1]*in[1] + 60.0*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +99 out[11][0] = 0.0; │ │ │ │ │ +100 out[11][1] = sign3*(15.0*in[1] - 90.0*in[0]*in[1] - 60.0*in[1]*in[1] + │ │ │ │ │ +90.0*in[0]*in[0]*in[1] + 360.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - │ │ │ │ │ +360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in │ │ │ │ │ +[1]*in[1]*in[0]*in[0]); │ │ │ │ │ +101 out[12][0] = 324.0*in[0] -1296.0*in[0]*in[1] - 864.0*in[0]*in[0] + │ │ │ │ │ +3456.0*in[0]*in[0]*in[1] + 1080.0*in[0]*in[1]*in[1] + 540.0*in[0]*in[0]*in[0] - │ │ │ │ │ +2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[0]*in[0]*in[1] + 1800.0*in │ │ │ │ │ +[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +102 out[12][1] = 0.0; │ │ │ │ │ +103 out[13][0] = 0.0; │ │ │ │ │ +104 out[13][1] = 324.0*in[1] - 1296.0*in[0]*in[1] - 864.0*in[1]*in[1] + │ │ │ │ │ +1080.0*in[0]*in[0]*in[1] + 3456.0*in[0]*in[1]*in[1] + 540.0*in[1]*in[1]*in[1] - │ │ │ │ │ +2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[1]*in[1]*in[1] + 1800.0*in │ │ │ │ │ +[1]*in[1]*in[1]*in[0]*in[0]; │ │ │ │ │ +105 out[14][0] = -540.0*in[0] + 2160.0*in[0]*in[1] + 1620.0*in[0]*in[0] - │ │ │ │ │ +6480.0*in[0]*in[0]*in[1] - 1800.0*in[0]*in[1]*in[1] - 1080.0*in[0]*in[0]*in[0] │ │ │ │ │ ++ 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0]*in[1] - 3600.0*in │ │ │ │ │ +[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +106 out[14][1] = 0.0; │ │ │ │ │ +107 out[15][0] = 0.0; │ │ │ │ │ +108 out[15][1] = -1296.0*in[1] + 6912.0*in[0]*in[1] + 3456.0*in[1]*in[1] - │ │ │ │ │ +6480.0*in[0]*in[0]*in[1] - 18432.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] │ │ │ │ │ ++ 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[0]*in[1]*in[1]*in[1] - │ │ │ │ │ +10800.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +109 out[16][0] = -1296.0*in[0] + 6912.0*in[0]*in[1] + 3456.0*in[0]*in[0] - │ │ │ │ │ +6480.0*in[0]*in[1]*in[1] - 18432.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] │ │ │ │ │ ++ 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[1]*in[0]*in[0]*in[0] - │ │ │ │ │ +10800.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +110 out[16][1] = 0.0; │ │ │ │ │ +111 out[17][0] = 0.0; │ │ │ │ │ +112 out[17][1] = -540.0*in[1] + 2160.0*in[0]*in[1] + 1620.0*in[1]*in[1] - │ │ │ │ │ +1800.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] - 1080.0*in[1]*in[1]*in[1] │ │ │ │ │ ++ 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[1]*in[1]*in[1] - 3600.0*in │ │ │ │ │ +[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +113 out[18][0] = 2160.0*in[0] - 11520.0*in[0]*in[1] - 6480.0*in[0]*in[0] + │ │ │ │ │ +34560.0*in[0]*in[0]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in │ │ │ │ │ +[0] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[0]*in[0]*in[1] + │ │ │ │ │ +21600.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +114 out[18][1] = 0.0; │ │ │ │ │ +115 out[19][0] = 0.0; │ │ │ │ │ +116 out[19][1] = 2160.0*in[1] - 11520.0*in[0]*in[1] - 6480.0*in[1]*in[1] + │ │ │ │ │ +10800.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in │ │ │ │ │ +[1] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[1]*in[1]*in[1] + │ │ │ │ │ +21600.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +117 out[20][0] = 1080.0*in[0] - 6480.0*in[0]*in[1] - 2880.0*in[0]*in[0] + │ │ │ │ │ +17280.0*in[0]*in[0]*in[1] + 6480.0*in[0]*in[1]*in[1] + 1800.0*in[0]*in[0]*in[0] │ │ │ │ │ +- 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[0]*in[1] + │ │ │ │ │ +10800.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +118 out[20][1] = 0.0; │ │ │ │ │ +119 out[21][0] = 0.0; │ │ │ │ │ +120 out[21][1] = 1080.0*in[1] - 6480.0*in[0]*in[1] - 2880.0*in[1]*in[1] + │ │ │ │ │ +6480.0*in[0]*in[0]*in[1] + 17280.0*in[0]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1] │ │ │ │ │ +- 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[1]*in[1]*in[1] + │ │ │ │ │ +10800.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +121 out[22][0] = -1800.0*in[0] + 10800.0*in[0]*in[1] + 5400.0*in[0]*in[0] - │ │ │ │ │ +32400.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[1]*in[1] - 3600.0*in[0]*in[0]*in │ │ │ │ │ +[0] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1] - │ │ │ │ │ +21600.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +122 out[22][1] = 0.0; │ │ │ │ │ +123 out[23][0] = 0.0; │ │ │ │ │ +124 out[23][1] = -1800.0*in[1] + 10800.0*in[0]*in[1] + 5400.0*in[1]*in[1] - │ │ │ │ │ +10800.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] - 3600.0*in[1]*in[1]*in │ │ │ │ │ +[1] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1] - │ │ │ │ │ +21600.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ +125 } │ │ │ │ │ +126 │ │ │ │ │ +_1_3_3 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +134 std::vector& out) const │ │ │ │ │ +135 { │ │ │ │ │ +136 out.resize(24); │ │ │ │ │ +137 │ │ │ │ │ +138 out[0][0][0] = sign0*(9.0 - 36.0*in[0] + 30.0*in[0]*in[0]); │ │ │ │ │ +139 out[0][0][1] = 0.0; │ │ │ │ │ +140 out[0][1][0] = 0.0; │ │ │ │ │ +141 out[0][1][1] = 0.0; │ │ │ │ │ +142 │ │ │ │ │ +143 out[1][0][0] = -27.0 + 54.0*in[1] + 108.0*in[0] - 216.0*in[0]*in[1] - │ │ │ │ │ +90.0*in[0]*in[0] + 180.0*in[0]*in[0]*in[1]; │ │ │ │ │ +144 out[1][0][1] = -6.0 + 54.0*in[0] - 108.0*in[0]*in[0] + 60.0*in[0]*in[0]*in │ │ │ │ │ +[0]; │ │ │ │ │ +145 out[1][1][0] = 0.0; │ │ │ │ │ +146 out[1][1][1] = 0.0; │ │ │ │ │ +147 │ │ │ │ │ +148 out[2][0][0] = sign0*(45.0 - 270.0*in[1] - 180.0*in[0] + 1080.0*in[0]*in[1] │ │ │ │ │ ++ 270.0*in[1]*in[1] + 150.0*in[0]*in[0] - 1080.0*in[0]*in[1]*in[1] - 900.0*in │ │ │ │ │ +[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ +149 out[2][0][1] = sign0*(30.0 - 270.0*in[0] - 60.0*in[1] + 540.0*in[0]*in[0] + │ │ │ │ │ +540.0*in[0]*in[1] - 1080.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + │ │ │ │ │ +600.0*in[0]*in[0]*in[0]*in[1]); │ │ │ │ │ +150 out[2][1][0] = 0.0; │ │ │ │ │ +151 out[2][1][1] = 0.0; │ │ │ │ │ +152 │ │ │ │ │ +153 out[3][0][0] = sign1*(3.0 - 24.0*in[0] + 30.0*in[0]*in[0]); │ │ │ │ │ +154 out[3][0][1] = 0.0; │ │ │ │ │ +155 out[3][1][0] = 0.0; │ │ │ │ │ +156 out[3][1][1] = 0.0; │ │ │ │ │ +157 │ │ │ │ │ +158 out[4][0][0] = 9.0 - 18.0*in[1] - 72.0*in[0] + 144.0*in[0]*in[1] + 90.0*in │ │ │ │ │ +[0]*in[0] - 180.0*in[0]*in[0]*in[1]; │ │ │ │ │ +159 out[4][0][1] = -18.0*in[0] + 72.0*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]; │ │ │ │ │ +160 out[4][1][0] = 0.0; │ │ │ │ │ +161 out[4][1][1] = 0.0; │ │ │ │ │ +162 │ │ │ │ │ +163 out[5][0][0] = sign1*(15.0 - 90.0*in[1] - 120.0*in[0] + 720.0*in[0]*in[1] + │ │ │ │ │ +90.0*in[1]*in[1] + 150.0*in[0]*in[0] - 720.0*in[0]*in[1]*in[1] - 900.0*in[0]*in │ │ │ │ │ +[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ +164 out[5][0][1] = sign1*(-90.0*in[0] + 360.0*in[0]*in[0] + 180.0*in[0]*in[1] - │ │ │ │ │ +720.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in │ │ │ │ │ +[1]); │ │ │ │ │ +165 out[5][1][0] = 0.0; │ │ │ │ │ +166 out[5][1][1] = 0.0; │ │ │ │ │ +167 │ │ │ │ │ +168 │ │ │ │ │ +169 out[6][0][0] = 0.0; │ │ │ │ │ +170 out[6][0][1] = 0.0; │ │ │ │ │ +171 out[6][1][0] = 0.0; │ │ │ │ │ +172 out[6][1][1] = sign2*(9.0 - 36.0*in[1] + 30.0*in[1]*in[1]); │ │ │ │ │ +173 │ │ │ │ │ +174 out[7][0][0] = 0.0; │ │ │ │ │ +175 out[7][0][1] = 0.0; │ │ │ │ │ +176 out[7][1][0] = 6.0 - 54.0*in[1] + 108.0*in[1]*in[1] - 60.0*in[1]*in[1]*in │ │ │ │ │ +[1]; │ │ │ │ │ +177 out[7][1][1] = 27.0 - 54.0*in[0] - 108.0*in[1] + 216.0*in[0]*in[1] + │ │ │ │ │ +90.0*in[1]*in[1] - 180.0*in[0]*in[1]*in[1]; │ │ │ │ │ +178 │ │ │ │ │ +179 out[8][0][0] = 0.0; │ │ │ │ │ +180 out[8][0][1] = 0.0; │ │ │ │ │ +181 out[8][1][0] = sign2*(30.0 - 270.0*in[1] - 60.0*in[0] + 540.0*in[0]*in[1] + │ │ │ │ │ +540.0*in[1]*in[1] - 1080.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + │ │ │ │ │ +600.0*in[1]*in[1]*in[1]*in[0]); │ │ │ │ │ +182 out[8][1][1] = sign2*(45.0 - 270.0*in[0] - 180.0*in[1] + 270.0*in[0]*in[0] │ │ │ │ │ ++ 1080.0*in[0]*in[1] + 150.0*in[1]*in[1] - 1080.0*in[0]*in[0]*in[1] - 900.0*in │ │ │ │ │ +[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ +183 │ │ │ │ │ +184 out[9][0][0] = 0.0; │ │ │ │ │ +185 out[9][0][1] = 0.0; │ │ │ │ │ +186 out[9][1][0] = 0.0; │ │ │ │ │ +187 out[9][1][1] = sign3*(3.0 - 24.0*in[1] + 30.0*in[1]*in[1]); │ │ │ │ │ +188 │ │ │ │ │ +189 out[10][0][0] = 0.0; │ │ │ │ │ +190 out[10][0][1] = 0.0; │ │ │ │ │ +191 out[10][1][0] = 18.0*in[1] - 72.0*in[1]*in[1] + 60.0*in[1]*in[1]*in[1]; │ │ │ │ │ +192 out[10][1][1] = -9.0 + 18.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - │ │ │ │ │ +90.0*in[1]*in[1] + 180.0*in[0]*in[1]*in[1]; │ │ │ │ │ +193 │ │ │ │ │ +194 out[11][0][0] = 0.0; │ │ │ │ │ +195 out[11][0][1] = 0.0; │ │ │ │ │ +196 out[11][1][0] = sign3*(-90.0*in[1] + 180.0*in[0]*in[1] + 360.0*in[1]*in[1] │ │ │ │ │ +- 720.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in │ │ │ │ │ +[1]*in[0]); │ │ │ │ │ +197 out[11][1][1] = sign3*(15.0 - 90.0*in[0] - 120.0*in[1] + 90.0*in[0]*in[0] + │ │ │ │ │ +720.0*in[0]*in[1] + 150.0*in[1]*in[1] - 720.0*in[0]*in[0]*in[1] - 900.0*in │ │ │ │ │ +[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ +198 │ │ │ │ │ +199 out[12][0][0] = 324 -1296.0*in[1] - 1728.0*in[0] + 6912.0*in[0]*in[1] + │ │ │ │ │ +1080.0*in[1]*in[1] + 1620.0*in[0]*in[0] - 5760.0*in[0]*in[1]*in[1] - 6480.0*in │ │ │ │ │ +[0]*in[0]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +200 out[12][0][1] = -1296.0*in[0] + 3456.0*in[0]*in[0] + 2160.0*in[0]*in[1] - │ │ │ │ │ +5760.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 3600.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +201 out[12][1][0] = 0.0; │ │ │ │ │ +202 out[12][1][1] = 0.0; │ │ │ │ │ +203 │ │ │ │ │ +204 out[13][0][0] = 0.0; │ │ │ │ │ +205 out[13][0][1] = 0.0; │ │ │ │ │ +206 out[13][1][0] = -1296.0*in[1] + 2160.0*in[0]*in[1] + 3456.0*in[1]*in[1] - │ │ │ │ │ +5760.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 3600.0*in[1]*in[1]*in │ │ │ │ │ +[1]*in[0]; │ │ │ │ │ +207 out[13][1][1] = 324.0 - 1296.0*in[0] - 1728.0*in[1] + 1080.0*in[0]*in[0] + │ │ │ │ │ +6912.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 5760.0*in[0]*in[0]*in[1] - 6480.0*in │ │ │ │ │ +[0]*in[1]*in[1] + 5400.0*in[1]*in[1]*in[0]*in[0]; │ │ │ │ │ +208 │ │ │ │ │ +209 out[14][0][0] = -540.0 + 2160.0*in[1] + 3240.0*in[0] - 12960.0*in[0]*in[1] │ │ │ │ │ +- 1800.0*in[1]*in[1] - 3240.0*in[0]*in[0] + 10800.0*in[0]*in[1]*in[1] + │ │ │ │ │ +12960.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +210 out[14][0][1] = 2160.0*in[0] - 6480.0*in[0]*in[0] - 3600.0*in[0]*in[1] + │ │ │ │ │ +10800.0*in[0]*in[0]*in[1] + 4320.0*in[0]*in[0]*in[0] - 7200.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +211 out[14][1][0] = 0.0; │ │ │ │ │ +212 out[14][1][1] = 0.0; │ │ │ │ │ +213 │ │ │ │ │ +214 out[15][0][0] = 0.0; │ │ │ │ │ +215 out[15][0][1] = 0.0; │ │ │ │ │ +216 out[15][1][0] = 6912.0*in[1] - 12960.0*in[0]*in[1] - 18432.0*in[1]*in[1] + │ │ │ │ │ +34560.0*in[0]*in[1]*in[1] + 11520.0*in[1]*in[1]*in[1] - 21600.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +217 out[15][1][1] = -1296.0 + 6912.0*in[0] + 6912.0*in[1] - 6480.0*in[0]*in[0] │ │ │ │ │ +- 36864.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 34560.0*in[0]*in[0]*in[1] + │ │ │ │ │ +34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +218 │ │ │ │ │ +219 out[16][0][0] = -1296.0 + 6912.0*in[1] + 6912.0*in[0] - 6480.0*in[1]*in[1] │ │ │ │ │ +- 36864.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1]*in[1] + │ │ │ │ │ +34560.0*in[1]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +220 out[16][0][1] = 6912.0*in[0] - 12960.0*in[0]*in[1] - 18432.0*in[0]*in[0] + │ │ │ │ │ +34560.0*in[0]*in[0]*in[1] + 11520.0*in[0]*in[0]*in[0] - 21600.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +221 out[16][1][0] = 0.0; │ │ │ │ │ +222 out[16][1][1] = 0.0; │ │ │ │ │ +223 │ │ │ │ │ +224 out[17][0][0] = 0.0; │ │ │ │ │ +225 out[17][0][1] = 0.0; │ │ │ │ │ +226 out[17][1][0] = 2160.0*in[1] - 3600.0*in[0]*in[1] - 6480.0*in[1]*in[1] + │ │ │ │ │ +10800.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 7200.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +227 out[17][1][1] = -540.0 + 2160.0*in[0] + 3240.0*in[1] - 1800.0*in[0]*in[0] - │ │ │ │ │ +12960.0*in[0]*in[1] - 3240.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + │ │ │ │ │ +12960.0*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +228 │ │ │ │ │ +229 out[18][0][0] = 2160.0 - 11520.0*in[1] - 12960.0*in[0] + 69120.0*in[0]*in │ │ │ │ │ +[1] + 10800.0*in[1]*in[1] + 12960.0*in[0]*in[0] - 64800.0*in[0]*in[1]*in[1] - │ │ │ │ │ +69120.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +230 out[18][0][1] = -11520.0*in[0] + 34560.0*in[0]*in[0] + 21600.0*in[0]*in[1] │ │ │ │ │ +- 64800.0*in[0]*in[0]*in[1] - 23040.0*in[0]*in[0]*in[0] + 43200.0*in[0]*in │ │ │ │ │ +[0]*in[0]*in[1]; │ │ │ │ │ +231 out[18][1][0] = 0.0; │ │ │ │ │ +232 out[18][1][1] = 0.0; │ │ │ │ │ +233 │ │ │ │ │ +234 out[19][0][0] = 0.0; │ │ │ │ │ +235 out[19][0][1] = 0.0; │ │ │ │ │ +236 out[19][1][0] = -11520.0*in[1] + 21600.0*in[0]*in[1] + 34560.0*in[1]*in[1] │ │ │ │ │ +- 64800.0*in[0]*in[1]*in[1] - 23040.0*in[1]*in[1]*in[1] + 43200.0*in[0]*in │ │ │ │ │ +[1]*in[1]*in[1]; │ │ │ │ │ +237 out[19][1][1] = 2160.0 - 11520.0*in[0] - 12960.0*in[1] + 10800.0*in[0]*in │ │ │ │ │ +[0] + 69120.0*in[0]*in[1] + 12960.0*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1] - │ │ │ │ │ +69120.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +238 │ │ │ │ │ +239 out[20][0][0] = 1080.0 - 6480.0*in[1] - 5760.0*in[0] + 34560.0*in[0]*in[1] │ │ │ │ │ ++ 6480.0*in[1]*in[1] + 5400.0*in[0]*in[0] - 34560.0*in[0]*in[1]*in[1] - │ │ │ │ │ +32400.0*in[0]*in[0]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +240 out[20][0][1] = -6480.0*in[0] + 17280.0*in[0]*in[0] + 12960.0*in[0]*in[1] - │ │ │ │ │ +34560.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[0] + 21600.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +241 out[20][1][0] = 0.0; │ │ │ │ │ +242 out[20][1][1] = 0.0; │ │ │ │ │ +243 │ │ │ │ │ +244 out[21][0][0] = 0.0; │ │ │ │ │ +245 out[21][0][1] = 0.0; │ │ │ │ │ +246 out[21][1][0] = -6480.0*in[1] + 12960.0*in[0]*in[1] + 17280.0*in[1]*in[1] - │ │ │ │ │ +34560.0*in[0]*in[1]*in[1] - 10800.0*in[1]*in[1]*in[1] + 21600.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +247 out[21][1][1] = 1080.0 - 6480.0*in[0] - 5760.0*in[1] + 6480.0*in[0]*in[0] + │ │ │ │ │ +34560.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 34560.0*in[0]*in[0]*in[1] - │ │ │ │ │ +32400.0*in[0]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +248 │ │ │ │ │ +249 out[22][0][0] = -1800.0 + 10800.0*in[1] + 10800.0*in[0] - 64800.0*in[0]*in │ │ │ │ │ +[1] - 10800.0*in[1]*in[1] - 10800.0*in[0]*in[0] + 64800.0*in[0]*in[1]*in[1] + │ │ │ │ │ +64800.0*in[0]*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +250 out[22][0][1] = 10800.0*in[0] - 32400.0*in[0]*in[0] - 21600.0*in[0]*in[1] + │ │ │ │ │ +64800.0*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0] - 43200.0*in[0]*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +251 out[22][1][0] = 0.0; │ │ │ │ │ +252 out[22][1][1] = 0.0; │ │ │ │ │ +253 │ │ │ │ │ +254 out[23][0][0] = 0.0; │ │ │ │ │ +255 out[23][0][1] = 0.0; │ │ │ │ │ +256 out[23][1][0] = 10800.0*in[1] - 21600.0*in[0]*in[1] - 32400.0*in[1]*in[1] + │ │ │ │ │ +64800.0*in[0]*in[1]*in[1] + 21600.0*in[1]*in[1]*in[1] - 43200.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +257 out[23][1][1] = -1800.0 + 10800.0*in[0] + 10800.0*in[1] - 10800.0*in[0]*in │ │ │ │ │ +[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] + │ │ │ │ │ +64800.0*in[0]*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ +258 } │ │ │ │ │ +259 │ │ │ │ │ +_2_6_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +262 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +263 std::vector& out) const // return value │ │ │ │ │ +264 { │ │ │ │ │ +265 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +266 if (totalOrder == 0) { │ │ │ │ │ +267 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +268 } else { │ │ │ │ │ +269 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +270 } │ │ │ │ │ +271 } │ │ │ │ │ +272 │ │ │ │ │ +_2_7_4 unsigned int _o_r_d_e_r () const │ │ │ │ │ +275 { │ │ │ │ │ +276 return 5; │ │ │ │ │ +277 } │ │ │ │ │ +278 │ │ │ │ │ +279 private: │ │ │ │ │ +280 R sign0, sign1, sign2, sign3; │ │ │ │ │ +281 }; │ │ │ │ │ +282} │ │ │ │ │ +283#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT03DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:261 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT2Cube2DLocalBasis(unsigned int s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:274 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:72 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomascube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,34 +72,61 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube2d.hh File Reference
│ │ │ │ +
raviartthomascube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas0cube2d/raviartthomas0cube2dall.hh"
│ │ │ │ + │ │ │ │ +

Convenience header that includes all available Raviart-Thomas local finite elements for cubes. │ │ │ │ +More...

│ │ │ │ +
#include "raviartthomas0cube2d.hh"
│ │ │ │ +#include "raviartthomas0cube3d.hh"
│ │ │ │ +#include "raviartthomas1cube2d.hh"
│ │ │ │ +#include "raviartthomas1cube3d.hh"
│ │ │ │ +#include "raviartthomas2cube2d.hh"
│ │ │ │ +#include "raviartthomas3cube2d.hh"
│ │ │ │ +#include "raviartthomas4cube2d.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0Cube2DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on rectangles. More...
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 0 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 0. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 1 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 1. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 2 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 2. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 3 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 3. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 4 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 4. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 0 >
 Raviart-Thomas local finite elements for cubes with dimension 3 and order 0. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 1 >
 Raviart-Thomas local finite elements for cubes with dimension 3 and order 1. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Convenience header that includes all available Raviart-Thomas local finite elements for cubes.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,21 +2,55 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h" │ │ │ │ │ +raviartthomascube.hh File Reference │ │ │ │ │ +Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ +elements for cubes. _M_o_r_e_._._. │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  _Z_e_r_o order Raviart-Thomas shape functions on rectangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ + order 0. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ + order 1. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ + order 2. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ + order 3. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ + order 4. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 3 and │ │ │ │ │ + order 0. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements for cubes with dimension 3 and │ │ │ │ │ + order 1. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ +elements for cubes. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00179_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomascube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,115 +74,209 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube2d.hh
│ │ │ │ +
raviartthomascube.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
23 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
31
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 {}
│ │ │ │ -
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 basis(s),
│ │ │ │ -
37 interpolation(s)
│ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return basis;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 {
│ │ │ │ -
47 return coefficients;
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
22namespace Dune
│ │ │ │ +
23{
│ │ │ │ +
39 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ + │ │ │ │ +
41
│ │ │ │ +
45 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
47 : public RT0Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
48 {
│ │ │ │ +
49 public:
│ │ │ │
│ │ │ │ - │ │ │ │ -
51 {
│ │ │ │ -
52 return interpolation;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
56 unsigned int size () const
│ │ │ │ -
57 {
│ │ │ │ -
58 return basis.size();
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
61 static constexpr GeometryType type ()
│ │ │ │ -
62 {
│ │ │ │ -
63 return GeometryTypes::quadrilateral;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
66 private:
│ │ │ │ - │ │ │ │ -
68 RT0Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71}
│ │ │ │ -
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
52 {}
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
56 {}
│ │ │ │ +
│ │ │ │ +
57 };
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
62 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
64 : public RT1Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
65 {
│ │ │ │ +
66 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
69 {}
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
73 {}
│ │ │ │ +
│ │ │ │ +
74 };
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
79 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
81 : public RT2Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
82 {
│ │ │ │ +
83 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
86 {}
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
90 {}
│ │ │ │ +
│ │ │ │ +
91 };
│ │ │ │ +
│ │ │ │ +
92
│ │ │ │ +
96 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
98 : public RT3Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
99 {
│ │ │ │ +
100 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
103 {}
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
107 {}
│ │ │ │ +
│ │ │ │ +
108 };
│ │ │ │ +
│ │ │ │ +
109
│ │ │ │ +
113 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
115 : public RT4Cube2DLocalFiniteElement<D, R>
│ │ │ │ +
116 {
│ │ │ │ +
117 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
120 {}
│ │ │ │ +
│ │ │ │ +
121
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
124 {}
│ │ │ │ +
│ │ │ │ +
125 };
│ │ │ │ +
│ │ │ │ +
126
│ │ │ │ +
130 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
132 : public RT0Cube3DLocalFiniteElement<D, R>
│ │ │ │ +
133 {
│ │ │ │ +
134 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
137 {}
│ │ │ │ +
│ │ │ │ +
138
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
141 {}
│ │ │ │ +
│ │ │ │ +
142 };
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
147 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
149 : public RT1Cube3DLocalFiniteElement<D, R>
│ │ │ │ +
150 {
│ │ │ │ +
151 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
154 {}
│ │ │ │ +
│ │ │ │ +
155
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
158 {}
│ │ │ │ +
│ │ │ │ +
159 };
│ │ │ │ +
│ │ │ │ +
160} // namespace Dune
│ │ │ │ +
161
│ │ │ │ +
162#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
Zero order Raviart-Thomas shape functions on rectangles.
Definition raviartthomas0cube2d.hh:25
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0cube2d.hh:45
│ │ │ │ -
RT0Cube2DLocalFiniteElement()
Definition raviartthomas0cube2d.hh:32
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0cube2d.hh:50
│ │ │ │ -
LocalFiniteElementTraits< RT0Cube2DLocalBasis< D, R >, RT0Cube2DLocalCoefficients, RT0Cube2DLocalInterpolation< RT0Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas0cube2d.hh:30
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0cube2d.hh:56
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0cube2d.hh:40
│ │ │ │ -
RT0Cube2DLocalFiniteElement(int s)
Definition raviartthomas0cube2d.hh:35
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas0cube2d.hh:61
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:30
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:135
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:187
│ │ │ │ +
Zero order Raviart-Thomas shape functions on cubes.
Definition raviartthomas0cube3d.hh:25
│ │ │ │ +
First order Raviart-Thomas shape functions on quadrilaterals.
Definition raviartthomas1cube2d.hh:28
│ │ │ │ +
First order Raviart-Thomas shape functions on cubes.
Definition raviartthomas1cube3d.hh:27
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas2cube2d.hh:27
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas3cube2d.hh:29
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas4cube2d.hh:29
│ │ │ │ +
Raviart-Thomas local finite elements for cubes.
Definition raviartthomascube.hh:40
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:54
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:50
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:67
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:71
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:84
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:88
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:105
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:101
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:122
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:118
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:135
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:139
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:152
│ │ │ │ +
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:156
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,127 +1,221 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0cube2d.hh │ │ │ │ │ +raviartthomascube.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -27 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -28 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -29 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_0 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_2 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -33 {} │ │ │ │ │ -34 │ │ │ │ │ -_3_5 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -36 basis(s), │ │ │ │ │ -37 interpolation(s) │ │ │ │ │ -38 {} │ │ │ │ │ -39 │ │ │ │ │ -_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -41 { │ │ │ │ │ -42 return basis; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -46 { │ │ │ │ │ -47 return coefficients; │ │ │ │ │ -48 } │ │ │ │ │ -49 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return interpolation; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return basis.size(); │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -62 { │ │ │ │ │ -63 return GeometryTypes::quadrilateral; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -66 private: │ │ │ │ │ -67 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -68 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -69 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -70 }; │ │ │ │ │ -71} │ │ │ │ │ -72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h │ │ │ │ │ +8#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h" │ │ │ │ │ +9#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h" │ │ │ │ │ +10#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h" │ │ │ │ │ +14#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h" │ │ │ │ │ +15 │ │ │ │ │ +22namespace _D_u_n_e │ │ │ │ │ +23{ │ │ │ │ │ +39 template │ │ │ │ │ +_4_0 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +41 │ │ │ │ │ +45 template │ │ │ │ │ +_4_6 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +47 : public _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +48 { │ │ │ │ │ +49 public: │ │ │ │ │ +_5_0 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +51 : _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +52 {} │ │ │ │ │ +53 │ │ │ │ │ +_5_4 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +55 : _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +56 {} │ │ │ │ │ +57 }; │ │ │ │ │ +58 │ │ │ │ │ +62 template │ │ │ │ │ +_6_3 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +64 : public _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +65 { │ │ │ │ │ +66 public: │ │ │ │ │ +_6_7 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +68 : _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +69 {} │ │ │ │ │ +70 │ │ │ │ │ +_7_1 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +72 : _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +73 {} │ │ │ │ │ +74 }; │ │ │ │ │ +75 │ │ │ │ │ +79 template │ │ │ │ │ +_8_0 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +81 : public _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +82 { │ │ │ │ │ +83 public: │ │ │ │ │ +_8_4 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +85 : _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +86 {} │ │ │ │ │ +87 │ │ │ │ │ +_8_8 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +89 : _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +90 {} │ │ │ │ │ +91 }; │ │ │ │ │ +92 │ │ │ │ │ +96 template │ │ │ │ │ +_9_7 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +98 : public _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +99 { │ │ │ │ │ +100 public: │ │ │ │ │ +_1_0_1 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +102 : _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +103 {} │ │ │ │ │ +104 │ │ │ │ │ +_1_0_5 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +106 : _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +107 {} │ │ │ │ │ +108 }; │ │ │ │ │ +109 │ │ │ │ │ +113 template │ │ │ │ │ +_1_1_4 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +115 : public _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +116 { │ │ │ │ │ +117 public: │ │ │ │ │ +_1_1_8 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +119 : _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +120 {} │ │ │ │ │ +121 │ │ │ │ │ +_1_2_2 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +123 : _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +124 {} │ │ │ │ │ +125 }; │ │ │ │ │ +126 │ │ │ │ │ +130 template │ │ │ │ │ +_1_3_1 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +132 : public _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +133 { │ │ │ │ │ +134 public: │ │ │ │ │ +_1_3_5 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +136 : _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +137 {} │ │ │ │ │ +138 │ │ │ │ │ +_1_3_9 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +140 : _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +141 {} │ │ │ │ │ +142 }; │ │ │ │ │ +143 │ │ │ │ │ +147 template │ │ │ │ │ +_1_4_8 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +149 : public _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +150 { │ │ │ │ │ +151 public: │ │ │ │ │ +_1_5_2 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +153 : _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ +154 {} │ │ │ │ │ +155 │ │ │ │ │ +_1_5_6 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ +157 : _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ +158 {} │ │ │ │ │ +159 }; │ │ │ │ │ +160} // namespace Dune │ │ │ │ │ +161 │ │ │ │ │ +162#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ Zero order Raviart-Thomas shape functions on rectangles. │ │ │ │ │ DDeeffiinniittiioonn raviartthomas0cube2d.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0Cube2DLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT0Cube2DLocalBasis< D, R >, │ │ │ │ │ -RT0Cube2DLocalCoefficients, RT0Cube2DLocalInterpolation< RT0Cube2DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0Cube2DLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Zero order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3d.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas4cube2d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Raviart-Thomas local finite elements for cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:101 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:122 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:118 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:139 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:152 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomascube.hh:156 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube3dall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02d.hh File Reference
│ │ │ │ +
raviartthomas0cube3dall.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas02d/raviartthomas02dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas02d/raviartthomas02dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas02d/raviartthomas02dlocalinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT02DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on triangles. More...
class  Dune::RT0Cube3DLocalBasis< D, R >
 
class  Dune::RT0Cube3DLocalInterpolation< LB >
 
class  Dune::RT0Cube3DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas02d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +raviartthomas0cube3dall.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  _Z_e_r_o order Raviart-Thomas shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00182_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube3dall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,125 +70,278 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02d.hh
│ │ │ │ +
raviartthomas0cube3dall.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ -
27 class
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 {}
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
43 RT02DLocalFiniteElement (std::bitset<3> s) :
│ │ │ │ -
44 basis(s),
│ │ │ │ -
45 interpolation(s)
│ │ │ │ -
46 {}
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
28 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 public:
│ │ │ │ +
32 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
33 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
36 RT0Cube3DLocalBasis (unsigned int s = 0)
│ │ │ │ +
37 {
│ │ │ │ +
38 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
39 if (s&1) sign0 = -1.0;
│ │ │ │ +
40 if (s&2) sign1 = -1.0;
│ │ │ │ +
41 if (s&4) sign2 = -1.0;
│ │ │ │ +
42 if (s&8) sign3 = -1.0;
│ │ │ │ +
43 if (s&16) sign4 = -1.0;
│ │ │ │ +
44 if (s&32) sign5 = -1.0;
│ │ │ │ +
45 }
│ │ │ │
│ │ │ │ -
47
│ │ │ │ +
46
│ │ │ │
│ │ │ │ -
48 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
48 unsigned int size () const
│ │ │ │
49 {
│ │ │ │ -
50 return basis;
│ │ │ │ +
50 return 6;
│ │ │ │
51 }
│ │ │ │
│ │ │ │
52
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
54 {
│ │ │ │ -
55 return coefficients;
│ │ │ │ -
56 }
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
59 {
│ │ │ │ -
60 return interpolation;
│ │ │ │ -
61 }
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
│ │ │ │ -
63 unsigned int size () const
│ │ │ │ -
64 {
│ │ │ │ -
65 return 3;
│ │ │ │ -
66 }
│ │ │ │ +
│ │ │ │ +
54 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
55 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
56 {
│ │ │ │ +
57 out.resize(6);
│ │ │ │ +
58 out[0][0] = sign0*(in[0]-1.0); out[0][1]=0.0; out[0][2]=0.0;
│ │ │ │ +
59 out[1][0] = sign1*(in[0]); out[1][1]=0.0; out[1][2]=0.0;
│ │ │ │ +
60 out[2][0] = 0.0; out[2][1]=sign2*(in[1]-1.0); out[2][2]=0.0;
│ │ │ │ +
61 out[3][0] = 0.0; out[3][1]=sign3*(in[1]); out[3][2]=0.0;
│ │ │ │ +
62 out[4][0] = 0.0; out[4][1]=0.0; out[4][2]=sign4*(in[2]-1.0);
│ │ │ │ +
63 out[5][0] = 0.0; out[5][1]=0.0; out[5][2]=sign5*(in[2]);
│ │ │ │ +
64 }
│ │ │ │
│ │ │ │ -
67
│ │ │ │ +
65
│ │ │ │ +
67 inline void
│ │ │ │
│ │ │ │ -
68 static constexpr GeometryType type ()
│ │ │ │ -
69 {
│ │ │ │ -
70 return GeometryTypes::triangle;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73 private:
│ │ │ │ - │ │ │ │ -
75 RT02DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
77 };
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
68 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
69 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
70 {
│ │ │ │ +
71 out.resize(6);
│ │ │ │ +
72 out[0][0][0] = sign0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
73 out[0][1][0] = 0; out[0][1][1] = 0; out[0][1][2] = 0;
│ │ │ │ +
74 out[0][2][0] = 0; out[0][2][1] = 0; out[0][2][2] = 0;
│ │ │ │ +
75
│ │ │ │ +
76 out[1][0][0] = sign1; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
77 out[1][1][0] = 0; out[1][1][1] = 0; out[1][1][2] = 0;
│ │ │ │ +
78 out[1][2][0] = 0; out[1][2][1] = 0; out[1][2][2] = 0;
│ │ │ │ +
79
│ │ │ │ +
80 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
81 out[2][1][0] = 0; out[2][1][1] = sign2; out[2][1][2] = 0;
│ │ │ │ +
82 out[2][2][0] = 0; out[2][2][1] = 0; out[2][2][2] = 0;
│ │ │ │ +
83
│ │ │ │ +
84 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ +
85 out[3][1][0] = 0; out[3][1][1] = sign3; out[3][1][2] = 0;
│ │ │ │ +
86 out[3][2][0] = 0; out[3][2][1] = 0; out[3][2][2] = 0;
│ │ │ │ +
87
│ │ │ │ +
88 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
89 out[4][1][0] = 0; out[4][1][1] = 0; out[4][1][2] = 0;
│ │ │ │ +
90 out[4][2][0] = 0; out[4][2][1] = 0; out[4][2][2] = sign4;
│ │ │ │ +
91
│ │ │ │ +
92 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
93 out[5][1][0] = 0; out[5][1][1] = 0; out[5][1][2] = 0;
│ │ │ │ +
94 out[5][2][0] = 0; out[5][2][1] = 0; out[5][2][2] = sign5;
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96
│ │ │ │ +
│ │ │ │ +
98 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
99 const typename Traits::DomainType& in, // position
│ │ │ │ +
100 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
101 {
│ │ │ │ +
102 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
103 if (totalOrder == 0) {
│ │ │ │ +
104 evaluateFunction(in, out);
│ │ │ │ +
105 } else if (totalOrder == 1) {
│ │ │ │ +
106 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
107 out.resize(size());
│ │ │ │ +
108
│ │ │ │ +
109 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
110 out[i][0] = out[i][1] = out[i][2] = 0;
│ │ │ │ +
111
│ │ │ │ +
112 switch (direction) {
│ │ │ │ +
113 case 0:
│ │ │ │ +
114 out[0][0] = sign0;
│ │ │ │ +
115 out[1][0] = sign1;
│ │ │ │ +
116 break;
│ │ │ │ +
117 case 1:
│ │ │ │ +
118 out[2][1] = sign2;
│ │ │ │ +
119 out[3][1] = sign3;
│ │ │ │ +
120 break;
│ │ │ │ +
121 case 2:
│ │ │ │ +
122 out[4][2] = sign4;
│ │ │ │ +
123 out[5][2] = sign5;
│ │ │ │ +
124 break;
│ │ │ │ +
125 default:
│ │ │ │ +
126 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
127 }
│ │ │ │ +
128 } else {
│ │ │ │ +
129 out.resize(size());
│ │ │ │ +
130 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
131 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ +
132 out[i][j] = 0;
│ │ │ │ +
133 }
│ │ │ │ +
134
│ │ │ │ +
135 }
│ │ │ │ +
│ │ │ │ +
136
│ │ │ │ +
│ │ │ │ +
138 unsigned int order () const
│ │ │ │ +
139 {
│ │ │ │ +
140 return 1;
│ │ │ │ +
141 }
│ │ │ │ +
│ │ │ │ +
142
│ │ │ │ +
143 private:
│ │ │ │ +
144 R sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ +
145 };
│ │ │ │ +
│ │ │ │ +
146
│ │ │ │ +
147
│ │ │ │ +
156 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
158 {
│ │ │ │ +
159 public:
│ │ │ │ +
160
│ │ │ │ +
│ │ │ │ +
162 RT0Cube3DLocalInterpolation (unsigned int s = 0)
│ │ │ │ +
163 {
│ │ │ │ +
164 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
165 if (s&1) sign0 *= -1.0;
│ │ │ │ +
166 if (s&2) sign1 *= -1.0;
│ │ │ │ +
167 if (s&4) sign2 *= -1.0;
│ │ │ │ +
168 if (s&8) sign3 *= -1.0;
│ │ │ │ +
169 if (s&16) sign4 *= -1.0;
│ │ │ │ +
170 if (s&32) sign5 *= -1.0;
│ │ │ │ +
171
│ │ │ │ +
172 m0[0] = 0.0; m0[1] = 0.5; m0[2] = 0.5;
│ │ │ │ +
173 m1[0] = 1.0; m1[1] = 0.5; m1[2] = 0.5;
│ │ │ │ +
174 m2[0] = 0.5; m2[1] = 0.0; m2[2] = 0.5;
│ │ │ │ +
175 m3[0] = 0.5; m3[1] = 1.0; m3[2] = 0.5;
│ │ │ │ +
176 m4[0] = 0.5; m4[1] = 0.5; m4[2] = 0.0;
│ │ │ │ +
177 m5[0] = 0.5; m5[1] = 0.5; m5[2] = 1.0;
│ │ │ │ +
178
│ │ │ │ +
179 n0[0] = -1.0; n0[1] = 0.0; n0[2] = 0.0;
│ │ │ │ +
180 n1[0] = 1.0; n1[1] = 0.0; n1[2] = 0.0;
│ │ │ │ +
181 n2[0] = 0.0; n2[1] = -1.0; n2[2] = 0.0;
│ │ │ │ +
182 n3[0] = 0.0; n3[1] = 1.0; n3[2] = 0.0;
│ │ │ │ +
183 n4[0] = 0.0; n4[1] = 0.0; n4[2] =-1.0;
│ │ │ │ +
184 n5[0] = 0.0; n5[1] = 0.0; n5[2] = 1.0;
│ │ │ │ +
185 }
│ │ │ │ +
│ │ │ │ +
186
│ │ │ │ +
187 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
188 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
189 {
│ │ │ │ +
190 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
191
│ │ │ │ +
192 out.resize(6);
│ │ │ │ +
193
│ │ │ │ +
194 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1]+y[2]*n0[2])*sign0;
│ │ │ │ +
195 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1]+y[2]*n1[2])*sign1;
│ │ │ │ +
196 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1]+y[2]*n2[2])*sign2;
│ │ │ │ +
197 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1]+y[2]*n3[2])*sign3;
│ │ │ │ +
198 y = f(m4); out[4] = (y[0]*n4[0]+y[1]*n4[1]+y[2]*n4[2])*sign4;
│ │ │ │ +
199 y = f(m5); out[5] = (y[0]*n5[0]+y[1]*n5[1]+y[2]*n5[2])*sign5;
│ │ │ │ +
200 }
│ │ │ │ +
│ │ │ │ +
201
│ │ │ │ +
202 private:
│ │ │ │ +
203 typename LB::Traits::RangeFieldType sign0,sign1,sign2,sign3,sign4,sign5;
│ │ │ │ +
204 typename LB::Traits::DomainType m0,m1,m2,m3,m4,m5;
│ │ │ │ +
205 typename LB::Traits::DomainType n0,n1,n2,n3,n4,n5;
│ │ │ │ +
206 };
│ │ │ │ +
│ │ │ │ +
207
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
216 {
│ │ │ │ +
217 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
220 {
│ │ │ │ +
221 for (std::size_t i=0; i<6; i++)
│ │ │ │ +
222 li[i] = LocalKey(i,1,0);
│ │ │ │ +
223 }
│ │ │ │ +
│ │ │ │ +
224
│ │ │ │ +
│ │ │ │ +
226 std::size_t size () const
│ │ │ │ +
227 {
│ │ │ │ +
228 return 6;
│ │ │ │ +
229 }
│ │ │ │ +
│ │ │ │ +
230
│ │ │ │ +
│ │ │ │ +
232 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
233 {
│ │ │ │ +
234 return li[i];
│ │ │ │ +
235 }
│ │ │ │ +
│ │ │ │ +
236
│ │ │ │ +
237 private:
│ │ │ │ +
238 std::vector<LocalKey> li;
│ │ │ │ +
239 };
│ │ │ │ +
│ │ │ │ +
240
│ │ │ │ +
241}
│ │ │ │ +
242#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Zero order Raviart-Thomas shape functions on triangles.
Definition raviartthomas02d.hh:29
│ │ │ │ -
RT02DLocalFiniteElement()
Standard constructor.
Definition raviartthomas02d.hh:35
│ │ │ │ -
LocalFiniteElementTraits< RT02DLocalBasis< D, R >, RT02DLocalCoefficients, RT02DLocalInterpolation< RT02DLocalBasis< D, R > > > Traits
Definition raviartthomas02d.hh:32
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas02d.hh:68
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas02d.hh:58
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas02d.hh:48
│ │ │ │ -
RT02DLocalFiniteElement(std::bitset< 3 > s)
Constructor with explicitly given edge orientations.
Definition raviartthomas02d.hh:43
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas02d.hh:53
│ │ │ │ -
unsigned int size() const
Definition raviartthomas02d.hh:63
│ │ │ │ -
Definition raviartthomas02dlocalbasis.hh:27
│ │ │ │ -
Definition raviartthomas02dlocalcoefficients.hh:25
│ │ │ │ -
Definition raviartthomas02dlocalinterpolation.hh:20
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:30
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas0cube3dall.hh:48
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0cube3dall.hh:68
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0cube3dall.hh:138
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0cube3dall.hh:98
│ │ │ │ +
RT0Cube3DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas0cube3dall.hh:36
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0cube3dall.hh:33
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0cube3dall.hh:54
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:158
│ │ │ │ +
RT0Cube3DLocalInterpolation(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas0cube3dall.hh:162
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas0cube3dall.hh:188
│ │ │ │ +
Definition raviartthomas0cube3dall.hh:216
│ │ │ │ +
RT0Cube3DLocalCoefficients()
Standard constructor.
Definition raviartthomas0cube3dall.hh:219
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas0cube3dall.hh:226
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0cube3dall.hh:232
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +1,293 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas02d.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d │ │ │ │ │ +raviartthomas0cube3dall.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMAS02DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class │ │ │ │ │ -28 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_2 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_5 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -36 {} │ │ │ │ │ -37 │ │ │ │ │ -_4_3 _R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<3> s) : │ │ │ │ │ -44 basis(s), │ │ │ │ │ -45 interpolation(s) │ │ │ │ │ -46 {} │ │ │ │ │ -47 │ │ │ │ │ -_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +30 { │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ +37 { │ │ │ │ │ +38 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ +39 if (s&1) sign0 = -1.0; │ │ │ │ │ +40 if (s&2) sign1 = -1.0; │ │ │ │ │ +41 if (s&4) sign2 = -1.0; │ │ │ │ │ +42 if (s&8) sign3 = -1.0; │ │ │ │ │ +43 if (s&16) sign4 = -1.0; │ │ │ │ │ +44 if (s&32) sign5 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 │ │ │ │ │ +_4_8 unsigned int _s_i_z_e () const │ │ │ │ │ 49 { │ │ │ │ │ -50 return basis; │ │ │ │ │ +50 return 6; │ │ │ │ │ 51 } │ │ │ │ │ 52 │ │ │ │ │ -_5_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -54 { │ │ │ │ │ -55 return coefficients; │ │ │ │ │ -56 } │ │ │ │ │ -57 │ │ │ │ │ -_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -59 { │ │ │ │ │ -60 return interpolation; │ │ │ │ │ -61 } │ │ │ │ │ -62 │ │ │ │ │ -_6_3 unsigned int _s_i_z_e () const │ │ │ │ │ -64 { │ │ │ │ │ -65 return 3; │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_6_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -69 { │ │ │ │ │ -70 return GeometryTypes::triangle; │ │ │ │ │ -71 } │ │ │ │ │ -72 │ │ │ │ │ -73 private: │ │ │ │ │ -74 _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -75 _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -76 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -77 }; │ │ │ │ │ -78 │ │ │ │ │ -79} │ │ │ │ │ -80 │ │ │ │ │ -81#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_5_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +55 std::vector& out) const │ │ │ │ │ +56 { │ │ │ │ │ +57 out.resize(6); │ │ │ │ │ +58 out[0][0] = sign0*(in[0]-1.0); out[0][1]=0.0; out[0][2]=0.0; │ │ │ │ │ +59 out[1][0] = sign1*(in[0]); out[1][1]=0.0; out[1][2]=0.0; │ │ │ │ │ +60 out[2][0] = 0.0; out[2][1]=sign2*(in[1]-1.0); out[2][2]=0.0; │ │ │ │ │ +61 out[3][0] = 0.0; out[3][1]=sign3*(in[1]); out[3][2]=0.0; │ │ │ │ │ +62 out[4][0] = 0.0; out[4][1]=0.0; out[4][2]=sign4*(in[2]-1.0); │ │ │ │ │ +63 out[5][0] = 0.0; out[5][1]=0.0; out[5][2]=sign5*(in[2]); │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +67 inline void │ │ │ │ │ +_6_8 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +69 std::vector& out) const // return value │ │ │ │ │ +70 { │ │ │ │ │ +71 out.resize(6); │ │ │ │ │ +72 out[0][0][0] = sign0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +73 out[0][1][0] = 0; out[0][1][1] = 0; out[0][1][2] = 0; │ │ │ │ │ +74 out[0][2][0] = 0; out[0][2][1] = 0; out[0][2][2] = 0; │ │ │ │ │ +75 │ │ │ │ │ +76 out[1][0][0] = sign1; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +77 out[1][1][0] = 0; out[1][1][1] = 0; out[1][1][2] = 0; │ │ │ │ │ +78 out[1][2][0] = 0; out[1][2][1] = 0; out[1][2][2] = 0; │ │ │ │ │ +79 │ │ │ │ │ +80 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +81 out[2][1][0] = 0; out[2][1][1] = sign2; out[2][1][2] = 0; │ │ │ │ │ +82 out[2][2][0] = 0; out[2][2][1] = 0; out[2][2][2] = 0; │ │ │ │ │ +83 │ │ │ │ │ +84 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ +85 out[3][1][0] = 0; out[3][1][1] = sign3; out[3][1][2] = 0; │ │ │ │ │ +86 out[3][2][0] = 0; out[3][2][1] = 0; out[3][2][2] = 0; │ │ │ │ │ +87 │ │ │ │ │ +88 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +89 out[4][1][0] = 0; out[4][1][1] = 0; out[4][1][2] = 0; │ │ │ │ │ +90 out[4][2][0] = 0; out[4][2][1] = 0; out[4][2][2] = sign4; │ │ │ │ │ +91 │ │ │ │ │ +92 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +93 out[5][1][0] = 0; out[5][1][1] = 0; out[5][1][2] = 0; │ │ │ │ │ +94 out[5][2][0] = 0; out[5][2][1] = 0; out[5][2][2] = sign5; │ │ │ │ │ +95 } │ │ │ │ │ +96 │ │ │ │ │ +_9_8 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +99 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +100 std::vector& out) const // return value │ │ │ │ │ +101 { │ │ │ │ │ +102 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +103 if (totalOrder == 0) { │ │ │ │ │ +104 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +105 } else if (totalOrder == 1) { │ │ │ │ │ +106 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +107 out.resize(_s_i_z_e()); │ │ │ │ │ +108 │ │ │ │ │ +109 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +110 out[i][0] = out[i][1] = out[i][2] = 0; │ │ │ │ │ +111 │ │ │ │ │ +112 switch (direction) { │ │ │ │ │ +113 case 0: │ │ │ │ │ +114 out[0][0] = sign0; │ │ │ │ │ +115 out[1][0] = sign1; │ │ │ │ │ +116 break; │ │ │ │ │ +117 case 1: │ │ │ │ │ +118 out[2][1] = sign2; │ │ │ │ │ +119 out[3][1] = sign3; │ │ │ │ │ +120 break; │ │ │ │ │ +121 case 2: │ │ │ │ │ +122 out[4][2] = sign4; │ │ │ │ │ +123 out[5][2] = sign5; │ │ │ │ │ +124 break; │ │ │ │ │ +125 default: │ │ │ │ │ +126 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +127 } │ │ │ │ │ +128 } else { │ │ │ │ │ +129 out.resize(_s_i_z_e()); │ │ │ │ │ +130 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +131 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ +132 out[i][j] = 0; │ │ │ │ │ +133 } │ │ │ │ │ +134 │ │ │ │ │ +135 } │ │ │ │ │ +136 │ │ │ │ │ +_1_3_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ +139 { │ │ │ │ │ +140 return 1; │ │ │ │ │ +141 } │ │ │ │ │ +142 │ │ │ │ │ +143 private: │ │ │ │ │ +144 R sign0, sign1, sign2, sign3, sign4, sign5; │ │ │ │ │ +145 }; │ │ │ │ │ +146 │ │ │ │ │ +147 │ │ │ │ │ +156 template │ │ │ │ │ +_1_5_7 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +158 { │ │ │ │ │ +159 public: │ │ │ │ │ +160 │ │ │ │ │ +_1_6_2 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s = 0) │ │ │ │ │ +163 { │ │ │ │ │ +164 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ +165 if (s&1) sign0 *= -1.0; │ │ │ │ │ +166 if (s&2) sign1 *= -1.0; │ │ │ │ │ +167 if (s&4) sign2 *= -1.0; │ │ │ │ │ +168 if (s&8) sign3 *= -1.0; │ │ │ │ │ +169 if (s&16) sign4 *= -1.0; │ │ │ │ │ +170 if (s&32) sign5 *= -1.0; │ │ │ │ │ +171 │ │ │ │ │ +172 m0[0] = 0.0; m0[1] = 0.5; m0[2] = 0.5; │ │ │ │ │ +173 m1[0] = 1.0; m1[1] = 0.5; m1[2] = 0.5; │ │ │ │ │ +174 m2[0] = 0.5; m2[1] = 0.0; m2[2] = 0.5; │ │ │ │ │ +175 m3[0] = 0.5; m3[1] = 1.0; m3[2] = 0.5; │ │ │ │ │ +176 m4[0] = 0.5; m4[1] = 0.5; m4[2] = 0.0; │ │ │ │ │ +177 m5[0] = 0.5; m5[1] = 0.5; m5[2] = 1.0; │ │ │ │ │ +178 │ │ │ │ │ +179 n0[0] = -1.0; n0[1] = 0.0; n0[2] = 0.0; │ │ │ │ │ +180 n1[0] = 1.0; n1[1] = 0.0; n1[2] = 0.0; │ │ │ │ │ +181 n2[0] = 0.0; n2[1] = -1.0; n2[2] = 0.0; │ │ │ │ │ +182 n3[0] = 0.0; n3[1] = 1.0; n3[2] = 0.0; │ │ │ │ │ +183 n4[0] = 0.0; n4[1] = 0.0; n4[2] =-1.0; │ │ │ │ │ +184 n5[0] = 0.0; n5[1] = 0.0; n5[2] = 1.0; │ │ │ │ │ +185 } │ │ │ │ │ +186 │ │ │ │ │ +187 template │ │ │ │ │ +_1_8_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +189 { │ │ │ │ │ +190 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +191 │ │ │ │ │ +192 out.resize(6); │ │ │ │ │ +193 │ │ │ │ │ +194 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1]+y[2]*n0[2])*sign0; │ │ │ │ │ +195 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1]+y[2]*n1[2])*sign1; │ │ │ │ │ +196 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1]+y[2]*n2[2])*sign2; │ │ │ │ │ +197 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1]+y[2]*n3[2])*sign3; │ │ │ │ │ +198 y = f(m4); out[4] = (y[0]*n4[0]+y[1]*n4[1]+y[2]*n4[2])*sign4; │ │ │ │ │ +199 y = f(m5); out[5] = (y[0]*n5[0]+y[1]*n5[1]+y[2]*n5[2])*sign5; │ │ │ │ │ +200 } │ │ │ │ │ +201 │ │ │ │ │ +202 private: │ │ │ │ │ +203 typename LB::Traits::RangeFieldType sign0,sign1,sign2,sign3,sign4,sign5; │ │ │ │ │ +204 typename LB::Traits::DomainType m0,m1,m2,m3,m4,m5; │ │ │ │ │ +205 typename LB::Traits::DomainType n0,n1,n2,n3,n4,n5; │ │ │ │ │ +206 }; │ │ │ │ │ +207 │ │ │ │ │ +_2_1_5 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +216 { │ │ │ │ │ +217 public: │ │ │ │ │ +_2_1_9 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(6) │ │ │ │ │ +220 { │ │ │ │ │ +221 for (std::size_t i=0; i<6; i++) │ │ │ │ │ +222 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +223 } │ │ │ │ │ +224 │ │ │ │ │ +_2_2_6 std::size_t _s_i_z_e () const │ │ │ │ │ +227 { │ │ │ │ │ +228 return 6; │ │ │ │ │ +229 } │ │ │ │ │ +230 │ │ │ │ │ +_2_3_2 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +233 { │ │ │ │ │ +234 return li[i]; │ │ │ │ │ +235 } │ │ │ │ │ +236 │ │ │ │ │ +237 private: │ │ │ │ │ +238 std::vector li; │ │ │ │ │ +239 }; │ │ │ │ │ +240 │ │ │ │ │ +241} │ │ │ │ │ +242#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Zero order Raviart-Thomas shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT02DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT02DLocalBasis< D, R >, RT02DLocalCoefficients, │ │ │ │ │ -RT02DLocalInterpolation< RT02DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:58 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT02DLocalFiniteElement(std::bitset< 3 > s) │ │ │ │ │ -Constructor with explicitly given edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02d.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:20 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:138 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:98 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT0Cube3DLocalBasis(unsigned int s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:158 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT0Cube3DLocalInterpolation(unsigned int s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:162 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:188 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:216 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT0Cube3DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:219 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:226 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube3dall.hh:232 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2dall.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube2dall.hh File Reference
│ │ │ │ +
raviartthomas1cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas1cube2d/raviartthomas1cube2dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas1cube2d/raviartthomas1cube2dlocalinterpolation.hh"
│ │ │ │ +#include "raviartthomas1cube2d/raviartthomas1cube2dlocalcoefficients.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0Cube2DLocalBasis< D, R >
 
class  Dune::RT0Cube2DLocalInterpolation< LB >
 
class  Dune::RT0Cube2DLocalCoefficients
class  Dune::RT1Cube2DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0cube2dall.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +raviartthomas1cube2d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00185_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube2dall.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,249 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube2dall.hh
│ │ │ │ +
raviartthomas1cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
36 RT0Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ -
37 {
│ │ │ │ -
38 for (int i=0; i<4; i++)
│ │ │ │ -
39 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
40 }
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
│ │ │ │ -
43 unsigned int size () const
│ │ │ │ -
44 {
│ │ │ │ -
45 return 4;
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
50 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
35
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {}
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 basis(s),
│ │ │ │ +
47 interpolation(s)
│ │ │ │ +
48 {}
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │
51 {
│ │ │ │ -
52 out.resize(4);
│ │ │ │ -
53 out[0] = {sign_[0]*(in[0]-1.0), 0.0};
│ │ │ │ -
54 out[1] = {sign_[1]*(in[0]), 0.0};
│ │ │ │ -
55 out[2] = {0.0, sign_[2]*(in[1]-1.0)};
│ │ │ │ -
56 out[3] = {0.0, sign_[3]*(in[1])};
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
60 inline void
│ │ │ │ -
│ │ │ │ -
61 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
62 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
63 {
│ │ │ │ -
64 out.resize(4);
│ │ │ │ -
65 out[0][0] = {sign_[0], 0};
│ │ │ │ -
66 out[0][1] = {0, 0};
│ │ │ │ -
67
│ │ │ │ -
68 out[1][0] = {sign_[1], 0};
│ │ │ │ -
69 out[1][1] = {0, 0};
│ │ │ │ +
52 return basis;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ +
57 return coefficients;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
61 {
│ │ │ │ +
62 return interpolation;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ +
66 unsigned int size () const
│ │ │ │ +
67 {
│ │ │ │ +
68 return basis.size();
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │
70
│ │ │ │ -
71 out[2][0] = {0, 0};
│ │ │ │ -
72 out[2][1] = {0, sign_[2]};
│ │ │ │ -
73
│ │ │ │ -
74 out[3][0] = {0, 0};
│ │ │ │ -
75 out[3][1] = {0, sign_[3]};
│ │ │ │ -
76 }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
│ │ │ │ -
79 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
80 const typename Traits::DomainType& in, // position
│ │ │ │ -
81 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
82 {
│ │ │ │ -
83 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
84 if (totalOrder == 0) {
│ │ │ │ -
85 evaluateFunction(in, out);
│ │ │ │ -
86 } else if (totalOrder == 1) {
│ │ │ │ -
87 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
88 out.resize(size());
│ │ │ │ -
89
│ │ │ │ -
90 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
91 out[i] = {0, 0};
│ │ │ │ -
92
│ │ │ │ -
93 switch (direction) {
│ │ │ │ -
94 case 0:
│ │ │ │ -
95 out[0][0] = sign_[0];
│ │ │ │ -
96 out[1][0] = sign_[1];
│ │ │ │ -
97 break;
│ │ │ │ -
98 case 1:
│ │ │ │ -
99 out[2][1] = sign_[2];
│ │ │ │ -
100 out[3][1] = sign_[3];
│ │ │ │ -
101 break;
│ │ │ │ -
102 default:
│ │ │ │ -
103 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
104 }
│ │ │ │ -
105 } else {
│ │ │ │ -
106 out.resize(size());
│ │ │ │ -
107 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
108 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ -
109 out[i][j] = 0;
│ │ │ │ -
110 }
│ │ │ │ -
111
│ │ │ │ -
112 }
│ │ │ │ -
│ │ │ │ -
113
│ │ │ │ -
│ │ │ │ -
115 unsigned int order () const
│ │ │ │ -
116 {
│ │ │ │ -
117 return 1;
│ │ │ │ -
118 }
│ │ │ │ -
│ │ │ │ -
119
│ │ │ │ -
120 private:
│ │ │ │ -
121 std::array<R,4> sign_;
│ │ │ │ -
122 };
│ │ │ │ -
│ │ │ │ -
123
│ │ │ │ -
124
│ │ │ │ -
133 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
135 {
│ │ │ │ -
136 public:
│ │ │ │ -
137
│ │ │ │ -
│ │ │ │ -
139 RT0Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ -
140 {
│ │ │ │ -
141 for (int i=0; i<4; i++)
│ │ │ │ -
142 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
143
│ │ │ │ -
144 m0 = {0.0, 0.5};
│ │ │ │ -
145 m1 = {1.0, 0.5};
│ │ │ │ -
146 m2 = {0.5, 0.0};
│ │ │ │ -
147 m3 = {0.5, 1.0};
│ │ │ │ -
148
│ │ │ │ -
149 n0 = {-1.0, 0.0};
│ │ │ │ -
150 n1 = { 1.0, 0.0};
│ │ │ │ -
151 n2 = { 0.0, -1.0};
│ │ │ │ -
152 n3 = { 0.0, 1.0};
│ │ │ │ -
153 }
│ │ │ │ -
│ │ │ │ -
154
│ │ │ │ -
155 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
156 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
157 {
│ │ │ │ -
158 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
159
│ │ │ │ -
160 out.resize(4);
│ │ │ │ -
161
│ │ │ │ -
162 // Evaluate the normal components at the edge midpoints
│ │ │ │ -
163 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1])*sign_[0];
│ │ │ │ -
164 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1])*sign_[1];
│ │ │ │ -
165 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1])*sign_[2];
│ │ │ │ -
166 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1])*sign_[3];
│ │ │ │ -
167 }
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
169 private:
│ │ │ │ -
170 std::array<typename LB::Traits::RangeFieldType,4> sign_;
│ │ │ │ -
171
│ │ │ │ -
172 // The four edge midpoints of the reference quadrilateral
│ │ │ │ -
173 typename LB::Traits::DomainType m0,m1,m2,m3;
│ │ │ │ -
174
│ │ │ │ -
175 // The four edge normals of the reference quadrilateral
│ │ │ │ -
176 typename LB::Traits::DomainType n0,n1,n2,n3;
│ │ │ │ -
177 };
│ │ │ │ -
│ │ │ │ -
178
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
187 {
│ │ │ │ -
188 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
191 {
│ │ │ │ -
192 for (std::size_t i=0; i<4; i++)
│ │ │ │ -
193 li[i] = LocalKey(i,1,0);
│ │ │ │ -
194 }
│ │ │ │ -
│ │ │ │ -
195
│ │ │ │ -
│ │ │ │ -
197 std::size_t size () const
│ │ │ │ -
198 {
│ │ │ │ -
199 return 4;
│ │ │ │ -
200 }
│ │ │ │ -
│ │ │ │ -
201
│ │ │ │ -
│ │ │ │ -
203 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
204 {
│ │ │ │ -
205 return li[i];
│ │ │ │ -
206 }
│ │ │ │ -
│ │ │ │ -
207
│ │ │ │ -
208 private:
│ │ │ │ -
209 std::vector<LocalKey> li;
│ │ │ │ -
210 };
│ │ │ │ -
│ │ │ │ -
211
│ │ │ │ -
212}
│ │ │ │ -
213#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
71 static constexpr GeometryType type ()
│ │ │ │ +
72 {
│ │ │ │ +
73 return GeometryTypes::quadrilateral;
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76 private:
│ │ │ │ + │ │ │ │ +
78 RT1Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81}
│ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:30
│ │ │ │ -
RT0Cube2DLocalBasis(std::bitset< 4 > s=0)
Constructor with a set of edge orientations.
Definition raviartthomas0cube2dall.hh:36
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas0cube2dall.hh:33
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0cube2dall.hh:49
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0cube2dall.hh:79
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0cube2dall.hh:61
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0cube2dall.hh:115
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas0cube2dall.hh:43
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:135
│ │ │ │ -
RT0Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with explicitly given edge orientations.
Definition raviartthomas0cube2dall.hh:139
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas0cube2dall.hh:156
│ │ │ │ -
Definition raviartthomas0cube2dall.hh:187
│ │ │ │ -
RT0Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas0cube2dall.hh:190
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas0cube2dall.hh:197
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0cube2dall.hh:203
│ │ │ │ - │ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on quadrilaterals.
Definition raviartthomas1cube2d.hh:28
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas1cube2d.hh:71
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas1cube2d.hh:55
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas1cube2d.hh:60
│ │ │ │ +
LocalFiniteElementTraits< RT1Cube2DLocalBasis< D, R >, RT1Cube2DLocalCoefficients, RT1Cube2DLocalInterpolation< RT1Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas1cube2d.hh:34
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas1cube2d.hh:66
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas1cube2d.hh:50
│ │ │ │ +
RT1Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2d.hh:45
│ │ │ │ +
RT1Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas1cube2d.hh:37
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalbasis.hh:28
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube2dlocalcoefficients.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalinterpolation.hh:26
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,264 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d │ │ │ │ │ -raviartthomas0cube2dall.hh │ │ │ │ │ +raviartthomas1cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ -37 { │ │ │ │ │ -38 for (int i=0; i<4; i++) │ │ │ │ │ -39 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -40 } │ │ │ │ │ -41 │ │ │ │ │ -_4_3 unsigned int _s_i_z_e () const │ │ │ │ │ -44 { │ │ │ │ │ -45 return 4; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_4_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -50 std::vector& out) const │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +32 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +33 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_4 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +35 │ │ │ │ │ +_3_7 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +38 {} │ │ │ │ │ +39 │ │ │ │ │ +_4_5 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +46 basis(s), │ │ │ │ │ +47 interpolation(s) │ │ │ │ │ +48 {} │ │ │ │ │ +49 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ 51 { │ │ │ │ │ -52 out.resize(4); │ │ │ │ │ -53 out[0] = {sign_[0]*(in[0]-1.0), 0.0}; │ │ │ │ │ -54 out[1] = {sign_[1]*(in[0]), 0.0}; │ │ │ │ │ -55 out[2] = {0.0, sign_[2]*(in[1]-1.0)}; │ │ │ │ │ -56 out[3] = {0.0, sign_[3]*(in[1])}; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -60 inline void │ │ │ │ │ -_6_1 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -62 std::vector& out) const // return value │ │ │ │ │ -63 { │ │ │ │ │ -64 out.resize(4); │ │ │ │ │ -65 out[0][0] = {sign_[0], 0}; │ │ │ │ │ -66 out[0][1] = {0, 0}; │ │ │ │ │ -67 │ │ │ │ │ -68 out[1][0] = {sign_[1], 0}; │ │ │ │ │ -69 out[1][1] = {0, 0}; │ │ │ │ │ +52 return basis; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return coefficients; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return interpolation; │ │ │ │ │ +63 } │ │ │ │ │ +64 │ │ │ │ │ +_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ +67 { │ │ │ │ │ +68 return basis.size(); │ │ │ │ │ +69 } │ │ │ │ │ 70 │ │ │ │ │ -71 out[2][0] = {0, 0}; │ │ │ │ │ -72 out[2][1] = {0, sign_[2]}; │ │ │ │ │ -73 │ │ │ │ │ -74 out[3][0] = {0, 0}; │ │ │ │ │ -75 out[3][1] = {0, sign_[3]}; │ │ │ │ │ -76 } │ │ │ │ │ -77 │ │ │ │ │ -_7_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -80 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -81 std::vector& out) const // return value │ │ │ │ │ -82 { │ │ │ │ │ -83 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -84 if (totalOrder == 0) { │ │ │ │ │ -85 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -86 } else if (totalOrder == 1) { │ │ │ │ │ -87 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -88 out.resize(_s_i_z_e()); │ │ │ │ │ -89 │ │ │ │ │ -90 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -91 out[i] = {0, 0}; │ │ │ │ │ -92 │ │ │ │ │ -93 switch (direction) { │ │ │ │ │ -94 case 0: │ │ │ │ │ -95 out[0][0] = sign_[0]; │ │ │ │ │ -96 out[1][0] = sign_[1]; │ │ │ │ │ -97 break; │ │ │ │ │ -98 case 1: │ │ │ │ │ -99 out[2][1] = sign_[2]; │ │ │ │ │ -100 out[3][1] = sign_[3]; │ │ │ │ │ -101 break; │ │ │ │ │ -102 default: │ │ │ │ │ -103 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -104 } │ │ │ │ │ -105 } else { │ │ │ │ │ -106 out.resize(_s_i_z_e()); │ │ │ │ │ -107 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -108 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ -109 out[i][j] = 0; │ │ │ │ │ -110 } │ │ │ │ │ -111 │ │ │ │ │ -112 } │ │ │ │ │ -113 │ │ │ │ │ -_1_1_5 unsigned int _o_r_d_e_r () const │ │ │ │ │ -116 { │ │ │ │ │ -117 return 1; │ │ │ │ │ -118 } │ │ │ │ │ -119 │ │ │ │ │ -120 private: │ │ │ │ │ -121 std::array sign_; │ │ │ │ │ -122 }; │ │ │ │ │ -123 │ │ │ │ │ -124 │ │ │ │ │ -133 template │ │ │ │ │ -_1_3_4 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -135 { │ │ │ │ │ -136 public: │ │ │ │ │ -137 │ │ │ │ │ -_1_3_9 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ -140 { │ │ │ │ │ -141 for (int i=0; i<4; i++) │ │ │ │ │ -142 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -143 │ │ │ │ │ -144 m0 = {0.0, 0.5}; │ │ │ │ │ -145 m1 = {1.0, 0.5}; │ │ │ │ │ -146 m2 = {0.5, 0.0}; │ │ │ │ │ -147 m3 = {0.5, 1.0}; │ │ │ │ │ -148 │ │ │ │ │ -149 n0 = {-1.0, 0.0}; │ │ │ │ │ -150 n1 = { 1.0, 0.0}; │ │ │ │ │ -151 n2 = { 0.0, -1.0}; │ │ │ │ │ -152 n3 = { 0.0, 1.0}; │ │ │ │ │ -153 } │ │ │ │ │ -154 │ │ │ │ │ -155 template │ │ │ │ │ -_1_5_6 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -157 { │ │ │ │ │ -158 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -159 │ │ │ │ │ -160 out.resize(4); │ │ │ │ │ -161 │ │ │ │ │ -162 // Evaluate the normal components at the edge midpoints │ │ │ │ │ -163 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1])*sign_[0]; │ │ │ │ │ -164 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1])*sign_[1]; │ │ │ │ │ -165 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1])*sign_[2]; │ │ │ │ │ -166 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1])*sign_[3]; │ │ │ │ │ -167 } │ │ │ │ │ -168 │ │ │ │ │ -169 private: │ │ │ │ │ -170 std::array sign_; │ │ │ │ │ -171 │ │ │ │ │ -172 // The four edge midpoints of the reference quadrilateral │ │ │ │ │ -173 typename LB::Traits::DomainType m0,m1,m2,m3; │ │ │ │ │ -174 │ │ │ │ │ -175 // The four edge normals of the reference quadrilateral │ │ │ │ │ -176 typename LB::Traits::DomainType n0,n1,n2,n3; │ │ │ │ │ -177 }; │ │ │ │ │ -178 │ │ │ │ │ -_1_8_6 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -187 { │ │ │ │ │ -188 public: │ │ │ │ │ -_1_9_0 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(4) │ │ │ │ │ -191 { │ │ │ │ │ -192 for (std::size_t i=0; i<4; i++) │ │ │ │ │ -193 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -194 } │ │ │ │ │ -195 │ │ │ │ │ -_1_9_7 std::size_t _s_i_z_e () const │ │ │ │ │ -198 { │ │ │ │ │ -199 return 4; │ │ │ │ │ -200 } │ │ │ │ │ -201 │ │ │ │ │ -_2_0_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -204 { │ │ │ │ │ -205 return li[i]; │ │ │ │ │ -206 } │ │ │ │ │ -207 │ │ │ │ │ -208 private: │ │ │ │ │ -209 std::vector li; │ │ │ │ │ -210 }; │ │ │ │ │ -211 │ │ │ │ │ -212} │ │ │ │ │ -213#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +72 { │ │ │ │ │ +73 return GeometryTypes::quadrilateral; │ │ │ │ │ +74 } │ │ │ │ │ +75 │ │ │ │ │ +76 private: │ │ │ │ │ +77 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +78 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +79 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +80 }; │ │ │ │ │ +81} │ │ │ │ │ +82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT0Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ -Constructor with a set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT1Cube2DLocalBasis< D, R >, │ │ │ │ │ +RT1Cube2DLocalCoefficients, RT1Cube2DLocalInterpolation< RT1Cube2DLocalBasis< │ │ │ │ │ +D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT0Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ -Constructor with explicitly given edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:139 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:156 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT0Cube2DLocalCoefficients() │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT1Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT1Cube2DLocalFiniteElement() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:190 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:197 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2dall.hh:203 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2d.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:26 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PrismLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference prism. More...
class  Dune::RT3Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0prismlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00188_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,146 +70,163 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalbasis.hh
│ │ │ │ +
raviartthomas3cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
39 RT0PrismLocalBasis (std::bitset<5> s = 0)
│ │ │ │ -
40 {
│ │ │ │ -
41 for (size_t i=0; i<size(); i++)
│ │ │ │ -
42 sign[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
23 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
28
│ │ │ │ +
│ │ │ │ +
34 RT3Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ +
35 {
│ │ │ │ +
36 for (size_t i=0; i<4; i++)
│ │ │ │ +
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
38
│ │ │ │ +
39 n_[0] = {-1.0, 0.0};
│ │ │ │ +
40 n_[1] = { 1.0, 0.0};
│ │ │ │ +
41 n_[2] = { 0.0, -1.0};
│ │ │ │ +
42 n_[3] = { 0.0, 1.0};
│ │ │ │
43 }
│ │ │ │
│ │ │ │
44
│ │ │ │ -
│ │ │ │ -
46 unsigned int size () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return 5;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
59 {
│ │ │ │ -
60 out.resize(5);
│ │ │ │ -
61
│ │ │ │ -
62 out[0] = { in[0], -1.0 + in[1], 0.0};
│ │ │ │ -
63
│ │ │ │ -
64 out[1] = { -1.0 + in[0], in[1], 0.0};
│ │ │ │ +
53 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
55 {
│ │ │ │ +
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
59
│ │ │ │ +
60 out.resize(40);
│ │ │ │ +
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
62
│ │ │ │ +
63 const int qOrder = 9;
│ │ │ │ +
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │
65
│ │ │ │ -
66 out[2] = { in[0], in[1], 0.0};
│ │ │ │ -
67
│ │ │ │ -
68 out[3] = { 0.0, 0.0, -2.0 + 2.0*in[2]};
│ │ │ │ -
69
│ │ │ │ -
70 out[4] = { 0.0, 0.0, 2.0*in[2]};
│ │ │ │ -
71
│ │ │ │ -
72 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
73 out[i] *= sign[i];
│ │ │ │ -
74
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
│ │ │ │ -
83 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
84 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
85 {
│ │ │ │ -
86 out.resize(5);
│ │ │ │ -
87
│ │ │ │ -
88 for(int i=0; i<size(); i++)
│ │ │ │ -
89 for(int j=0; j<3; j++)
│ │ │ │ -
90 out[i][j] = {0.0, 0.0, 0.0};
│ │ │ │ +
66 for (auto&& qp : rule1)
│ │ │ │ +
67 {
│ │ │ │ +
68 Scalar qPos = qp.position();
│ │ │ │ +
69 typename LB::Traits::DomainType localPos;
│ │ │ │ +
70
│ │ │ │ +
71 localPos = {0.0, qPos};
│ │ │ │ +
72 auto y = f(localPos);
│ │ │ │ +
73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ +
74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[0];
│ │ │ │ +
76 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
77
│ │ │ │ +
78 localPos = {1.0, qPos};
│ │ │ │ +
79 y = f(localPos);
│ │ │ │ +
80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ +
81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
82 out[6] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[1];
│ │ │ │ +
83 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight();
│ │ │ │ +
84
│ │ │ │ +
85 localPos = {qPos, 0.0};
│ │ │ │ +
86 y = f(localPos);
│ │ │ │ +
87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ +
88 out[9] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
89 out[10] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[2];
│ │ │ │ +
90 out[11] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight();
│ │ │ │
91
│ │ │ │ -
92 out[0][0][0] = sign[0];
│ │ │ │ -
93 out[0][1][1] = sign[0];
│ │ │ │ -
94
│ │ │ │ -
95 out[1][0][0] = sign[1];
│ │ │ │ -
96 out[1][1][1] = sign[1];
│ │ │ │ -
97
│ │ │ │ -
98 out[2][0][0] = sign[2];
│ │ │ │ -
99 out[2][1][1] = sign[2];
│ │ │ │ -
100
│ │ │ │ -
101 out[3][2][2] = sign[3]*(2.0);
│ │ │ │ -
102
│ │ │ │ -
103 out[4][2][2] = sign[4]*(2.0);
│ │ │ │ -
104 }
│ │ │ │ -
│ │ │ │ +
92 localPos = {qPos, 1.0};
│ │ │ │ +
93 y = f(localPos);
│ │ │ │ +
94 out[12] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ +
95 out[13] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
96 out[14] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[3];
│ │ │ │ +
97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
98 }
│ │ │ │ +
99
│ │ │ │ +
100 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
101
│ │ │ │ +
102 for (auto&& qp : rule2)
│ │ │ │ +
103 {
│ │ │ │ +
104 auto qPos = qp.position();
│ │ │ │
105
│ │ │ │ -
│ │ │ │ -
107 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
108 const typename Traits::DomainType& in, // position
│ │ │ │ -
109 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
110 {
│ │ │ │ -
111 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
112 if (totalOrder == 0) {
│ │ │ │ -
113 evaluateFunction(in, out);
│ │ │ │ -
114 } else {
│ │ │ │ -
115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
116 }
│ │ │ │ -
117 }
│ │ │ │ -
│ │ │ │ -
118
│ │ │ │ -
│ │ │ │ -
120 unsigned int order () const
│ │ │ │ -
121 {
│ │ │ │ -
122 return 1;
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ -
124
│ │ │ │ -
125 private:
│ │ │ │ -
126 std::array<R,5> sign;
│ │ │ │ -
127 };
│ │ │ │ -
│ │ │ │ -
128}
│ │ │ │ -
129#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH
│ │ │ │ +
106 auto y = f(qPos);
│ │ │ │ +
107 double l0_x=1.0;
│ │ │ │ +
108 double l1_x=2.0*qPos[0]-1.0;
│ │ │ │ +
109 double l2_x=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0;
│ │ │ │ +
110 double l3_x=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] - 1.0;
│ │ │ │ +
111 double l0_y=1.0;
│ │ │ │ +
112 double l1_y=2.0*qPos[1]-1.0;
│ │ │ │ +
113 double l2_y=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0;
│ │ │ │ +
114 double l3_y=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] - 1.0;
│ │ │ │ +
115
│ │ │ │ +
116 out[16] += y[0]*l0_x*l0_y*qp.weight();
│ │ │ │ +
117 out[17] += y[0]*l0_x*l1_y*qp.weight();
│ │ │ │ +
118 out[18] += y[0]*l0_x*l2_y*qp.weight();
│ │ │ │ +
119 out[19] += y[0]*l0_x*l3_y*qp.weight();
│ │ │ │ +
120 out[20] += y[0]*l1_x*l0_y*qp.weight();
│ │ │ │ +
121 out[21] += y[0]*l1_x*l1_y*qp.weight();
│ │ │ │ +
122 out[22] += y[0]*l1_x*l2_y*qp.weight();
│ │ │ │ +
123 out[23] += y[0]*l1_x*l3_y*qp.weight();
│ │ │ │ +
124 out[24] += y[0]*l2_x*l0_y*qp.weight();
│ │ │ │ +
125 out[25] += y[0]*l2_x*l1_y*qp.weight();
│ │ │ │ +
126 out[26] += y[0]*l2_x*l2_y*qp.weight();
│ │ │ │ +
127 out[27] += y[0]*l2_x*l3_y*qp.weight();
│ │ │ │ +
128
│ │ │ │ +
129 out[28] += y[1]*l0_x*l0_y*qp.weight();
│ │ │ │ +
130 out[29] += y[1]*l0_x*l1_y*qp.weight();
│ │ │ │ +
131 out[30] += y[1]*l0_x*l2_y*qp.weight();
│ │ │ │ +
132 out[31] += y[1]*l1_x*l0_y*qp.weight();
│ │ │ │ +
133 out[32] += y[1]*l1_x*l1_y*qp.weight();
│ │ │ │ +
134 out[33] += y[1]*l1_x*l2_y*qp.weight();
│ │ │ │ +
135 out[34] += y[1]*l2_x*l0_y*qp.weight();
│ │ │ │ +
136 out[35] += y[1]*l2_x*l1_y*qp.weight();
│ │ │ │ +
137 out[36] += y[1]*l2_x*l2_y*qp.weight();
│ │ │ │ +
138 out[37] += y[1]*l3_x*l0_y*qp.weight();
│ │ │ │ +
139 out[38] += y[1]*l3_x*l1_y*qp.weight();
│ │ │ │ +
140 out[39] += y[1]*l3_x*l2_y*qp.weight();
│ │ │ │ +
141 }
│ │ │ │ +
142 }
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
144 private:
│ │ │ │ +
145 // Edge orientations
│ │ │ │ +
146 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ +
147
│ │ │ │ +
148 // Edge normals
│ │ │ │ +
149 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ +
150 };
│ │ │ │ +
│ │ │ │ +
151}
│ │ │ │ +
152
│ │ │ │ +
153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalbasis.hh:28
│ │ │ │ -
RT0PrismLocalBasis(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prismlocalbasis.hh:39
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0prismlocalbasis.hh:57
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas0prismlocalbasis.hh:46
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0prismlocalbasis.hh:120
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0prismlocalbasis.hh:83
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0prismlocalbasis.hh:107
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0prismlocalbasis.hh:32
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalinterpolation.hh:25
│ │ │ │ +
RT3Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2dlocalinterpolation.hh:34
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas3cube2dlocalinterpolation.hh:54
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,157 +1,170 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ -raviartthomas0prismlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ +raviartthomas3cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include "../../common/localbasis.hh" │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_9 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s (std::bitset<5> s = 0) │ │ │ │ │ -40 { │ │ │ │ │ -41 for (size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -42 sign[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +25 { │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +28 │ │ │ │ │ +_3_4 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ +35 { │ │ │ │ │ +36 for (size_t i=0; i<4; i++) │ │ │ │ │ +37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +38 │ │ │ │ │ +39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ +40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ +41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ +42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ 43 } │ │ │ │ │ 44 │ │ │ │ │ -_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return 5; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -58 std::vector& out) const │ │ │ │ │ -59 { │ │ │ │ │ -60 out.resize(5); │ │ │ │ │ -61 │ │ │ │ │ -62 out[0] = { in[0], -1.0 + in[1], 0.0}; │ │ │ │ │ -63 │ │ │ │ │ -64 out[1] = { -1.0 + in[0], in[1], 0.0}; │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +55 { │ │ │ │ │ +56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +59 │ │ │ │ │ +60 out.resize(40); │ │ │ │ │ +61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +62 │ │ │ │ │ +63 const int qOrder = 9; │ │ │ │ │ +64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ +qOrder); │ │ │ │ │ 65 │ │ │ │ │ -66 out[2] = { in[0], in[1], 0.0}; │ │ │ │ │ -67 │ │ │ │ │ -68 out[3] = { 0.0, 0.0, -2.0 + 2.0*in[2]}; │ │ │ │ │ -69 │ │ │ │ │ -70 out[4] = { 0.0, 0.0, 2.0*in[2]}; │ │ │ │ │ -71 │ │ │ │ │ -72 for (std::size_t i=0; i& out) const │ │ │ │ │ -85 { │ │ │ │ │ -86 out.resize(5); │ │ │ │ │ -87 │ │ │ │ │ -88 for(int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -89 for(int j=0; j<3; j++) │ │ │ │ │ -90 out[i][j] = {0.0, 0.0, 0.0}; │ │ │ │ │ +66 for (auto&& qp : rule1) │ │ │ │ │ +67 { │ │ │ │ │ +68 Scalar qPos = qp.position(); │ │ │ │ │ +69 typename LB::Traits::DomainType localPos; │ │ │ │ │ +70 │ │ │ │ │ +71 localPos = {0.0, qPos}; │ │ │ │ │ +72 auto y = f(localPos); │ │ │ │ │ +73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ +74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[0]; │ │ │ │ │ +76 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(20.0*qPos*qPos*qPos - │ │ │ │ │ +30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +77 │ │ │ │ │ +78 localPos = {1.0, qPos}; │ │ │ │ │ +79 y = f(localPos); │ │ │ │ │ +80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ +81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +82 out[6] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[1]; │ │ │ │ │ +83 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(-20.0*qPos*qPos*qPos + │ │ │ │ │ +30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight(); │ │ │ │ │ +84 │ │ │ │ │ +85 localPos = {qPos, 0.0}; │ │ │ │ │ +86 y = f(localPos); │ │ │ │ │ +87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ +88 out[9] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +89 out[10] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[2]; │ │ │ │ │ +90 out[11] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(-20.0*qPos*qPos*qPos + │ │ │ │ │ +30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight(); │ │ │ │ │ 91 │ │ │ │ │ -92 out[0][0][0] = sign[0]; │ │ │ │ │ -93 out[0][1][1] = sign[0]; │ │ │ │ │ -94 │ │ │ │ │ -95 out[1][0][0] = sign[1]; │ │ │ │ │ -96 out[1][1][1] = sign[1]; │ │ │ │ │ -97 │ │ │ │ │ -98 out[2][0][0] = sign[2]; │ │ │ │ │ -99 out[2][1][1] = sign[2]; │ │ │ │ │ -100 │ │ │ │ │ -101 out[3][2][2] = sign[3]*(2.0); │ │ │ │ │ -102 │ │ │ │ │ -103 out[4][2][2] = sign[4]*(2.0); │ │ │ │ │ -104 } │ │ │ │ │ +92 localPos = {qPos, 1.0}; │ │ │ │ │ +93 y = f(localPos); │ │ │ │ │ +94 out[12] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ +95 out[13] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +96 out[14] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ +1.0)*qp.weight()*sign_[3]; │ │ │ │ │ +97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(20.0*qPos*qPos*qPos - │ │ │ │ │ +30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +98 } │ │ │ │ │ +99 │ │ │ │ │ +100 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ +qOrder); │ │ │ │ │ +101 │ │ │ │ │ +102 for (auto&& qp : rule2) │ │ │ │ │ +103 { │ │ │ │ │ +104 auto qPos = qp.position(); │ │ │ │ │ 105 │ │ │ │ │ -_1_0_7 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -108 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -109 std::vector& out) const // return value │ │ │ │ │ -110 { │ │ │ │ │ -111 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -112 if (totalOrder == 0) { │ │ │ │ │ -113 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -114 } else { │ │ │ │ │ -115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -116 } │ │ │ │ │ -117 } │ │ │ │ │ -118 │ │ │ │ │ -_1_2_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -121 { │ │ │ │ │ -122 return 1; │ │ │ │ │ -123 } │ │ │ │ │ -124 │ │ │ │ │ -125 private: │ │ │ │ │ -126 std::array sign; │ │ │ │ │ -127 }; │ │ │ │ │ -128} │ │ │ │ │ -129#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALBASIS_HH │ │ │ │ │ +106 auto y = f(qPos); │ │ │ │ │ +107 double l0_x=1.0; │ │ │ │ │ +108 double l1_x=2.0*qPos[0]-1.0; │ │ │ │ │ +109 double l2_x=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0; │ │ │ │ │ +110 double l3_x=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos │ │ │ │ │ +[0] - 1.0; │ │ │ │ │ +111 double l0_y=1.0; │ │ │ │ │ +112 double l1_y=2.0*qPos[1]-1.0; │ │ │ │ │ +113 double l2_y=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0; │ │ │ │ │ +114 double l3_y=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos │ │ │ │ │ +[1] - 1.0; │ │ │ │ │ +115 │ │ │ │ │ +116 out[16] += y[0]*l0_x*l0_y*qp.weight(); │ │ │ │ │ +117 out[17] += y[0]*l0_x*l1_y*qp.weight(); │ │ │ │ │ +118 out[18] += y[0]*l0_x*l2_y*qp.weight(); │ │ │ │ │ +119 out[19] += y[0]*l0_x*l3_y*qp.weight(); │ │ │ │ │ +120 out[20] += y[0]*l1_x*l0_y*qp.weight(); │ │ │ │ │ +121 out[21] += y[0]*l1_x*l1_y*qp.weight(); │ │ │ │ │ +122 out[22] += y[0]*l1_x*l2_y*qp.weight(); │ │ │ │ │ +123 out[23] += y[0]*l1_x*l3_y*qp.weight(); │ │ │ │ │ +124 out[24] += y[0]*l2_x*l0_y*qp.weight(); │ │ │ │ │ +125 out[25] += y[0]*l2_x*l1_y*qp.weight(); │ │ │ │ │ +126 out[26] += y[0]*l2_x*l2_y*qp.weight(); │ │ │ │ │ +127 out[27] += y[0]*l2_x*l3_y*qp.weight(); │ │ │ │ │ +128 │ │ │ │ │ +129 out[28] += y[1]*l0_x*l0_y*qp.weight(); │ │ │ │ │ +130 out[29] += y[1]*l0_x*l1_y*qp.weight(); │ │ │ │ │ +131 out[30] += y[1]*l0_x*l2_y*qp.weight(); │ │ │ │ │ +132 out[31] += y[1]*l1_x*l0_y*qp.weight(); │ │ │ │ │ +133 out[32] += y[1]*l1_x*l1_y*qp.weight(); │ │ │ │ │ +134 out[33] += y[1]*l1_x*l2_y*qp.weight(); │ │ │ │ │ +135 out[34] += y[1]*l2_x*l0_y*qp.weight(); │ │ │ │ │ +136 out[35] += y[1]*l2_x*l1_y*qp.weight(); │ │ │ │ │ +137 out[36] += y[1]*l2_x*l2_y*qp.weight(); │ │ │ │ │ +138 out[37] += y[1]*l3_x*l0_y*qp.weight(); │ │ │ │ │ +139 out[38] += y[1]*l3_x*l1_y*qp.weight(); │ │ │ │ │ +140 out[39] += y[1]*l3_x*l2_y*qp.weight(); │ │ │ │ │ +141 } │ │ │ │ │ +142 } │ │ │ │ │ +143 │ │ │ │ │ +144 private: │ │ │ │ │ +145 // Edge orientations │ │ │ │ │ +146 std::array sign_; │ │ │ │ │ +147 │ │ │ │ │ +148 // Edge normals │ │ │ │ │ +149 std::array n_; │ │ │ │ │ +150 }; │ │ │ │ │ +151} │ │ │ │ │ +152 │ │ │ │ │ +153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT0PrismLocalBasis(std::bitset< 5 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:120 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT3Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:54 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ +
#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PrismLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference prism. More...
class  Dune::RT3Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0prismlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00191_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,659 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalinterpolation.hh
│ │ │ │ +
raviartthomas3cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
20 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 {
│ │ │ │ -
23
│ │ │ │ -
24 public:
│ │ │ │ -
25
│ │ │ │ -
│ │ │ │ -
31 RT0PrismLocalInterpolation (std::bitset<5> s = 0)
│ │ │ │ -
32 {
│ │ │ │ -
33 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
8#include <bitset>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ +
14#include "../../common/localbasis.hh"
│ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
27 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ +
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │
34
│ │ │ │ -
35 for (size_t i=0; i<5; i++)
│ │ │ │ -
36 sign[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
37
│ │ │ │ -
38 Scalar r = 1/std::sqrt(2);
│ │ │ │ -
39
│ │ │ │ -
40 n[0] = { 0.0, -1.0, 0.0};
│ │ │ │ -
41 n[1] = {-1.0, 0.0, 0.0};
│ │ │ │ -
42 n[2] = { r, r, 0.0};
│ │ │ │ -
43 n[3] = { 0.0, 0.0, -1.0};
│ │ │ │ -
44 n[4] = { 0.0, 0.0, 1.0};
│ │ │ │ -
45
│ │ │ │ -
46 c[0] = 1.0;
│ │ │ │ -
47 c[1] = 1.0;
│ │ │ │ -
48 c[2] = std::sqrt(2);
│ │ │ │ -
49 c[3] = 1/2.0;
│ │ │ │ -
50 c[4] = 1/2.0;
│ │ │ │ -
51
│ │ │ │ -
52 m[0] = { 0.5, 0.0, 0.5};
│ │ │ │ -
53 m[1] = { 0.0, 0.5, 0.5};
│ │ │ │ -
54 m[2] = { 0.5, 0.5, 0.5};
│ │ │ │ -
55 m[3] = { 1/3.0, 1/3.0, 0.0};
│ │ │ │ -
56 m[4] = { 1/3.0, 1/3.0, 1.0};
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
67 template<class F, class C>
│ │ │ │ -
│ │ │ │ -
68 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
69 {
│ │ │ │ -
70 out.resize(5);
│ │ │ │ -
71 for(int i=0; i<5; i++)
│ │ │ │ -
72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i];
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ -
76 // Facet orientations
│ │ │ │ -
77 std::array<typename LB::Traits::RangeFieldType, 5> sign;
│ │ │ │ -
78 // Facet area
│ │ │ │ -
79 std::array<typename LB::Traits::RangeFieldType, 5> c;
│ │ │ │ -
80
│ │ │ │ -
81 // Facet normals
│ │ │ │ -
82 std::array<typename LB::Traits::DomainType, 5> n;
│ │ │ │ -
83 // Facet midpoints
│ │ │ │ -
84 std::array<typename LB::Traits::DomainType, 5> m;
│ │ │ │ -
85 };
│ │ │ │ +
│ │ │ │ +
40 RT3Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
41 {
│ │ │ │ +
42 sign0 = (s[0]) ? -1.0 : 1.0;
│ │ │ │ +
43 sign1 = (s[1]) ? -1.0 : 1.0;
│ │ │ │ +
44 sign2 = (s[2]) ? -1.0 : 1.0;
│ │ │ │ +
45 sign3 = (s[3]) ? -1.0 : 1.0;
│ │ │ │ +
46 }
│ │ │ │
│ │ │ │ -
86}
│ │ │ │ -
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 unsigned int size () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return 40;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
60 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
61 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
62 {
│ │ │ │ +
63 out.resize(40);
│ │ │ │ +
64 auto const& x = in[0], y = in[1];
│ │ │ │ +
65
│ │ │ │ +
66 const auto tmp1 = - x*(x*(x*(35*x - 80) + 60) - 16) - 1;
│ │ │ │ +
67 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ +
68 const auto tmp3 = 2*y - 1;
│ │ │ │ +
69 const auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ +
70 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
71 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ +
72 const auto tmp7 = - y*(y*(y*(35*y - 80) + 60) - 16) - 1;
│ │ │ │ +
73 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ +
74 const auto tmp9 = 2*x - 1;
│ │ │ │ +
75 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ +
76 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
77 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ +
78 const auto tmp13 = -x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ +
79 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ +
80 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ +
81 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ +
82 const auto tmp17 = -y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ +
83 const auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ +
84 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ +
85 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ +
86
│ │ │ │ +
87 out[0][0]=sign0*tmp1;
│ │ │ │ +
88 out[0][1]=0;
│ │ │ │ +
89 out[1][0]=(-3.0*tmp2*tmp3);
│ │ │ │ +
90 out[1][1]=0;
│ │ │ │ +
91 out[2][0]=sign0*(-5.0*tmp2*tmp4);
│ │ │ │ +
92 out[2][1]=0;
│ │ │ │ +
93 out[3][0]=(-7.0*tmp2*tmp5);
│ │ │ │ +
94 out[3][1]=0;
│ │ │ │ +
95
│ │ │ │ +
96 out[4][0]=sign1*tmp6;
│ │ │ │ +
97 out[4][1]=0;
│ │ │ │ +
98 out[5][0]=(-3.0*tmp6*tmp3);
│ │ │ │ +
99 out[5][1]=0;
│ │ │ │ +
100 out[6][0]=sign1*(5.0*tmp6*tmp4);
│ │ │ │ +
101 out[6][1]=0;
│ │ │ │ +
102 out[7][0]=(-7.0*tmp6*tmp5);
│ │ │ │ +
103 out[7][1]=0;
│ │ │ │ +
104
│ │ │ │ +
105 out[8][0]=0;
│ │ │ │ +
106 out[8][1]=sign2*tmp7;
│ │ │ │ +
107 out[9][0]=0;
│ │ │ │ +
108 out[9][1]=3.0*tmp9*tmp8;
│ │ │ │ +
109 out[10][0]=0;
│ │ │ │ +
110 out[10][1]=sign2*(-5.0*tmp10*tmp8);
│ │ │ │ +
111 out[11][0]=0;
│ │ │ │ +
112 out[11][1]=7.0*tmp11*tmp8;
│ │ │ │ +
113
│ │ │ │ +
114 out[12][0]=0;
│ │ │ │ +
115 out[12][1]=sign3*tmp12;
│ │ │ │ +
116 out[13][0]=0;
│ │ │ │ +
117 out[13][1]=3.0*tmp9*tmp12;
│ │ │ │ +
118 out[14][0]=0;
│ │ │ │ +
119 out[14][1]=sign3*5.0*tmp10*tmp12;
│ │ │ │ +
120 out[15][0]=0;
│ │ │ │ +
121 out[15][1]=7.0*tmp11*tmp12;
│ │ │ │ +
122
│ │ │ │ +
123 out[16][0]=10.0*tmp13;
│ │ │ │ +
124 out[16][1]=0;
│ │ │ │ +
125 out[17][0]=-30.0*tmp14*tmp3;
│ │ │ │ +
126 out[17][1]=0;
│ │ │ │ +
127 out[18][0]=-50.0*tmp14*tmp4;
│ │ │ │ +
128 out[18][1]=0;
│ │ │ │ +
129 out[19][0]=-70.0*tmp14*tmp5;
│ │ │ │ +
130 out[19][1]=0;
│ │ │ │ +
131 out[20][0]=-30.0*tmp15;
│ │ │ │ +
132 out[20][1]=0;
│ │ │ │ +
133 out[21][0]=-90.0*tmp15*tmp3;
│ │ │ │ +
134 out[21][1]=0;
│ │ │ │ +
135 out[22][0]=-150.0*tmp15*tmp4;
│ │ │ │ +
136 out[22][1]=0;
│ │ │ │ +
137 out[23][0]=-210.0*tmp15*tmp5;
│ │ │ │ +
138 out[23][1]=0;
│ │ │ │ +
139 out[24][0]=-70.0*tmp16;
│ │ │ │ +
140 out[24][1]=0;
│ │ │ │ +
141 out[25][0]=-210.0*tmp16*tmp3;
│ │ │ │ +
142 out[25][1]=0;
│ │ │ │ +
143 out[26][0]=-350.0*tmp16*tmp4;
│ │ │ │ +
144 out[26][1]=0;
│ │ │ │ +
145 out[27][0]=-490.0*tmp16*tmp5;
│ │ │ │ +
146 out[27][1]=0;
│ │ │ │ +
147 out[28][0]=0;
│ │ │ │ +
148 out[28][1]=10.0*tmp17;
│ │ │ │ +
149 out[29][0]=0;
│ │ │ │ +
150 out[29][1]=-30.0*tmp18;
│ │ │ │ +
151 out[30][0]=0;
│ │ │ │ +
152 out[30][1]=-70.0*tmp19;
│ │ │ │ +
153 out[31][0]=0;
│ │ │ │ +
154 out[31][1]=-30.0*tmp9*tmp20;
│ │ │ │ +
155 out[32][0]=0;
│ │ │ │ +
156 out[32][1]=-90.0*tmp9*tmp18;
│ │ │ │ +
157 out[33][0]=0;
│ │ │ │ +
158 out[33][1]=-210.0*tmp9*tmp19;
│ │ │ │ +
159 out[34][0]=0;
│ │ │ │ +
160 out[34][1]=-50.0*tmp10*tmp20;
│ │ │ │ +
161 out[35][0]=0;
│ │ │ │ +
162 out[35][1]=-150.0*tmp10*tmp18;
│ │ │ │ +
163 out[36][0]=0;
│ │ │ │ +
164 out[36][1]=-350.0*tmp10*tmp19;
│ │ │ │ +
165 out[37][0]=0;
│ │ │ │ +
166 out[37][1]=-70.0*tmp11*tmp20;
│ │ │ │ +
167 out[38][0]=0;
│ │ │ │ +
168 out[38][1]=-210.0*tmp11*tmp18;
│ │ │ │ +
169 out[39][0]=0;
│ │ │ │ +
170 out[39][1]=-490.0*tmp11*tmp19;
│ │ │ │ +
171 }
│ │ │ │ +
│ │ │ │ +
172
│ │ │ │ +
│ │ │ │ +
179 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
180 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
181 {
│ │ │ │ +
182 out.resize(40);
│ │ │ │ +
183 auto const& x = in[0], y = in[1];
│ │ │ │ +
184
│ │ │ │ +
185 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ +
186 const auto tmp3 = 2*y - 1;
│ │ │ │ +
187 const auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ +
188 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
189 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ +
190 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ +
191 const auto tmp9 = 2*x - 1;
│ │ │ │ +
192 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ +
193 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
194 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ +
195 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ +
196 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ +
197 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ +
198 const auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ +
199 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ +
200 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ +
201 // temporaries tmp1, tmp7, tmp13, tmp17 are not used in jacobian
│ │ │ │ +
202
│ │ │ │ +
203 const auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120);
│ │ │ │ +
204 const auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16;
│ │ │ │ +
205 const auto dytmp3 = 2;
│ │ │ │ +
206 const auto dytmp4 = 12*y - 6;
│ │ │ │ +
207 const auto dytmp5 = y*(60*y - 60) + 12;
│ │ │ │ +
208 const auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4;
│ │ │ │ +
209 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120);
│ │ │ │ +
210 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16;
│ │ │ │ +
211 const auto dxtmp9 = 2;
│ │ │ │ +
212 const auto dxtmp10 = 12*x - 6;
│ │ │ │ +
213 const auto dxtmp11 = x*(60*x - 60) + 12;
│ │ │ │ +
214 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4;
│ │ │ │ +
215 const auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18);
│ │ │ │ +
216 const auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2;
│ │ │ │ +
217 const auto dxtmp15 = x*(6*x - 6) + 1;
│ │ │ │ +
218 const auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
219 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18);
│ │ │ │ +
220 const auto dytmp18 = y*(6*y - 6) + 1;
│ │ │ │ +
221 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
222 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2;
│ │ │ │ +
223
│ │ │ │ +
224
│ │ │ │ +
225 // x-component
│ │ │ │ +
226 out[0][0][0]=sign0*dxtmp1;
│ │ │ │ +
227 out[0][1][0]=0;
│ │ │ │ +
228 out[1][0][0]=(-3.0*dxtmp2*tmp3);
│ │ │ │ +
229 out[1][1][0]=0;
│ │ │ │ +
230 out[2][0][0]=sign0*(-5.0*dxtmp2*tmp4);
│ │ │ │ +
231 out[2][1][0]=0;
│ │ │ │ +
232 out[3][0][0]=(-7.0*dxtmp2*tmp5);
│ │ │ │ +
233 out[3][1][0]=0;
│ │ │ │ +
234
│ │ │ │ +
235 out[4][0][0]=sign1*dxtmp6;
│ │ │ │ +
236 out[4][1][0]=0;
│ │ │ │ +
237 out[5][0][0]=(-3.0*dxtmp6*tmp3);
│ │ │ │ +
238 out[5][1][0]=0;
│ │ │ │ +
239 out[6][0][0]=sign1*(5.0*dxtmp6*tmp4);
│ │ │ │ +
240 out[6][1][0]=0;
│ │ │ │ +
241 out[7][0][0]=(-7.0*dxtmp6*tmp5);
│ │ │ │ +
242 out[7][1][0]=0;
│ │ │ │ +
243
│ │ │ │ +
244 out[8][0][0]=0;
│ │ │ │ +
245 out[8][1][0]=0;
│ │ │ │ +
246 out[9][0][0]=0;
│ │ │ │ +
247 out[9][1][0]=3.0*dxtmp9*tmp8;
│ │ │ │ +
248 out[10][0][0]=0;
│ │ │ │ +
249 out[10][1][0]=sign2*(-5.0*dxtmp10*tmp8);
│ │ │ │ +
250 out[11][0][0]=0;
│ │ │ │ +
251 out[11][1][0]=7.0*dxtmp11*tmp8;
│ │ │ │ +
252
│ │ │ │ +
253 out[12][0][0]=0;
│ │ │ │ +
254 out[12][1][0]=0;
│ │ │ │ +
255 out[13][0][0]=0;
│ │ │ │ +
256 out[13][1][0]=3.0*dxtmp9*tmp12;
│ │ │ │ +
257 out[14][0][0]=0;
│ │ │ │ +
258 out[14][1][0]=sign3*5.0*dxtmp10*tmp12;
│ │ │ │ +
259 out[15][0][0]=0;
│ │ │ │ +
260 out[15][1][0]=7.0*dxtmp11*tmp12;
│ │ │ │ +
261
│ │ │ │ +
262 out[16][0][0]=10.0*dxtmp13;
│ │ │ │ +
263 out[16][1][0]=0;
│ │ │ │ +
264 out[17][0][0]=-30.0*dxtmp14*tmp3;
│ │ │ │ +
265 out[17][1][0]=0;
│ │ │ │ +
266 out[18][0][0]=-50.0*dxtmp14*tmp4;
│ │ │ │ +
267 out[18][1][0]=0;
│ │ │ │ +
268 out[19][0][0]=-70.0*dxtmp14*tmp5;
│ │ │ │ +
269 out[19][1][0]=0;
│ │ │ │ +
270 out[20][0][0]=-30.0*dxtmp15;
│ │ │ │ +
271 out[20][1][0]=0;
│ │ │ │ +
272 out[21][0][0]=-90.0*dxtmp15*tmp3;
│ │ │ │ +
273 out[21][1][0]=0;
│ │ │ │ +
274 out[22][0][0]=-150.0*dxtmp15*tmp4;
│ │ │ │ +
275 out[22][1][0]=0;
│ │ │ │ +
276 out[23][0][0]=-210.0*dxtmp15*tmp5;
│ │ │ │ +
277 out[23][1][0]=0;
│ │ │ │ +
278 out[24][0][0]=-70.0*dxtmp16;
│ │ │ │ +
279 out[24][1][0]=0;
│ │ │ │ +
280 out[25][0][0]=-210.0*dxtmp16*tmp3;
│ │ │ │ +
281 out[25][1][0]=0;
│ │ │ │ +
282 out[26][0][0]=-350.0*dxtmp16*tmp4;
│ │ │ │ +
283 out[26][1][0]=0;
│ │ │ │ +
284 out[27][0][0]=-490.0*dxtmp16*tmp5;
│ │ │ │ +
285 out[27][1][0]=0;
│ │ │ │ +
286 out[28][0][0]=0;
│ │ │ │ +
287 out[28][1][0]=0;
│ │ │ │ +
288 out[29][0][0]=0;
│ │ │ │ +
289 out[29][1][0]=0;
│ │ │ │ +
290 out[30][0][0]=0;
│ │ │ │ +
291 out[30][1][0]=0;
│ │ │ │ +
292 out[31][0][0]=0;
│ │ │ │ +
293 out[31][1][0]=-30.0*dxtmp9*tmp20;
│ │ │ │ +
294 out[32][0][0]=0;
│ │ │ │ +
295 out[32][1][0]=-90.0*dxtmp9*tmp18;
│ │ │ │ +
296 out[33][0][0]=0;
│ │ │ │ +
297 out[33][1][0]=-210.0*dxtmp9*tmp19;
│ │ │ │ +
298 out[34][0][0]=0;
│ │ │ │ +
299 out[34][1][0]=-50.0*dxtmp10*tmp20;
│ │ │ │ +
300 out[35][0][0]=0;
│ │ │ │ +
301 out[35][1][0]=-150.0*dxtmp10*tmp18;
│ │ │ │ +
302 out[36][0][0]=0;
│ │ │ │ +
303 out[36][1][0]=-350.0*dxtmp10*tmp19;
│ │ │ │ +
304 out[37][0][0]=0;
│ │ │ │ +
305 out[37][1][0]=-70.0*dxtmp11*tmp20;
│ │ │ │ +
306 out[38][0][0]=0;
│ │ │ │ +
307 out[38][1][0]=-210.0*dxtmp11*tmp18;
│ │ │ │ +
308 out[39][0][0]=0;
│ │ │ │ +
309 out[39][1][0]=-490.0*dxtmp11*tmp19;
│ │ │ │ +
310
│ │ │ │ +
311
│ │ │ │ +
312 // y-component
│ │ │ │ +
313 out[0][0][1]=0;
│ │ │ │ +
314 out[0][1][1]=0;
│ │ │ │ +
315 out[1][0][1]=(-3.0*tmp2*dytmp3);
│ │ │ │ +
316 out[1][1][1]=0;
│ │ │ │ +
317 out[2][0][1]=sign0*(-5.0*tmp2*dytmp4);
│ │ │ │ +
318 out[2][1][1]=0;
│ │ │ │ +
319 out[3][0][1]=(-7.0*tmp2*dytmp5);
│ │ │ │ +
320 out[3][1][1]=0;
│ │ │ │ +
321
│ │ │ │ +
322 out[4][0][1]=0;
│ │ │ │ +
323 out[4][1][1]=0;
│ │ │ │ +
324 out[5][0][1]=(-3.0*tmp6*dytmp3);
│ │ │ │ +
325 out[5][1][1]=0;
│ │ │ │ +
326 out[6][0][1]=sign1*(5.0*tmp6*dytmp4);
│ │ │ │ +
327 out[6][1][1]=0;
│ │ │ │ +
328 out[7][0][1]=(-7.0*tmp6*dytmp5);
│ │ │ │ +
329 out[7][1][1]=0;
│ │ │ │ +
330
│ │ │ │ +
331 out[8][0][1]=0;
│ │ │ │ +
332 out[8][1][1]=sign2*dytmp7;
│ │ │ │ +
333 out[9][0][1]=0;
│ │ │ │ +
334 out[9][1][1]=3.0*tmp9*dytmp8;
│ │ │ │ +
335 out[10][0][1]=0;
│ │ │ │ +
336 out[10][1][1]=sign2*(-5.0*tmp10*dytmp8);
│ │ │ │ +
337 out[11][0][1]=0;
│ │ │ │ +
338 out[11][1][1]=7.0*tmp11*dytmp8;
│ │ │ │ +
339
│ │ │ │ +
340 out[12][0][1]=0;
│ │ │ │ +
341 out[12][1][1]=sign3*dytmp12;
│ │ │ │ +
342 out[13][0][1]=0;
│ │ │ │ +
343 out[13][1][1]=3.0*tmp9*dytmp12;
│ │ │ │ +
344 out[14][0][1]=0;
│ │ │ │ +
345 out[14][1][1]=sign3*5.0*tmp10*dytmp12;
│ │ │ │ +
346 out[15][0][1]=0;
│ │ │ │ +
347 out[15][1][1]=7.0*tmp11*dytmp12;
│ │ │ │ +
348
│ │ │ │ +
349 out[16][0][1]=0;
│ │ │ │ +
350 out[16][1][1]=0;
│ │ │ │ +
351 out[17][0][1]=-30.0*tmp14*dytmp3;
│ │ │ │ +
352 out[17][1][1]=0;
│ │ │ │ +
353 out[18][0][1]=-50.0*tmp14*dytmp4;
│ │ │ │ +
354 out[18][1][1]=0;
│ │ │ │ +
355 out[19][0][1]=-70.0*tmp14*dytmp5;
│ │ │ │ +
356 out[19][1][1]=0;
│ │ │ │ +
357 out[20][0][1]=0;
│ │ │ │ +
358 out[20][1][1]=0;
│ │ │ │ +
359 out[21][0][1]=-90.0*tmp15*dytmp3;
│ │ │ │ +
360 out[21][1][1]=0;
│ │ │ │ +
361 out[22][0][1]=-150.0*tmp15*dytmp4;
│ │ │ │ +
362 out[22][1][1]=0;
│ │ │ │ +
363 out[23][0][1]=-210.0*tmp15*dytmp5;
│ │ │ │ +
364 out[23][1][1]=0;
│ │ │ │ +
365 out[24][0][1]=0;
│ │ │ │ +
366 out[24][1][1]=0;
│ │ │ │ +
367 out[25][0][1]=-210.0*tmp16*dytmp3;
│ │ │ │ +
368 out[25][1][1]=0;
│ │ │ │ +
369 out[26][0][1]=-350.0*tmp16*dytmp4;
│ │ │ │ +
370 out[26][1][1]=0;
│ │ │ │ +
371 out[27][0][1]=-490.0*tmp16*dytmp5;
│ │ │ │ +
372 out[27][1][1]=0;
│ │ │ │ +
373 out[28][0][1]=0;
│ │ │ │ +
374 out[28][1][1]=10.0*dytmp17;
│ │ │ │ +
375 out[29][0][1]=0;
│ │ │ │ +
376 out[29][1][1]=-30.0*dytmp18;
│ │ │ │ +
377 out[30][0][1]=0;
│ │ │ │ +
378 out[30][1][1]=-70.0*dytmp19;
│ │ │ │ +
379 out[31][0][1]=0;
│ │ │ │ +
380 out[31][1][1]=-30.0*tmp9*dytmp20;
│ │ │ │ +
381 out[32][0][1]=0;
│ │ │ │ +
382 out[32][1][1]=-90.0*tmp9*dytmp18;
│ │ │ │ +
383 out[33][0][1]=0;
│ │ │ │ +
384 out[33][1][1]=-210.0*tmp9*dytmp19;
│ │ │ │ +
385 out[34][0][1]=0;
│ │ │ │ +
386 out[34][1][1]=-50.0*tmp10*dytmp20;
│ │ │ │ +
387 out[35][0][1]=0;
│ │ │ │ +
388 out[35][1][1]=-150.0*tmp10*dytmp18;
│ │ │ │ +
389 out[36][0][1]=0;
│ │ │ │ +
390 out[36][1][1]=-350.0*tmp10*dytmp19;
│ │ │ │ +
391 out[37][0][1]=0;
│ │ │ │ +
392 out[37][1][1]=-70.0*tmp11*dytmp20;
│ │ │ │ +
393 out[38][0][1]=0;
│ │ │ │ +
394 out[38][1][1]=-210.0*tmp11*dytmp18;
│ │ │ │ +
395 out[39][0][1]=0;
│ │ │ │ +
396 out[39][1][1]=-490.0*tmp11*dytmp19;
│ │ │ │ +
397
│ │ │ │ +
398 }
│ │ │ │ +
│ │ │ │ +
399
│ │ │ │ +
│ │ │ │ +
401 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
402 const typename Traits::DomainType& in, // position
│ │ │ │ +
403 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
404 {
│ │ │ │ +
405 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
406 if (totalOrder == 0) {
│ │ │ │ +
407 evaluateFunction(in, out);
│ │ │ │ +
408 } else if (totalOrder == 1) {
│ │ │ │ +
409 out.resize(size());
│ │ │ │ +
410 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
411 auto const& x = in[0], y = in[1];
│ │ │ │ +
412
│ │ │ │ +
413 if (direction == 0) {
│ │ │ │ +
414 auto tmp3 = 2*y - 1;
│ │ │ │ +
415 auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ +
416 auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
417 auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ +
418 auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ +
419 auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ +
420 auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ +
421 auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ +
422
│ │ │ │ +
423 auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120);
│ │ │ │ +
424 auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16;
│ │ │ │ +
425 auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4;
│ │ │ │ +
426 auto dxtmp9 = 2;
│ │ │ │ +
427 auto dxtmp10 = 12*x - 6;
│ │ │ │ +
428 auto dxtmp11 = x*(60*x - 60) + 12;
│ │ │ │ +
429 auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18);
│ │ │ │ +
430 auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2;
│ │ │ │ +
431 auto dxtmp15 = x*(6*x - 6) + 1;
│ │ │ │ +
432 auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
433
│ │ │ │ +
434 out[0][0]=sign0*dxtmp1;
│ │ │ │ +
435 out[0][1]=0;
│ │ │ │ +
436 out[1][0]=(-3.0*dxtmp2*tmp3);
│ │ │ │ +
437 out[1][1]=0;
│ │ │ │ +
438 out[2][0]=sign0*(-5.0*dxtmp2*tmp4);
│ │ │ │ +
439 out[2][1]=0;
│ │ │ │ +
440 out[3][0]=(-7.0*dxtmp2*tmp5);
│ │ │ │ +
441 out[3][1]=0;
│ │ │ │ +
442
│ │ │ │ +
443 out[4][0]=sign1*dxtmp6;
│ │ │ │ +
444 out[4][1]=0;
│ │ │ │ +
445 out[5][0]=(-3.0*dxtmp6*tmp3);
│ │ │ │ +
446 out[5][1]=0;
│ │ │ │ +
447 out[6][0]=sign1*(5.0*dxtmp6*tmp4);
│ │ │ │ +
448 out[6][1]=0;
│ │ │ │ +
449 out[7][0]=(-7.0*dxtmp6*tmp5);
│ │ │ │ +
450 out[7][1]=0;
│ │ │ │ +
451
│ │ │ │ +
452 out[8][0]=0;
│ │ │ │ +
453 out[8][1]=0;
│ │ │ │ +
454 out[9][0]=0;
│ │ │ │ +
455 out[9][1]=3.0*dxtmp9*tmp8;
│ │ │ │ +
456 out[10][0]=0;
│ │ │ │ +
457 out[10][1]=sign2*(-5.0*dxtmp10*tmp8);
│ │ │ │ +
458 out[11][0]=0;
│ │ │ │ +
459 out[11][1]=7.0*dxtmp11*tmp8;
│ │ │ │ +
460
│ │ │ │ +
461 out[12][0]=0;
│ │ │ │ +
462 out[12][1]=0;
│ │ │ │ +
463 out[13][0]=0;
│ │ │ │ +
464 out[13][1]=3.0*dxtmp9*tmp12;
│ │ │ │ +
465 out[14][0]=0;
│ │ │ │ +
466 out[14][1]=sign3*5.0*dxtmp10*tmp12;
│ │ │ │ +
467 out[15][0]=0;
│ │ │ │ +
468 out[15][1]=7.0*dxtmp11*tmp12;
│ │ │ │ +
469
│ │ │ │ +
470 out[16][0]=10.0*dxtmp13;
│ │ │ │ +
471 out[16][1]=0;
│ │ │ │ +
472 out[17][0]=-30.0*dxtmp14*tmp3;
│ │ │ │ +
473 out[17][1]=0;
│ │ │ │ +
474 out[18][0]=-50.0*dxtmp14*tmp4;
│ │ │ │ +
475 out[18][1]=0;
│ │ │ │ +
476 out[19][0]=-70.0*dxtmp14*tmp5;
│ │ │ │ +
477 out[19][1]=0;
│ │ │ │ +
478 out[20][0]=-30.0*dxtmp15;
│ │ │ │ +
479 out[20][1]=0;
│ │ │ │ +
480 out[21][0]=-90.0*dxtmp15*tmp3;
│ │ │ │ +
481 out[21][1]=0;
│ │ │ │ +
482 out[22][0]=-150.0*dxtmp15*tmp4;
│ │ │ │ +
483 out[22][1]=0;
│ │ │ │ +
484 out[23][0]=-210.0*dxtmp15*tmp5;
│ │ │ │ +
485 out[23][1]=0;
│ │ │ │ +
486 out[24][0]=-70.0*dxtmp16;
│ │ │ │ +
487 out[24][1]=0;
│ │ │ │ +
488 out[25][0]=-210.0*dxtmp16*tmp3;
│ │ │ │ +
489 out[25][1]=0;
│ │ │ │ +
490 out[26][0]=-350.0*dxtmp16*tmp4;
│ │ │ │ +
491 out[26][1]=0;
│ │ │ │ +
492 out[27][0]=-490.0*dxtmp16*tmp5;
│ │ │ │ +
493 out[27][1]=0;
│ │ │ │ +
494 out[28][0]=0;
│ │ │ │ +
495 out[28][1]=0;
│ │ │ │ +
496 out[29][0]=0;
│ │ │ │ +
497 out[29][1]=0;
│ │ │ │ +
498 out[30][0]=0;
│ │ │ │ +
499 out[30][1]=0;
│ │ │ │ +
500 out[31][0]=0;
│ │ │ │ +
501 out[31][1]=-30.0*dxtmp9*tmp20;
│ │ │ │ +
502 out[32][0]=0;
│ │ │ │ +
503 out[32][1]=-90.0*dxtmp9*tmp18;
│ │ │ │ +
504 out[33][0]=0;
│ │ │ │ +
505 out[33][1]=-210.0*dxtmp9*tmp19;
│ │ │ │ +
506 out[34][0]=0;
│ │ │ │ +
507 out[34][1]=-50.0*dxtmp10*tmp20;
│ │ │ │ +
508 out[35][0]=0;
│ │ │ │ +
509 out[35][1]=-150.0*dxtmp10*tmp18;
│ │ │ │ +
510 out[36][0]=0;
│ │ │ │ +
511 out[36][1]=-350.0*dxtmp10*tmp19;
│ │ │ │ +
512 out[37][0]=0;
│ │ │ │ +
513 out[37][1]=-70.0*dxtmp11*tmp20;
│ │ │ │ +
514 out[38][0]=0;
│ │ │ │ +
515 out[38][1]=-210.0*dxtmp11*tmp18;
│ │ │ │ +
516 out[39][0]=0;
│ │ │ │ +
517 out[39][1]=-490.0*dxtmp11*tmp19;
│ │ │ │ +
518 } else if (direction == 1) {
│ │ │ │ +
519 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ +
520 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ +
521 const auto tmp9 = 2*x - 1;
│ │ │ │ +
522 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ +
523 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ +
524 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ +
525 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ +
526 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ +
527
│ │ │ │ +
528 const auto dytmp3 = 2;
│ │ │ │ +
529 const auto dytmp4 = 12*y - 6;
│ │ │ │ +
530 const auto dytmp5 = y*(60*y - 60) + 12;
│ │ │ │ +
531 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120);
│ │ │ │ +
532 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16;
│ │ │ │ +
533 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4;
│ │ │ │ +
534 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18);
│ │ │ │ +
535 const auto dytmp18 = y*(6*y - 6) + 1;
│ │ │ │ +
536 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ +
537 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2;
│ │ │ │ +
538
│ │ │ │ +
539 out[0][0]=0;
│ │ │ │ +
540 out[0][1]=0;
│ │ │ │ +
541 out[1][0]=(-3.0*tmp2*dytmp3);
│ │ │ │ +
542 out[1][1]=0;
│ │ │ │ +
543 out[2][0]=sign0*(-5.0*tmp2*dytmp4);
│ │ │ │ +
544 out[2][1]=0;
│ │ │ │ +
545 out[3][0]=(-7.0*tmp2*dytmp5);
│ │ │ │ +
546 out[3][1]=0;
│ │ │ │ +
547
│ │ │ │ +
548 out[4][0]=0;
│ │ │ │ +
549 out[4][1]=0;
│ │ │ │ +
550 out[5][0]=(-3.0*tmp6*dytmp3);
│ │ │ │ +
551 out[5][1]=0;
│ │ │ │ +
552 out[6][0]=sign1*(5.0*tmp6*dytmp4);
│ │ │ │ +
553 out[6][1]=0;
│ │ │ │ +
554 out[7][0]=(-7.0*tmp6*dytmp5);
│ │ │ │ +
555 out[7][1]=0;
│ │ │ │ +
556
│ │ │ │ +
557 out[8][0]=0;
│ │ │ │ +
558 out[8][1]=sign2*dytmp7;
│ │ │ │ +
559 out[9][0]=0;
│ │ │ │ +
560 out[9][1]=3.0*tmp9*dytmp8;
│ │ │ │ +
561 out[10][0]=0;
│ │ │ │ +
562 out[10][1]=sign2*(-5.0*tmp10*dytmp8);
│ │ │ │ +
563 out[11][0]=0;
│ │ │ │ +
564 out[11][1]=7.0*tmp11*dytmp8;
│ │ │ │ +
565
│ │ │ │ +
566 out[12][0]=0;
│ │ │ │ +
567 out[12][1]=sign3*dytmp12;
│ │ │ │ +
568 out[13][0]=0;
│ │ │ │ +
569 out[13][1]=3.0*tmp9*dytmp12;
│ │ │ │ +
570 out[14][0]=0;
│ │ │ │ +
571 out[14][1]=sign3*5.0*tmp10*dytmp12;
│ │ │ │ +
572 out[15][0]=0;
│ │ │ │ +
573 out[15][1]=7.0*tmp11*dytmp12;
│ │ │ │ +
574
│ │ │ │ +
575 out[16][0]=0;
│ │ │ │ +
576 out[16][1]=0;
│ │ │ │ +
577 out[17][0]=-30.0*tmp14*dytmp3;
│ │ │ │ +
578 out[17][1]=0;
│ │ │ │ +
579 out[18][0]=-50.0*tmp14*dytmp4;
│ │ │ │ +
580 out[18][1]=0;
│ │ │ │ +
581 out[19][0]=-70.0*tmp14*dytmp5;
│ │ │ │ +
582 out[19][1]=0;
│ │ │ │ +
583 out[20][0]=0;
│ │ │ │ +
584 out[20][1]=0;
│ │ │ │ +
585 out[21][0]=-90.0*tmp15*dytmp3;
│ │ │ │ +
586 out[21][1]=0;
│ │ │ │ +
587 out[22][0]=-150.0*tmp15*dytmp4;
│ │ │ │ +
588 out[22][1]=0;
│ │ │ │ +
589 out[23][0]=-210.0*tmp15*dytmp5;
│ │ │ │ +
590 out[23][1]=0;
│ │ │ │ +
591 out[24][0]=0;
│ │ │ │ +
592 out[24][1]=0;
│ │ │ │ +
593 out[25][0]=-210.0*tmp16*dytmp3;
│ │ │ │ +
594 out[25][1]=0;
│ │ │ │ +
595 out[26][0]=-350.0*tmp16*dytmp4;
│ │ │ │ +
596 out[26][1]=0;
│ │ │ │ +
597 out[27][0]=-490.0*tmp16*dytmp5;
│ │ │ │ +
598 out[27][1]=0;
│ │ │ │ +
599 out[28][0]=0;
│ │ │ │ +
600 out[28][1]=10.0*dytmp17;
│ │ │ │ +
601 out[29][0]=0;
│ │ │ │ +
602 out[29][1]=-30.0*dytmp18;
│ │ │ │ +
603 out[30][0]=0;
│ │ │ │ +
604 out[30][1]=-70.0*dytmp19;
│ │ │ │ +
605 out[31][0]=0;
│ │ │ │ +
606 out[31][1]=-30.0*tmp9*dytmp20;
│ │ │ │ +
607 out[32][0]=0;
│ │ │ │ +
608 out[32][1]=-90.0*tmp9*dytmp18;
│ │ │ │ +
609 out[33][0]=0;
│ │ │ │ +
610 out[33][1]=-210.0*tmp9*dytmp19;
│ │ │ │ +
611 out[34][0]=0;
│ │ │ │ +
612 out[34][1]=-50.0*tmp10*dytmp20;
│ │ │ │ +
613 out[35][0]=0;
│ │ │ │ +
614 out[35][1]=-150.0*tmp10*dytmp18;
│ │ │ │ +
615 out[36][0]=0;
│ │ │ │ +
616 out[36][1]=-350.0*tmp10*dytmp19;
│ │ │ │ +
617 out[37][0]=0;
│ │ │ │ +
618 out[37][1]=-70.0*tmp11*dytmp20;
│ │ │ │ +
619 out[38][0]=0;
│ │ │ │ +
620 out[38][1]=-210.0*tmp11*dytmp18;
│ │ │ │ +
621 out[39][0]=0;
│ │ │ │ +
622 out[39][1]=-490.0*tmp11*dytmp19;
│ │ │ │ +
623 } else {
│ │ │ │ +
624 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
625 }
│ │ │ │ +
626 } else {
│ │ │ │ +
627 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
628 }
│ │ │ │ +
629 }
│ │ │ │ +
│ │ │ │ +
630
│ │ │ │ +
│ │ │ │ +
632 unsigned int order () const
│ │ │ │ +
633 {
│ │ │ │ +
634 return 7;
│ │ │ │ +
635 }
│ │ │ │ +
│ │ │ │ +
636
│ │ │ │ +
637 private:
│ │ │ │ +
638 R sign0, sign1, sign2, sign3;
│ │ │ │ +
639 };
│ │ │ │ +
│ │ │ │ +
640}
│ │ │ │ +
641
│ │ │ │ +
642#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalinterpolation.hh:22
│ │ │ │ -
RT0PrismLocalInterpolation(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prismlocalinterpolation.hh:31
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas0prismlocalinterpolation.hh:68
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalbasis.hh:29
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas3cube2dlocalbasis.hh:49
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:179
│ │ │ │ +
RT3Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2dlocalbasis.hh:40
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:60
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:632
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas3cube2dlocalbasis.hh:33
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:401
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,92 +1,671 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ -raviartthomas0prismlocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ +raviartthomas3cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 class _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -22 { │ │ │ │ │ -23 │ │ │ │ │ -24 public: │ │ │ │ │ -25 │ │ │ │ │ -_3_1 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<5> s = 0) │ │ │ │ │ -32 { │ │ │ │ │ -33 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include "../../common/localbasis.hh" │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +29 { │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 34 │ │ │ │ │ -35 for (size_t i=0; i<5; i++) │ │ │ │ │ -36 sign[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -37 │ │ │ │ │ -38 Scalar r = 1/std::sqrt(2); │ │ │ │ │ -39 │ │ │ │ │ -40 n[0] = { 0.0, -1.0, 0.0}; │ │ │ │ │ -41 n[1] = {-1.0, 0.0, 0.0}; │ │ │ │ │ -42 n[2] = { r, r, 0.0}; │ │ │ │ │ -43 n[3] = { 0.0, 0.0, -1.0}; │ │ │ │ │ -44 n[4] = { 0.0, 0.0, 1.0}; │ │ │ │ │ -45 │ │ │ │ │ -46 c[0] = 1.0; │ │ │ │ │ -47 c[1] = 1.0; │ │ │ │ │ -48 c[2] = std::sqrt(2); │ │ │ │ │ -49 c[3] = 1/2.0; │ │ │ │ │ -50 c[4] = 1/2.0; │ │ │ │ │ -51 │ │ │ │ │ -52 m[0] = { 0.5, 0.0, 0.5}; │ │ │ │ │ -53 m[1] = { 0.0, 0.5, 0.5}; │ │ │ │ │ -54 m[2] = { 0.5, 0.5, 0.5}; │ │ │ │ │ -55 m[3] = { 1/3.0, 1/3.0, 0.0}; │ │ │ │ │ -56 m[4] = { 1/3.0, 1/3.0, 1.0}; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -67 template │ │ │ │ │ -_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -69 { │ │ │ │ │ -70 out.resize(5); │ │ │ │ │ -71 for(int i=0; i<5; i++) │ │ │ │ │ -72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i]; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 // Facet orientations │ │ │ │ │ -77 std::array sign; │ │ │ │ │ -78 // Facet area │ │ │ │ │ -79 std::array c; │ │ │ │ │ -80 │ │ │ │ │ -81 // Facet normals │ │ │ │ │ -82 std::array n; │ │ │ │ │ -83 // Facet midpoints │ │ │ │ │ -84 std::array m; │ │ │ │ │ -85 }; │ │ │ │ │ -86} │ │ │ │ │ -87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALINTERPOLATION_HH │ │ │ │ │ +_4_0 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +41 { │ │ │ │ │ +42 sign0 = (s[0]) ? -1.0 : 1.0; │ │ │ │ │ +43 sign1 = (s[1]) ? -1.0 : 1.0; │ │ │ │ │ +44 sign2 = (s[2]) ? -1.0 : 1.0; │ │ │ │ │ +45 sign3 = (s[3]) ? -1.0 : 1.0; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return 40; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_6_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +61 std::vector& out) const │ │ │ │ │ +62 { │ │ │ │ │ +63 out.resize(40); │ │ │ │ │ +64 auto const& x = in[0], y = in[1]; │ │ │ │ │ +65 │ │ │ │ │ +66 const auto tmp1 = - x*(x*(x*(35*x - 80) + 60) - 16) - 1; │ │ │ │ │ +67 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ +68 const auto tmp3 = 2*y - 1; │ │ │ │ │ +69 const auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ +70 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +71 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ +72 const auto tmp7 = - y*(y*(y*(35*y - 80) + 60) - 16) - 1; │ │ │ │ │ +73 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ +74 const auto tmp9 = 2*x - 1; │ │ │ │ │ +75 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ +76 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +77 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ +78 const auto tmp13 = -x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ +79 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ +80 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ +81 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ +82 const auto tmp17 = -y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ +83 const auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ +84 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ +85 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ +86 │ │ │ │ │ +87 out[0][0]=sign0*tmp1; │ │ │ │ │ +88 out[0][1]=0; │ │ │ │ │ +89 out[1][0]=(-3.0*tmp2*tmp3); │ │ │ │ │ +90 out[1][1]=0; │ │ │ │ │ +91 out[2][0]=sign0*(-5.0*tmp2*tmp4); │ │ │ │ │ +92 out[2][1]=0; │ │ │ │ │ +93 out[3][0]=(-7.0*tmp2*tmp5); │ │ │ │ │ +94 out[3][1]=0; │ │ │ │ │ +95 │ │ │ │ │ +96 out[4][0]=sign1*tmp6; │ │ │ │ │ +97 out[4][1]=0; │ │ │ │ │ +98 out[5][0]=(-3.0*tmp6*tmp3); │ │ │ │ │ +99 out[5][1]=0; │ │ │ │ │ +100 out[6][0]=sign1*(5.0*tmp6*tmp4); │ │ │ │ │ +101 out[6][1]=0; │ │ │ │ │ +102 out[7][0]=(-7.0*tmp6*tmp5); │ │ │ │ │ +103 out[7][1]=0; │ │ │ │ │ +104 │ │ │ │ │ +105 out[8][0]=0; │ │ │ │ │ +106 out[8][1]=sign2*tmp7; │ │ │ │ │ +107 out[9][0]=0; │ │ │ │ │ +108 out[9][1]=3.0*tmp9*tmp8; │ │ │ │ │ +109 out[10][0]=0; │ │ │ │ │ +110 out[10][1]=sign2*(-5.0*tmp10*tmp8); │ │ │ │ │ +111 out[11][0]=0; │ │ │ │ │ +112 out[11][1]=7.0*tmp11*tmp8; │ │ │ │ │ +113 │ │ │ │ │ +114 out[12][0]=0; │ │ │ │ │ +115 out[12][1]=sign3*tmp12; │ │ │ │ │ +116 out[13][0]=0; │ │ │ │ │ +117 out[13][1]=3.0*tmp9*tmp12; │ │ │ │ │ +118 out[14][0]=0; │ │ │ │ │ +119 out[14][1]=sign3*5.0*tmp10*tmp12; │ │ │ │ │ +120 out[15][0]=0; │ │ │ │ │ +121 out[15][1]=7.0*tmp11*tmp12; │ │ │ │ │ +122 │ │ │ │ │ +123 out[16][0]=10.0*tmp13; │ │ │ │ │ +124 out[16][1]=0; │ │ │ │ │ +125 out[17][0]=-30.0*tmp14*tmp3; │ │ │ │ │ +126 out[17][1]=0; │ │ │ │ │ +127 out[18][0]=-50.0*tmp14*tmp4; │ │ │ │ │ +128 out[18][1]=0; │ │ │ │ │ +129 out[19][0]=-70.0*tmp14*tmp5; │ │ │ │ │ +130 out[19][1]=0; │ │ │ │ │ +131 out[20][0]=-30.0*tmp15; │ │ │ │ │ +132 out[20][1]=0; │ │ │ │ │ +133 out[21][0]=-90.0*tmp15*tmp3; │ │ │ │ │ +134 out[21][1]=0; │ │ │ │ │ +135 out[22][0]=-150.0*tmp15*tmp4; │ │ │ │ │ +136 out[22][1]=0; │ │ │ │ │ +137 out[23][0]=-210.0*tmp15*tmp5; │ │ │ │ │ +138 out[23][1]=0; │ │ │ │ │ +139 out[24][0]=-70.0*tmp16; │ │ │ │ │ +140 out[24][1]=0; │ │ │ │ │ +141 out[25][0]=-210.0*tmp16*tmp3; │ │ │ │ │ +142 out[25][1]=0; │ │ │ │ │ +143 out[26][0]=-350.0*tmp16*tmp4; │ │ │ │ │ +144 out[26][1]=0; │ │ │ │ │ +145 out[27][0]=-490.0*tmp16*tmp5; │ │ │ │ │ +146 out[27][1]=0; │ │ │ │ │ +147 out[28][0]=0; │ │ │ │ │ +148 out[28][1]=10.0*tmp17; │ │ │ │ │ +149 out[29][0]=0; │ │ │ │ │ +150 out[29][1]=-30.0*tmp18; │ │ │ │ │ +151 out[30][0]=0; │ │ │ │ │ +152 out[30][1]=-70.0*tmp19; │ │ │ │ │ +153 out[31][0]=0; │ │ │ │ │ +154 out[31][1]=-30.0*tmp9*tmp20; │ │ │ │ │ +155 out[32][0]=0; │ │ │ │ │ +156 out[32][1]=-90.0*tmp9*tmp18; │ │ │ │ │ +157 out[33][0]=0; │ │ │ │ │ +158 out[33][1]=-210.0*tmp9*tmp19; │ │ │ │ │ +159 out[34][0]=0; │ │ │ │ │ +160 out[34][1]=-50.0*tmp10*tmp20; │ │ │ │ │ +161 out[35][0]=0; │ │ │ │ │ +162 out[35][1]=-150.0*tmp10*tmp18; │ │ │ │ │ +163 out[36][0]=0; │ │ │ │ │ +164 out[36][1]=-350.0*tmp10*tmp19; │ │ │ │ │ +165 out[37][0]=0; │ │ │ │ │ +166 out[37][1]=-70.0*tmp11*tmp20; │ │ │ │ │ +167 out[38][0]=0; │ │ │ │ │ +168 out[38][1]=-210.0*tmp11*tmp18; │ │ │ │ │ +169 out[39][0]=0; │ │ │ │ │ +170 out[39][1]=-490.0*tmp11*tmp19; │ │ │ │ │ +171 } │ │ │ │ │ +172 │ │ │ │ │ +_1_7_9 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +180 std::vector& out) const │ │ │ │ │ +181 { │ │ │ │ │ +182 out.resize(40); │ │ │ │ │ +183 auto const& x = in[0], y = in[1]; │ │ │ │ │ +184 │ │ │ │ │ +185 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ +186 const auto tmp3 = 2*y - 1; │ │ │ │ │ +187 const auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ +188 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +189 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ +190 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ +191 const auto tmp9 = 2*x - 1; │ │ │ │ │ +192 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ +193 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +194 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ +195 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ +196 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ +197 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ +198 const auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ +199 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ +200 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ +201 // temporaries tmp1, tmp7, tmp13, tmp17 are not used in jacobian │ │ │ │ │ +202 │ │ │ │ │ +203 const auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120); │ │ │ │ │ +204 const auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16; │ │ │ │ │ +205 const auto dytmp3 = 2; │ │ │ │ │ +206 const auto dytmp4 = 12*y - 6; │ │ │ │ │ +207 const auto dytmp5 = y*(60*y - 60) + 12; │ │ │ │ │ +208 const auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4; │ │ │ │ │ +209 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120); │ │ │ │ │ +210 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16; │ │ │ │ │ +211 const auto dxtmp9 = 2; │ │ │ │ │ +212 const auto dxtmp10 = 12*x - 6; │ │ │ │ │ +213 const auto dxtmp11 = x*(60*x - 60) + 12; │ │ │ │ │ +214 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4; │ │ │ │ │ +215 const auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18); │ │ │ │ │ +216 const auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2; │ │ │ │ │ +217 const auto dxtmp15 = x*(6*x - 6) + 1; │ │ │ │ │ +218 const auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +219 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18); │ │ │ │ │ +220 const auto dytmp18 = y*(6*y - 6) + 1; │ │ │ │ │ +221 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +222 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2; │ │ │ │ │ +223 │ │ │ │ │ +224 │ │ │ │ │ +225 // x-component │ │ │ │ │ +226 out[0][0][0]=sign0*dxtmp1; │ │ │ │ │ +227 out[0][1][0]=0; │ │ │ │ │ +228 out[1][0][0]=(-3.0*dxtmp2*tmp3); │ │ │ │ │ +229 out[1][1][0]=0; │ │ │ │ │ +230 out[2][0][0]=sign0*(-5.0*dxtmp2*tmp4); │ │ │ │ │ +231 out[2][1][0]=0; │ │ │ │ │ +232 out[3][0][0]=(-7.0*dxtmp2*tmp5); │ │ │ │ │ +233 out[3][1][0]=0; │ │ │ │ │ +234 │ │ │ │ │ +235 out[4][0][0]=sign1*dxtmp6; │ │ │ │ │ +236 out[4][1][0]=0; │ │ │ │ │ +237 out[5][0][0]=(-3.0*dxtmp6*tmp3); │ │ │ │ │ +238 out[5][1][0]=0; │ │ │ │ │ +239 out[6][0][0]=sign1*(5.0*dxtmp6*tmp4); │ │ │ │ │ +240 out[6][1][0]=0; │ │ │ │ │ +241 out[7][0][0]=(-7.0*dxtmp6*tmp5); │ │ │ │ │ +242 out[7][1][0]=0; │ │ │ │ │ +243 │ │ │ │ │ +244 out[8][0][0]=0; │ │ │ │ │ +245 out[8][1][0]=0; │ │ │ │ │ +246 out[9][0][0]=0; │ │ │ │ │ +247 out[9][1][0]=3.0*dxtmp9*tmp8; │ │ │ │ │ +248 out[10][0][0]=0; │ │ │ │ │ +249 out[10][1][0]=sign2*(-5.0*dxtmp10*tmp8); │ │ │ │ │ +250 out[11][0][0]=0; │ │ │ │ │ +251 out[11][1][0]=7.0*dxtmp11*tmp8; │ │ │ │ │ +252 │ │ │ │ │ +253 out[12][0][0]=0; │ │ │ │ │ +254 out[12][1][0]=0; │ │ │ │ │ +255 out[13][0][0]=0; │ │ │ │ │ +256 out[13][1][0]=3.0*dxtmp9*tmp12; │ │ │ │ │ +257 out[14][0][0]=0; │ │ │ │ │ +258 out[14][1][0]=sign3*5.0*dxtmp10*tmp12; │ │ │ │ │ +259 out[15][0][0]=0; │ │ │ │ │ +260 out[15][1][0]=7.0*dxtmp11*tmp12; │ │ │ │ │ +261 │ │ │ │ │ +262 out[16][0][0]=10.0*dxtmp13; │ │ │ │ │ +263 out[16][1][0]=0; │ │ │ │ │ +264 out[17][0][0]=-30.0*dxtmp14*tmp3; │ │ │ │ │ +265 out[17][1][0]=0; │ │ │ │ │ +266 out[18][0][0]=-50.0*dxtmp14*tmp4; │ │ │ │ │ +267 out[18][1][0]=0; │ │ │ │ │ +268 out[19][0][0]=-70.0*dxtmp14*tmp5; │ │ │ │ │ +269 out[19][1][0]=0; │ │ │ │ │ +270 out[20][0][0]=-30.0*dxtmp15; │ │ │ │ │ +271 out[20][1][0]=0; │ │ │ │ │ +272 out[21][0][0]=-90.0*dxtmp15*tmp3; │ │ │ │ │ +273 out[21][1][0]=0; │ │ │ │ │ +274 out[22][0][0]=-150.0*dxtmp15*tmp4; │ │ │ │ │ +275 out[22][1][0]=0; │ │ │ │ │ +276 out[23][0][0]=-210.0*dxtmp15*tmp5; │ │ │ │ │ +277 out[23][1][0]=0; │ │ │ │ │ +278 out[24][0][0]=-70.0*dxtmp16; │ │ │ │ │ +279 out[24][1][0]=0; │ │ │ │ │ +280 out[25][0][0]=-210.0*dxtmp16*tmp3; │ │ │ │ │ +281 out[25][1][0]=0; │ │ │ │ │ +282 out[26][0][0]=-350.0*dxtmp16*tmp4; │ │ │ │ │ +283 out[26][1][0]=0; │ │ │ │ │ +284 out[27][0][0]=-490.0*dxtmp16*tmp5; │ │ │ │ │ +285 out[27][1][0]=0; │ │ │ │ │ +286 out[28][0][0]=0; │ │ │ │ │ +287 out[28][1][0]=0; │ │ │ │ │ +288 out[29][0][0]=0; │ │ │ │ │ +289 out[29][1][0]=0; │ │ │ │ │ +290 out[30][0][0]=0; │ │ │ │ │ +291 out[30][1][0]=0; │ │ │ │ │ +292 out[31][0][0]=0; │ │ │ │ │ +293 out[31][1][0]=-30.0*dxtmp9*tmp20; │ │ │ │ │ +294 out[32][0][0]=0; │ │ │ │ │ +295 out[32][1][0]=-90.0*dxtmp9*tmp18; │ │ │ │ │ +296 out[33][0][0]=0; │ │ │ │ │ +297 out[33][1][0]=-210.0*dxtmp9*tmp19; │ │ │ │ │ +298 out[34][0][0]=0; │ │ │ │ │ +299 out[34][1][0]=-50.0*dxtmp10*tmp20; │ │ │ │ │ +300 out[35][0][0]=0; │ │ │ │ │ +301 out[35][1][0]=-150.0*dxtmp10*tmp18; │ │ │ │ │ +302 out[36][0][0]=0; │ │ │ │ │ +303 out[36][1][0]=-350.0*dxtmp10*tmp19; │ │ │ │ │ +304 out[37][0][0]=0; │ │ │ │ │ +305 out[37][1][0]=-70.0*dxtmp11*tmp20; │ │ │ │ │ +306 out[38][0][0]=0; │ │ │ │ │ +307 out[38][1][0]=-210.0*dxtmp11*tmp18; │ │ │ │ │ +308 out[39][0][0]=0; │ │ │ │ │ +309 out[39][1][0]=-490.0*dxtmp11*tmp19; │ │ │ │ │ +310 │ │ │ │ │ +311 │ │ │ │ │ +312 // y-component │ │ │ │ │ +313 out[0][0][1]=0; │ │ │ │ │ +314 out[0][1][1]=0; │ │ │ │ │ +315 out[1][0][1]=(-3.0*tmp2*dytmp3); │ │ │ │ │ +316 out[1][1][1]=0; │ │ │ │ │ +317 out[2][0][1]=sign0*(-5.0*tmp2*dytmp4); │ │ │ │ │ +318 out[2][1][1]=0; │ │ │ │ │ +319 out[3][0][1]=(-7.0*tmp2*dytmp5); │ │ │ │ │ +320 out[3][1][1]=0; │ │ │ │ │ +321 │ │ │ │ │ +322 out[4][0][1]=0; │ │ │ │ │ +323 out[4][1][1]=0; │ │ │ │ │ +324 out[5][0][1]=(-3.0*tmp6*dytmp3); │ │ │ │ │ +325 out[5][1][1]=0; │ │ │ │ │ +326 out[6][0][1]=sign1*(5.0*tmp6*dytmp4); │ │ │ │ │ +327 out[6][1][1]=0; │ │ │ │ │ +328 out[7][0][1]=(-7.0*tmp6*dytmp5); │ │ │ │ │ +329 out[7][1][1]=0; │ │ │ │ │ +330 │ │ │ │ │ +331 out[8][0][1]=0; │ │ │ │ │ +332 out[8][1][1]=sign2*dytmp7; │ │ │ │ │ +333 out[9][0][1]=0; │ │ │ │ │ +334 out[9][1][1]=3.0*tmp9*dytmp8; │ │ │ │ │ +335 out[10][0][1]=0; │ │ │ │ │ +336 out[10][1][1]=sign2*(-5.0*tmp10*dytmp8); │ │ │ │ │ +337 out[11][0][1]=0; │ │ │ │ │ +338 out[11][1][1]=7.0*tmp11*dytmp8; │ │ │ │ │ +339 │ │ │ │ │ +340 out[12][0][1]=0; │ │ │ │ │ +341 out[12][1][1]=sign3*dytmp12; │ │ │ │ │ +342 out[13][0][1]=0; │ │ │ │ │ +343 out[13][1][1]=3.0*tmp9*dytmp12; │ │ │ │ │ +344 out[14][0][1]=0; │ │ │ │ │ +345 out[14][1][1]=sign3*5.0*tmp10*dytmp12; │ │ │ │ │ +346 out[15][0][1]=0; │ │ │ │ │ +347 out[15][1][1]=7.0*tmp11*dytmp12; │ │ │ │ │ +348 │ │ │ │ │ +349 out[16][0][1]=0; │ │ │ │ │ +350 out[16][1][1]=0; │ │ │ │ │ +351 out[17][0][1]=-30.0*tmp14*dytmp3; │ │ │ │ │ +352 out[17][1][1]=0; │ │ │ │ │ +353 out[18][0][1]=-50.0*tmp14*dytmp4; │ │ │ │ │ +354 out[18][1][1]=0; │ │ │ │ │ +355 out[19][0][1]=-70.0*tmp14*dytmp5; │ │ │ │ │ +356 out[19][1][1]=0; │ │ │ │ │ +357 out[20][0][1]=0; │ │ │ │ │ +358 out[20][1][1]=0; │ │ │ │ │ +359 out[21][0][1]=-90.0*tmp15*dytmp3; │ │ │ │ │ +360 out[21][1][1]=0; │ │ │ │ │ +361 out[22][0][1]=-150.0*tmp15*dytmp4; │ │ │ │ │ +362 out[22][1][1]=0; │ │ │ │ │ +363 out[23][0][1]=-210.0*tmp15*dytmp5; │ │ │ │ │ +364 out[23][1][1]=0; │ │ │ │ │ +365 out[24][0][1]=0; │ │ │ │ │ +366 out[24][1][1]=0; │ │ │ │ │ +367 out[25][0][1]=-210.0*tmp16*dytmp3; │ │ │ │ │ +368 out[25][1][1]=0; │ │ │ │ │ +369 out[26][0][1]=-350.0*tmp16*dytmp4; │ │ │ │ │ +370 out[26][1][1]=0; │ │ │ │ │ +371 out[27][0][1]=-490.0*tmp16*dytmp5; │ │ │ │ │ +372 out[27][1][1]=0; │ │ │ │ │ +373 out[28][0][1]=0; │ │ │ │ │ +374 out[28][1][1]=10.0*dytmp17; │ │ │ │ │ +375 out[29][0][1]=0; │ │ │ │ │ +376 out[29][1][1]=-30.0*dytmp18; │ │ │ │ │ +377 out[30][0][1]=0; │ │ │ │ │ +378 out[30][1][1]=-70.0*dytmp19; │ │ │ │ │ +379 out[31][0][1]=0; │ │ │ │ │ +380 out[31][1][1]=-30.0*tmp9*dytmp20; │ │ │ │ │ +381 out[32][0][1]=0; │ │ │ │ │ +382 out[32][1][1]=-90.0*tmp9*dytmp18; │ │ │ │ │ +383 out[33][0][1]=0; │ │ │ │ │ +384 out[33][1][1]=-210.0*tmp9*dytmp19; │ │ │ │ │ +385 out[34][0][1]=0; │ │ │ │ │ +386 out[34][1][1]=-50.0*tmp10*dytmp20; │ │ │ │ │ +387 out[35][0][1]=0; │ │ │ │ │ +388 out[35][1][1]=-150.0*tmp10*dytmp18; │ │ │ │ │ +389 out[36][0][1]=0; │ │ │ │ │ +390 out[36][1][1]=-350.0*tmp10*dytmp19; │ │ │ │ │ +391 out[37][0][1]=0; │ │ │ │ │ +392 out[37][1][1]=-70.0*tmp11*dytmp20; │ │ │ │ │ +393 out[38][0][1]=0; │ │ │ │ │ +394 out[38][1][1]=-210.0*tmp11*dytmp18; │ │ │ │ │ +395 out[39][0][1]=0; │ │ │ │ │ +396 out[39][1][1]=-490.0*tmp11*dytmp19; │ │ │ │ │ +397 │ │ │ │ │ +398 } │ │ │ │ │ +399 │ │ │ │ │ +_4_0_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +402 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +403 std::vector& out) const // return value │ │ │ │ │ +404 { │ │ │ │ │ +405 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +406 if (totalOrder == 0) { │ │ │ │ │ +407 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +408 } else if (totalOrder == 1) { │ │ │ │ │ +409 out.resize(_s_i_z_e()); │ │ │ │ │ +410 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +411 auto const& x = in[0], y = in[1]; │ │ │ │ │ +412 │ │ │ │ │ +413 if (direction == 0) { │ │ │ │ │ +414 auto tmp3 = 2*y - 1; │ │ │ │ │ +415 auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ +416 auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +417 auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ +418 auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ +419 auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ +420 auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ +421 auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ +422 │ │ │ │ │ +423 auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120); │ │ │ │ │ +424 auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16; │ │ │ │ │ +425 auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4; │ │ │ │ │ +426 auto dxtmp9 = 2; │ │ │ │ │ +427 auto dxtmp10 = 12*x - 6; │ │ │ │ │ +428 auto dxtmp11 = x*(60*x - 60) + 12; │ │ │ │ │ +429 auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18); │ │ │ │ │ +430 auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2; │ │ │ │ │ +431 auto dxtmp15 = x*(6*x - 6) + 1; │ │ │ │ │ +432 auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +433 │ │ │ │ │ +434 out[0][0]=sign0*dxtmp1; │ │ │ │ │ +435 out[0][1]=0; │ │ │ │ │ +436 out[1][0]=(-3.0*dxtmp2*tmp3); │ │ │ │ │ +437 out[1][1]=0; │ │ │ │ │ +438 out[2][0]=sign0*(-5.0*dxtmp2*tmp4); │ │ │ │ │ +439 out[2][1]=0; │ │ │ │ │ +440 out[3][0]=(-7.0*dxtmp2*tmp5); │ │ │ │ │ +441 out[3][1]=0; │ │ │ │ │ +442 │ │ │ │ │ +443 out[4][0]=sign1*dxtmp6; │ │ │ │ │ +444 out[4][1]=0; │ │ │ │ │ +445 out[5][0]=(-3.0*dxtmp6*tmp3); │ │ │ │ │ +446 out[5][1]=0; │ │ │ │ │ +447 out[6][0]=sign1*(5.0*dxtmp6*tmp4); │ │ │ │ │ +448 out[6][1]=0; │ │ │ │ │ +449 out[7][0]=(-7.0*dxtmp6*tmp5); │ │ │ │ │ +450 out[7][1]=0; │ │ │ │ │ +451 │ │ │ │ │ +452 out[8][0]=0; │ │ │ │ │ +453 out[8][1]=0; │ │ │ │ │ +454 out[9][0]=0; │ │ │ │ │ +455 out[9][1]=3.0*dxtmp9*tmp8; │ │ │ │ │ +456 out[10][0]=0; │ │ │ │ │ +457 out[10][1]=sign2*(-5.0*dxtmp10*tmp8); │ │ │ │ │ +458 out[11][0]=0; │ │ │ │ │ +459 out[11][1]=7.0*dxtmp11*tmp8; │ │ │ │ │ +460 │ │ │ │ │ +461 out[12][0]=0; │ │ │ │ │ +462 out[12][1]=0; │ │ │ │ │ +463 out[13][0]=0; │ │ │ │ │ +464 out[13][1]=3.0*dxtmp9*tmp12; │ │ │ │ │ +465 out[14][0]=0; │ │ │ │ │ +466 out[14][1]=sign3*5.0*dxtmp10*tmp12; │ │ │ │ │ +467 out[15][0]=0; │ │ │ │ │ +468 out[15][1]=7.0*dxtmp11*tmp12; │ │ │ │ │ +469 │ │ │ │ │ +470 out[16][0]=10.0*dxtmp13; │ │ │ │ │ +471 out[16][1]=0; │ │ │ │ │ +472 out[17][0]=-30.0*dxtmp14*tmp3; │ │ │ │ │ +473 out[17][1]=0; │ │ │ │ │ +474 out[18][0]=-50.0*dxtmp14*tmp4; │ │ │ │ │ +475 out[18][1]=0; │ │ │ │ │ +476 out[19][0]=-70.0*dxtmp14*tmp5; │ │ │ │ │ +477 out[19][1]=0; │ │ │ │ │ +478 out[20][0]=-30.0*dxtmp15; │ │ │ │ │ +479 out[20][1]=0; │ │ │ │ │ +480 out[21][0]=-90.0*dxtmp15*tmp3; │ │ │ │ │ +481 out[21][1]=0; │ │ │ │ │ +482 out[22][0]=-150.0*dxtmp15*tmp4; │ │ │ │ │ +483 out[22][1]=0; │ │ │ │ │ +484 out[23][0]=-210.0*dxtmp15*tmp5; │ │ │ │ │ +485 out[23][1]=0; │ │ │ │ │ +486 out[24][0]=-70.0*dxtmp16; │ │ │ │ │ +487 out[24][1]=0; │ │ │ │ │ +488 out[25][0]=-210.0*dxtmp16*tmp3; │ │ │ │ │ +489 out[25][1]=0; │ │ │ │ │ +490 out[26][0]=-350.0*dxtmp16*tmp4; │ │ │ │ │ +491 out[26][1]=0; │ │ │ │ │ +492 out[27][0]=-490.0*dxtmp16*tmp5; │ │ │ │ │ +493 out[27][1]=0; │ │ │ │ │ +494 out[28][0]=0; │ │ │ │ │ +495 out[28][1]=0; │ │ │ │ │ +496 out[29][0]=0; │ │ │ │ │ +497 out[29][1]=0; │ │ │ │ │ +498 out[30][0]=0; │ │ │ │ │ +499 out[30][1]=0; │ │ │ │ │ +500 out[31][0]=0; │ │ │ │ │ +501 out[31][1]=-30.0*dxtmp9*tmp20; │ │ │ │ │ +502 out[32][0]=0; │ │ │ │ │ +503 out[32][1]=-90.0*dxtmp9*tmp18; │ │ │ │ │ +504 out[33][0]=0; │ │ │ │ │ +505 out[33][1]=-210.0*dxtmp9*tmp19; │ │ │ │ │ +506 out[34][0]=0; │ │ │ │ │ +507 out[34][1]=-50.0*dxtmp10*tmp20; │ │ │ │ │ +508 out[35][0]=0; │ │ │ │ │ +509 out[35][1]=-150.0*dxtmp10*tmp18; │ │ │ │ │ +510 out[36][0]=0; │ │ │ │ │ +511 out[36][1]=-350.0*dxtmp10*tmp19; │ │ │ │ │ +512 out[37][0]=0; │ │ │ │ │ +513 out[37][1]=-70.0*dxtmp11*tmp20; │ │ │ │ │ +514 out[38][0]=0; │ │ │ │ │ +515 out[38][1]=-210.0*dxtmp11*tmp18; │ │ │ │ │ +516 out[39][0]=0; │ │ │ │ │ +517 out[39][1]=-490.0*dxtmp11*tmp19; │ │ │ │ │ +518 } else if (direction == 1) { │ │ │ │ │ +519 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ +520 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ +521 const auto tmp9 = 2*x - 1; │ │ │ │ │ +522 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ +523 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ +524 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ +525 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ +526 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ +527 │ │ │ │ │ +528 const auto dytmp3 = 2; │ │ │ │ │ +529 const auto dytmp4 = 12*y - 6; │ │ │ │ │ +530 const auto dytmp5 = y*(60*y - 60) + 12; │ │ │ │ │ +531 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120); │ │ │ │ │ +532 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16; │ │ │ │ │ +533 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4; │ │ │ │ │ +534 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18); │ │ │ │ │ +535 const auto dytmp18 = y*(6*y - 6) + 1; │ │ │ │ │ +536 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ +537 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2; │ │ │ │ │ +538 │ │ │ │ │ +539 out[0][0]=0; │ │ │ │ │ +540 out[0][1]=0; │ │ │ │ │ +541 out[1][0]=(-3.0*tmp2*dytmp3); │ │ │ │ │ +542 out[1][1]=0; │ │ │ │ │ +543 out[2][0]=sign0*(-5.0*tmp2*dytmp4); │ │ │ │ │ +544 out[2][1]=0; │ │ │ │ │ +545 out[3][0]=(-7.0*tmp2*dytmp5); │ │ │ │ │ +546 out[3][1]=0; │ │ │ │ │ +547 │ │ │ │ │ +548 out[4][0]=0; │ │ │ │ │ +549 out[4][1]=0; │ │ │ │ │ +550 out[5][0]=(-3.0*tmp6*dytmp3); │ │ │ │ │ +551 out[5][1]=0; │ │ │ │ │ +552 out[6][0]=sign1*(5.0*tmp6*dytmp4); │ │ │ │ │ +553 out[6][1]=0; │ │ │ │ │ +554 out[7][0]=(-7.0*tmp6*dytmp5); │ │ │ │ │ +555 out[7][1]=0; │ │ │ │ │ +556 │ │ │ │ │ +557 out[8][0]=0; │ │ │ │ │ +558 out[8][1]=sign2*dytmp7; │ │ │ │ │ +559 out[9][0]=0; │ │ │ │ │ +560 out[9][1]=3.0*tmp9*dytmp8; │ │ │ │ │ +561 out[10][0]=0; │ │ │ │ │ +562 out[10][1]=sign2*(-5.0*tmp10*dytmp8); │ │ │ │ │ +563 out[11][0]=0; │ │ │ │ │ +564 out[11][1]=7.0*tmp11*dytmp8; │ │ │ │ │ +565 │ │ │ │ │ +566 out[12][0]=0; │ │ │ │ │ +567 out[12][1]=sign3*dytmp12; │ │ │ │ │ +568 out[13][0]=0; │ │ │ │ │ +569 out[13][1]=3.0*tmp9*dytmp12; │ │ │ │ │ +570 out[14][0]=0; │ │ │ │ │ +571 out[14][1]=sign3*5.0*tmp10*dytmp12; │ │ │ │ │ +572 out[15][0]=0; │ │ │ │ │ +573 out[15][1]=7.0*tmp11*dytmp12; │ │ │ │ │ +574 │ │ │ │ │ +575 out[16][0]=0; │ │ │ │ │ +576 out[16][1]=0; │ │ │ │ │ +577 out[17][0]=-30.0*tmp14*dytmp3; │ │ │ │ │ +578 out[17][1]=0; │ │ │ │ │ +579 out[18][0]=-50.0*tmp14*dytmp4; │ │ │ │ │ +580 out[18][1]=0; │ │ │ │ │ +581 out[19][0]=-70.0*tmp14*dytmp5; │ │ │ │ │ +582 out[19][1]=0; │ │ │ │ │ +583 out[20][0]=0; │ │ │ │ │ +584 out[20][1]=0; │ │ │ │ │ +585 out[21][0]=-90.0*tmp15*dytmp3; │ │ │ │ │ +586 out[21][1]=0; │ │ │ │ │ +587 out[22][0]=-150.0*tmp15*dytmp4; │ │ │ │ │ +588 out[22][1]=0; │ │ │ │ │ +589 out[23][0]=-210.0*tmp15*dytmp5; │ │ │ │ │ +590 out[23][1]=0; │ │ │ │ │ +591 out[24][0]=0; │ │ │ │ │ +592 out[24][1]=0; │ │ │ │ │ +593 out[25][0]=-210.0*tmp16*dytmp3; │ │ │ │ │ +594 out[25][1]=0; │ │ │ │ │ +595 out[26][0]=-350.0*tmp16*dytmp4; │ │ │ │ │ +596 out[26][1]=0; │ │ │ │ │ +597 out[27][0]=-490.0*tmp16*dytmp5; │ │ │ │ │ +598 out[27][1]=0; │ │ │ │ │ +599 out[28][0]=0; │ │ │ │ │ +600 out[28][1]=10.0*dytmp17; │ │ │ │ │ +601 out[29][0]=0; │ │ │ │ │ +602 out[29][1]=-30.0*dytmp18; │ │ │ │ │ +603 out[30][0]=0; │ │ │ │ │ +604 out[30][1]=-70.0*dytmp19; │ │ │ │ │ +605 out[31][0]=0; │ │ │ │ │ +606 out[31][1]=-30.0*tmp9*dytmp20; │ │ │ │ │ +607 out[32][0]=0; │ │ │ │ │ +608 out[32][1]=-90.0*tmp9*dytmp18; │ │ │ │ │ +609 out[33][0]=0; │ │ │ │ │ +610 out[33][1]=-210.0*tmp9*dytmp19; │ │ │ │ │ +611 out[34][0]=0; │ │ │ │ │ +612 out[34][1]=-50.0*tmp10*dytmp20; │ │ │ │ │ +613 out[35][0]=0; │ │ │ │ │ +614 out[35][1]=-150.0*tmp10*dytmp18; │ │ │ │ │ +615 out[36][0]=0; │ │ │ │ │ +616 out[36][1]=-350.0*tmp10*dytmp19; │ │ │ │ │ +617 out[37][0]=0; │ │ │ │ │ +618 out[37][1]=-70.0*tmp11*dytmp20; │ │ │ │ │ +619 out[38][0]=0; │ │ │ │ │ +620 out[38][1]=-210.0*tmp11*dytmp18; │ │ │ │ │ +621 out[39][0]=0; │ │ │ │ │ +622 out[39][1]=-490.0*tmp11*dytmp19; │ │ │ │ │ +623 } else { │ │ │ │ │ +624 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +625 } │ │ │ │ │ +626 } else { │ │ │ │ │ +627 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +628 } │ │ │ │ │ +629 } │ │ │ │ │ +630 │ │ │ │ │ +_6_3_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ +633 { │ │ │ │ │ +634 return 7; │ │ │ │ │ +635 } │ │ │ │ │ +636 │ │ │ │ │ +637 private: │ │ │ │ │ +638 R sign0, sign1, sign2, sign3; │ │ │ │ │ +639 }; │ │ │ │ │ +640} │ │ │ │ │ +641 │ │ │ │ │ +642#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT0PrismLocalInterpolation(std::bitset< 5 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:179 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT3Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:632 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:401 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prismlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas3cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PrismLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on prisms. More...
class  Dune::RT3Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-3 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0prismlocalcoefficients.hh File Reference │ │ │ │ │ +raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-1 elements on prisms. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-3 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00194_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prismlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,85 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prismlocalcoefficients.hh
│ │ │ │ +
raviartthomas3cube2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │
13namespace Dune
│ │ │ │
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for(std::size_t i=0; i< size(); i++)
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
35 std::size_t size () const
│ │ │ │ -
36 {
│ │ │ │ -
37 return 5;
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
42 {
│ │ │ │ -
43 return li[i];
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector<LocalKey> li;
│ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49}
│ │ │ │ -
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24
│ │ │ │ +
25 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ +
30 {
│ │ │ │ +
31 li[4*i] = LocalKey(i,1,0);
│ │ │ │ +
32 li[4*i + 1] = LocalKey(i,1,1);
│ │ │ │ +
33 li[4*i + 2] = LocalKey(i,1,2);
│ │ │ │ +
34 li[4*i + 3] = LocalKey(i,1,3);
│ │ │ │ +
35 }
│ │ │ │ +
36
│ │ │ │ +
37 for (std::size_t i=0; i<24; i++)
│ │ │ │ +
38 {
│ │ │ │ +
39 li[16 + i] = LocalKey(0,0,i);
│ │ │ │ +
40 }
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
│ │ │ │ +
44 std::size_t size () const
│ │ │ │ +
45 {
│ │ │ │ +
46 return 40;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
50 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
51 {
│ │ │ │ +
52 return li[i];
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 private:
│ │ │ │ +
56 std::vector<LocalKey> li;
│ │ │ │ +
57 };
│ │ │ │ +
│ │ │ │ +
58}
│ │ │ │ +
59
│ │ │ │ +
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on prisms.
Definition raviartthomas0prismlocalcoefficients.hh:24
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0prismlocalcoefficients.hh:41
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas0prismlocalcoefficients.hh:35
│ │ │ │ -
RT0PrismLocalCoefficients()
Standard constructor.
Definition raviartthomas0prismlocalcoefficients.hh:28
│ │ │ │ +
Layout map for Raviart-Thomas-3 elements on quadrilaterals.
Definition raviartthomas3cube2dlocalcoefficients.hh:23
│ │ │ │ +
RT3Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas3cube2dlocalcoefficients.hh:27
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas3cube2dlocalcoefficients.hh:44
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas3cube2dlocalcoefficients.hh:50
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,73 +1,83 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m │ │ │ │ │ -raviartthomas0prismlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ +raviartthomas3cube2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ 11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ 13namespace _D_u_n_e │ │ │ │ │ 14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_3 class _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ -29 { │ │ │ │ │ -30 for(std::size_t i=0; i< _s_i_z_e(); i++) │ │ │ │ │ -31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ -36 { │ │ │ │ │ -37 return 5; │ │ │ │ │ -38 } │ │ │ │ │ -39 │ │ │ │ │ -_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -42 { │ │ │ │ │ -43 return li[i]; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -46 private: │ │ │ │ │ -47 std::vector li; │ │ │ │ │ -48 }; │ │ │ │ │ -49} │ │ │ │ │ -50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_LOCALCOEFFICIENTS_HH │ │ │ │ │ +_2_2 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +23 { │ │ │ │ │ +24 │ │ │ │ │ +25 public: │ │ │ │ │ +_2_7 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(40) │ │ │ │ │ +28 { │ │ │ │ │ +29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ +30 { │ │ │ │ │ +31 li[4*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 li[4*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +33 li[4*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +34 li[4*i + 3] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ +35 } │ │ │ │ │ +36 │ │ │ │ │ +37 for (std::size_t i=0; i<24; i++) │ │ │ │ │ +38 { │ │ │ │ │ +39 li[16 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +40 } │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ +_4_4 std::size_t _s_i_z_e () const │ │ │ │ │ +45 { │ │ │ │ │ +46 return 40; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +_5_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +51 { │ │ │ │ │ +52 return li[i]; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 private: │ │ │ │ │ +56 std::vector li; │ │ │ │ │ +57 }; │ │ │ │ │ +58} │ │ │ │ │ +59 │ │ │ │ │ +60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on prisms. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-3 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT3Cube2DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ std::size_t size() const │ │ │ │ │ number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT0PrismLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:28 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:50 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,29 +72,27 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2d.hh File Reference
│ │ │ │ +
raviartthomas0cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas4cube2d/raviartthomas4cube2dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas4cube2d/raviartthomas4cube2dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas4cube2d/raviartthomas4cube2dlocalinterpolation.hh"
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "raviartthomas0cube2d/raviartthomas0cube2dall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT4Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
class  Dune::RT0Cube2DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on rectangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,23 +2,21 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas4cube2d.hh File Reference │ │ │ │ │ +raviartthomas0cube2d.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  _Z_e_r_o order Raviart-Thomas shape functions on rectangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00197_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,119 +74,115 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas4cube2d.hh
│ │ │ │ +
raviartthomas0cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {}
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
47 basis(s),
│ │ │ │ -
48 interpolation(s)
│ │ │ │ -
49 {}
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
51 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
52 {
│ │ │ │ -
53 return basis;
│ │ │ │ -
54 }
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
23 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
31
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {}
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 basis(s),
│ │ │ │ +
37 interpolation(s)
│ │ │ │ +
38 {}
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return basis;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 {
│ │ │ │ +
47 return coefficients;
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
51 {
│ │ │ │ +
52 return interpolation;
│ │ │ │ +
53 }
│ │ │ │
│ │ │ │ -
55
│ │ │ │ +
54
│ │ │ │
│ │ │ │ - │ │ │ │ +
56 unsigned int size () const
│ │ │ │
57 {
│ │ │ │ -
58 return coefficients;
│ │ │ │ +
58 return basis.size();
│ │ │ │
59 }
│ │ │ │
│ │ │ │
60
│ │ │ │
│ │ │ │ - │ │ │ │ -
62 {
│ │ │ │ -
63 return interpolation;
│ │ │ │ +
61 static constexpr GeometryType type ()
│ │ │ │ +
62 {
│ │ │ │ +
63 return GeometryTypes::quadrilateral;
│ │ │ │
64 }
│ │ │ │
│ │ │ │
65
│ │ │ │ -
│ │ │ │ -
67 unsigned int size () const
│ │ │ │ -
68 {
│ │ │ │ -
69 return basis.size();
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
│ │ │ │ -
72 static constexpr GeometryType type ()
│ │ │ │ -
73 {
│ │ │ │ -
74 return GeometryTypes::quadrilateral;
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
77 private:
│ │ │ │ - │ │ │ │ -
79 RT4Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82}
│ │ │ │ -
83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
66 private:
│ │ │ │ + │ │ │ │ +
68 RT0Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71}
│ │ │ │ +
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas4cube2d.hh:29
│ │ │ │ -
LocalFiniteElementTraits< RT4Cube2DLocalBasis< D, R >, RT4Cube2DLocalCoefficients, RT4Cube2DLocalInterpolation< RT4Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas4cube2d.hh:35
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas4cube2d.hh:67
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas4cube2d.hh:56
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas4cube2d.hh:61
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas4cube2d.hh:51
│ │ │ │ -
RT4Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2d.hh:46
│ │ │ │ -
RT4Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas4cube2d.hh:38
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas4cube2d.hh:72
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas4cube2dlocalbasis.hh:29
│ │ │ │ -
Layout map for Raviart-Thomas-4 elements on quadrilaterals.
Definition raviartthomas4cube2dlocalcoefficients.hh:23
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas4cube2dlocalinterpolation.hh:25
│ │ │ │ +
Zero order Raviart-Thomas shape functions on rectangles.
Definition raviartthomas0cube2d.hh:25
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0cube2d.hh:45
│ │ │ │ +
RT0Cube2DLocalFiniteElement()
Definition raviartthomas0cube2d.hh:32
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0cube2d.hh:50
│ │ │ │ +
LocalFiniteElementTraits< RT0Cube2DLocalBasis< D, R >, RT0Cube2DLocalCoefficients, RT0Cube2DLocalInterpolation< RT0Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas0cube2d.hh:30
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0cube2d.hh:56
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0cube2d.hh:40
│ │ │ │ +
RT0Cube2DLocalFiniteElement(int s)
Definition raviartthomas0cube2d.hh:35
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas0cube2d.hh:61
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:30
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:135
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:187
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +1,127 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas4cube2d.hh │ │ │ │ │ +raviartthomas0cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -33 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -34 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_5 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -39 {} │ │ │ │ │ -40 │ │ │ │ │ -_4_6 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -47 basis(s), │ │ │ │ │ -48 interpolation(s) │ │ │ │ │ -49 {} │ │ │ │ │ -50 │ │ │ │ │ -_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -52 { │ │ │ │ │ -53 return basis; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +27 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +28 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +29 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_0 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_2 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +33 {} │ │ │ │ │ +34 │ │ │ │ │ +_3_5 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +36 basis(s), │ │ │ │ │ +37 interpolation(s) │ │ │ │ │ +38 {} │ │ │ │ │ +39 │ │ │ │ │ +_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +41 { │ │ │ │ │ +42 return basis; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +46 { │ │ │ │ │ +47 return coefficients; │ │ │ │ │ +48 } │ │ │ │ │ +49 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return interpolation; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ 57 { │ │ │ │ │ -58 return coefficients; │ │ │ │ │ +58 return basis.size(); │ │ │ │ │ 59 } │ │ │ │ │ 60 │ │ │ │ │ -_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +_6_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ 62 { │ │ │ │ │ -63 return interpolation; │ │ │ │ │ +63 return GeometryTypes::quadrilateral; │ │ │ │ │ 64 } │ │ │ │ │ 65 │ │ │ │ │ -_6_7 unsigned int _s_i_z_e () const │ │ │ │ │ -68 { │ │ │ │ │ -69 return basis.size(); │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -_7_2 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -73 { │ │ │ │ │ -74 return GeometryTypes::quadrilateral; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -77 private: │ │ │ │ │ -78 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -79 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -80 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -81 }; │ │ │ │ │ -82} │ │ │ │ │ -83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +66 private: │ │ │ │ │ +67 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +68 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +69 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +70 }; │ │ │ │ │ +71} │ │ │ │ │ +72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_a_l_l_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ LB LocalBasisType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ LC LocalCoefficientsType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ LI LocalInterpolationType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT4Cube2DLocalBasis< D, R >, │ │ │ │ │ -RT4Cube2DLocalCoefficients, RT4Cube2DLocalInterpolation< RT4Cube2DLocalBasis< │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Zero order Raviart-Thomas shape functions on rectangles. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0Cube2DLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT0Cube2DLocalBasis< D, R >, │ │ │ │ │ +RT0Cube2DLocalCoefficients, RT0Cube2DLocalInterpolation< RT0Cube2DLocalBasis< │ │ │ │ │ D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT4Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT4Cube2DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT0Cube2DLocalFiniteElement(int s) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-4 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:25 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2d.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:187 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas03dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT3Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-3 elements on quadrilaterals. More...
class  Dune::RT03DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas3cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +raviartthomas03dlocalcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-3 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00200_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,78 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalcoefficients.hh
│ │ │ │ +
raviartthomas03dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24
│ │ │ │ -
25 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ -
30 {
│ │ │ │ -
31 li[4*i] = LocalKey(i,1,0);
│ │ │ │ -
32 li[4*i + 1] = LocalKey(i,1,1);
│ │ │ │ -
33 li[4*i + 2] = LocalKey(i,1,2);
│ │ │ │ -
34 li[4*i + 3] = LocalKey(i,1,3);
│ │ │ │ -
35 }
│ │ │ │ -
36
│ │ │ │ -
37 for (std::size_t i=0; i<24; i++)
│ │ │ │ -
38 {
│ │ │ │ -
39 li[16 + i] = LocalKey(0,0,i);
│ │ │ │ -
40 }
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 std::size_t size () const
│ │ │ │ -
45 {
│ │ │ │ -
46 return 40;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
50 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
51 {
│ │ │ │ -
52 return li[i];
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 private:
│ │ │ │ -
56 std::vector<LocalKey> li;
│ │ │ │ -
57 };
│ │ │ │ -
│ │ │ │ -
58}
│ │ │ │ -
59
│ │ │ │ -
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i=0; i<4; i++)
│ │ │ │ +
31 li[i] = LocalKey(i,1,0);
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
35 std::size_t size () const
│ │ │ │ +
36 {
│ │ │ │ +
37 return 4;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
42 {
│ │ │ │ +
43 return li[i];
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector<LocalKey> li;
│ │ │ │ +
48 };
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
50}
│ │ │ │ +
51
│ │ │ │ +
52#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-3 elements on quadrilaterals.
Definition raviartthomas3cube2dlocalcoefficients.hh:23
│ │ │ │ -
RT3Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas3cube2dlocalcoefficients.hh:27
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas3cube2dlocalcoefficients.hh:44
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas3cube2dlocalcoefficients.hh:50
│ │ │ │ +
Definition raviartthomas03dlocalcoefficients.hh:25
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas03dlocalcoefficients.hh:41
│ │ │ │ +
RT03DLocalCoefficients()
Standard constructor.
Definition raviartthomas03dlocalcoefficients.hh:28
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas03dlocalcoefficients.hh:35
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,83 +1,77 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ -raviartthomas3cube2dlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ +raviartthomas03dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -_2_2 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -23 { │ │ │ │ │ -24 │ │ │ │ │ -25 public: │ │ │ │ │ -_2_7 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(40) │ │ │ │ │ -28 { │ │ │ │ │ -29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ -30 { │ │ │ │ │ -31 li[4*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 li[4*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -33 li[4*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -34 li[4*i + 3] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ -35 } │ │ │ │ │ -36 │ │ │ │ │ -37 for (std::size_t i=0; i<24; i++) │ │ │ │ │ -38 { │ │ │ │ │ -39 li[16 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -40 } │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 std::size_t _s_i_z_e () const │ │ │ │ │ -45 { │ │ │ │ │ -46 return 40; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -51 { │ │ │ │ │ -52 return li[i]; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -55 private: │ │ │ │ │ -56 std::vector li; │ │ │ │ │ -57 }; │ │ │ │ │ -58} │ │ │ │ │ -59 │ │ │ │ │ -60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 │ │ │ │ │ +_2_4 class _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(4) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i=0; i<4; i++) │ │ │ │ │ +31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ +36 { │ │ │ │ │ +37 return 4; │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +42 { │ │ │ │ │ +43 return li[i]; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector li; │ │ │ │ │ +48 }; │ │ │ │ │ +49 │ │ │ │ │ +50} │ │ │ │ │ +51 │ │ │ │ │ +52#endif │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-3 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT3Cube2DLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT03DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ std::size_t size() const │ │ │ │ │ number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:50 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:35 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas03dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT3Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT03DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas3cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas03dlocalbasis.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00203_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,659 +70,143 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalbasis.hh
│ │ │ │ +
raviartthomas03dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <bitset>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ + │ │ │ │
13
│ │ │ │ -
14#include "../../common/localbasis.hh"
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
34
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28 public:
│ │ │ │ +
29 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
30 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
33 RT03DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
34 {
│ │ │ │ +
35 for (int i=0; i<4; i++)
│ │ │ │ +
36 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │
│ │ │ │ -
40 RT3Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ -
41 {
│ │ │ │ -
42 sign0 = (s[0]) ? -1.0 : 1.0;
│ │ │ │ -
43 sign1 = (s[1]) ? -1.0 : 1.0;
│ │ │ │ -
44 sign2 = (s[2]) ? -1.0 : 1.0;
│ │ │ │ -
45 sign3 = (s[3]) ? -1.0 : 1.0;
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 unsigned int size () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return 40;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
60 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
61 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
62 {
│ │ │ │ -
63 out.resize(40);
│ │ │ │ -
64 auto const& x = in[0], y = in[1];
│ │ │ │ -
65
│ │ │ │ -
66 const auto tmp1 = - x*(x*(x*(35*x - 80) + 60) - 16) - 1;
│ │ │ │ -
67 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ -
68 const auto tmp3 = 2*y - 1;
│ │ │ │ -
69 const auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ -
70 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
71 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ -
72 const auto tmp7 = - y*(y*(y*(35*y - 80) + 60) - 16) - 1;
│ │ │ │ -
73 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ -
74 const auto tmp9 = 2*x - 1;
│ │ │ │ -
75 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ -
76 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
77 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ -
78 const auto tmp13 = -x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ -
79 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ -
80 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ -
81 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ -
82 const auto tmp17 = -y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ -
83 const auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ -
84 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ -
85 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ -
86
│ │ │ │ -
87 out[0][0]=sign0*tmp1;
│ │ │ │ -
88 out[0][1]=0;
│ │ │ │ -
89 out[1][0]=(-3.0*tmp2*tmp3);
│ │ │ │ -
90 out[1][1]=0;
│ │ │ │ -
91 out[2][0]=sign0*(-5.0*tmp2*tmp4);
│ │ │ │ -
92 out[2][1]=0;
│ │ │ │ -
93 out[3][0]=(-7.0*tmp2*tmp5);
│ │ │ │ -
94 out[3][1]=0;
│ │ │ │ -
95
│ │ │ │ -
96 out[4][0]=sign1*tmp6;
│ │ │ │ -
97 out[4][1]=0;
│ │ │ │ -
98 out[5][0]=(-3.0*tmp6*tmp3);
│ │ │ │ -
99 out[5][1]=0;
│ │ │ │ -
100 out[6][0]=sign1*(5.0*tmp6*tmp4);
│ │ │ │ -
101 out[6][1]=0;
│ │ │ │ -
102 out[7][0]=(-7.0*tmp6*tmp5);
│ │ │ │ -
103 out[7][1]=0;
│ │ │ │ +
40 unsigned int size () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return 4;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
47 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
48 {
│ │ │ │ +
49 out.resize(4);
│ │ │ │ +
50 auto c = std::sqrt(2.0);
│ │ │ │ +
51 out[0] = {sign_[0]*c* in[0], sign_[0]*c* in[1], sign_[0]*c*(in[2]-D(1))};
│ │ │ │ +
52 out[1] = {sign_[1]*c* in[0], sign_[1]*c*(in[1]-D(1)), sign_[1]*c* in[2] };
│ │ │ │ +
53 out[2] = {sign_[2]*c*(in[0]-D(1)), sign_[2]*c* in[1], sign_[2]*c* in[2] };
│ │ │ │ +
54 out[3] = {sign_[3]*c* in[0], sign_[3]*c* in[1], sign_[3]*c* in[2] };
│ │ │ │ +
55 }
│ │ │ │ +
│ │ │ │ +
56
│ │ │ │ +
58 inline void
│ │ │ │ +
│ │ │ │ +
59 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
60 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
61 {
│ │ │ │ +
62 out.resize(4);
│ │ │ │ +
63 for (int i=0; i<4; i++)
│ │ │ │ +
64 {
│ │ │ │ +
65 auto c = std::sqrt(2.0);
│ │ │ │ +
66 out[i][0] = {c*sign_[i], 0, 0};
│ │ │ │ +
67 out[i][1] = { 0,c*sign_[i], 0};
│ │ │ │ +
68 out[i][2] = { 0, 0,c*sign_[i]};
│ │ │ │ +
69 }
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ +
73 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
74 const typename Traits::DomainType& in, // position
│ │ │ │ +
75 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
76 {
│ │ │ │ +
77 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
78 if (totalOrder == 0) {
│ │ │ │ +
79 evaluateFunction(in, out);
│ │ │ │ +
80 } else if (totalOrder == 1) {
│ │ │ │ +
81 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
82 out.resize(size());
│ │ │ │ +
83
│ │ │ │ +
84 for (int i=0; i<size(); i++)
│ │ │ │ +
85 {
│ │ │ │ +
86 out[i][direction] = sign_[i]* std::sqrt(2.0) ;
│ │ │ │ +
87 out[i][(direction+1)%3] = 0;
│ │ │ │ +
88 out[i][(direction+2)%3] = 0;
│ │ │ │ +
89 }
│ │ │ │ +
90 } else {
│ │ │ │ +
91 out.resize(size());
│ │ │ │ +
92 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
93 for (std::size_t j = 0; j < 3; ++j)
│ │ │ │ +
94 out[i][j] = 0;
│ │ │ │ +
95 }
│ │ │ │ +
96
│ │ │ │ +
97 }
│ │ │ │ +
│ │ │ │ +
98
│ │ │ │ +
│ │ │ │ +
100 unsigned int order () const
│ │ │ │ +
101 {
│ │ │ │ +
102 return 1;
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │
104
│ │ │ │ -
105 out[8][0]=0;
│ │ │ │ -
106 out[8][1]=sign2*tmp7;
│ │ │ │ -
107 out[9][0]=0;
│ │ │ │ -
108 out[9][1]=3.0*tmp9*tmp8;
│ │ │ │ -
109 out[10][0]=0;
│ │ │ │ -
110 out[10][1]=sign2*(-5.0*tmp10*tmp8);
│ │ │ │ -
111 out[11][0]=0;
│ │ │ │ -
112 out[11][1]=7.0*tmp11*tmp8;
│ │ │ │ -
113
│ │ │ │ -
114 out[12][0]=0;
│ │ │ │ -
115 out[12][1]=sign3*tmp12;
│ │ │ │ -
116 out[13][0]=0;
│ │ │ │ -
117 out[13][1]=3.0*tmp9*tmp12;
│ │ │ │ -
118 out[14][0]=0;
│ │ │ │ -
119 out[14][1]=sign3*5.0*tmp10*tmp12;
│ │ │ │ -
120 out[15][0]=0;
│ │ │ │ -
121 out[15][1]=7.0*tmp11*tmp12;
│ │ │ │ -
122
│ │ │ │ -
123 out[16][0]=10.0*tmp13;
│ │ │ │ -
124 out[16][1]=0;
│ │ │ │ -
125 out[17][0]=-30.0*tmp14*tmp3;
│ │ │ │ -
126 out[17][1]=0;
│ │ │ │ -
127 out[18][0]=-50.0*tmp14*tmp4;
│ │ │ │ -
128 out[18][1]=0;
│ │ │ │ -
129 out[19][0]=-70.0*tmp14*tmp5;
│ │ │ │ -
130 out[19][1]=0;
│ │ │ │ -
131 out[20][0]=-30.0*tmp15;
│ │ │ │ -
132 out[20][1]=0;
│ │ │ │ -
133 out[21][0]=-90.0*tmp15*tmp3;
│ │ │ │ -
134 out[21][1]=0;
│ │ │ │ -
135 out[22][0]=-150.0*tmp15*tmp4;
│ │ │ │ -
136 out[22][1]=0;
│ │ │ │ -
137 out[23][0]=-210.0*tmp15*tmp5;
│ │ │ │ -
138 out[23][1]=0;
│ │ │ │ -
139 out[24][0]=-70.0*tmp16;
│ │ │ │ -
140 out[24][1]=0;
│ │ │ │ -
141 out[25][0]=-210.0*tmp16*tmp3;
│ │ │ │ -
142 out[25][1]=0;
│ │ │ │ -
143 out[26][0]=-350.0*tmp16*tmp4;
│ │ │ │ -
144 out[26][1]=0;
│ │ │ │ -
145 out[27][0]=-490.0*tmp16*tmp5;
│ │ │ │ -
146 out[27][1]=0;
│ │ │ │ -
147 out[28][0]=0;
│ │ │ │ -
148 out[28][1]=10.0*tmp17;
│ │ │ │ -
149 out[29][0]=0;
│ │ │ │ -
150 out[29][1]=-30.0*tmp18;
│ │ │ │ -
151 out[30][0]=0;
│ │ │ │ -
152 out[30][1]=-70.0*tmp19;
│ │ │ │ -
153 out[31][0]=0;
│ │ │ │ -
154 out[31][1]=-30.0*tmp9*tmp20;
│ │ │ │ -
155 out[32][0]=0;
│ │ │ │ -
156 out[32][1]=-90.0*tmp9*tmp18;
│ │ │ │ -
157 out[33][0]=0;
│ │ │ │ -
158 out[33][1]=-210.0*tmp9*tmp19;
│ │ │ │ -
159 out[34][0]=0;
│ │ │ │ -
160 out[34][1]=-50.0*tmp10*tmp20;
│ │ │ │ -
161 out[35][0]=0;
│ │ │ │ -
162 out[35][1]=-150.0*tmp10*tmp18;
│ │ │ │ -
163 out[36][0]=0;
│ │ │ │ -
164 out[36][1]=-350.0*tmp10*tmp19;
│ │ │ │ -
165 out[37][0]=0;
│ │ │ │ -
166 out[37][1]=-70.0*tmp11*tmp20;
│ │ │ │ -
167 out[38][0]=0;
│ │ │ │ -
168 out[38][1]=-210.0*tmp11*tmp18;
│ │ │ │ -
169 out[39][0]=0;
│ │ │ │ -
170 out[39][1]=-490.0*tmp11*tmp19;
│ │ │ │ -
171 }
│ │ │ │ -
│ │ │ │ -
172
│ │ │ │ -
│ │ │ │ -
179 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
180 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
181 {
│ │ │ │ -
182 out.resize(40);
│ │ │ │ -
183 auto const& x = in[0], y = in[1];
│ │ │ │ -
184
│ │ │ │ -
185 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ -
186 const auto tmp3 = 2*y - 1;
│ │ │ │ -
187 const auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ -
188 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
189 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ -
190 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ -
191 const auto tmp9 = 2*x - 1;
│ │ │ │ -
192 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ -
193 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
194 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ -
195 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ -
196 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ -
197 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ -
198 const auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ -
199 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ -
200 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ -
201 // temporaries tmp1, tmp7, tmp13, tmp17 are not used in jacobian
│ │ │ │ -
202
│ │ │ │ -
203 const auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120);
│ │ │ │ -
204 const auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16;
│ │ │ │ -
205 const auto dytmp3 = 2;
│ │ │ │ -
206 const auto dytmp4 = 12*y - 6;
│ │ │ │ -
207 const auto dytmp5 = y*(60*y - 60) + 12;
│ │ │ │ -
208 const auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4;
│ │ │ │ -
209 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120);
│ │ │ │ -
210 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16;
│ │ │ │ -
211 const auto dxtmp9 = 2;
│ │ │ │ -
212 const auto dxtmp10 = 12*x - 6;
│ │ │ │ -
213 const auto dxtmp11 = x*(60*x - 60) + 12;
│ │ │ │ -
214 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4;
│ │ │ │ -
215 const auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18);
│ │ │ │ -
216 const auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2;
│ │ │ │ -
217 const auto dxtmp15 = x*(6*x - 6) + 1;
│ │ │ │ -
218 const auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
219 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18);
│ │ │ │ -
220 const auto dytmp18 = y*(6*y - 6) + 1;
│ │ │ │ -
221 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
222 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2;
│ │ │ │ -
223
│ │ │ │ -
224
│ │ │ │ -
225 // x-component
│ │ │ │ -
226 out[0][0][0]=sign0*dxtmp1;
│ │ │ │ -
227 out[0][1][0]=0;
│ │ │ │ -
228 out[1][0][0]=(-3.0*dxtmp2*tmp3);
│ │ │ │ -
229 out[1][1][0]=0;
│ │ │ │ -
230 out[2][0][0]=sign0*(-5.0*dxtmp2*tmp4);
│ │ │ │ -
231 out[2][1][0]=0;
│ │ │ │ -
232 out[3][0][0]=(-7.0*dxtmp2*tmp5);
│ │ │ │ -
233 out[3][1][0]=0;
│ │ │ │ -
234
│ │ │ │ -
235 out[4][0][0]=sign1*dxtmp6;
│ │ │ │ -
236 out[4][1][0]=0;
│ │ │ │ -
237 out[5][0][0]=(-3.0*dxtmp6*tmp3);
│ │ │ │ -
238 out[5][1][0]=0;
│ │ │ │ -
239 out[6][0][0]=sign1*(5.0*dxtmp6*tmp4);
│ │ │ │ -
240 out[6][1][0]=0;
│ │ │ │ -
241 out[7][0][0]=(-7.0*dxtmp6*tmp5);
│ │ │ │ -
242 out[7][1][0]=0;
│ │ │ │ -
243
│ │ │ │ -
244 out[8][0][0]=0;
│ │ │ │ -
245 out[8][1][0]=0;
│ │ │ │ -
246 out[9][0][0]=0;
│ │ │ │ -
247 out[9][1][0]=3.0*dxtmp9*tmp8;
│ │ │ │ -
248 out[10][0][0]=0;
│ │ │ │ -
249 out[10][1][0]=sign2*(-5.0*dxtmp10*tmp8);
│ │ │ │ -
250 out[11][0][0]=0;
│ │ │ │ -
251 out[11][1][0]=7.0*dxtmp11*tmp8;
│ │ │ │ -
252
│ │ │ │ -
253 out[12][0][0]=0;
│ │ │ │ -
254 out[12][1][0]=0;
│ │ │ │ -
255 out[13][0][0]=0;
│ │ │ │ -
256 out[13][1][0]=3.0*dxtmp9*tmp12;
│ │ │ │ -
257 out[14][0][0]=0;
│ │ │ │ -
258 out[14][1][0]=sign3*5.0*dxtmp10*tmp12;
│ │ │ │ -
259 out[15][0][0]=0;
│ │ │ │ -
260 out[15][1][0]=7.0*dxtmp11*tmp12;
│ │ │ │ -
261
│ │ │ │ -
262 out[16][0][0]=10.0*dxtmp13;
│ │ │ │ -
263 out[16][1][0]=0;
│ │ │ │ -
264 out[17][0][0]=-30.0*dxtmp14*tmp3;
│ │ │ │ -
265 out[17][1][0]=0;
│ │ │ │ -
266 out[18][0][0]=-50.0*dxtmp14*tmp4;
│ │ │ │ -
267 out[18][1][0]=0;
│ │ │ │ -
268 out[19][0][0]=-70.0*dxtmp14*tmp5;
│ │ │ │ -
269 out[19][1][0]=0;
│ │ │ │ -
270 out[20][0][0]=-30.0*dxtmp15;
│ │ │ │ -
271 out[20][1][0]=0;
│ │ │ │ -
272 out[21][0][0]=-90.0*dxtmp15*tmp3;
│ │ │ │ -
273 out[21][1][0]=0;
│ │ │ │ -
274 out[22][0][0]=-150.0*dxtmp15*tmp4;
│ │ │ │ -
275 out[22][1][0]=0;
│ │ │ │ -
276 out[23][0][0]=-210.0*dxtmp15*tmp5;
│ │ │ │ -
277 out[23][1][0]=0;
│ │ │ │ -
278 out[24][0][0]=-70.0*dxtmp16;
│ │ │ │ -
279 out[24][1][0]=0;
│ │ │ │ -
280 out[25][0][0]=-210.0*dxtmp16*tmp3;
│ │ │ │ -
281 out[25][1][0]=0;
│ │ │ │ -
282 out[26][0][0]=-350.0*dxtmp16*tmp4;
│ │ │ │ -
283 out[26][1][0]=0;
│ │ │ │ -
284 out[27][0][0]=-490.0*dxtmp16*tmp5;
│ │ │ │ -
285 out[27][1][0]=0;
│ │ │ │ -
286 out[28][0][0]=0;
│ │ │ │ -
287 out[28][1][0]=0;
│ │ │ │ -
288 out[29][0][0]=0;
│ │ │ │ -
289 out[29][1][0]=0;
│ │ │ │ -
290 out[30][0][0]=0;
│ │ │ │ -
291 out[30][1][0]=0;
│ │ │ │ -
292 out[31][0][0]=0;
│ │ │ │ -
293 out[31][1][0]=-30.0*dxtmp9*tmp20;
│ │ │ │ -
294 out[32][0][0]=0;
│ │ │ │ -
295 out[32][1][0]=-90.0*dxtmp9*tmp18;
│ │ │ │ -
296 out[33][0][0]=0;
│ │ │ │ -
297 out[33][1][0]=-210.0*dxtmp9*tmp19;
│ │ │ │ -
298 out[34][0][0]=0;
│ │ │ │ -
299 out[34][1][0]=-50.0*dxtmp10*tmp20;
│ │ │ │ -
300 out[35][0][0]=0;
│ │ │ │ -
301 out[35][1][0]=-150.0*dxtmp10*tmp18;
│ │ │ │ -
302 out[36][0][0]=0;
│ │ │ │ -
303 out[36][1][0]=-350.0*dxtmp10*tmp19;
│ │ │ │ -
304 out[37][0][0]=0;
│ │ │ │ -
305 out[37][1][0]=-70.0*dxtmp11*tmp20;
│ │ │ │ -
306 out[38][0][0]=0;
│ │ │ │ -
307 out[38][1][0]=-210.0*dxtmp11*tmp18;
│ │ │ │ -
308 out[39][0][0]=0;
│ │ │ │ -
309 out[39][1][0]=-490.0*dxtmp11*tmp19;
│ │ │ │ -
310
│ │ │ │ -
311
│ │ │ │ -
312 // y-component
│ │ │ │ -
313 out[0][0][1]=0;
│ │ │ │ -
314 out[0][1][1]=0;
│ │ │ │ -
315 out[1][0][1]=(-3.0*tmp2*dytmp3);
│ │ │ │ -
316 out[1][1][1]=0;
│ │ │ │ -
317 out[2][0][1]=sign0*(-5.0*tmp2*dytmp4);
│ │ │ │ -
318 out[2][1][1]=0;
│ │ │ │ -
319 out[3][0][1]=(-7.0*tmp2*dytmp5);
│ │ │ │ -
320 out[3][1][1]=0;
│ │ │ │ -
321
│ │ │ │ -
322 out[4][0][1]=0;
│ │ │ │ -
323 out[4][1][1]=0;
│ │ │ │ -
324 out[5][0][1]=(-3.0*tmp6*dytmp3);
│ │ │ │ -
325 out[5][1][1]=0;
│ │ │ │ -
326 out[6][0][1]=sign1*(5.0*tmp6*dytmp4);
│ │ │ │ -
327 out[6][1][1]=0;
│ │ │ │ -
328 out[7][0][1]=(-7.0*tmp6*dytmp5);
│ │ │ │ -
329 out[7][1][1]=0;
│ │ │ │ -
330
│ │ │ │ -
331 out[8][0][1]=0;
│ │ │ │ -
332 out[8][1][1]=sign2*dytmp7;
│ │ │ │ -
333 out[9][0][1]=0;
│ │ │ │ -
334 out[9][1][1]=3.0*tmp9*dytmp8;
│ │ │ │ -
335 out[10][0][1]=0;
│ │ │ │ -
336 out[10][1][1]=sign2*(-5.0*tmp10*dytmp8);
│ │ │ │ -
337 out[11][0][1]=0;
│ │ │ │ -
338 out[11][1][1]=7.0*tmp11*dytmp8;
│ │ │ │ -
339
│ │ │ │ -
340 out[12][0][1]=0;
│ │ │ │ -
341 out[12][1][1]=sign3*dytmp12;
│ │ │ │ -
342 out[13][0][1]=0;
│ │ │ │ -
343 out[13][1][1]=3.0*tmp9*dytmp12;
│ │ │ │ -
344 out[14][0][1]=0;
│ │ │ │ -
345 out[14][1][1]=sign3*5.0*tmp10*dytmp12;
│ │ │ │ -
346 out[15][0][1]=0;
│ │ │ │ -
347 out[15][1][1]=7.0*tmp11*dytmp12;
│ │ │ │ -
348
│ │ │ │ -
349 out[16][0][1]=0;
│ │ │ │ -
350 out[16][1][1]=0;
│ │ │ │ -
351 out[17][0][1]=-30.0*tmp14*dytmp3;
│ │ │ │ -
352 out[17][1][1]=0;
│ │ │ │ -
353 out[18][0][1]=-50.0*tmp14*dytmp4;
│ │ │ │ -
354 out[18][1][1]=0;
│ │ │ │ -
355 out[19][0][1]=-70.0*tmp14*dytmp5;
│ │ │ │ -
356 out[19][1][1]=0;
│ │ │ │ -
357 out[20][0][1]=0;
│ │ │ │ -
358 out[20][1][1]=0;
│ │ │ │ -
359 out[21][0][1]=-90.0*tmp15*dytmp3;
│ │ │ │ -
360 out[21][1][1]=0;
│ │ │ │ -
361 out[22][0][1]=-150.0*tmp15*dytmp4;
│ │ │ │ -
362 out[22][1][1]=0;
│ │ │ │ -
363 out[23][0][1]=-210.0*tmp15*dytmp5;
│ │ │ │ -
364 out[23][1][1]=0;
│ │ │ │ -
365 out[24][0][1]=0;
│ │ │ │ -
366 out[24][1][1]=0;
│ │ │ │ -
367 out[25][0][1]=-210.0*tmp16*dytmp3;
│ │ │ │ -
368 out[25][1][1]=0;
│ │ │ │ -
369 out[26][0][1]=-350.0*tmp16*dytmp4;
│ │ │ │ -
370 out[26][1][1]=0;
│ │ │ │ -
371 out[27][0][1]=-490.0*tmp16*dytmp5;
│ │ │ │ -
372 out[27][1][1]=0;
│ │ │ │ -
373 out[28][0][1]=0;
│ │ │ │ -
374 out[28][1][1]=10.0*dytmp17;
│ │ │ │ -
375 out[29][0][1]=0;
│ │ │ │ -
376 out[29][1][1]=-30.0*dytmp18;
│ │ │ │ -
377 out[30][0][1]=0;
│ │ │ │ -
378 out[30][1][1]=-70.0*dytmp19;
│ │ │ │ -
379 out[31][0][1]=0;
│ │ │ │ -
380 out[31][1][1]=-30.0*tmp9*dytmp20;
│ │ │ │ -
381 out[32][0][1]=0;
│ │ │ │ -
382 out[32][1][1]=-90.0*tmp9*dytmp18;
│ │ │ │ -
383 out[33][0][1]=0;
│ │ │ │ -
384 out[33][1][1]=-210.0*tmp9*dytmp19;
│ │ │ │ -
385 out[34][0][1]=0;
│ │ │ │ -
386 out[34][1][1]=-50.0*tmp10*dytmp20;
│ │ │ │ -
387 out[35][0][1]=0;
│ │ │ │ -
388 out[35][1][1]=-150.0*tmp10*dytmp18;
│ │ │ │ -
389 out[36][0][1]=0;
│ │ │ │ -
390 out[36][1][1]=-350.0*tmp10*dytmp19;
│ │ │ │ -
391 out[37][0][1]=0;
│ │ │ │ -
392 out[37][1][1]=-70.0*tmp11*dytmp20;
│ │ │ │ -
393 out[38][0][1]=0;
│ │ │ │ -
394 out[38][1][1]=-210.0*tmp11*dytmp18;
│ │ │ │ -
395 out[39][0][1]=0;
│ │ │ │ -
396 out[39][1][1]=-490.0*tmp11*dytmp19;
│ │ │ │ -
397
│ │ │ │ -
398 }
│ │ │ │ -
│ │ │ │ -
399
│ │ │ │ -
│ │ │ │ -
401 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
402 const typename Traits::DomainType& in, // position
│ │ │ │ -
403 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
404 {
│ │ │ │ -
405 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
406 if (totalOrder == 0) {
│ │ │ │ -
407 evaluateFunction(in, out);
│ │ │ │ -
408 } else if (totalOrder == 1) {
│ │ │ │ -
409 out.resize(size());
│ │ │ │ -
410 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
411 auto const& x = in[0], y = in[1];
│ │ │ │ -
412
│ │ │ │ -
413 if (direction == 0) {
│ │ │ │ -
414 auto tmp3 = 2*y - 1;
│ │ │ │ -
415 auto tmp4 = y*(6*y - 6) + 1;
│ │ │ │ -
416 auto tmp5 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
417 auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1;
│ │ │ │ -
418 auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4);
│ │ │ │ -
419 auto tmp18 = y*(y*(2*y - 3) + 1);
│ │ │ │ -
420 auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1);
│ │ │ │ -
421 auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2);
│ │ │ │ -
422
│ │ │ │ -
423 auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120);
│ │ │ │ -
424 auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16;
│ │ │ │ -
425 auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4;
│ │ │ │ -
426 auto dxtmp9 = 2;
│ │ │ │ -
427 auto dxtmp10 = 12*x - 6;
│ │ │ │ -
428 auto dxtmp11 = x*(60*x - 60) + 12;
│ │ │ │ -
429 auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18);
│ │ │ │ -
430 auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2;
│ │ │ │ -
431 auto dxtmp15 = x*(6*x - 6) + 1;
│ │ │ │ -
432 auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
433
│ │ │ │ -
434 out[0][0]=sign0*dxtmp1;
│ │ │ │ -
435 out[0][1]=0;
│ │ │ │ -
436 out[1][0]=(-3.0*dxtmp2*tmp3);
│ │ │ │ -
437 out[1][1]=0;
│ │ │ │ -
438 out[2][0]=sign0*(-5.0*dxtmp2*tmp4);
│ │ │ │ -
439 out[2][1]=0;
│ │ │ │ -
440 out[3][0]=(-7.0*dxtmp2*tmp5);
│ │ │ │ -
441 out[3][1]=0;
│ │ │ │ -
442
│ │ │ │ -
443 out[4][0]=sign1*dxtmp6;
│ │ │ │ -
444 out[4][1]=0;
│ │ │ │ -
445 out[5][0]=(-3.0*dxtmp6*tmp3);
│ │ │ │ -
446 out[5][1]=0;
│ │ │ │ -
447 out[6][0]=sign1*(5.0*dxtmp6*tmp4);
│ │ │ │ -
448 out[6][1]=0;
│ │ │ │ -
449 out[7][0]=(-7.0*dxtmp6*tmp5);
│ │ │ │ -
450 out[7][1]=0;
│ │ │ │ -
451
│ │ │ │ -
452 out[8][0]=0;
│ │ │ │ -
453 out[8][1]=0;
│ │ │ │ -
454 out[9][0]=0;
│ │ │ │ -
455 out[9][1]=3.0*dxtmp9*tmp8;
│ │ │ │ -
456 out[10][0]=0;
│ │ │ │ -
457 out[10][1]=sign2*(-5.0*dxtmp10*tmp8);
│ │ │ │ -
458 out[11][0]=0;
│ │ │ │ -
459 out[11][1]=7.0*dxtmp11*tmp8;
│ │ │ │ -
460
│ │ │ │ -
461 out[12][0]=0;
│ │ │ │ -
462 out[12][1]=0;
│ │ │ │ -
463 out[13][0]=0;
│ │ │ │ -
464 out[13][1]=3.0*dxtmp9*tmp12;
│ │ │ │ -
465 out[14][0]=0;
│ │ │ │ -
466 out[14][1]=sign3*5.0*dxtmp10*tmp12;
│ │ │ │ -
467 out[15][0]=0;
│ │ │ │ -
468 out[15][1]=7.0*dxtmp11*tmp12;
│ │ │ │ -
469
│ │ │ │ -
470 out[16][0]=10.0*dxtmp13;
│ │ │ │ -
471 out[16][1]=0;
│ │ │ │ -
472 out[17][0]=-30.0*dxtmp14*tmp3;
│ │ │ │ -
473 out[17][1]=0;
│ │ │ │ -
474 out[18][0]=-50.0*dxtmp14*tmp4;
│ │ │ │ -
475 out[18][1]=0;
│ │ │ │ -
476 out[19][0]=-70.0*dxtmp14*tmp5;
│ │ │ │ -
477 out[19][1]=0;
│ │ │ │ -
478 out[20][0]=-30.0*dxtmp15;
│ │ │ │ -
479 out[20][1]=0;
│ │ │ │ -
480 out[21][0]=-90.0*dxtmp15*tmp3;
│ │ │ │ -
481 out[21][1]=0;
│ │ │ │ -
482 out[22][0]=-150.0*dxtmp15*tmp4;
│ │ │ │ -
483 out[22][1]=0;
│ │ │ │ -
484 out[23][0]=-210.0*dxtmp15*tmp5;
│ │ │ │ -
485 out[23][1]=0;
│ │ │ │ -
486 out[24][0]=-70.0*dxtmp16;
│ │ │ │ -
487 out[24][1]=0;
│ │ │ │ -
488 out[25][0]=-210.0*dxtmp16*tmp3;
│ │ │ │ -
489 out[25][1]=0;
│ │ │ │ -
490 out[26][0]=-350.0*dxtmp16*tmp4;
│ │ │ │ -
491 out[26][1]=0;
│ │ │ │ -
492 out[27][0]=-490.0*dxtmp16*tmp5;
│ │ │ │ -
493 out[27][1]=0;
│ │ │ │ -
494 out[28][0]=0;
│ │ │ │ -
495 out[28][1]=0;
│ │ │ │ -
496 out[29][0]=0;
│ │ │ │ -
497 out[29][1]=0;
│ │ │ │ -
498 out[30][0]=0;
│ │ │ │ -
499 out[30][1]=0;
│ │ │ │ -
500 out[31][0]=0;
│ │ │ │ -
501 out[31][1]=-30.0*dxtmp9*tmp20;
│ │ │ │ -
502 out[32][0]=0;
│ │ │ │ -
503 out[32][1]=-90.0*dxtmp9*tmp18;
│ │ │ │ -
504 out[33][0]=0;
│ │ │ │ -
505 out[33][1]=-210.0*dxtmp9*tmp19;
│ │ │ │ -
506 out[34][0]=0;
│ │ │ │ -
507 out[34][1]=-50.0*dxtmp10*tmp20;
│ │ │ │ -
508 out[35][0]=0;
│ │ │ │ -
509 out[35][1]=-150.0*dxtmp10*tmp18;
│ │ │ │ -
510 out[36][0]=0;
│ │ │ │ -
511 out[36][1]=-350.0*dxtmp10*tmp19;
│ │ │ │ -
512 out[37][0]=0;
│ │ │ │ -
513 out[37][1]=-70.0*dxtmp11*tmp20;
│ │ │ │ -
514 out[38][0]=0;
│ │ │ │ -
515 out[38][1]=-210.0*dxtmp11*tmp18;
│ │ │ │ -
516 out[39][0]=0;
│ │ │ │ -
517 out[39][1]=-490.0*dxtmp11*tmp19;
│ │ │ │ -
518 } else if (direction == 1) {
│ │ │ │ -
519 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1;
│ │ │ │ -
520 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4);
│ │ │ │ -
521 const auto tmp9 = 2*x - 1;
│ │ │ │ -
522 const auto tmp10 = x*(6*x - 6) + 1;
│ │ │ │ -
523 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
524 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2);
│ │ │ │ -
525 const auto tmp15 = x*(x*(2*x - 3) + 1);
│ │ │ │ -
526 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1);
│ │ │ │ -
527
│ │ │ │ -
528 const auto dytmp3 = 2;
│ │ │ │ -
529 const auto dytmp4 = 12*y - 6;
│ │ │ │ -
530 const auto dytmp5 = y*(60*y - 60) + 12;
│ │ │ │ -
531 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120);
│ │ │ │ -
532 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16;
│ │ │ │ -
533 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4;
│ │ │ │ -
534 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18);
│ │ │ │ -
535 const auto dytmp18 = y*(6*y - 6) + 1;
│ │ │ │ -
536 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
537 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2;
│ │ │ │ -
538
│ │ │ │ -
539 out[0][0]=0;
│ │ │ │ -
540 out[0][1]=0;
│ │ │ │ -
541 out[1][0]=(-3.0*tmp2*dytmp3);
│ │ │ │ -
542 out[1][1]=0;
│ │ │ │ -
543 out[2][0]=sign0*(-5.0*tmp2*dytmp4);
│ │ │ │ -
544 out[2][1]=0;
│ │ │ │ -
545 out[3][0]=(-7.0*tmp2*dytmp5);
│ │ │ │ -
546 out[3][1]=0;
│ │ │ │ -
547
│ │ │ │ -
548 out[4][0]=0;
│ │ │ │ -
549 out[4][1]=0;
│ │ │ │ -
550 out[5][0]=(-3.0*tmp6*dytmp3);
│ │ │ │ -
551 out[5][1]=0;
│ │ │ │ -
552 out[6][0]=sign1*(5.0*tmp6*dytmp4);
│ │ │ │ -
553 out[6][1]=0;
│ │ │ │ -
554 out[7][0]=(-7.0*tmp6*dytmp5);
│ │ │ │ -
555 out[7][1]=0;
│ │ │ │ -
556
│ │ │ │ -
557 out[8][0]=0;
│ │ │ │ -
558 out[8][1]=sign2*dytmp7;
│ │ │ │ -
559 out[9][0]=0;
│ │ │ │ -
560 out[9][1]=3.0*tmp9*dytmp8;
│ │ │ │ -
561 out[10][0]=0;
│ │ │ │ -
562 out[10][1]=sign2*(-5.0*tmp10*dytmp8);
│ │ │ │ -
563 out[11][0]=0;
│ │ │ │ -
564 out[11][1]=7.0*tmp11*dytmp8;
│ │ │ │ -
565
│ │ │ │ -
566 out[12][0]=0;
│ │ │ │ -
567 out[12][1]=sign3*dytmp12;
│ │ │ │ -
568 out[13][0]=0;
│ │ │ │ -
569 out[13][1]=3.0*tmp9*dytmp12;
│ │ │ │ -
570 out[14][0]=0;
│ │ │ │ -
571 out[14][1]=sign3*5.0*tmp10*dytmp12;
│ │ │ │ -
572 out[15][0]=0;
│ │ │ │ -
573 out[15][1]=7.0*tmp11*dytmp12;
│ │ │ │ -
574
│ │ │ │ -
575 out[16][0]=0;
│ │ │ │ -
576 out[16][1]=0;
│ │ │ │ -
577 out[17][0]=-30.0*tmp14*dytmp3;
│ │ │ │ -
578 out[17][1]=0;
│ │ │ │ -
579 out[18][0]=-50.0*tmp14*dytmp4;
│ │ │ │ -
580 out[18][1]=0;
│ │ │ │ -
581 out[19][0]=-70.0*tmp14*dytmp5;
│ │ │ │ -
582 out[19][1]=0;
│ │ │ │ -
583 out[20][0]=0;
│ │ │ │ -
584 out[20][1]=0;
│ │ │ │ -
585 out[21][0]=-90.0*tmp15*dytmp3;
│ │ │ │ -
586 out[21][1]=0;
│ │ │ │ -
587 out[22][0]=-150.0*tmp15*dytmp4;
│ │ │ │ -
588 out[22][1]=0;
│ │ │ │ -
589 out[23][0]=-210.0*tmp15*dytmp5;
│ │ │ │ -
590 out[23][1]=0;
│ │ │ │ -
591 out[24][0]=0;
│ │ │ │ -
592 out[24][1]=0;
│ │ │ │ -
593 out[25][0]=-210.0*tmp16*dytmp3;
│ │ │ │ -
594 out[25][1]=0;
│ │ │ │ -
595 out[26][0]=-350.0*tmp16*dytmp4;
│ │ │ │ -
596 out[26][1]=0;
│ │ │ │ -
597 out[27][0]=-490.0*tmp16*dytmp5;
│ │ │ │ -
598 out[27][1]=0;
│ │ │ │ -
599 out[28][0]=0;
│ │ │ │ -
600 out[28][1]=10.0*dytmp17;
│ │ │ │ -
601 out[29][0]=0;
│ │ │ │ -
602 out[29][1]=-30.0*dytmp18;
│ │ │ │ -
603 out[30][0]=0;
│ │ │ │ -
604 out[30][1]=-70.0*dytmp19;
│ │ │ │ -
605 out[31][0]=0;
│ │ │ │ -
606 out[31][1]=-30.0*tmp9*dytmp20;
│ │ │ │ -
607 out[32][0]=0;
│ │ │ │ -
608 out[32][1]=-90.0*tmp9*dytmp18;
│ │ │ │ -
609 out[33][0]=0;
│ │ │ │ -
610 out[33][1]=-210.0*tmp9*dytmp19;
│ │ │ │ -
611 out[34][0]=0;
│ │ │ │ -
612 out[34][1]=-50.0*tmp10*dytmp20;
│ │ │ │ -
613 out[35][0]=0;
│ │ │ │ -
614 out[35][1]=-150.0*tmp10*dytmp18;
│ │ │ │ -
615 out[36][0]=0;
│ │ │ │ -
616 out[36][1]=-350.0*tmp10*dytmp19;
│ │ │ │ -
617 out[37][0]=0;
│ │ │ │ -
618 out[37][1]=-70.0*tmp11*dytmp20;
│ │ │ │ -
619 out[38][0]=0;
│ │ │ │ -
620 out[38][1]=-210.0*tmp11*dytmp18;
│ │ │ │ -
621 out[39][0]=0;
│ │ │ │ -
622 out[39][1]=-490.0*tmp11*dytmp19;
│ │ │ │ -
623 } else {
│ │ │ │ -
624 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
625 }
│ │ │ │ -
626 } else {
│ │ │ │ -
627 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
628 }
│ │ │ │ -
629 }
│ │ │ │ -
│ │ │ │ -
630
│ │ │ │ -
│ │ │ │ -
632 unsigned int order () const
│ │ │ │ -
633 {
│ │ │ │ -
634 return 7;
│ │ │ │ -
635 }
│ │ │ │ -
│ │ │ │ -
636
│ │ │ │ -
637 private:
│ │ │ │ -
638 R sign0, sign1, sign2, sign3;
│ │ │ │ -
639 };
│ │ │ │ -
│ │ │ │ -
640}
│ │ │ │ -
641
│ │ │ │ -
642#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
105 private:
│ │ │ │ +
106
│ │ │ │ +
107 // Signs of the face normals
│ │ │ │ +
108 std::array<R,4> sign_;
│ │ │ │ +
109 };
│ │ │ │ +
│ │ │ │ +
110}
│ │ │ │ +
111#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalbasis.hh:29
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas3cube2dlocalbasis.hh:49
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:179
│ │ │ │ -
RT3Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2dlocalbasis.hh:40
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:60
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:632
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas3cube2dlocalbasis.hh:33
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas3cube2dlocalbasis.hh:401
│ │ │ │ +
Definition raviartthomas03dlocalbasis.hh:27
│ │ │ │ +
RT03DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas03dlocalbasis.hh:33
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas03dlocalbasis.hh:73
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas03dlocalbasis.hh:100
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas03dlocalbasis.hh:40
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas03dlocalbasis.hh:59
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas03dlocalbasis.hh:46
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas03dlocalbasis.hh:30
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,671 +1,156 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ -raviartthomas3cube2dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ +raviartthomas03dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ -12#include │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 13 │ │ │ │ │ -14#include "../../common/localbasis.hh" │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -29 { │ │ │ │ │ -30 │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_4_0 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +27 { │ │ │ │ │ +28 public: │ │ │ │ │ +29 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_3 _R_T_0_3_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +34 { │ │ │ │ │ +35 for (int i=0; i<4; i++) │ │ │ │ │ +36 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ 41 { │ │ │ │ │ -42 sign0 = (s[0]) ? -1.0 : 1.0; │ │ │ │ │ -43 sign1 = (s[1]) ? -1.0 : 1.0; │ │ │ │ │ -44 sign2 = (s[2]) ? -1.0 : 1.0; │ │ │ │ │ -45 sign3 = (s[3]) ? -1.0 : 1.0; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return 40; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_6_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -61 std::vector& out) const │ │ │ │ │ -62 { │ │ │ │ │ -63 out.resize(40); │ │ │ │ │ -64 auto const& x = in[0], y = in[1]; │ │ │ │ │ -65 │ │ │ │ │ -66 const auto tmp1 = - x*(x*(x*(35*x - 80) + 60) - 16) - 1; │ │ │ │ │ -67 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ -68 const auto tmp3 = 2*y - 1; │ │ │ │ │ -69 const auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ -70 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -71 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ -72 const auto tmp7 = - y*(y*(y*(35*y - 80) + 60) - 16) - 1; │ │ │ │ │ -73 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ -74 const auto tmp9 = 2*x - 1; │ │ │ │ │ -75 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ -76 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -77 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ -78 const auto tmp13 = -x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ -79 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ -80 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ -81 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ -82 const auto tmp17 = -y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ -83 const auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ -84 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ -85 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ -86 │ │ │ │ │ -87 out[0][0]=sign0*tmp1; │ │ │ │ │ -88 out[0][1]=0; │ │ │ │ │ -89 out[1][0]=(-3.0*tmp2*tmp3); │ │ │ │ │ -90 out[1][1]=0; │ │ │ │ │ -91 out[2][0]=sign0*(-5.0*tmp2*tmp4); │ │ │ │ │ -92 out[2][1]=0; │ │ │ │ │ -93 out[3][0]=(-7.0*tmp2*tmp5); │ │ │ │ │ -94 out[3][1]=0; │ │ │ │ │ -95 │ │ │ │ │ -96 out[4][0]=sign1*tmp6; │ │ │ │ │ -97 out[4][1]=0; │ │ │ │ │ -98 out[5][0]=(-3.0*tmp6*tmp3); │ │ │ │ │ -99 out[5][1]=0; │ │ │ │ │ -100 out[6][0]=sign1*(5.0*tmp6*tmp4); │ │ │ │ │ -101 out[6][1]=0; │ │ │ │ │ -102 out[7][0]=(-7.0*tmp6*tmp5); │ │ │ │ │ -103 out[7][1]=0; │ │ │ │ │ +42 return 4; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +47 std::vector& out) const │ │ │ │ │ +48 { │ │ │ │ │ +49 out.resize(4); │ │ │ │ │ +50 auto c = std::sqrt(2.0); │ │ │ │ │ +51 out[0] = {sign_[0]*c* in[0], sign_[0]*c* in[1], sign_[0]*c*(in[2]-D(1))}; │ │ │ │ │ +52 out[1] = {sign_[1]*c* in[0], sign_[1]*c*(in[1]-D(1)), sign_[1]*c* in[2] }; │ │ │ │ │ +53 out[2] = {sign_[2]*c*(in[0]-D(1)), sign_[2]*c* in[1], sign_[2]*c* in[2] }; │ │ │ │ │ +54 out[3] = {sign_[3]*c* in[0], sign_[3]*c* in[1], sign_[3]*c* in[2] }; │ │ │ │ │ +55 } │ │ │ │ │ +56 │ │ │ │ │ +58 inline void │ │ │ │ │ +_5_9 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +60 std::vector& out) const // return value │ │ │ │ │ +61 { │ │ │ │ │ +62 out.resize(4); │ │ │ │ │ +63 for (int i=0; i<4; i++) │ │ │ │ │ +64 { │ │ │ │ │ +65 auto c = std::sqrt(2.0); │ │ │ │ │ +66 out[i][0] = {c*sign_[i], 0, 0}; │ │ │ │ │ +67 out[i][1] = { 0,c*sign_[i], 0}; │ │ │ │ │ +68 out[i][2] = { 0, 0,c*sign_[i]}; │ │ │ │ │ +69 } │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +_7_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +74 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +75 std::vector& out) const // return value │ │ │ │ │ +76 { │ │ │ │ │ +77 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +78 if (totalOrder == 0) { │ │ │ │ │ +79 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +80 } else if (totalOrder == 1) { │ │ │ │ │ +81 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +82 out.resize(_s_i_z_e()); │ │ │ │ │ +83 │ │ │ │ │ +84 for (int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +85 { │ │ │ │ │ +86 out[i][direction] = sign_[i]* std::sqrt(2.0) ; │ │ │ │ │ +87 out[i][(direction+1)%3] = 0; │ │ │ │ │ +88 out[i][(direction+2)%3] = 0; │ │ │ │ │ +89 } │ │ │ │ │ +90 } else { │ │ │ │ │ +91 out.resize(_s_i_z_e()); │ │ │ │ │ +92 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +93 for (std::size_t j = 0; j < 3; ++j) │ │ │ │ │ +94 out[i][j] = 0; │ │ │ │ │ +95 } │ │ │ │ │ +96 │ │ │ │ │ +97 } │ │ │ │ │ +98 │ │ │ │ │ +_1_0_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ +101 { │ │ │ │ │ +102 return 1; │ │ │ │ │ +103 } │ │ │ │ │ 104 │ │ │ │ │ -105 out[8][0]=0; │ │ │ │ │ -106 out[8][1]=sign2*tmp7; │ │ │ │ │ -107 out[9][0]=0; │ │ │ │ │ -108 out[9][1]=3.0*tmp9*tmp8; │ │ │ │ │ -109 out[10][0]=0; │ │ │ │ │ -110 out[10][1]=sign2*(-5.0*tmp10*tmp8); │ │ │ │ │ -111 out[11][0]=0; │ │ │ │ │ -112 out[11][1]=7.0*tmp11*tmp8; │ │ │ │ │ -113 │ │ │ │ │ -114 out[12][0]=0; │ │ │ │ │ -115 out[12][1]=sign3*tmp12; │ │ │ │ │ -116 out[13][0]=0; │ │ │ │ │ -117 out[13][1]=3.0*tmp9*tmp12; │ │ │ │ │ -118 out[14][0]=0; │ │ │ │ │ -119 out[14][1]=sign3*5.0*tmp10*tmp12; │ │ │ │ │ -120 out[15][0]=0; │ │ │ │ │ -121 out[15][1]=7.0*tmp11*tmp12; │ │ │ │ │ -122 │ │ │ │ │ -123 out[16][0]=10.0*tmp13; │ │ │ │ │ -124 out[16][1]=0; │ │ │ │ │ -125 out[17][0]=-30.0*tmp14*tmp3; │ │ │ │ │ -126 out[17][1]=0; │ │ │ │ │ -127 out[18][0]=-50.0*tmp14*tmp4; │ │ │ │ │ -128 out[18][1]=0; │ │ │ │ │ -129 out[19][0]=-70.0*tmp14*tmp5; │ │ │ │ │ -130 out[19][1]=0; │ │ │ │ │ -131 out[20][0]=-30.0*tmp15; │ │ │ │ │ -132 out[20][1]=0; │ │ │ │ │ -133 out[21][0]=-90.0*tmp15*tmp3; │ │ │ │ │ -134 out[21][1]=0; │ │ │ │ │ -135 out[22][0]=-150.0*tmp15*tmp4; │ │ │ │ │ -136 out[22][1]=0; │ │ │ │ │ -137 out[23][0]=-210.0*tmp15*tmp5; │ │ │ │ │ -138 out[23][1]=0; │ │ │ │ │ -139 out[24][0]=-70.0*tmp16; │ │ │ │ │ -140 out[24][1]=0; │ │ │ │ │ -141 out[25][0]=-210.0*tmp16*tmp3; │ │ │ │ │ -142 out[25][1]=0; │ │ │ │ │ -143 out[26][0]=-350.0*tmp16*tmp4; │ │ │ │ │ -144 out[26][1]=0; │ │ │ │ │ -145 out[27][0]=-490.0*tmp16*tmp5; │ │ │ │ │ -146 out[27][1]=0; │ │ │ │ │ -147 out[28][0]=0; │ │ │ │ │ -148 out[28][1]=10.0*tmp17; │ │ │ │ │ -149 out[29][0]=0; │ │ │ │ │ -150 out[29][1]=-30.0*tmp18; │ │ │ │ │ -151 out[30][0]=0; │ │ │ │ │ -152 out[30][1]=-70.0*tmp19; │ │ │ │ │ -153 out[31][0]=0; │ │ │ │ │ -154 out[31][1]=-30.0*tmp9*tmp20; │ │ │ │ │ -155 out[32][0]=0; │ │ │ │ │ -156 out[32][1]=-90.0*tmp9*tmp18; │ │ │ │ │ -157 out[33][0]=0; │ │ │ │ │ -158 out[33][1]=-210.0*tmp9*tmp19; │ │ │ │ │ -159 out[34][0]=0; │ │ │ │ │ -160 out[34][1]=-50.0*tmp10*tmp20; │ │ │ │ │ -161 out[35][0]=0; │ │ │ │ │ -162 out[35][1]=-150.0*tmp10*tmp18; │ │ │ │ │ -163 out[36][0]=0; │ │ │ │ │ -164 out[36][1]=-350.0*tmp10*tmp19; │ │ │ │ │ -165 out[37][0]=0; │ │ │ │ │ -166 out[37][1]=-70.0*tmp11*tmp20; │ │ │ │ │ -167 out[38][0]=0; │ │ │ │ │ -168 out[38][1]=-210.0*tmp11*tmp18; │ │ │ │ │ -169 out[39][0]=0; │ │ │ │ │ -170 out[39][1]=-490.0*tmp11*tmp19; │ │ │ │ │ -171 } │ │ │ │ │ -172 │ │ │ │ │ -_1_7_9 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -180 std::vector& out) const │ │ │ │ │ -181 { │ │ │ │ │ -182 out.resize(40); │ │ │ │ │ -183 auto const& x = in[0], y = in[1]; │ │ │ │ │ -184 │ │ │ │ │ -185 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ -186 const auto tmp3 = 2*y - 1; │ │ │ │ │ -187 const auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ -188 const auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -189 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ -190 const auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ -191 const auto tmp9 = 2*x - 1; │ │ │ │ │ -192 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ -193 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -194 const auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ -195 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ -196 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ -197 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ -198 const auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ -199 const auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ -200 const auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ -201 // temporaries tmp1, tmp7, tmp13, tmp17 are not used in jacobian │ │ │ │ │ -202 │ │ │ │ │ -203 const auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120); │ │ │ │ │ -204 const auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16; │ │ │ │ │ -205 const auto dytmp3 = 2; │ │ │ │ │ -206 const auto dytmp4 = 12*y - 6; │ │ │ │ │ -207 const auto dytmp5 = y*(60*y - 60) + 12; │ │ │ │ │ -208 const auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4; │ │ │ │ │ -209 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120); │ │ │ │ │ -210 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16; │ │ │ │ │ -211 const auto dxtmp9 = 2; │ │ │ │ │ -212 const auto dxtmp10 = 12*x - 6; │ │ │ │ │ -213 const auto dxtmp11 = x*(60*x - 60) + 12; │ │ │ │ │ -214 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4; │ │ │ │ │ -215 const auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18); │ │ │ │ │ -216 const auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2; │ │ │ │ │ -217 const auto dxtmp15 = x*(6*x - 6) + 1; │ │ │ │ │ -218 const auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -219 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18); │ │ │ │ │ -220 const auto dytmp18 = y*(6*y - 6) + 1; │ │ │ │ │ -221 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -222 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2; │ │ │ │ │ -223 │ │ │ │ │ -224 │ │ │ │ │ -225 // x-component │ │ │ │ │ -226 out[0][0][0]=sign0*dxtmp1; │ │ │ │ │ -227 out[0][1][0]=0; │ │ │ │ │ -228 out[1][0][0]=(-3.0*dxtmp2*tmp3); │ │ │ │ │ -229 out[1][1][0]=0; │ │ │ │ │ -230 out[2][0][0]=sign0*(-5.0*dxtmp2*tmp4); │ │ │ │ │ -231 out[2][1][0]=0; │ │ │ │ │ -232 out[3][0][0]=(-7.0*dxtmp2*tmp5); │ │ │ │ │ -233 out[3][1][0]=0; │ │ │ │ │ -234 │ │ │ │ │ -235 out[4][0][0]=sign1*dxtmp6; │ │ │ │ │ -236 out[4][1][0]=0; │ │ │ │ │ -237 out[5][0][0]=(-3.0*dxtmp6*tmp3); │ │ │ │ │ -238 out[5][1][0]=0; │ │ │ │ │ -239 out[6][0][0]=sign1*(5.0*dxtmp6*tmp4); │ │ │ │ │ -240 out[6][1][0]=0; │ │ │ │ │ -241 out[7][0][0]=(-7.0*dxtmp6*tmp5); │ │ │ │ │ -242 out[7][1][0]=0; │ │ │ │ │ -243 │ │ │ │ │ -244 out[8][0][0]=0; │ │ │ │ │ -245 out[8][1][0]=0; │ │ │ │ │ -246 out[9][0][0]=0; │ │ │ │ │ -247 out[9][1][0]=3.0*dxtmp9*tmp8; │ │ │ │ │ -248 out[10][0][0]=0; │ │ │ │ │ -249 out[10][1][0]=sign2*(-5.0*dxtmp10*tmp8); │ │ │ │ │ -250 out[11][0][0]=0; │ │ │ │ │ -251 out[11][1][0]=7.0*dxtmp11*tmp8; │ │ │ │ │ -252 │ │ │ │ │ -253 out[12][0][0]=0; │ │ │ │ │ -254 out[12][1][0]=0; │ │ │ │ │ -255 out[13][0][0]=0; │ │ │ │ │ -256 out[13][1][0]=3.0*dxtmp9*tmp12; │ │ │ │ │ -257 out[14][0][0]=0; │ │ │ │ │ -258 out[14][1][0]=sign3*5.0*dxtmp10*tmp12; │ │ │ │ │ -259 out[15][0][0]=0; │ │ │ │ │ -260 out[15][1][0]=7.0*dxtmp11*tmp12; │ │ │ │ │ -261 │ │ │ │ │ -262 out[16][0][0]=10.0*dxtmp13; │ │ │ │ │ -263 out[16][1][0]=0; │ │ │ │ │ -264 out[17][0][0]=-30.0*dxtmp14*tmp3; │ │ │ │ │ -265 out[17][1][0]=0; │ │ │ │ │ -266 out[18][0][0]=-50.0*dxtmp14*tmp4; │ │ │ │ │ -267 out[18][1][0]=0; │ │ │ │ │ -268 out[19][0][0]=-70.0*dxtmp14*tmp5; │ │ │ │ │ -269 out[19][1][0]=0; │ │ │ │ │ -270 out[20][0][0]=-30.0*dxtmp15; │ │ │ │ │ -271 out[20][1][0]=0; │ │ │ │ │ -272 out[21][0][0]=-90.0*dxtmp15*tmp3; │ │ │ │ │ -273 out[21][1][0]=0; │ │ │ │ │ -274 out[22][0][0]=-150.0*dxtmp15*tmp4; │ │ │ │ │ -275 out[22][1][0]=0; │ │ │ │ │ -276 out[23][0][0]=-210.0*dxtmp15*tmp5; │ │ │ │ │ -277 out[23][1][0]=0; │ │ │ │ │ -278 out[24][0][0]=-70.0*dxtmp16; │ │ │ │ │ -279 out[24][1][0]=0; │ │ │ │ │ -280 out[25][0][0]=-210.0*dxtmp16*tmp3; │ │ │ │ │ -281 out[25][1][0]=0; │ │ │ │ │ -282 out[26][0][0]=-350.0*dxtmp16*tmp4; │ │ │ │ │ -283 out[26][1][0]=0; │ │ │ │ │ -284 out[27][0][0]=-490.0*dxtmp16*tmp5; │ │ │ │ │ -285 out[27][1][0]=0; │ │ │ │ │ -286 out[28][0][0]=0; │ │ │ │ │ -287 out[28][1][0]=0; │ │ │ │ │ -288 out[29][0][0]=0; │ │ │ │ │ -289 out[29][1][0]=0; │ │ │ │ │ -290 out[30][0][0]=0; │ │ │ │ │ -291 out[30][1][0]=0; │ │ │ │ │ -292 out[31][0][0]=0; │ │ │ │ │ -293 out[31][1][0]=-30.0*dxtmp9*tmp20; │ │ │ │ │ -294 out[32][0][0]=0; │ │ │ │ │ -295 out[32][1][0]=-90.0*dxtmp9*tmp18; │ │ │ │ │ -296 out[33][0][0]=0; │ │ │ │ │ -297 out[33][1][0]=-210.0*dxtmp9*tmp19; │ │ │ │ │ -298 out[34][0][0]=0; │ │ │ │ │ -299 out[34][1][0]=-50.0*dxtmp10*tmp20; │ │ │ │ │ -300 out[35][0][0]=0; │ │ │ │ │ -301 out[35][1][0]=-150.0*dxtmp10*tmp18; │ │ │ │ │ -302 out[36][0][0]=0; │ │ │ │ │ -303 out[36][1][0]=-350.0*dxtmp10*tmp19; │ │ │ │ │ -304 out[37][0][0]=0; │ │ │ │ │ -305 out[37][1][0]=-70.0*dxtmp11*tmp20; │ │ │ │ │ -306 out[38][0][0]=0; │ │ │ │ │ -307 out[38][1][0]=-210.0*dxtmp11*tmp18; │ │ │ │ │ -308 out[39][0][0]=0; │ │ │ │ │ -309 out[39][1][0]=-490.0*dxtmp11*tmp19; │ │ │ │ │ -310 │ │ │ │ │ -311 │ │ │ │ │ -312 // y-component │ │ │ │ │ -313 out[0][0][1]=0; │ │ │ │ │ -314 out[0][1][1]=0; │ │ │ │ │ -315 out[1][0][1]=(-3.0*tmp2*dytmp3); │ │ │ │ │ -316 out[1][1][1]=0; │ │ │ │ │ -317 out[2][0][1]=sign0*(-5.0*tmp2*dytmp4); │ │ │ │ │ -318 out[2][1][1]=0; │ │ │ │ │ -319 out[3][0][1]=(-7.0*tmp2*dytmp5); │ │ │ │ │ -320 out[3][1][1]=0; │ │ │ │ │ -321 │ │ │ │ │ -322 out[4][0][1]=0; │ │ │ │ │ -323 out[4][1][1]=0; │ │ │ │ │ -324 out[5][0][1]=(-3.0*tmp6*dytmp3); │ │ │ │ │ -325 out[5][1][1]=0; │ │ │ │ │ -326 out[6][0][1]=sign1*(5.0*tmp6*dytmp4); │ │ │ │ │ -327 out[6][1][1]=0; │ │ │ │ │ -328 out[7][0][1]=(-7.0*tmp6*dytmp5); │ │ │ │ │ -329 out[7][1][1]=0; │ │ │ │ │ -330 │ │ │ │ │ -331 out[8][0][1]=0; │ │ │ │ │ -332 out[8][1][1]=sign2*dytmp7; │ │ │ │ │ -333 out[9][0][1]=0; │ │ │ │ │ -334 out[9][1][1]=3.0*tmp9*dytmp8; │ │ │ │ │ -335 out[10][0][1]=0; │ │ │ │ │ -336 out[10][1][1]=sign2*(-5.0*tmp10*dytmp8); │ │ │ │ │ -337 out[11][0][1]=0; │ │ │ │ │ -338 out[11][1][1]=7.0*tmp11*dytmp8; │ │ │ │ │ -339 │ │ │ │ │ -340 out[12][0][1]=0; │ │ │ │ │ -341 out[12][1][1]=sign3*dytmp12; │ │ │ │ │ -342 out[13][0][1]=0; │ │ │ │ │ -343 out[13][1][1]=3.0*tmp9*dytmp12; │ │ │ │ │ -344 out[14][0][1]=0; │ │ │ │ │ -345 out[14][1][1]=sign3*5.0*tmp10*dytmp12; │ │ │ │ │ -346 out[15][0][1]=0; │ │ │ │ │ -347 out[15][1][1]=7.0*tmp11*dytmp12; │ │ │ │ │ -348 │ │ │ │ │ -349 out[16][0][1]=0; │ │ │ │ │ -350 out[16][1][1]=0; │ │ │ │ │ -351 out[17][0][1]=-30.0*tmp14*dytmp3; │ │ │ │ │ -352 out[17][1][1]=0; │ │ │ │ │ -353 out[18][0][1]=-50.0*tmp14*dytmp4; │ │ │ │ │ -354 out[18][1][1]=0; │ │ │ │ │ -355 out[19][0][1]=-70.0*tmp14*dytmp5; │ │ │ │ │ -356 out[19][1][1]=0; │ │ │ │ │ -357 out[20][0][1]=0; │ │ │ │ │ -358 out[20][1][1]=0; │ │ │ │ │ -359 out[21][0][1]=-90.0*tmp15*dytmp3; │ │ │ │ │ -360 out[21][1][1]=0; │ │ │ │ │ -361 out[22][0][1]=-150.0*tmp15*dytmp4; │ │ │ │ │ -362 out[22][1][1]=0; │ │ │ │ │ -363 out[23][0][1]=-210.0*tmp15*dytmp5; │ │ │ │ │ -364 out[23][1][1]=0; │ │ │ │ │ -365 out[24][0][1]=0; │ │ │ │ │ -366 out[24][1][1]=0; │ │ │ │ │ -367 out[25][0][1]=-210.0*tmp16*dytmp3; │ │ │ │ │ -368 out[25][1][1]=0; │ │ │ │ │ -369 out[26][0][1]=-350.0*tmp16*dytmp4; │ │ │ │ │ -370 out[26][1][1]=0; │ │ │ │ │ -371 out[27][0][1]=-490.0*tmp16*dytmp5; │ │ │ │ │ -372 out[27][1][1]=0; │ │ │ │ │ -373 out[28][0][1]=0; │ │ │ │ │ -374 out[28][1][1]=10.0*dytmp17; │ │ │ │ │ -375 out[29][0][1]=0; │ │ │ │ │ -376 out[29][1][1]=-30.0*dytmp18; │ │ │ │ │ -377 out[30][0][1]=0; │ │ │ │ │ -378 out[30][1][1]=-70.0*dytmp19; │ │ │ │ │ -379 out[31][0][1]=0; │ │ │ │ │ -380 out[31][1][1]=-30.0*tmp9*dytmp20; │ │ │ │ │ -381 out[32][0][1]=0; │ │ │ │ │ -382 out[32][1][1]=-90.0*tmp9*dytmp18; │ │ │ │ │ -383 out[33][0][1]=0; │ │ │ │ │ -384 out[33][1][1]=-210.0*tmp9*dytmp19; │ │ │ │ │ -385 out[34][0][1]=0; │ │ │ │ │ -386 out[34][1][1]=-50.0*tmp10*dytmp20; │ │ │ │ │ -387 out[35][0][1]=0; │ │ │ │ │ -388 out[35][1][1]=-150.0*tmp10*dytmp18; │ │ │ │ │ -389 out[36][0][1]=0; │ │ │ │ │ -390 out[36][1][1]=-350.0*tmp10*dytmp19; │ │ │ │ │ -391 out[37][0][1]=0; │ │ │ │ │ -392 out[37][1][1]=-70.0*tmp11*dytmp20; │ │ │ │ │ -393 out[38][0][1]=0; │ │ │ │ │ -394 out[38][1][1]=-210.0*tmp11*dytmp18; │ │ │ │ │ -395 out[39][0][1]=0; │ │ │ │ │ -396 out[39][1][1]=-490.0*tmp11*dytmp19; │ │ │ │ │ -397 │ │ │ │ │ -398 } │ │ │ │ │ -399 │ │ │ │ │ -_4_0_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -402 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -403 std::vector& out) const // return value │ │ │ │ │ -404 { │ │ │ │ │ -405 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -406 if (totalOrder == 0) { │ │ │ │ │ -407 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -408 } else if (totalOrder == 1) { │ │ │ │ │ -409 out.resize(_s_i_z_e()); │ │ │ │ │ -410 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -411 auto const& x = in[0], y = in[1]; │ │ │ │ │ -412 │ │ │ │ │ -413 if (direction == 0) { │ │ │ │ │ -414 auto tmp3 = 2*y - 1; │ │ │ │ │ -415 auto tmp4 = y*(6*y - 6) + 1; │ │ │ │ │ -416 auto tmp5 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -417 auto tmp8 = y*(y*(y*(35*y - 80) + 60) - 16) + 1; │ │ │ │ │ -418 auto tmp12 = y*(y*(y*(35*y - 60) + 30) - 4); │ │ │ │ │ -419 auto tmp18 = y*(y*(2*y - 3) + 1); │ │ │ │ │ -420 auto tmp19 = y*(y*(y*(5*y - 10) + 6) - 1); │ │ │ │ │ -421 auto tmp20 = y*(y*(y*(7*y - 14) + 9) - 2); │ │ │ │ │ -422 │ │ │ │ │ -423 auto dxtmp1 = 16 - x*(x*(140*x - 240) + 120); │ │ │ │ │ -424 auto dxtmp2 = x*(x*(140*x - 240) + 120) - 16; │ │ │ │ │ -425 auto dxtmp6 = x*(x*(140*x - 180) + 60) - 4; │ │ │ │ │ -426 auto dxtmp9 = 2; │ │ │ │ │ -427 auto dxtmp10 = 12*x - 6; │ │ │ │ │ -428 auto dxtmp11 = x*(60*x - 60) + 12; │ │ │ │ │ -429 auto dxtmp13 = 2 - x*(x*(28*x - 42) + 18); │ │ │ │ │ -430 auto dxtmp14 = x*(x*(28*x - 42) + 18) - 2; │ │ │ │ │ -431 auto dxtmp15 = x*(6*x - 6) + 1; │ │ │ │ │ -432 auto dxtmp16 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -433 │ │ │ │ │ -434 out[0][0]=sign0*dxtmp1; │ │ │ │ │ -435 out[0][1]=0; │ │ │ │ │ -436 out[1][0]=(-3.0*dxtmp2*tmp3); │ │ │ │ │ -437 out[1][1]=0; │ │ │ │ │ -438 out[2][0]=sign0*(-5.0*dxtmp2*tmp4); │ │ │ │ │ -439 out[2][1]=0; │ │ │ │ │ -440 out[3][0]=(-7.0*dxtmp2*tmp5); │ │ │ │ │ -441 out[3][1]=0; │ │ │ │ │ -442 │ │ │ │ │ -443 out[4][0]=sign1*dxtmp6; │ │ │ │ │ -444 out[4][1]=0; │ │ │ │ │ -445 out[5][0]=(-3.0*dxtmp6*tmp3); │ │ │ │ │ -446 out[5][1]=0; │ │ │ │ │ -447 out[6][0]=sign1*(5.0*dxtmp6*tmp4); │ │ │ │ │ -448 out[6][1]=0; │ │ │ │ │ -449 out[7][0]=(-7.0*dxtmp6*tmp5); │ │ │ │ │ -450 out[7][1]=0; │ │ │ │ │ -451 │ │ │ │ │ -452 out[8][0]=0; │ │ │ │ │ -453 out[8][1]=0; │ │ │ │ │ -454 out[9][0]=0; │ │ │ │ │ -455 out[9][1]=3.0*dxtmp9*tmp8; │ │ │ │ │ -456 out[10][0]=0; │ │ │ │ │ -457 out[10][1]=sign2*(-5.0*dxtmp10*tmp8); │ │ │ │ │ -458 out[11][0]=0; │ │ │ │ │ -459 out[11][1]=7.0*dxtmp11*tmp8; │ │ │ │ │ -460 │ │ │ │ │ -461 out[12][0]=0; │ │ │ │ │ -462 out[12][1]=0; │ │ │ │ │ -463 out[13][0]=0; │ │ │ │ │ -464 out[13][1]=3.0*dxtmp9*tmp12; │ │ │ │ │ -465 out[14][0]=0; │ │ │ │ │ -466 out[14][1]=sign3*5.0*dxtmp10*tmp12; │ │ │ │ │ -467 out[15][0]=0; │ │ │ │ │ -468 out[15][1]=7.0*dxtmp11*tmp12; │ │ │ │ │ -469 │ │ │ │ │ -470 out[16][0]=10.0*dxtmp13; │ │ │ │ │ -471 out[16][1]=0; │ │ │ │ │ -472 out[17][0]=-30.0*dxtmp14*tmp3; │ │ │ │ │ -473 out[17][1]=0; │ │ │ │ │ -474 out[18][0]=-50.0*dxtmp14*tmp4; │ │ │ │ │ -475 out[18][1]=0; │ │ │ │ │ -476 out[19][0]=-70.0*dxtmp14*tmp5; │ │ │ │ │ -477 out[19][1]=0; │ │ │ │ │ -478 out[20][0]=-30.0*dxtmp15; │ │ │ │ │ -479 out[20][1]=0; │ │ │ │ │ -480 out[21][0]=-90.0*dxtmp15*tmp3; │ │ │ │ │ -481 out[21][1]=0; │ │ │ │ │ -482 out[22][0]=-150.0*dxtmp15*tmp4; │ │ │ │ │ -483 out[22][1]=0; │ │ │ │ │ -484 out[23][0]=-210.0*dxtmp15*tmp5; │ │ │ │ │ -485 out[23][1]=0; │ │ │ │ │ -486 out[24][0]=-70.0*dxtmp16; │ │ │ │ │ -487 out[24][1]=0; │ │ │ │ │ -488 out[25][0]=-210.0*dxtmp16*tmp3; │ │ │ │ │ -489 out[25][1]=0; │ │ │ │ │ -490 out[26][0]=-350.0*dxtmp16*tmp4; │ │ │ │ │ -491 out[26][1]=0; │ │ │ │ │ -492 out[27][0]=-490.0*dxtmp16*tmp5; │ │ │ │ │ -493 out[27][1]=0; │ │ │ │ │ -494 out[28][0]=0; │ │ │ │ │ -495 out[28][1]=0; │ │ │ │ │ -496 out[29][0]=0; │ │ │ │ │ -497 out[29][1]=0; │ │ │ │ │ -498 out[30][0]=0; │ │ │ │ │ -499 out[30][1]=0; │ │ │ │ │ -500 out[31][0]=0; │ │ │ │ │ -501 out[31][1]=-30.0*dxtmp9*tmp20; │ │ │ │ │ -502 out[32][0]=0; │ │ │ │ │ -503 out[32][1]=-90.0*dxtmp9*tmp18; │ │ │ │ │ -504 out[33][0]=0; │ │ │ │ │ -505 out[33][1]=-210.0*dxtmp9*tmp19; │ │ │ │ │ -506 out[34][0]=0; │ │ │ │ │ -507 out[34][1]=-50.0*dxtmp10*tmp20; │ │ │ │ │ -508 out[35][0]=0; │ │ │ │ │ -509 out[35][1]=-150.0*dxtmp10*tmp18; │ │ │ │ │ -510 out[36][0]=0; │ │ │ │ │ -511 out[36][1]=-350.0*dxtmp10*tmp19; │ │ │ │ │ -512 out[37][0]=0; │ │ │ │ │ -513 out[37][1]=-70.0*dxtmp11*tmp20; │ │ │ │ │ -514 out[38][0]=0; │ │ │ │ │ -515 out[38][1]=-210.0*dxtmp11*tmp18; │ │ │ │ │ -516 out[39][0]=0; │ │ │ │ │ -517 out[39][1]=-490.0*dxtmp11*tmp19; │ │ │ │ │ -518 } else if (direction == 1) { │ │ │ │ │ -519 const auto tmp2 = x*(x*(x*(35*x - 80) + 60) - 16) + 1; │ │ │ │ │ -520 const auto tmp6 = x*(x*(x*(35*x - 60) + 30) - 4); │ │ │ │ │ -521 const auto tmp9 = 2*x - 1; │ │ │ │ │ -522 const auto tmp10 = x*(6*x - 6) + 1; │ │ │ │ │ -523 const auto tmp11 = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -524 const auto tmp14 = x*(x*(x*(7*x - 14) + 9) - 2); │ │ │ │ │ -525 const auto tmp15 = x*(x*(2*x - 3) + 1); │ │ │ │ │ -526 const auto tmp16 = x*(x*(x*(5*x - 10) + 6) - 1); │ │ │ │ │ -527 │ │ │ │ │ -528 const auto dytmp3 = 2; │ │ │ │ │ -529 const auto dytmp4 = 12*y - 6; │ │ │ │ │ -530 const auto dytmp5 = y*(60*y - 60) + 12; │ │ │ │ │ -531 const auto dytmp7 = 16 - y*(y*(140*y - 240) + 120); │ │ │ │ │ -532 const auto dytmp8 = y*(y*(140*y - 240) + 120) - 16; │ │ │ │ │ -533 const auto dytmp12 = y*(y*(140*y - 180) + 60) - 4; │ │ │ │ │ -534 const auto dytmp17 = 2 - y*(y*(28*y - 42) + 18); │ │ │ │ │ -535 const auto dytmp18 = y*(6*y - 6) + 1; │ │ │ │ │ -536 const auto dytmp19 = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -537 const auto dytmp20 = y*(y*(28*y - 42) + 18) - 2; │ │ │ │ │ -538 │ │ │ │ │ -539 out[0][0]=0; │ │ │ │ │ -540 out[0][1]=0; │ │ │ │ │ -541 out[1][0]=(-3.0*tmp2*dytmp3); │ │ │ │ │ -542 out[1][1]=0; │ │ │ │ │ -543 out[2][0]=sign0*(-5.0*tmp2*dytmp4); │ │ │ │ │ -544 out[2][1]=0; │ │ │ │ │ -545 out[3][0]=(-7.0*tmp2*dytmp5); │ │ │ │ │ -546 out[3][1]=0; │ │ │ │ │ -547 │ │ │ │ │ -548 out[4][0]=0; │ │ │ │ │ -549 out[4][1]=0; │ │ │ │ │ -550 out[5][0]=(-3.0*tmp6*dytmp3); │ │ │ │ │ -551 out[5][1]=0; │ │ │ │ │ -552 out[6][0]=sign1*(5.0*tmp6*dytmp4); │ │ │ │ │ -553 out[6][1]=0; │ │ │ │ │ -554 out[7][0]=(-7.0*tmp6*dytmp5); │ │ │ │ │ -555 out[7][1]=0; │ │ │ │ │ -556 │ │ │ │ │ -557 out[8][0]=0; │ │ │ │ │ -558 out[8][1]=sign2*dytmp7; │ │ │ │ │ -559 out[9][0]=0; │ │ │ │ │ -560 out[9][1]=3.0*tmp9*dytmp8; │ │ │ │ │ -561 out[10][0]=0; │ │ │ │ │ -562 out[10][1]=sign2*(-5.0*tmp10*dytmp8); │ │ │ │ │ -563 out[11][0]=0; │ │ │ │ │ -564 out[11][1]=7.0*tmp11*dytmp8; │ │ │ │ │ -565 │ │ │ │ │ -566 out[12][0]=0; │ │ │ │ │ -567 out[12][1]=sign3*dytmp12; │ │ │ │ │ -568 out[13][0]=0; │ │ │ │ │ -569 out[13][1]=3.0*tmp9*dytmp12; │ │ │ │ │ -570 out[14][0]=0; │ │ │ │ │ -571 out[14][1]=sign3*5.0*tmp10*dytmp12; │ │ │ │ │ -572 out[15][0]=0; │ │ │ │ │ -573 out[15][1]=7.0*tmp11*dytmp12; │ │ │ │ │ -574 │ │ │ │ │ -575 out[16][0]=0; │ │ │ │ │ -576 out[16][1]=0; │ │ │ │ │ -577 out[17][0]=-30.0*tmp14*dytmp3; │ │ │ │ │ -578 out[17][1]=0; │ │ │ │ │ -579 out[18][0]=-50.0*tmp14*dytmp4; │ │ │ │ │ -580 out[18][1]=0; │ │ │ │ │ -581 out[19][0]=-70.0*tmp14*dytmp5; │ │ │ │ │ -582 out[19][1]=0; │ │ │ │ │ -583 out[20][0]=0; │ │ │ │ │ -584 out[20][1]=0; │ │ │ │ │ -585 out[21][0]=-90.0*tmp15*dytmp3; │ │ │ │ │ -586 out[21][1]=0; │ │ │ │ │ -587 out[22][0]=-150.0*tmp15*dytmp4; │ │ │ │ │ -588 out[22][1]=0; │ │ │ │ │ -589 out[23][0]=-210.0*tmp15*dytmp5; │ │ │ │ │ -590 out[23][1]=0; │ │ │ │ │ -591 out[24][0]=0; │ │ │ │ │ -592 out[24][1]=0; │ │ │ │ │ -593 out[25][0]=-210.0*tmp16*dytmp3; │ │ │ │ │ -594 out[25][1]=0; │ │ │ │ │ -595 out[26][0]=-350.0*tmp16*dytmp4; │ │ │ │ │ -596 out[26][1]=0; │ │ │ │ │ -597 out[27][0]=-490.0*tmp16*dytmp5; │ │ │ │ │ -598 out[27][1]=0; │ │ │ │ │ -599 out[28][0]=0; │ │ │ │ │ -600 out[28][1]=10.0*dytmp17; │ │ │ │ │ -601 out[29][0]=0; │ │ │ │ │ -602 out[29][1]=-30.0*dytmp18; │ │ │ │ │ -603 out[30][0]=0; │ │ │ │ │ -604 out[30][1]=-70.0*dytmp19; │ │ │ │ │ -605 out[31][0]=0; │ │ │ │ │ -606 out[31][1]=-30.0*tmp9*dytmp20; │ │ │ │ │ -607 out[32][0]=0; │ │ │ │ │ -608 out[32][1]=-90.0*tmp9*dytmp18; │ │ │ │ │ -609 out[33][0]=0; │ │ │ │ │ -610 out[33][1]=-210.0*tmp9*dytmp19; │ │ │ │ │ -611 out[34][0]=0; │ │ │ │ │ -612 out[34][1]=-50.0*tmp10*dytmp20; │ │ │ │ │ -613 out[35][0]=0; │ │ │ │ │ -614 out[35][1]=-150.0*tmp10*dytmp18; │ │ │ │ │ -615 out[36][0]=0; │ │ │ │ │ -616 out[36][1]=-350.0*tmp10*dytmp19; │ │ │ │ │ -617 out[37][0]=0; │ │ │ │ │ -618 out[37][1]=-70.0*tmp11*dytmp20; │ │ │ │ │ -619 out[38][0]=0; │ │ │ │ │ -620 out[38][1]=-210.0*tmp11*dytmp18; │ │ │ │ │ -621 out[39][0]=0; │ │ │ │ │ -622 out[39][1]=-490.0*tmp11*dytmp19; │ │ │ │ │ -623 } else { │ │ │ │ │ -624 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -625 } │ │ │ │ │ -626 } else { │ │ │ │ │ -627 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -628 } │ │ │ │ │ -629 } │ │ │ │ │ -630 │ │ │ │ │ -_6_3_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ -633 { │ │ │ │ │ -634 return 7; │ │ │ │ │ -635 } │ │ │ │ │ -636 │ │ │ │ │ -637 private: │ │ │ │ │ -638 R sign0, sign1, sign2, sign3; │ │ │ │ │ -639 }; │ │ │ │ │ -640} │ │ │ │ │ -641 │ │ │ │ │ -642#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +105 private: │ │ │ │ │ +106 │ │ │ │ │ +107 // Signs of the face normals │ │ │ │ │ +108 std::array sign_; │ │ │ │ │ +109 }; │ │ │ │ │ +110} │ │ │ │ │ +111#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT03DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:100 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:179 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT3Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:632 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:401 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:30 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas03dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <cmath>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT3Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT03DLocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas3cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas03dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00206_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,163 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2dlocalinterpolation.hh
│ │ │ │ +
raviartthomas03dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
28
│ │ │ │ -
│ │ │ │ -
34 RT3Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ -
35 {
│ │ │ │ -
36 for (size_t i=0; i<4; i++)
│ │ │ │ -
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
38
│ │ │ │ -
39 n_[0] = {-1.0, 0.0};
│ │ │ │ -
40 n_[1] = { 1.0, 0.0};
│ │ │ │ -
41 n_[2] = { 0.0, -1.0};
│ │ │ │ -
42 n_[3] = { 0.0, 1.0};
│ │ │ │ +
8#include <cmath>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <bitset>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │ +
19
│ │ │ │ +
│ │ │ │ +
25 RT03DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ +
26 {
│ │ │ │ +
27 using std::sqrt;
│ │ │ │ +
28 for (std::size_t i=0; i<sign_.size(); i++)
│ │ │ │ +
29 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
30
│ │ │ │ +
31 m_[0] = {1/3.0, 1/3.0, 0.0};
│ │ │ │ +
32 m_[1] = {1/3.0, 0.0, 1/3.0};
│ │ │ │ +
33 m_[2] = { 0.0, 1/3.0, 1/3.0};
│ │ │ │ +
34 m_[3] = {1/3.0, 1/3.0, 1/3.0};
│ │ │ │ +
35 n_[0] = { 0.0, 0.0, -1.0};
│ │ │ │ +
36 n_[1] = { 0.0, -1.0, 0.0};
│ │ │ │ +
37 n_[2] = { -1.0, 0.0, 0.0};
│ │ │ │ +
38 n_[3] = {1.0/sqrt(3.0), 1.0/sqrt(3.0), 1.0/sqrt(3.0)};
│ │ │ │ +
39 c_[0] = sqrt(2.0);
│ │ │ │ +
40 c_[1] = sqrt(2.0);
│ │ │ │ +
41 c_[2] = sqrt(2.0);
│ │ │ │ +
42 c_[3] = sqrt(2.0)/sqrt(3.0);
│ │ │ │
43 }
│ │ │ │
│ │ │ │
44
│ │ │ │ -
53 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
55 {
│ │ │ │ -
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
59
│ │ │ │ -
60 out.resize(40);
│ │ │ │ -
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
62
│ │ │ │ -
63 const int qOrder = 9;
│ │ │ │ -
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
65
│ │ │ │ -
66 for (auto&& qp : rule1)
│ │ │ │ -
67 {
│ │ │ │ -
68 Scalar qPos = qp.position();
│ │ │ │ -
69 typename LB::Traits::DomainType localPos;
│ │ │ │ +
45 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
46 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
47 {
│ │ │ │ +
48 // f gives v*outer normal at a point on the face!
│ │ │ │ +
49
│ │ │ │ +
50 out.resize(4);
│ │ │ │ +
51
│ │ │ │ +
52 for (int i=0; i<4; i++)
│ │ │ │ +
53 {
│ │ │ │ +
54 auto y = f(m_[i]);
│ │ │ │ +
55 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1]+y[2]*n_[i][2])*sign_[i]/c_[i];
│ │ │ │ +
56 }
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
59 private:
│ │ │ │ +
60 // Face orientations
│ │ │ │ +
61 std::array<typename LB::Traits::RangeFieldType,4> sign_;
│ │ │ │ +
62 // Face midpoints of the reference tetrahedron
│ │ │ │ +
63 std::array<typename LB::Traits::DomainType,4> m_;
│ │ │ │ +
64 // Unit outer normals of the reference tetrahedron
│ │ │ │ +
65 std::array<typename LB::Traits::DomainType,4> n_;
│ │ │ │ +
66 // Inverse triangle face area
│ │ │ │ +
67 std::array<typename LB::Traits::RangeFieldType,4> c_;
│ │ │ │ +
68 };
│ │ │ │ +
│ │ │ │ +
69}
│ │ │ │
70
│ │ │ │ -
71 localPos = {0.0, qPos};
│ │ │ │ -
72 auto y = f(localPos);
│ │ │ │ -
73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ -
74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[0];
│ │ │ │ -
76 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
77
│ │ │ │ -
78 localPos = {1.0, qPos};
│ │ │ │ -
79 y = f(localPos);
│ │ │ │ -
80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ -
81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
82 out[6] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[1];
│ │ │ │ -
83 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight();
│ │ │ │ -
84
│ │ │ │ -
85 localPos = {qPos, 0.0};
│ │ │ │ -
86 y = f(localPos);
│ │ │ │ -
87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ -
88 out[9] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
89 out[10] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[2];
│ │ │ │ -
90 out[11] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight();
│ │ │ │ -
91
│ │ │ │ -
92 localPos = {qPos, 1.0};
│ │ │ │ -
93 y = f(localPos);
│ │ │ │ -
94 out[12] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ -
95 out[13] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
96 out[14] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[3];
│ │ │ │ -
97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
98 }
│ │ │ │ -
99
│ │ │ │ -
100 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ -
101
│ │ │ │ -
102 for (auto&& qp : rule2)
│ │ │ │ -
103 {
│ │ │ │ -
104 auto qPos = qp.position();
│ │ │ │ -
105
│ │ │ │ -
106 auto y = f(qPos);
│ │ │ │ -
107 double l0_x=1.0;
│ │ │ │ -
108 double l1_x=2.0*qPos[0]-1.0;
│ │ │ │ -
109 double l2_x=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0;
│ │ │ │ -
110 double l3_x=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] - 1.0;
│ │ │ │ -
111 double l0_y=1.0;
│ │ │ │ -
112 double l1_y=2.0*qPos[1]-1.0;
│ │ │ │ -
113 double l2_y=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0;
│ │ │ │ -
114 double l3_y=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] - 1.0;
│ │ │ │ -
115
│ │ │ │ -
116 out[16] += y[0]*l0_x*l0_y*qp.weight();
│ │ │ │ -
117 out[17] += y[0]*l0_x*l1_y*qp.weight();
│ │ │ │ -
118 out[18] += y[0]*l0_x*l2_y*qp.weight();
│ │ │ │ -
119 out[19] += y[0]*l0_x*l3_y*qp.weight();
│ │ │ │ -
120 out[20] += y[0]*l1_x*l0_y*qp.weight();
│ │ │ │ -
121 out[21] += y[0]*l1_x*l1_y*qp.weight();
│ │ │ │ -
122 out[22] += y[0]*l1_x*l2_y*qp.weight();
│ │ │ │ -
123 out[23] += y[0]*l1_x*l3_y*qp.weight();
│ │ │ │ -
124 out[24] += y[0]*l2_x*l0_y*qp.weight();
│ │ │ │ -
125 out[25] += y[0]*l2_x*l1_y*qp.weight();
│ │ │ │ -
126 out[26] += y[0]*l2_x*l2_y*qp.weight();
│ │ │ │ -
127 out[27] += y[0]*l2_x*l3_y*qp.weight();
│ │ │ │ -
128
│ │ │ │ -
129 out[28] += y[1]*l0_x*l0_y*qp.weight();
│ │ │ │ -
130 out[29] += y[1]*l0_x*l1_y*qp.weight();
│ │ │ │ -
131 out[30] += y[1]*l0_x*l2_y*qp.weight();
│ │ │ │ -
132 out[31] += y[1]*l1_x*l0_y*qp.weight();
│ │ │ │ -
133 out[32] += y[1]*l1_x*l1_y*qp.weight();
│ │ │ │ -
134 out[33] += y[1]*l1_x*l2_y*qp.weight();
│ │ │ │ -
135 out[34] += y[1]*l2_x*l0_y*qp.weight();
│ │ │ │ -
136 out[35] += y[1]*l2_x*l1_y*qp.weight();
│ │ │ │ -
137 out[36] += y[1]*l2_x*l2_y*qp.weight();
│ │ │ │ -
138 out[37] += y[1]*l3_x*l0_y*qp.weight();
│ │ │ │ -
139 out[38] += y[1]*l3_x*l1_y*qp.weight();
│ │ │ │ -
140 out[39] += y[1]*l3_x*l2_y*qp.weight();
│ │ │ │ -
141 }
│ │ │ │ -
142 }
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
144 private:
│ │ │ │ -
145 // Edge orientations
│ │ │ │ -
146 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ -
147
│ │ │ │ -
148 // Edge normals
│ │ │ │ -
149 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ -
150 };
│ │ │ │ -
│ │ │ │ -
151}
│ │ │ │ -
152
│ │ │ │ -
153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
71#endif
│ │ │ │ +
RT03DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with given set of face orientations.
Definition raviartthomas03dlocalinterpolation.hh:25
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalinterpolation.hh:25
│ │ │ │ -
RT3Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2dlocalinterpolation.hh:34
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas3cube2dlocalinterpolation.hh:54
│ │ │ │ +
Definition raviartthomas03dlocalinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas03dlocalinterpolation.hh:46
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,170 +1,92 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d │ │ │ │ │ -raviartthomas3cube2dlocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d │ │ │ │ │ +raviartthomas03dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_RAVIARTTHOMAS03DLOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -25 { │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -28 │ │ │ │ │ -_3_4 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ -35 { │ │ │ │ │ -36 for (size_t i=0; i<4; i++) │ │ │ │ │ -37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -38 │ │ │ │ │ -39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ -40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ -41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ -42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 template │ │ │ │ │ +_1_6 class _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +17 { │ │ │ │ │ +18 public: │ │ │ │ │ +19 │ │ │ │ │ +_2_5 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ +26 { │ │ │ │ │ +27 using std::sqrt; │ │ │ │ │ +28 for (std::size_t i=0; i │ │ │ │ │ -_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -55 { │ │ │ │ │ -56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -59 │ │ │ │ │ -60 out.resize(40); │ │ │ │ │ -61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -62 │ │ │ │ │ -63 const int qOrder = 9; │ │ │ │ │ -64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ -qOrder); │ │ │ │ │ -65 │ │ │ │ │ -66 for (auto&& qp : rule1) │ │ │ │ │ -67 { │ │ │ │ │ -68 Scalar qPos = qp.position(); │ │ │ │ │ -69 typename LB::Traits::DomainType localPos; │ │ │ │ │ +45 template │ │ │ │ │ +_4_6 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +47 { │ │ │ │ │ +48 // f gives v*outer normal at a point on the face! │ │ │ │ │ +49 │ │ │ │ │ +50 out.resize(4); │ │ │ │ │ +51 │ │ │ │ │ +52 for (int i=0; i<4; i++) │ │ │ │ │ +53 { │ │ │ │ │ +54 auto y = f(m_[i]); │ │ │ │ │ +55 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1]+y[2]*n_[i][2])*sign_[i]/c_[i]; │ │ │ │ │ +56 } │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 private: │ │ │ │ │ +60 // Face orientations │ │ │ │ │ +61 std::array sign_; │ │ │ │ │ +62 // Face midpoints of the reference tetrahedron │ │ │ │ │ +63 std::array m_; │ │ │ │ │ +64 // Unit outer normals of the reference tetrahedron │ │ │ │ │ +65 std::array n_; │ │ │ │ │ +66 // Inverse triangle face area │ │ │ │ │ +67 std::array c_; │ │ │ │ │ +68 }; │ │ │ │ │ +69} │ │ │ │ │ 70 │ │ │ │ │ -71 localPos = {0.0, qPos}; │ │ │ │ │ -72 auto y = f(localPos); │ │ │ │ │ -73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ -74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[0]; │ │ │ │ │ -76 out[3] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(20.0*qPos*qPos*qPos - │ │ │ │ │ -30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -77 │ │ │ │ │ -78 localPos = {1.0, qPos}; │ │ │ │ │ -79 y = f(localPos); │ │ │ │ │ -80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ -81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -82 out[6] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[1]; │ │ │ │ │ -83 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(-20.0*qPos*qPos*qPos + │ │ │ │ │ -30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight(); │ │ │ │ │ -84 │ │ │ │ │ -85 localPos = {qPos, 0.0}; │ │ │ │ │ -86 y = f(localPos); │ │ │ │ │ -87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ -88 out[9] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -89 out[10] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[2]; │ │ │ │ │ -90 out[11] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(-20.0*qPos*qPos*qPos + │ │ │ │ │ -30.0*qPos*qPos - 12.0*qPos + 1.0)*qp.weight(); │ │ │ │ │ -91 │ │ │ │ │ -92 localPos = {qPos, 1.0}; │ │ │ │ │ -93 y = f(localPos); │ │ │ │ │ -94 out[12] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ -95 out[13] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -96 out[14] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[3]; │ │ │ │ │ -97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(20.0*qPos*qPos*qPos - │ │ │ │ │ -30.0*qPos*qPos + 12.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -98 } │ │ │ │ │ -99 │ │ │ │ │ -100 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ -qOrder); │ │ │ │ │ -101 │ │ │ │ │ -102 for (auto&& qp : rule2) │ │ │ │ │ -103 { │ │ │ │ │ -104 auto qPos = qp.position(); │ │ │ │ │ -105 │ │ │ │ │ -106 auto y = f(qPos); │ │ │ │ │ -107 double l0_x=1.0; │ │ │ │ │ -108 double l1_x=2.0*qPos[0]-1.0; │ │ │ │ │ -109 double l2_x=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0; │ │ │ │ │ -110 double l3_x=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos │ │ │ │ │ -[0] - 1.0; │ │ │ │ │ -111 double l0_y=1.0; │ │ │ │ │ -112 double l1_y=2.0*qPos[1]-1.0; │ │ │ │ │ -113 double l2_y=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0; │ │ │ │ │ -114 double l3_y=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos │ │ │ │ │ -[1] - 1.0; │ │ │ │ │ -115 │ │ │ │ │ -116 out[16] += y[0]*l0_x*l0_y*qp.weight(); │ │ │ │ │ -117 out[17] += y[0]*l0_x*l1_y*qp.weight(); │ │ │ │ │ -118 out[18] += y[0]*l0_x*l2_y*qp.weight(); │ │ │ │ │ -119 out[19] += y[0]*l0_x*l3_y*qp.weight(); │ │ │ │ │ -120 out[20] += y[0]*l1_x*l0_y*qp.weight(); │ │ │ │ │ -121 out[21] += y[0]*l1_x*l1_y*qp.weight(); │ │ │ │ │ -122 out[22] += y[0]*l1_x*l2_y*qp.weight(); │ │ │ │ │ -123 out[23] += y[0]*l1_x*l3_y*qp.weight(); │ │ │ │ │ -124 out[24] += y[0]*l2_x*l0_y*qp.weight(); │ │ │ │ │ -125 out[25] += y[0]*l2_x*l1_y*qp.weight(); │ │ │ │ │ -126 out[26] += y[0]*l2_x*l2_y*qp.weight(); │ │ │ │ │ -127 out[27] += y[0]*l2_x*l3_y*qp.weight(); │ │ │ │ │ -128 │ │ │ │ │ -129 out[28] += y[1]*l0_x*l0_y*qp.weight(); │ │ │ │ │ -130 out[29] += y[1]*l0_x*l1_y*qp.weight(); │ │ │ │ │ -131 out[30] += y[1]*l0_x*l2_y*qp.weight(); │ │ │ │ │ -132 out[31] += y[1]*l1_x*l0_y*qp.weight(); │ │ │ │ │ -133 out[32] += y[1]*l1_x*l1_y*qp.weight(); │ │ │ │ │ -134 out[33] += y[1]*l1_x*l2_y*qp.weight(); │ │ │ │ │ -135 out[34] += y[1]*l2_x*l0_y*qp.weight(); │ │ │ │ │ -136 out[35] += y[1]*l2_x*l1_y*qp.weight(); │ │ │ │ │ -137 out[36] += y[1]*l2_x*l2_y*qp.weight(); │ │ │ │ │ -138 out[37] += y[1]*l3_x*l0_y*qp.weight(); │ │ │ │ │ -139 out[38] += y[1]*l3_x*l1_y*qp.weight(); │ │ │ │ │ -140 out[39] += y[1]*l3_x*l2_y*qp.weight(); │ │ │ │ │ -141 } │ │ │ │ │ -142 } │ │ │ │ │ -143 │ │ │ │ │ -144 private: │ │ │ │ │ -145 // Edge orientations │ │ │ │ │ -146 std::array sign_; │ │ │ │ │ -147 │ │ │ │ │ -148 // Edge normals │ │ │ │ │ -149 std::array n_; │ │ │ │ │ -150 }; │ │ │ │ │ -151} │ │ │ │ │ -152 │ │ │ │ │ -153#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +71#endif │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT03DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +Constructor with given set of face orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:25 │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT3Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:54 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:46 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,36 +72,38 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas3cube2d.hh File Reference
│ │ │ │ +
raviartthomassimplex.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas3cube2d/raviartthomas3cube2dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas3cube2d/raviartthomas3cube2dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas3cube2d/raviartthomas3cube2dlocalinterpolation.hh"
│ │ │ │ + │ │ │ │ +

Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. │ │ │ │ +More...

│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT3Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
class  Dune::RaviartThomasSimplexLocalFiniteElement< dimDomain, D, R, SF, CF >
 Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,23 +2,26 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas3cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +raviartthomassimplex.hh File Reference │ │ │ │ │ +Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ +arbitrary dimension. _M_o_r_e_._._. │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +  Raviart-Thomas local finite elements of arbitrary order for simplices │ │ │ │ │ + of arbitrary dimension. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ +arbitrary dimension. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00209_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas3cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,119 +74,62 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas3cube2d.hh
│ │ │ │ +
raviartthomassimplex.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {}
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
47 basis(s),
│ │ │ │ -
48 interpolation(s)
│ │ │ │ -
49 {}
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
51 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
52 {
│ │ │ │ -
53 return basis;
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
57 {
│ │ │ │ -
58 return coefficients;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
62 {
│ │ │ │ -
63 return interpolation;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
67 unsigned int size () const
│ │ │ │ -
68 {
│ │ │ │ -
69 return basis.size();
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
│ │ │ │ -
72 static constexpr GeometryType type ()
│ │ │ │ -
73 {
│ │ │ │ -
74 return GeometryTypes::quadrilateral;
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
77 private:
│ │ │ │ - │ │ │ │ -
79 RT3Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82}
│ │ │ │ -
83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
10
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
35 template<unsigned int dimDomain, class D, class R,
│ │ │ │ +
36 class SF=R, class CF=SF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 : public GenericLocalFiniteElement<RaviartThomasBasisFactory<dimDomain, SF, CF>,
│ │ │ │ +
39 RaviartThomasCoefficientsFactory<dimDomain>,
│ │ │ │ +
40 RaviartThomasL2InterpolationFactory<dimDomain, SF> >
│ │ │ │ +
41 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
45 public:
│ │ │ │ +
46 using typename Base::Traits;
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 RaviartThomasSimplexLocalFiniteElement(const GeometryType &gt, unsigned int order)
│ │ │ │ +
50 : Base(gt, order)
│ │ │ │ +
51 {}
│ │ │ │ +
│ │ │ │ +
52 };
│ │ │ │ +
│ │ │ │ +
53} // namespace Dune
│ │ │ │ +
54
│ │ │ │ +
55#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas3cube2d.hh:29
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas3cube2d.hh:56
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas3cube2d.hh:72
│ │ │ │ -
LocalFiniteElementTraits< RT3Cube2DLocalBasis< D, R >, RT3Cube2DLocalCoefficients, RT3Cube2DLocalInterpolation< RT3Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas3cube2d.hh:35
│ │ │ │ -
RT3Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas3cube2d.hh:46
│ │ │ │ -
RT3Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas3cube2d.hh:38
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas3cube2d.hh:67
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas3cube2d.hh:51
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas3cube2d.hh:61
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalbasis.hh:29
│ │ │ │ -
Layout map for Raviart-Thomas-3 elements on quadrilaterals.
Definition raviartthomas3cube2dlocalcoefficients.hh:23
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas3cube2dlocalinterpolation.hh:25
│ │ │ │ +
Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.
Definition raviartthomassimplex.hh:41
│ │ │ │ +
RaviartThomasSimplexLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition raviartthomassimplex.hh:49
│ │ │ │ +
Definition raviartthomassimplexinterpolation.hh:423
│ │ │ │ +
Definition raviartthomassimplexinterpolation.hh:70
│ │ │ │ +
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ +
LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, typename InterpolF::Object > Traits
Definition localfunctions/utility/localfiniteelement.hh:29
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +1,72 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas3cube2d.hh │ │ │ │ │ +raviartthomassimplex.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -33 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -34 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_5 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -39 {} │ │ │ │ │ -40 │ │ │ │ │ -_4_6 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -47 basis(s), │ │ │ │ │ -48 interpolation(s) │ │ │ │ │ -49 {} │ │ │ │ │ -50 │ │ │ │ │ -_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -52 { │ │ │ │ │ -53 return basis; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return coefficients; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -62 { │ │ │ │ │ -63 return interpolation; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_7 unsigned int _s_i_z_e () const │ │ │ │ │ -68 { │ │ │ │ │ -69 return basis.size(); │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -_7_2 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -73 { │ │ │ │ │ -74 return GeometryTypes::quadrilateral; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -77 private: │ │ │ │ │ -78 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -79 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -80 _R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -81 }; │ │ │ │ │ -82} │ │ │ │ │ -83#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +9#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h" │ │ │ │ │ +10 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +35 template │ │ │ │ │ +_3_7 class _R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +38 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t, │ │ │ │ │ +39 RaviartThomasCoefficientsFactory, │ │ │ │ │ +40 RaviartThomasL2InterpolationFactory > │ │ │ │ │ +41 { │ │ │ │ │ +42 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ +_C_F_>, │ │ │ │ │ +43 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_>, │ │ │ │ │ +44 _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_,_ _S_F_> > _B_a_s_e; │ │ │ │ │ +45 public: │ │ │ │ │ +46 using typename _B_a_s_e_:_:_T_r_a_i_t_s; │ │ │ │ │ +47 │ │ │ │ │ +_4_9 _R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(const GeometryType >, unsigned int │ │ │ │ │ +order) │ │ │ │ │ +50 : _B_a_s_e(gt, order) │ │ │ │ │ +51 {} │ │ │ │ │ +52 }; │ │ │ │ │ +53} // namespace Dune │ │ │ │ │ +54 │ │ │ │ │ +55#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT3Cube2DLocalBasis< D, R >, │ │ │ │ │ -RT3Cube2DLocalCoefficients, RT3Cube2DLocalInterpolation< RT3Cube2DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT3Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT3Cube2DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalbasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-3 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ +arbitrary dimension. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplex.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RaviartThomasSimplexLocalFiniteElement(const GeometryType >, unsigned int │ │ │ │ │ +order) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplex.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:423 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +A LocalFiniteElement implementation based on three TopologyFactories providing │ │ │ │ │ +the LocalBasis,... │ │ │ │ │ +DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, │ │ │ │ │ +typename InterpolF::Object > Traits │ │ │ │ │ +DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:29 │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas12d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas12d/raviartthomas12dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas12d/raviartthomas12dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas12d/raviartthomas12dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT12DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on the reference triangle. More...
class  Dune::RT12DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on triangles. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +raviartthomas12d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00212_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,82 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas12dlocalcoefficients.hh
│ │ │ │ +
raviartthomas12d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24
│ │ │ │ -
25 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29 for (std::size_t i = 0; i < 3; i++)
│ │ │ │ -
30 {
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 li[3 + i] = LocalKey(i,1,1);
│ │ │ │ -
33 }
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ +
27 class
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ + │ │ │ │ + │ │ │ │
34
│ │ │ │ -
35 // last two DOF are associated with the cell (codim = 0)
│ │ │ │ -
36 li[6] = LocalKey(0,0,0);
│ │ │ │ -
37 li[7] = LocalKey(0,0,1);
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 std::size_t size () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return 8;
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ -
47 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
48 {
│ │ │ │ -
49 return li[i];
│ │ │ │ -
50 }
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
52 private:
│ │ │ │ -
53 std::vector<LocalKey> li;
│ │ │ │ -
54 };
│ │ │ │ -
│ │ │ │ -
55}
│ │ │ │ -
56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::triangle;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 RT12DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81
│ │ │ │ +
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
First order Raviart-Thomas shape functions on triangles.
Definition raviartthomas12d.hh:29
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas12d.hh:65
│ │ │ │ +
LocalFiniteElementTraits< RT12DLocalBasis< D, R >, RT12DLocalCoefficients, RT12DLocalInterpolation< RT12DLocalBasis< D, R > > > Traits
Definition raviartthomas12d.hh:33
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas12d.hh:49
│ │ │ │ +
RT12DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12d.hh:44
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas12d.hh:54
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas12d.hh:70
│ │ │ │ +
RT12DLocalFiniteElement()
Standard constructor.
Definition raviartthomas12d.hh:36
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas12d.hh:59
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas12dlocalbasis.hh:28
│ │ │ │
Layout map for Raviart-Thomas-1 elements on the reference triangle.
Definition raviartthomas12dlocalcoefficients.hh:23
│ │ │ │ -
RT12DLocalCoefficients()
Standard constructor.
Definition raviartthomas12dlocalcoefficients.hh:27
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas12dlocalcoefficients.hh:47
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas12dlocalcoefficients.hh:41
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas12dlocalinterpolation.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,80 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ -raviartthomas12dlocalcoefficients.hh │ │ │ │ │ +raviartthomas12d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_2 class _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -23 { │ │ │ │ │ -24 │ │ │ │ │ -25 public: │ │ │ │ │ -_2_7 _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(8) │ │ │ │ │ -28 { │ │ │ │ │ -29 for (std::size_t i = 0; i < 3; i++) │ │ │ │ │ -30 { │ │ │ │ │ -31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 li[3 + i] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -33 } │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class │ │ │ │ │ +28 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ 34 │ │ │ │ │ -35 // last two DOF are associated with the cell (codim = 0) │ │ │ │ │ -36 li[6] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ -37 li[7] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ -38 } │ │ │ │ │ -39 │ │ │ │ │ -_4_1 std::size_t _s_i_z_e () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return 8; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -_4_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -48 { │ │ │ │ │ -49 return li[i]; │ │ │ │ │ -50 } │ │ │ │ │ -51 │ │ │ │ │ -52 private: │ │ │ │ │ -53 std::vector li; │ │ │ │ │ -54 }; │ │ │ │ │ -55} │ │ │ │ │ -56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ +_3_6 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::triangle; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81 │ │ │ │ │ +82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +First order Raviart-Thomas shape functions on triangles. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT12DLocalBasis< D, R >, RT12DLocalCoefficients, │ │ │ │ │ +RT12DLocalInterpolation< RT12DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT12DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT12DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:28 │ │ │ │ │ _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ │ DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT12DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalinterpolation.hh:25 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0cube2dall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas0cube2dall.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT12DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference triangle. More...
class  Dune::RT0Cube2DLocalBasis< D, R >
 
class  Dune::RT0Cube2DLocalInterpolation< LB >
 
class  Dune::RT0Cube2DLocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas12dlocalbasis.hh File Reference │ │ │ │ │ +raviartthomas0cube2dall.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00215_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0cube2dall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,215 +70,249 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas12dlocalbasis.hh
│ │ │ │ +
raviartthomas0cube2dall.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
31 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
39 RT12DLocalBasis (std::bitset<3> s = 0)
│ │ │ │ -
40 {
│ │ │ │ -
41 for (size_t i=0; i<3; i++)
│ │ │ │ -
42 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 unsigned int size () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return 8;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
59 {
│ │ │ │ -
60 out.resize(8);
│ │ │ │ -
61 out[0][0] = sign_[0]*(in[0] - 4.0*in[0]*in[1]);
│ │ │ │ -
62 out[0][1] = sign_[0]*(-1.0 + 5.0*in[1] - 4.0*in[1]*in[1]);
│ │ │ │ -
63 out[1][0] = sign_[1]*(-1.0 + 5.0*in[0] - 4.0*in[0]*in[0]);
│ │ │ │ -
64 out[1][1] = sign_[1]*(in[1] - 4.0*in[0]*in[1]);
│ │ │ │ -
65 out[2][0] = sign_[2]*(-3.0*in[0] + 4.0*in[0]*in[0] + 4.0*in[1]*in[0]);
│ │ │ │ -
66 out[2][1] = sign_[2]*(-3.0*in[1] + 4.0*in[0]*in[1] + 4.0*in[1]*in[1]);
│ │ │ │ -
67 out[3][0] = -5.0*in[0] + 8.0*in[0]*in[0] + 4.0*in[1]*in[0];
│ │ │ │ -
68 out[3][1] = 3.0 - 6.0*in[0] - 7.0*in[1] + 8.0*in[0]*in[1] + 4.0*in[1]*in[1];
│ │ │ │ -
69 out[4][0] = -3.0 + 7.0*in[0] + 6.0*in[1] - 4.0*in[0]*in[0] - 8.0*in[1]*in[0];
│ │ │ │ -
70 out[4][1] = 5.0*in[1] - 4.0*in[0]*in[1] - 8.0*in[1]*in[1];
│ │ │ │ -
71 out[5][0] = in[0] - 4.0*in[0]*in[0] + 4.0*in[1]*in[0];
│ │ │ │ -
72 out[5][1] = -1.0*in[1] - 4.0*in[0]*in[1] + 4.0*in[1]*in[1];
│ │ │ │ -
73 out[6][0] = 16.0*in[0] - 16.0*in[0]*in[0] - 8.0*in[1]*in[0];
│ │ │ │ -
74 out[6][1] = 8.0*in[1] - 16.0*in[0]*in[1] - 8.0*in[1]*in[1];
│ │ │ │ -
75 out[7][0] = 8.0*in[0] - 8.0*in[0]*in[0] - 16.0*in[1]*in[0];
│ │ │ │ -
76 out[7][1] = 16.0*in[1] - 8.0*in[0]*in[1] - 16.0*in[1]*in[1];
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
85 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
86 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
87 {
│ │ │ │ -
88 out.resize(8);
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
28 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 public:
│ │ │ │ +
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
36 RT0Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
37 {
│ │ │ │ +
38 for (int i=0; i<4; i++)
│ │ │ │ +
39 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
40 }
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
43 unsigned int size () const
│ │ │ │ +
44 {
│ │ │ │ +
45 return 4;
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
50 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
51 {
│ │ │ │ +
52 out.resize(4);
│ │ │ │ +
53 out[0] = {sign_[0]*(in[0]-1.0), 0.0};
│ │ │ │ +
54 out[1] = {sign_[1]*(in[0]), 0.0};
│ │ │ │ +
55 out[2] = {0.0, sign_[2]*(in[1]-1.0)};
│ │ │ │ +
56 out[3] = {0.0, sign_[3]*(in[1])};
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
60 inline void
│ │ │ │ +
│ │ │ │ +
61 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
62 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
63 {
│ │ │ │ +
64 out.resize(4);
│ │ │ │ +
65 out[0][0] = {sign_[0], 0};
│ │ │ │ +
66 out[0][1] = {0, 0};
│ │ │ │ +
67
│ │ │ │ +
68 out[1][0] = {sign_[1], 0};
│ │ │ │ +
69 out[1][1] = {0, 0};
│ │ │ │ +
70
│ │ │ │ +
71 out[2][0] = {0, 0};
│ │ │ │ +
72 out[2][1] = {0, sign_[2]};
│ │ │ │ +
73
│ │ │ │ +
74 out[3][0] = {0, 0};
│ │ │ │ +
75 out[3][1] = {0, sign_[3]};
│ │ │ │ +
76 }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
│ │ │ │ +
79 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
80 const typename Traits::DomainType& in, // position
│ │ │ │ +
81 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
82 {
│ │ │ │ +
83 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
84 if (totalOrder == 0) {
│ │ │ │ +
85 evaluateFunction(in, out);
│ │ │ │ +
86 } else if (totalOrder == 1) {
│ │ │ │ +
87 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
88 out.resize(size());
│ │ │ │
89
│ │ │ │ -
90 out[0][0][0] = sign_[0]*(1.0 - 4.0*in[1]);
│ │ │ │ -
91 out[0][0][1] = sign_[0]*(-4.0*in[0]);
│ │ │ │ -
92 out[0][1][0] = 0.0;
│ │ │ │ -
93 out[0][1][1] = sign_[0]*(5.0 - 8.0*in[1]);
│ │ │ │ -
94
│ │ │ │ -
95 out[1][0][0] = sign_[1]*(5.0 - 8.0*in[0]);
│ │ │ │ -
96 out[1][0][1] = 0.0;
│ │ │ │ -
97 out[1][1][0] = sign_[1]*(-4.0*in[1]);
│ │ │ │ -
98 out[1][1][1] = sign_[1]*(1.0 - 4.0*in[0]);
│ │ │ │ -
99
│ │ │ │ -
100 out[2][0][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]);
│ │ │ │ -
101 out[2][0][1] = sign_[2]*(4.0*in[0]);
│ │ │ │ -
102 out[2][1][0] = sign_[2]*(4.0*in[1]);
│ │ │ │ -
103 out[2][1][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]);
│ │ │ │ -
104
│ │ │ │ -
105 out[3][0][0] = -5.0 + 16.0*in[0] + 4.0*in[1];
│ │ │ │ -
106 out[3][0][1] = 4.0*in[0];
│ │ │ │ -
107 out[3][1][0] = -6.0 + 8.0*in[1];
│ │ │ │ -
108 out[3][1][1] = -7.0 + 8.0*in[0] + 8.0*in[1];
│ │ │ │ -
109
│ │ │ │ -
110 out[4][0][0] = 7.0 - 8.0*in[0] - 8.0*in[1];
│ │ │ │ -
111 out[4][0][1] = 6.0 - 8.0*in[0];
│ │ │ │ -
112 out[4][1][0] = -4.0*in[1];
│ │ │ │ -
113 out[4][1][1] = 5.0 - 4.0*in[0] - 16.0*in[1];
│ │ │ │ -
114
│ │ │ │ -
115 out[5][0][0] = 1.0 - 8.0*in[0] + 4*in[1];
│ │ │ │ -
116 out[5][0][1] = 4.0*in[0];
│ │ │ │ -
117 out[5][1][0] = -4.0*in[1];
│ │ │ │ -
118 out[5][1][1] = -1.0 - 4.0*in[0] + 8.0*in[1];
│ │ │ │ +
90 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
91 out[i] = {0, 0};
│ │ │ │ +
92
│ │ │ │ +
93 switch (direction) {
│ │ │ │ +
94 case 0:
│ │ │ │ +
95 out[0][0] = sign_[0];
│ │ │ │ +
96 out[1][0] = sign_[1];
│ │ │ │ +
97 break;
│ │ │ │ +
98 case 1:
│ │ │ │ +
99 out[2][1] = sign_[2];
│ │ │ │ +
100 out[3][1] = sign_[3];
│ │ │ │ +
101 break;
│ │ │ │ +
102 default:
│ │ │ │ +
103 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
104 }
│ │ │ │ +
105 } else {
│ │ │ │ +
106 out.resize(size());
│ │ │ │ +
107 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
108 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ +
109 out[i][j] = 0;
│ │ │ │ +
110 }
│ │ │ │ +
111
│ │ │ │ +
112 }
│ │ │ │ +
│ │ │ │ +
113
│ │ │ │ +
│ │ │ │ +
115 unsigned int order () const
│ │ │ │ +
116 {
│ │ │ │ +
117 return 1;
│ │ │ │ +
118 }
│ │ │ │ +
│ │ │ │
119
│ │ │ │ -
120 out[6][0][0] = 16.0 - 32.0*in[0] - 8.0*in[1];
│ │ │ │ -
121 out[6][0][1] = -8.0*in[0];
│ │ │ │ -
122 out[6][1][0] = -16.0*in[1];
│ │ │ │ -
123 out[6][1][1] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ -
124
│ │ │ │ -
125 out[7][0][0] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ -
126 out[7][0][1] = -16.0*in[0];
│ │ │ │ -
127 out[7][1][0] = -8.0*in[1];
│ │ │ │ -
128 out[7][1][1] = 16.0 - 8.0*in[0] - 32.0*in[1];
│ │ │ │ -
129 }
│ │ │ │ -
│ │ │ │ -
130
│ │ │ │ -
│ │ │ │ -
132 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
133 const typename Traits::DomainType& in, // position
│ │ │ │ -
134 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
135 {
│ │ │ │ -
136 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
137 if (totalOrder == 0) {
│ │ │ │ -
138 evaluateFunction(in, out);
│ │ │ │ -
139 } else if (totalOrder == 1) {
│ │ │ │ -
140 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
141 out.resize(size());
│ │ │ │ -
142
│ │ │ │ -
143 switch (direction) {
│ │ │ │ -
144 case 0:
│ │ │ │ -
145 out[0][0] = sign_[0]*(1.0 - 4.0*in[1]);
│ │ │ │ -
146 out[0][1] = 0.0;
│ │ │ │ -
147 out[1][0] = sign_[1]*(5.0 - 8.0*in[0]);
│ │ │ │ -
148 out[1][1] = sign_[1]*(-4.0*in[1]);
│ │ │ │ -
149 out[2][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]);
│ │ │ │ -
150 out[2][1] = sign_[2]*(4.0*in[1]);
│ │ │ │ -
151 out[3][0] = -5.0 + 16.0*in[0] + 4.0*in[1];
│ │ │ │ -
152 out[3][1] = -6.0 + 8.0*in[1];
│ │ │ │ -
153 out[4][0] = 7.0 - 8.0*in[0] - 8.0*in[1];
│ │ │ │ -
154 out[4][1] = -4.0*in[1];
│ │ │ │ -
155 out[5][0] = 1.0 - 8.0*in[0] + 4*in[1];
│ │ │ │ -
156 out[5][1] = -4.0*in[1];
│ │ │ │ -
157 out[6][0] = 16.0 - 32.0*in[0] - 8.0*in[1];
│ │ │ │ -
158 out[6][1] = -16.0*in[1];
│ │ │ │ -
159 out[7][0] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ -
160 out[7][1] = -8.0*in[1];
│ │ │ │ -
161 break;
│ │ │ │ -
162 case 1:
│ │ │ │ -
163 out[2][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]);
│ │ │ │ -
164 out[2][0] = sign_[2]*(4.0*in[0]);
│ │ │ │ -
165 out[1][1] = sign_[1]*(1.0 - 4.0*in[0]);
│ │ │ │ -
166 out[1][0] = 0.0;
│ │ │ │ -
167 out[0][0] = sign_[0]*(-4.0*in[0]);
│ │ │ │ -
168 out[0][1] = sign_[0]*(5.0 - 8.0*in[1]);
│ │ │ │ -
169 out[3][0] = 4.0*in[0];
│ │ │ │ -
170 out[3][1] = -7.0 + 8.0*in[0] + 8.0*in[1];
│ │ │ │ -
171 out[4][0] = 6.0 - 8.0*in[0];
│ │ │ │ -
172 out[4][1] = 5.0 - 4.0*in[0] - 16.0*in[1];
│ │ │ │ -
173 out[5][0] = 4.0*in[0];
│ │ │ │ -
174 out[5][1] = -1.0 - 4.0*in[0] + 8.0*in[1];
│ │ │ │ -
175 out[6][0] = -8.0*in[0];
│ │ │ │ -
176 out[6][1] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ -
177 out[7][0] = -16.0*in[0];
│ │ │ │ -
178 out[7][1] = 16.0 - 8.0*in[0] - 32.0*in[1];
│ │ │ │ -
179 break;
│ │ │ │ -
180 default:
│ │ │ │ -
181 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
182 }
│ │ │ │ -
183 } else {
│ │ │ │ -
184 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
185 }
│ │ │ │ -
186 }
│ │ │ │ -
│ │ │ │ -
187
│ │ │ │ -
│ │ │ │ -
189 unsigned int order () const
│ │ │ │ -
190 {
│ │ │ │ -
191 return 2;
│ │ │ │ -
192 }
│ │ │ │ -
│ │ │ │ -
193
│ │ │ │ -
194 private:
│ │ │ │ -
195 std::array<R,3> sign_;
│ │ │ │ -
196 };
│ │ │ │ +
120 private:
│ │ │ │ +
121 std::array<R,4> sign_;
│ │ │ │ +
122 };
│ │ │ │
│ │ │ │ -
197}
│ │ │ │ -
198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
123
│ │ │ │ +
124
│ │ │ │ +
133 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
135 {
│ │ │ │ +
136 public:
│ │ │ │ +
137
│ │ │ │ +
│ │ │ │ +
139 RT0Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ +
140 {
│ │ │ │ +
141 for (int i=0; i<4; i++)
│ │ │ │ +
142 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
143
│ │ │ │ +
144 m0 = {0.0, 0.5};
│ │ │ │ +
145 m1 = {1.0, 0.5};
│ │ │ │ +
146 m2 = {0.5, 0.0};
│ │ │ │ +
147 m3 = {0.5, 1.0};
│ │ │ │ +
148
│ │ │ │ +
149 n0 = {-1.0, 0.0};
│ │ │ │ +
150 n1 = { 1.0, 0.0};
│ │ │ │ +
151 n2 = { 0.0, -1.0};
│ │ │ │ +
152 n3 = { 0.0, 1.0};
│ │ │ │ +
153 }
│ │ │ │ +
│ │ │ │ +
154
│ │ │ │ +
155 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
156 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
157 {
│ │ │ │ +
158 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
159
│ │ │ │ +
160 out.resize(4);
│ │ │ │ +
161
│ │ │ │ +
162 // Evaluate the normal components at the edge midpoints
│ │ │ │ +
163 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1])*sign_[0];
│ │ │ │ +
164 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1])*sign_[1];
│ │ │ │ +
165 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1])*sign_[2];
│ │ │ │ +
166 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1])*sign_[3];
│ │ │ │ +
167 }
│ │ │ │ +
│ │ │ │ +
168
│ │ │ │ +
169 private:
│ │ │ │ +
170 std::array<typename LB::Traits::RangeFieldType,4> sign_;
│ │ │ │ +
171
│ │ │ │ +
172 // The four edge midpoints of the reference quadrilateral
│ │ │ │ +
173 typename LB::Traits::DomainType m0,m1,m2,m3;
│ │ │ │ +
174
│ │ │ │ +
175 // The four edge normals of the reference quadrilateral
│ │ │ │ +
176 typename LB::Traits::DomainType n0,n1,n2,n3;
│ │ │ │ +
177 };
│ │ │ │ +
│ │ │ │ +
178
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
187 {
│ │ │ │ +
188 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
191 {
│ │ │ │ +
192 for (std::size_t i=0; i<4; i++)
│ │ │ │ +
193 li[i] = LocalKey(i,1,0);
│ │ │ │ +
194 }
│ │ │ │ +
│ │ │ │ +
195
│ │ │ │ +
│ │ │ │ +
197 std::size_t size () const
│ │ │ │ +
198 {
│ │ │ │ +
199 return 4;
│ │ │ │ +
200 }
│ │ │ │ +
│ │ │ │ +
201
│ │ │ │ +
│ │ │ │ +
203 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
204 {
│ │ │ │ +
205 return li[i];
│ │ │ │ +
206 }
│ │ │ │ +
│ │ │ │ +
207
│ │ │ │ +
208 private:
│ │ │ │ +
209 std::vector<LocalKey> li;
│ │ │ │ +
210 };
│ │ │ │ +
│ │ │ │ +
211
│ │ │ │ +
212}
│ │ │ │ +
213#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas12dlocalbasis.hh:28
│ │ │ │ -
RT12DLocalBasis(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12dlocalbasis.hh:39
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas12dlocalbasis.hh:46
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas12dlocalbasis.hh:132
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas12dlocalbasis.hh:85
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas12dlocalbasis.hh:189
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas12dlocalbasis.hh:32
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas12dlocalbasis.hh:57
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:30
│ │ │ │ +
RT0Cube2DLocalBasis(std::bitset< 4 > s=0)
Constructor with a set of edge orientations.
Definition raviartthomas0cube2dall.hh:36
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas0cube2dall.hh:33
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0cube2dall.hh:49
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0cube2dall.hh:79
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0cube2dall.hh:61
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0cube2dall.hh:115
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas0cube2dall.hh:43
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:135
│ │ │ │ +
RT0Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Constructor with explicitly given edge orientations.
Definition raviartthomas0cube2dall.hh:139
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas0cube2dall.hh:156
│ │ │ │ +
Definition raviartthomas0cube2dall.hh:187
│ │ │ │ +
RT0Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas0cube2dall.hh:190
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas0cube2dall.hh:197
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0cube2dall.hh:203
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,228 +1,264 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ -raviartthomas12dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d │ │ │ │ │ +raviartthomas0cube2dall.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include "../../common/localbasis.hh" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +30 { │ │ │ │ │ +31 public: │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ FieldVector, │ │ │ │ │ -_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_9 _R_T_1_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<3> s = 0) │ │ │ │ │ -40 { │ │ │ │ │ -41 for (size_t i=0; i<3; i++) │ │ │ │ │ -42 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return 8; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -58 std::vector& out) const │ │ │ │ │ -59 { │ │ │ │ │ -60 out.resize(8); │ │ │ │ │ -61 out[0][0] = sign_[0]*(in[0] - 4.0*in[0]*in[1]); │ │ │ │ │ -62 out[0][1] = sign_[0]*(-1.0 + 5.0*in[1] - 4.0*in[1]*in[1]); │ │ │ │ │ -63 out[1][0] = sign_[1]*(-1.0 + 5.0*in[0] - 4.0*in[0]*in[0]); │ │ │ │ │ -64 out[1][1] = sign_[1]*(in[1] - 4.0*in[0]*in[1]); │ │ │ │ │ -65 out[2][0] = sign_[2]*(-3.0*in[0] + 4.0*in[0]*in[0] + 4.0*in[1]*in[0]); │ │ │ │ │ -66 out[2][1] = sign_[2]*(-3.0*in[1] + 4.0*in[0]*in[1] + 4.0*in[1]*in[1]); │ │ │ │ │ -67 out[3][0] = -5.0*in[0] + 8.0*in[0]*in[0] + 4.0*in[1]*in[0]; │ │ │ │ │ -68 out[3][1] = 3.0 - 6.0*in[0] - 7.0*in[1] + 8.0*in[0]*in[1] + 4.0*in[1]*in[1]; │ │ │ │ │ -69 out[4][0] = -3.0 + 7.0*in[0] + 6.0*in[1] - 4.0*in[0]*in[0] - 8.0*in[1]*in │ │ │ │ │ -[0]; │ │ │ │ │ -70 out[4][1] = 5.0*in[1] - 4.0*in[0]*in[1] - 8.0*in[1]*in[1]; │ │ │ │ │ -71 out[5][0] = in[0] - 4.0*in[0]*in[0] + 4.0*in[1]*in[0]; │ │ │ │ │ -72 out[5][1] = -1.0*in[1] - 4.0*in[0]*in[1] + 4.0*in[1]*in[1]; │ │ │ │ │ -73 out[6][0] = 16.0*in[0] - 16.0*in[0]*in[0] - 8.0*in[1]*in[0]; │ │ │ │ │ -74 out[6][1] = 8.0*in[1] - 16.0*in[0]*in[1] - 8.0*in[1]*in[1]; │ │ │ │ │ -75 out[7][0] = 8.0*in[0] - 8.0*in[0]*in[0] - 16.0*in[1]*in[0]; │ │ │ │ │ -76 out[7][1] = 16.0*in[1] - 8.0*in[0]*in[1] - 16.0*in[1]*in[1]; │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_8_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -86 std::vector& out) const │ │ │ │ │ -87 { │ │ │ │ │ -88 out.resize(8); │ │ │ │ │ +_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +37 { │ │ │ │ │ +38 for (int i=0; i<4; i++) │ │ │ │ │ +39 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +40 } │ │ │ │ │ +41 │ │ │ │ │ +_4_3 unsigned int _s_i_z_e () const │ │ │ │ │ +44 { │ │ │ │ │ +45 return 4; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +50 std::vector& out) const │ │ │ │ │ +51 { │ │ │ │ │ +52 out.resize(4); │ │ │ │ │ +53 out[0] = {sign_[0]*(in[0]-1.0), 0.0}; │ │ │ │ │ +54 out[1] = {sign_[1]*(in[0]), 0.0}; │ │ │ │ │ +55 out[2] = {0.0, sign_[2]*(in[1]-1.0)}; │ │ │ │ │ +56 out[3] = {0.0, sign_[3]*(in[1])}; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +60 inline void │ │ │ │ │ +_6_1 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +62 std::vector& out) const // return value │ │ │ │ │ +63 { │ │ │ │ │ +64 out.resize(4); │ │ │ │ │ +65 out[0][0] = {sign_[0], 0}; │ │ │ │ │ +66 out[0][1] = {0, 0}; │ │ │ │ │ +67 │ │ │ │ │ +68 out[1][0] = {sign_[1], 0}; │ │ │ │ │ +69 out[1][1] = {0, 0}; │ │ │ │ │ +70 │ │ │ │ │ +71 out[2][0] = {0, 0}; │ │ │ │ │ +72 out[2][1] = {0, sign_[2]}; │ │ │ │ │ +73 │ │ │ │ │ +74 out[3][0] = {0, 0}; │ │ │ │ │ +75 out[3][1] = {0, sign_[3]}; │ │ │ │ │ +76 } │ │ │ │ │ +77 │ │ │ │ │ +_7_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +80 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +81 std::vector& out) const // return value │ │ │ │ │ +82 { │ │ │ │ │ +83 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +84 if (totalOrder == 0) { │ │ │ │ │ +85 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +86 } else if (totalOrder == 1) { │ │ │ │ │ +87 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +88 out.resize(_s_i_z_e()); │ │ │ │ │ 89 │ │ │ │ │ -90 out[0][0][0] = sign_[0]*(1.0 - 4.0*in[1]); │ │ │ │ │ -91 out[0][0][1] = sign_[0]*(-4.0*in[0]); │ │ │ │ │ -92 out[0][1][0] = 0.0; │ │ │ │ │ -93 out[0][1][1] = sign_[0]*(5.0 - 8.0*in[1]); │ │ │ │ │ -94 │ │ │ │ │ -95 out[1][0][0] = sign_[1]*(5.0 - 8.0*in[0]); │ │ │ │ │ -96 out[1][0][1] = 0.0; │ │ │ │ │ -97 out[1][1][0] = sign_[1]*(-4.0*in[1]); │ │ │ │ │ -98 out[1][1][1] = sign_[1]*(1.0 - 4.0*in[0]); │ │ │ │ │ -99 │ │ │ │ │ -100 out[2][0][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]); │ │ │ │ │ -101 out[2][0][1] = sign_[2]*(4.0*in[0]); │ │ │ │ │ -102 out[2][1][0] = sign_[2]*(4.0*in[1]); │ │ │ │ │ -103 out[2][1][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]); │ │ │ │ │ -104 │ │ │ │ │ -105 out[3][0][0] = -5.0 + 16.0*in[0] + 4.0*in[1]; │ │ │ │ │ -106 out[3][0][1] = 4.0*in[0]; │ │ │ │ │ -107 out[3][1][0] = -6.0 + 8.0*in[1]; │ │ │ │ │ -108 out[3][1][1] = -7.0 + 8.0*in[0] + 8.0*in[1]; │ │ │ │ │ -109 │ │ │ │ │ -110 out[4][0][0] = 7.0 - 8.0*in[0] - 8.0*in[1]; │ │ │ │ │ -111 out[4][0][1] = 6.0 - 8.0*in[0]; │ │ │ │ │ -112 out[4][1][0] = -4.0*in[1]; │ │ │ │ │ -113 out[4][1][1] = 5.0 - 4.0*in[0] - 16.0*in[1]; │ │ │ │ │ -114 │ │ │ │ │ -115 out[5][0][0] = 1.0 - 8.0*in[0] + 4*in[1]; │ │ │ │ │ -116 out[5][0][1] = 4.0*in[0]; │ │ │ │ │ -117 out[5][1][0] = -4.0*in[1]; │ │ │ │ │ -118 out[5][1][1] = -1.0 - 4.0*in[0] + 8.0*in[1]; │ │ │ │ │ +90 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +91 out[i] = {0, 0}; │ │ │ │ │ +92 │ │ │ │ │ +93 switch (direction) { │ │ │ │ │ +94 case 0: │ │ │ │ │ +95 out[0][0] = sign_[0]; │ │ │ │ │ +96 out[1][0] = sign_[1]; │ │ │ │ │ +97 break; │ │ │ │ │ +98 case 1: │ │ │ │ │ +99 out[2][1] = sign_[2]; │ │ │ │ │ +100 out[3][1] = sign_[3]; │ │ │ │ │ +101 break; │ │ │ │ │ +102 default: │ │ │ │ │ +103 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +104 } │ │ │ │ │ +105 } else { │ │ │ │ │ +106 out.resize(_s_i_z_e()); │ │ │ │ │ +107 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +108 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ +109 out[i][j] = 0; │ │ │ │ │ +110 } │ │ │ │ │ +111 │ │ │ │ │ +112 } │ │ │ │ │ +113 │ │ │ │ │ +_1_1_5 unsigned int _o_r_d_e_r () const │ │ │ │ │ +116 { │ │ │ │ │ +117 return 1; │ │ │ │ │ +118 } │ │ │ │ │ 119 │ │ │ │ │ -120 out[6][0][0] = 16.0 - 32.0*in[0] - 8.0*in[1]; │ │ │ │ │ -121 out[6][0][1] = -8.0*in[0]; │ │ │ │ │ -122 out[6][1][0] = -16.0*in[1]; │ │ │ │ │ -123 out[6][1][1] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ +120 private: │ │ │ │ │ +121 std::array sign_; │ │ │ │ │ +122 }; │ │ │ │ │ +123 │ │ │ │ │ 124 │ │ │ │ │ -125 out[7][0][0] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ -126 out[7][0][1] = -16.0*in[0]; │ │ │ │ │ -127 out[7][1][0] = -8.0*in[1]; │ │ │ │ │ -128 out[7][1][1] = 16.0 - 8.0*in[0] - 32.0*in[1]; │ │ │ │ │ -129 } │ │ │ │ │ -130 │ │ │ │ │ -_1_3_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -133 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -134 std::vector& out) const // return value │ │ │ │ │ +133 template │ │ │ │ │ +_1_3_4 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ 135 { │ │ │ │ │ -136 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -137 if (totalOrder == 0) { │ │ │ │ │ -138 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -139 } else if (totalOrder == 1) { │ │ │ │ │ -140 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -141 out.resize(_s_i_z_e()); │ │ │ │ │ -142 │ │ │ │ │ -143 switch (direction) { │ │ │ │ │ -144 case 0: │ │ │ │ │ -145 out[0][0] = sign_[0]*(1.0 - 4.0*in[1]); │ │ │ │ │ -146 out[0][1] = 0.0; │ │ │ │ │ -147 out[1][0] = sign_[1]*(5.0 - 8.0*in[0]); │ │ │ │ │ -148 out[1][1] = sign_[1]*(-4.0*in[1]); │ │ │ │ │ -149 out[2][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]); │ │ │ │ │ -150 out[2][1] = sign_[2]*(4.0*in[1]); │ │ │ │ │ -151 out[3][0] = -5.0 + 16.0*in[0] + 4.0*in[1]; │ │ │ │ │ -152 out[3][1] = -6.0 + 8.0*in[1]; │ │ │ │ │ -153 out[4][0] = 7.0 - 8.0*in[0] - 8.0*in[1]; │ │ │ │ │ -154 out[4][1] = -4.0*in[1]; │ │ │ │ │ -155 out[5][0] = 1.0 - 8.0*in[0] + 4*in[1]; │ │ │ │ │ -156 out[5][1] = -4.0*in[1]; │ │ │ │ │ -157 out[6][0] = 16.0 - 32.0*in[0] - 8.0*in[1]; │ │ │ │ │ -158 out[6][1] = -16.0*in[1]; │ │ │ │ │ -159 out[7][0] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ -160 out[7][1] = -8.0*in[1]; │ │ │ │ │ -161 break; │ │ │ │ │ -162 case 1: │ │ │ │ │ -163 out[2][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]); │ │ │ │ │ -164 out[2][0] = sign_[2]*(4.0*in[0]); │ │ │ │ │ -165 out[1][1] = sign_[1]*(1.0 - 4.0*in[0]); │ │ │ │ │ -166 out[1][0] = 0.0; │ │ │ │ │ -167 out[0][0] = sign_[0]*(-4.0*in[0]); │ │ │ │ │ -168 out[0][1] = sign_[0]*(5.0 - 8.0*in[1]); │ │ │ │ │ -169 out[3][0] = 4.0*in[0]; │ │ │ │ │ -170 out[3][1] = -7.0 + 8.0*in[0] + 8.0*in[1]; │ │ │ │ │ -171 out[4][0] = 6.0 - 8.0*in[0]; │ │ │ │ │ -172 out[4][1] = 5.0 - 4.0*in[0] - 16.0*in[1]; │ │ │ │ │ -173 out[5][0] = 4.0*in[0]; │ │ │ │ │ -174 out[5][1] = -1.0 - 4.0*in[0] + 8.0*in[1]; │ │ │ │ │ -175 out[6][0] = -8.0*in[0]; │ │ │ │ │ -176 out[6][1] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ -177 out[7][0] = -16.0*in[0]; │ │ │ │ │ -178 out[7][1] = 16.0 - 8.0*in[0] - 32.0*in[1]; │ │ │ │ │ -179 break; │ │ │ │ │ -180 default: │ │ │ │ │ -181 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -182 } │ │ │ │ │ -183 } else { │ │ │ │ │ -184 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -185 } │ │ │ │ │ -186 } │ │ │ │ │ -187 │ │ │ │ │ -_1_8_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ -190 { │ │ │ │ │ -191 return 2; │ │ │ │ │ -192 } │ │ │ │ │ -193 │ │ │ │ │ -194 private: │ │ │ │ │ -195 std::array sign_; │ │ │ │ │ -196 }; │ │ │ │ │ -197} │ │ │ │ │ -198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ +136 public: │ │ │ │ │ +137 │ │ │ │ │ +_1_3_9 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ +140 { │ │ │ │ │ +141 for (int i=0; i<4; i++) │ │ │ │ │ +142 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +143 │ │ │ │ │ +144 m0 = {0.0, 0.5}; │ │ │ │ │ +145 m1 = {1.0, 0.5}; │ │ │ │ │ +146 m2 = {0.5, 0.0}; │ │ │ │ │ +147 m3 = {0.5, 1.0}; │ │ │ │ │ +148 │ │ │ │ │ +149 n0 = {-1.0, 0.0}; │ │ │ │ │ +150 n1 = { 1.0, 0.0}; │ │ │ │ │ +151 n2 = { 0.0, -1.0}; │ │ │ │ │ +152 n3 = { 0.0, 1.0}; │ │ │ │ │ +153 } │ │ │ │ │ +154 │ │ │ │ │ +155 template │ │ │ │ │ +_1_5_6 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +157 { │ │ │ │ │ +158 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +159 │ │ │ │ │ +160 out.resize(4); │ │ │ │ │ +161 │ │ │ │ │ +162 // Evaluate the normal components at the edge midpoints │ │ │ │ │ +163 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1])*sign_[0]; │ │ │ │ │ +164 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1])*sign_[1]; │ │ │ │ │ +165 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1])*sign_[2]; │ │ │ │ │ +166 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1])*sign_[3]; │ │ │ │ │ +167 } │ │ │ │ │ +168 │ │ │ │ │ +169 private: │ │ │ │ │ +170 std::array sign_; │ │ │ │ │ +171 │ │ │ │ │ +172 // The four edge midpoints of the reference quadrilateral │ │ │ │ │ +173 typename LB::Traits::DomainType m0,m1,m2,m3; │ │ │ │ │ +174 │ │ │ │ │ +175 // The four edge normals of the reference quadrilateral │ │ │ │ │ +176 typename LB::Traits::DomainType n0,n1,n2,n3; │ │ │ │ │ +177 }; │ │ │ │ │ +178 │ │ │ │ │ +_1_8_6 class _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +187 { │ │ │ │ │ +188 public: │ │ │ │ │ +_1_9_0 _R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(4) │ │ │ │ │ +191 { │ │ │ │ │ +192 for (std::size_t i=0; i<4; i++) │ │ │ │ │ +193 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +194 } │ │ │ │ │ +195 │ │ │ │ │ +_1_9_7 std::size_t _s_i_z_e () const │ │ │ │ │ +198 { │ │ │ │ │ +199 return 4; │ │ │ │ │ +200 } │ │ │ │ │ +201 │ │ │ │ │ +_2_0_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +204 { │ │ │ │ │ +205 return li[i]; │ │ │ │ │ +206 } │ │ │ │ │ +207 │ │ │ │ │ +208 private: │ │ │ │ │ +209 std::vector li; │ │ │ │ │ +210 }; │ │ │ │ │ +211 │ │ │ │ │ +212} │ │ │ │ │ +213#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE2D_ALL_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT12DLocalBasis(std::bitset< 3 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT0Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ +Constructor with a set of edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:132 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ unsigned int order() const │ │ │ │ │ Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:189 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:57 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT0Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +Constructor with explicitly given edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:139 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:156 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT0Cube2DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:190 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:197 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0cube2dall.hh:203 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas12dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube2DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT12DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ │ +raviartthomas12dlocalbasis.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00221_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,200 +70,215 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalbasis.hh
│ │ │ │ +
raviartthomas12dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │
7
│ │ │ │
8#include <numeric>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │
11#include <dune/common/fmatrix.hh>
│ │ │ │
12
│ │ │ │
13#include "../../common/localbasis.hh"
│ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │
26 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
28 {
│ │ │ │
29
│ │ │ │
30 public:
│ │ │ │
31 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │
33
│ │ │ │
│ │ │ │ -
39 RT1Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
39 RT12DLocalBasis (std::bitset<3> s = 0)
│ │ │ │
40 {
│ │ │ │ -
41 for (size_t i=0; i<4; i++)
│ │ │ │ +
41 for (size_t i=0; i<3; i++)
│ │ │ │
42 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │
43 }
│ │ │ │
│ │ │ │
44
│ │ │ │
│ │ │ │ -
46 unsigned int size () const
│ │ │ │ +
46 unsigned int size () const
│ │ │ │
47 {
│ │ │ │ -
48 return 12;
│ │ │ │ +
48 return 8;
│ │ │ │
49 }
│ │ │ │
│ │ │ │
50
│ │ │ │
│ │ │ │ -
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │
59 {
│ │ │ │ -
60 out.resize(12);
│ │ │ │ -
61
│ │ │ │ -
62 out[0][0] = sign_[0]*(-1.0 + 4.0*in[0]-3*in[0]*in[0]);
│ │ │ │ -
63 out[0][1] = 0.0;
│ │ │ │ -
64 out[1][0] = 3.0 - 12.0*in[0] - 6.0*in[1] + 24.0*in[0]*in[1]+9*in[0]*in[0] - 18.0*in[0]*in[0]*in[1];
│ │ │ │ -
65 out[1][1] = 0.0;
│ │ │ │ -
66 out[2][0] = sign_[1]*(-2.0*in[0] + 3.0*in[0]*in[0]);
│ │ │ │ -
67 out[2][1] = 0.0;
│ │ │ │ -
68 out[3][0] = -6.0*in[0] + 12.0*in[0]*in[1] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[1];
│ │ │ │ -
69 out[3][1] = 0.0;
│ │ │ │ -
70 out[4][0] = 0.0;
│ │ │ │ -
71 out[4][1] = sign_[2]*(-1.0 + 4.0*in[1] - 3.0*in[1]*in[1]);
│ │ │ │ -
72 out[5][0] = 0.0;
│ │ │ │ -
73 out[5][1] = -3.0 + 6.0*in[0] + 12.0*in[1] - 24.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ -
74 out[6][0] = 0.0;
│ │ │ │ -
75 out[6][1] = sign_[3]*(-2.0*in[1] + 3.0*in[1]*in[1]);
│ │ │ │ -
76 out[7][0] = 0.0;
│ │ │ │ -
77 out[7][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ -
78 out[8][0] = 24.0*in[0] - 36.0*in[0]*in[1] - 24.0*in[0]*in[0] + 36.0*in[0]*in[0]*in[1];
│ │ │ │ -
79 out[8][1] = 0.0;
│ │ │ │ -
80 out[9][0] = 0.0;
│ │ │ │ -
81 out[9][1] = 24.0*in[1] - 36.0*in[0]*in[1] - 24.0*in[1]*in[1] + 36.0*in[0]*in[1]*in[1];
│ │ │ │ -
82 out[10][0] = -36.0*in[0] + 72.0*in[0]*in[1] + 36.0*in[0]*in[0] - 72.0*in[0]*in[0]*in[1];
│ │ │ │ -
83 out[10][1] = 0.0;
│ │ │ │ -
84 out[11][0] = 0.0;
│ │ │ │ -
85 out[11][1] = -36.0*in[1] + 72.0*in[0]*in[1] + 36*in[1]*in[1] - 72.0*in[0]*in[1]*in[1];
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ -
94 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
95 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
96 {
│ │ │ │ -
97 out.resize(12);
│ │ │ │ -
98
│ │ │ │ -
99 out[0][0][0] = sign_[0]*(4.0 - 6.0*in[0]);
│ │ │ │ -
100 out[0][0][1] = 0.0;
│ │ │ │ -
101 out[0][1][0] = 0.0;
│ │ │ │ -
102 out[0][1][1] = 0.0;
│ │ │ │ -
103
│ │ │ │ -
104 out[1][0][0] = -12.0 + 24.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1];
│ │ │ │ -
105 out[1][0][1] = -6 + 24.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ -
106 out[1][1][0] = 0.0;
│ │ │ │ -
107 out[1][1][1] = 0.0;
│ │ │ │ -
108
│ │ │ │ -
109 out[2][0][0] = sign_[1]*(-2.0 + 6.0*in[0]);
│ │ │ │ -
110 out[2][0][1] = 0.0;
│ │ │ │ -
111 out[2][1][0] = 0.0;
│ │ │ │ -
112 out[2][1][1] = 0.0;
│ │ │ │ -
113
│ │ │ │ -
114 out[3][0][0] = -6.0 + 12.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1];
│ │ │ │ -
115 out[3][0][1] = 12.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ -
116 out[3][1][0] = 0.0;
│ │ │ │ -
117 out[3][1][1] = 0.0;
│ │ │ │ -
118
│ │ │ │ -
119 out[4][0][0] = 0.0;
│ │ │ │ -
120 out[4][0][1] = 0.0;
│ │ │ │ -
121 out[4][1][0] = 0.0;
│ │ │ │ -
122 out[4][1][1] = sign_[2]*(4.0 - 6.0*in[1]);
│ │ │ │ -
123
│ │ │ │ -
124 out[5][0][0] = 0.0;
│ │ │ │ -
125 out[5][0][1] = 0.0;
│ │ │ │ -
126 out[5][1][0] = 6.0 - 24.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ -
127 out[5][1][1] = 12.0 - 24.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];
│ │ │ │ -
128
│ │ │ │ -
129 out[6][0][0] = 0.0;
│ │ │ │ -
130 out[6][0][1] = 0.0;
│ │ │ │ -
131 out[6][1][0] = 0.0;
│ │ │ │ -
132 out[6][1][1] = sign_[3]*(-2.0 + 6.0*in[1]);
│ │ │ │ -
133
│ │ │ │ -
134 out[7][0][0] = 0.0;
│ │ │ │ -
135 out[7][0][1] = 0.0;
│ │ │ │ -
136 out[7][1][0] = -12.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ -
137 out[7][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[1]*in[0];
│ │ │ │ -
138
│ │ │ │ -
139 out[8][0][0] = 24.0 - 36.0*in[1] - 48.0*in[0] + 72.0*in[0]*in[1];
│ │ │ │ -
140 out[8][0][1] = -36.0*in[0] + 36.0*in[0]*in[0];
│ │ │ │ -
141 out[8][1][0] = 0.0;
│ │ │ │ -
142 out[8][1][1] = 0.0;
│ │ │ │ -
143
│ │ │ │ -
144 out[9][0][0] = 0.0;
│ │ │ │ -
145 out[9][0][1] = 0.0;
│ │ │ │ -
146 out[9][1][0] = -36.0*in[1] + 36.0*in[1]*in[1];
│ │ │ │ -
147 out[9][1][1] = 24.0 - 36.0*in[0] - 48.0*in[1] + 72.0*in[0]*in[1];
│ │ │ │ -
148
│ │ │ │ -
149 out[10][0][0] = -36.0 + 72.0*in[1] + 72.0*in[0] - 144.0*in[0]*in[1];
│ │ │ │ -
150 out[10][0][1] = 72.0*in[0] - 72.0*in[0]*in[0];
│ │ │ │ -
151 out[10][1][0] = 0.0;
│ │ │ │ -
152 out[10][1][1] = 0.0;
│ │ │ │ -
153
│ │ │ │ -
154 out[11][0][0] = 0.0;
│ │ │ │ -
155 out[11][0][1] = 0.0;
│ │ │ │ -
156 out[11][1][0] = 72.0*in[1] - 72.0*in[1]*in[1];
│ │ │ │ -
157 out[11][1][1] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1];
│ │ │ │ -
158 }
│ │ │ │ -
│ │ │ │ -
159
│ │ │ │ -
│ │ │ │ -
161 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
162 const typename Traits::DomainType& in, // position
│ │ │ │ -
163 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
164 {
│ │ │ │ -
165 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
166 if (totalOrder == 0) {
│ │ │ │ -
167 evaluateFunction(in, out);
│ │ │ │ -
168 } else {
│ │ │ │ -
169 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
170 }
│ │ │ │ -
171 }
│ │ │ │ -
│ │ │ │ -
172
│ │ │ │ -
│ │ │ │ -
174 unsigned int order () const
│ │ │ │ -
175 {
│ │ │ │ -
176 return 3;
│ │ │ │ -
177 }
│ │ │ │ -
│ │ │ │ -
178
│ │ │ │ -
179 private:
│ │ │ │ -
180 std::array<R,4> sign_;
│ │ │ │ -
181 };
│ │ │ │ +
60 out.resize(8);
│ │ │ │ +
61 out[0][0] = sign_[0]*(in[0] - 4.0*in[0]*in[1]);
│ │ │ │ +
62 out[0][1] = sign_[0]*(-1.0 + 5.0*in[1] - 4.0*in[1]*in[1]);
│ │ │ │ +
63 out[1][0] = sign_[1]*(-1.0 + 5.0*in[0] - 4.0*in[0]*in[0]);
│ │ │ │ +
64 out[1][1] = sign_[1]*(in[1] - 4.0*in[0]*in[1]);
│ │ │ │ +
65 out[2][0] = sign_[2]*(-3.0*in[0] + 4.0*in[0]*in[0] + 4.0*in[1]*in[0]);
│ │ │ │ +
66 out[2][1] = sign_[2]*(-3.0*in[1] + 4.0*in[0]*in[1] + 4.0*in[1]*in[1]);
│ │ │ │ +
67 out[3][0] = -5.0*in[0] + 8.0*in[0]*in[0] + 4.0*in[1]*in[0];
│ │ │ │ +
68 out[3][1] = 3.0 - 6.0*in[0] - 7.0*in[1] + 8.0*in[0]*in[1] + 4.0*in[1]*in[1];
│ │ │ │ +
69 out[4][0] = -3.0 + 7.0*in[0] + 6.0*in[1] - 4.0*in[0]*in[0] - 8.0*in[1]*in[0];
│ │ │ │ +
70 out[4][1] = 5.0*in[1] - 4.0*in[0]*in[1] - 8.0*in[1]*in[1];
│ │ │ │ +
71 out[5][0] = in[0] - 4.0*in[0]*in[0] + 4.0*in[1]*in[0];
│ │ │ │ +
72 out[5][1] = -1.0*in[1] - 4.0*in[0]*in[1] + 4.0*in[1]*in[1];
│ │ │ │ +
73 out[6][0] = 16.0*in[0] - 16.0*in[0]*in[0] - 8.0*in[1]*in[0];
│ │ │ │ +
74 out[6][1] = 8.0*in[1] - 16.0*in[0]*in[1] - 8.0*in[1]*in[1];
│ │ │ │ +
75 out[7][0] = 8.0*in[0] - 8.0*in[0]*in[0] - 16.0*in[1]*in[0];
│ │ │ │ +
76 out[7][1] = 16.0*in[1] - 8.0*in[0]*in[1] - 16.0*in[1]*in[1];
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
│ │ │ │ +
85 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
86 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
87 {
│ │ │ │ +
88 out.resize(8);
│ │ │ │ +
89
│ │ │ │ +
90 out[0][0][0] = sign_[0]*(1.0 - 4.0*in[1]);
│ │ │ │ +
91 out[0][0][1] = sign_[0]*(-4.0*in[0]);
│ │ │ │ +
92 out[0][1][0] = 0.0;
│ │ │ │ +
93 out[0][1][1] = sign_[0]*(5.0 - 8.0*in[1]);
│ │ │ │ +
94
│ │ │ │ +
95 out[1][0][0] = sign_[1]*(5.0 - 8.0*in[0]);
│ │ │ │ +
96 out[1][0][1] = 0.0;
│ │ │ │ +
97 out[1][1][0] = sign_[1]*(-4.0*in[1]);
│ │ │ │ +
98 out[1][1][1] = sign_[1]*(1.0 - 4.0*in[0]);
│ │ │ │ +
99
│ │ │ │ +
100 out[2][0][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]);
│ │ │ │ +
101 out[2][0][1] = sign_[2]*(4.0*in[0]);
│ │ │ │ +
102 out[2][1][0] = sign_[2]*(4.0*in[1]);
│ │ │ │ +
103 out[2][1][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]);
│ │ │ │ +
104
│ │ │ │ +
105 out[3][0][0] = -5.0 + 16.0*in[0] + 4.0*in[1];
│ │ │ │ +
106 out[3][0][1] = 4.0*in[0];
│ │ │ │ +
107 out[3][1][0] = -6.0 + 8.0*in[1];
│ │ │ │ +
108 out[3][1][1] = -7.0 + 8.0*in[0] + 8.0*in[1];
│ │ │ │ +
109
│ │ │ │ +
110 out[4][0][0] = 7.0 - 8.0*in[0] - 8.0*in[1];
│ │ │ │ +
111 out[4][0][1] = 6.0 - 8.0*in[0];
│ │ │ │ +
112 out[4][1][0] = -4.0*in[1];
│ │ │ │ +
113 out[4][1][1] = 5.0 - 4.0*in[0] - 16.0*in[1];
│ │ │ │ +
114
│ │ │ │ +
115 out[5][0][0] = 1.0 - 8.0*in[0] + 4*in[1];
│ │ │ │ +
116 out[5][0][1] = 4.0*in[0];
│ │ │ │ +
117 out[5][1][0] = -4.0*in[1];
│ │ │ │ +
118 out[5][1][1] = -1.0 - 4.0*in[0] + 8.0*in[1];
│ │ │ │ +
119
│ │ │ │ +
120 out[6][0][0] = 16.0 - 32.0*in[0] - 8.0*in[1];
│ │ │ │ +
121 out[6][0][1] = -8.0*in[0];
│ │ │ │ +
122 out[6][1][0] = -16.0*in[1];
│ │ │ │ +
123 out[6][1][1] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ +
124
│ │ │ │ +
125 out[7][0][0] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ +
126 out[7][0][1] = -16.0*in[0];
│ │ │ │ +
127 out[7][1][0] = -8.0*in[1];
│ │ │ │ +
128 out[7][1][1] = 16.0 - 8.0*in[0] - 32.0*in[1];
│ │ │ │ +
129 }
│ │ │ │ +
│ │ │ │ +
130
│ │ │ │ +
│ │ │ │ +
132 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
133 const typename Traits::DomainType& in, // position
│ │ │ │ +
134 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
135 {
│ │ │ │ +
136 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
137 if (totalOrder == 0) {
│ │ │ │ +
138 evaluateFunction(in, out);
│ │ │ │ +
139 } else if (totalOrder == 1) {
│ │ │ │ +
140 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
141 out.resize(size());
│ │ │ │ +
142
│ │ │ │ +
143 switch (direction) {
│ │ │ │ +
144 case 0:
│ │ │ │ +
145 out[0][0] = sign_[0]*(1.0 - 4.0*in[1]);
│ │ │ │ +
146 out[0][1] = 0.0;
│ │ │ │ +
147 out[1][0] = sign_[1]*(5.0 - 8.0*in[0]);
│ │ │ │ +
148 out[1][1] = sign_[1]*(-4.0*in[1]);
│ │ │ │ +
149 out[2][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]);
│ │ │ │ +
150 out[2][1] = sign_[2]*(4.0*in[1]);
│ │ │ │ +
151 out[3][0] = -5.0 + 16.0*in[0] + 4.0*in[1];
│ │ │ │ +
152 out[3][1] = -6.0 + 8.0*in[1];
│ │ │ │ +
153 out[4][0] = 7.0 - 8.0*in[0] - 8.0*in[1];
│ │ │ │ +
154 out[4][1] = -4.0*in[1];
│ │ │ │ +
155 out[5][0] = 1.0 - 8.0*in[0] + 4*in[1];
│ │ │ │ +
156 out[5][1] = -4.0*in[1];
│ │ │ │ +
157 out[6][0] = 16.0 - 32.0*in[0] - 8.0*in[1];
│ │ │ │ +
158 out[6][1] = -16.0*in[1];
│ │ │ │ +
159 out[7][0] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ +
160 out[7][1] = -8.0*in[1];
│ │ │ │ +
161 break;
│ │ │ │ +
162 case 1:
│ │ │ │ +
163 out[2][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]);
│ │ │ │ +
164 out[2][0] = sign_[2]*(4.0*in[0]);
│ │ │ │ +
165 out[1][1] = sign_[1]*(1.0 - 4.0*in[0]);
│ │ │ │ +
166 out[1][0] = 0.0;
│ │ │ │ +
167 out[0][0] = sign_[0]*(-4.0*in[0]);
│ │ │ │ +
168 out[0][1] = sign_[0]*(5.0 - 8.0*in[1]);
│ │ │ │ +
169 out[3][0] = 4.0*in[0];
│ │ │ │ +
170 out[3][1] = -7.0 + 8.0*in[0] + 8.0*in[1];
│ │ │ │ +
171 out[4][0] = 6.0 - 8.0*in[0];
│ │ │ │ +
172 out[4][1] = 5.0 - 4.0*in[0] - 16.0*in[1];
│ │ │ │ +
173 out[5][0] = 4.0*in[0];
│ │ │ │ +
174 out[5][1] = -1.0 - 4.0*in[0] + 8.0*in[1];
│ │ │ │ +
175 out[6][0] = -8.0*in[0];
│ │ │ │ +
176 out[6][1] = 8.0 - 16.0*in[0] - 16.0*in[1];
│ │ │ │ +
177 out[7][0] = -16.0*in[0];
│ │ │ │ +
178 out[7][1] = 16.0 - 8.0*in[0] - 32.0*in[1];
│ │ │ │ +
179 break;
│ │ │ │ +
180 default:
│ │ │ │ +
181 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
182 }
│ │ │ │ +
183 } else {
│ │ │ │ +
184 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
185 }
│ │ │ │ +
186 }
│ │ │ │ +
│ │ │ │ +
187
│ │ │ │ +
│ │ │ │ +
189 unsigned int order () const
│ │ │ │ +
190 {
│ │ │ │ +
191 return 2;
│ │ │ │ +
192 }
│ │ │ │ +
│ │ │ │ +
193
│ │ │ │ +
194 private:
│ │ │ │ +
195 std::array<R,3> sign_;
│ │ │ │ +
196 };
│ │ │ │
│ │ │ │ -
182}
│ │ │ │ -
183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
197}
│ │ │ │ +
198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalbasis.hh:28
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:94
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas1cube2dlocalbasis.hh:32
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:174
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:57
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas1cube2dlocalbasis.hh:46
│ │ │ │ -
RT1Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2dlocalbasis.hh:39
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:161
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas12dlocalbasis.hh:28
│ │ │ │ +
RT12DLocalBasis(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12dlocalbasis.hh:39
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas12dlocalbasis.hh:46
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas12dlocalbasis.hh:132
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas12dlocalbasis.hh:85
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas12dlocalbasis.hh:189
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas12dlocalbasis.hh:32
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas12dlocalbasis.hh:57
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,219 +1,228 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ -raviartthomas1cube2dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ +raviartthomas12dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ 11#include │ │ │ │ │ 12 │ │ │ │ │ 13#include "../../common/localbasis.hh" │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ 26 template │ │ │ │ │ -_2_7 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +_2_7 class _R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ 28 { │ │ │ │ │ 29 │ │ │ │ │ 30 public: │ │ │ │ │ 31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ FieldVector, │ │ │ │ │ _3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 33 │ │ │ │ │ -_3_9 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +_3_9 _R_T_1_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<3> s = 0) │ │ │ │ │ 40 { │ │ │ │ │ -41 for (size_t i=0; i<4; i++) │ │ │ │ │ +41 for (size_t i=0; i<3; i++) │ │ │ │ │ 42 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ 43 } │ │ │ │ │ 44 │ │ │ │ │ _4_6 unsigned int _s_i_z_e () const │ │ │ │ │ 47 { │ │ │ │ │ -48 return 12; │ │ │ │ │ +48 return 8; │ │ │ │ │ 49 } │ │ │ │ │ 50 │ │ │ │ │ _5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ 58 std::vector& out) const │ │ │ │ │ 59 { │ │ │ │ │ -60 out.resize(12); │ │ │ │ │ -61 │ │ │ │ │ -62 out[0][0] = sign_[0]*(-1.0 + 4.0*in[0]-3*in[0]*in[0]); │ │ │ │ │ -63 out[0][1] = 0.0; │ │ │ │ │ -64 out[1][0] = 3.0 - 12.0*in[0] - 6.0*in[1] + 24.0*in[0]*in[1]+9*in[0]*in[0] - │ │ │ │ │ -18.0*in[0]*in[0]*in[1]; │ │ │ │ │ -65 out[1][1] = 0.0; │ │ │ │ │ -66 out[2][0] = sign_[1]*(-2.0*in[0] + 3.0*in[0]*in[0]); │ │ │ │ │ -67 out[2][1] = 0.0; │ │ │ │ │ -68 out[3][0] = -6.0*in[0] + 12.0*in[0]*in[1] + 9.0*in[0]*in[0] - 18.0*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -69 out[3][1] = 0.0; │ │ │ │ │ -70 out[4][0] = 0.0; │ │ │ │ │ -71 out[4][1] = sign_[2]*(-1.0 + 4.0*in[1] - 3.0*in[1]*in[1]); │ │ │ │ │ -72 out[5][0] = 0.0; │ │ │ │ │ -73 out[5][1] = -3.0 + 6.0*in[0] + 12.0*in[1] - 24.0*in[0]*in[1] - 9.0*in[1]*in │ │ │ │ │ -[1] + 18.0*in[0]*in[1]*in[1]; │ │ │ │ │ -74 out[6][0] = 0.0; │ │ │ │ │ -75 out[6][1] = sign_[3]*(-2.0*in[1] + 3.0*in[1]*in[1]); │ │ │ │ │ -76 out[7][0] = 0.0; │ │ │ │ │ -77 out[7][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -78 out[8][0] = 24.0*in[0] - 36.0*in[0]*in[1] - 24.0*in[0]*in[0] + 36.0*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -79 out[8][1] = 0.0; │ │ │ │ │ -80 out[9][0] = 0.0; │ │ │ │ │ -81 out[9][1] = 24.0*in[1] - 36.0*in[0]*in[1] - 24.0*in[1]*in[1] + 36.0*in[0]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -82 out[10][0] = -36.0*in[0] + 72.0*in[0]*in[1] + 36.0*in[0]*in[0] - 72.0*in │ │ │ │ │ -[0]*in[0]*in[1]; │ │ │ │ │ -83 out[10][1] = 0.0; │ │ │ │ │ -84 out[11][0] = 0.0; │ │ │ │ │ -85 out[11][1] = -36.0*in[1] + 72.0*in[0]*in[1] + 36*in[1]*in[1] - 72.0*in[0]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -_9_4 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -95 std::vector& out) const │ │ │ │ │ -96 { │ │ │ │ │ -97 out.resize(12); │ │ │ │ │ -98 │ │ │ │ │ -99 out[0][0][0] = sign_[0]*(4.0 - 6.0*in[0]); │ │ │ │ │ -100 out[0][0][1] = 0.0; │ │ │ │ │ -101 out[0][1][0] = 0.0; │ │ │ │ │ -102 out[0][1][1] = 0.0; │ │ │ │ │ -103 │ │ │ │ │ -104 out[1][0][0] = -12.0 + 24.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1]; │ │ │ │ │ -105 out[1][0][1] = -6 + 24.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ -106 out[1][1][0] = 0.0; │ │ │ │ │ -107 out[1][1][1] = 0.0; │ │ │ │ │ -108 │ │ │ │ │ -109 out[2][0][0] = sign_[1]*(-2.0 + 6.0*in[0]); │ │ │ │ │ -110 out[2][0][1] = 0.0; │ │ │ │ │ -111 out[2][1][0] = 0.0; │ │ │ │ │ -112 out[2][1][1] = 0.0; │ │ │ │ │ -113 │ │ │ │ │ -114 out[3][0][0] = -6.0 + 12.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1]; │ │ │ │ │ -115 out[3][0][1] = 12.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ -116 out[3][1][0] = 0.0; │ │ │ │ │ -117 out[3][1][1] = 0.0; │ │ │ │ │ -118 │ │ │ │ │ -119 out[4][0][0] = 0.0; │ │ │ │ │ -120 out[4][0][1] = 0.0; │ │ │ │ │ -121 out[4][1][0] = 0.0; │ │ │ │ │ -122 out[4][1][1] = sign_[2]*(4.0 - 6.0*in[1]); │ │ │ │ │ -123 │ │ │ │ │ -124 out[5][0][0] = 0.0; │ │ │ │ │ -125 out[5][0][1] = 0.0; │ │ │ │ │ -126 out[5][1][0] = 6.0 - 24.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ -127 out[5][1][1] = 12.0 - 24.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1]; │ │ │ │ │ -128 │ │ │ │ │ -129 out[6][0][0] = 0.0; │ │ │ │ │ -130 out[6][0][1] = 0.0; │ │ │ │ │ -131 out[6][1][0] = 0.0; │ │ │ │ │ -132 out[6][1][1] = sign_[3]*(-2.0 + 6.0*in[1]); │ │ │ │ │ -133 │ │ │ │ │ -134 out[7][0][0] = 0.0; │ │ │ │ │ -135 out[7][0][1] = 0.0; │ │ │ │ │ -136 out[7][1][0] = -12.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ -137 out[7][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[1]*in[0]; │ │ │ │ │ -138 │ │ │ │ │ -139 out[8][0][0] = 24.0 - 36.0*in[1] - 48.0*in[0] + 72.0*in[0]*in[1]; │ │ │ │ │ -140 out[8][0][1] = -36.0*in[0] + 36.0*in[0]*in[0]; │ │ │ │ │ -141 out[8][1][0] = 0.0; │ │ │ │ │ -142 out[8][1][1] = 0.0; │ │ │ │ │ -143 │ │ │ │ │ -144 out[9][0][0] = 0.0; │ │ │ │ │ -145 out[9][0][1] = 0.0; │ │ │ │ │ -146 out[9][1][0] = -36.0*in[1] + 36.0*in[1]*in[1]; │ │ │ │ │ -147 out[9][1][1] = 24.0 - 36.0*in[0] - 48.0*in[1] + 72.0*in[0]*in[1]; │ │ │ │ │ -148 │ │ │ │ │ -149 out[10][0][0] = -36.0 + 72.0*in[1] + 72.0*in[0] - 144.0*in[0]*in[1]; │ │ │ │ │ -150 out[10][0][1] = 72.0*in[0] - 72.0*in[0]*in[0]; │ │ │ │ │ -151 out[10][1][0] = 0.0; │ │ │ │ │ -152 out[10][1][1] = 0.0; │ │ │ │ │ -153 │ │ │ │ │ -154 out[11][0][0] = 0.0; │ │ │ │ │ -155 out[11][0][1] = 0.0; │ │ │ │ │ -156 out[11][1][0] = 72.0*in[1] - 72.0*in[1]*in[1]; │ │ │ │ │ -157 out[11][1][1] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1]; │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -_1_6_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -162 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -163 std::vector& out) const // return value │ │ │ │ │ -164 { │ │ │ │ │ -165 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -166 if (totalOrder == 0) { │ │ │ │ │ -167 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -168 } else { │ │ │ │ │ -169 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -170 } │ │ │ │ │ -171 } │ │ │ │ │ -172 │ │ │ │ │ -_1_7_4 unsigned int _o_r_d_e_r () const │ │ │ │ │ -175 { │ │ │ │ │ -176 return 3; │ │ │ │ │ -177 } │ │ │ │ │ -178 │ │ │ │ │ -179 private: │ │ │ │ │ -180 std::array sign_; │ │ │ │ │ -181 }; │ │ │ │ │ -182} │ │ │ │ │ -183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +60 out.resize(8); │ │ │ │ │ +61 out[0][0] = sign_[0]*(in[0] - 4.0*in[0]*in[1]); │ │ │ │ │ +62 out[0][1] = sign_[0]*(-1.0 + 5.0*in[1] - 4.0*in[1]*in[1]); │ │ │ │ │ +63 out[1][0] = sign_[1]*(-1.0 + 5.0*in[0] - 4.0*in[0]*in[0]); │ │ │ │ │ +64 out[1][1] = sign_[1]*(in[1] - 4.0*in[0]*in[1]); │ │ │ │ │ +65 out[2][0] = sign_[2]*(-3.0*in[0] + 4.0*in[0]*in[0] + 4.0*in[1]*in[0]); │ │ │ │ │ +66 out[2][1] = sign_[2]*(-3.0*in[1] + 4.0*in[0]*in[1] + 4.0*in[1]*in[1]); │ │ │ │ │ +67 out[3][0] = -5.0*in[0] + 8.0*in[0]*in[0] + 4.0*in[1]*in[0]; │ │ │ │ │ +68 out[3][1] = 3.0 - 6.0*in[0] - 7.0*in[1] + 8.0*in[0]*in[1] + 4.0*in[1]*in[1]; │ │ │ │ │ +69 out[4][0] = -3.0 + 7.0*in[0] + 6.0*in[1] - 4.0*in[0]*in[0] - 8.0*in[1]*in │ │ │ │ │ +[0]; │ │ │ │ │ +70 out[4][1] = 5.0*in[1] - 4.0*in[0]*in[1] - 8.0*in[1]*in[1]; │ │ │ │ │ +71 out[5][0] = in[0] - 4.0*in[0]*in[0] + 4.0*in[1]*in[0]; │ │ │ │ │ +72 out[5][1] = -1.0*in[1] - 4.0*in[0]*in[1] + 4.0*in[1]*in[1]; │ │ │ │ │ +73 out[6][0] = 16.0*in[0] - 16.0*in[0]*in[0] - 8.0*in[1]*in[0]; │ │ │ │ │ +74 out[6][1] = 8.0*in[1] - 16.0*in[0]*in[1] - 8.0*in[1]*in[1]; │ │ │ │ │ +75 out[7][0] = 8.0*in[0] - 8.0*in[0]*in[0] - 16.0*in[1]*in[0]; │ │ │ │ │ +76 out[7][1] = 16.0*in[1] - 8.0*in[0]*in[1] - 16.0*in[1]*in[1]; │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +_8_5 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +86 std::vector& out) const │ │ │ │ │ +87 { │ │ │ │ │ +88 out.resize(8); │ │ │ │ │ +89 │ │ │ │ │ +90 out[0][0][0] = sign_[0]*(1.0 - 4.0*in[1]); │ │ │ │ │ +91 out[0][0][1] = sign_[0]*(-4.0*in[0]); │ │ │ │ │ +92 out[0][1][0] = 0.0; │ │ │ │ │ +93 out[0][1][1] = sign_[0]*(5.0 - 8.0*in[1]); │ │ │ │ │ +94 │ │ │ │ │ +95 out[1][0][0] = sign_[1]*(5.0 - 8.0*in[0]); │ │ │ │ │ +96 out[1][0][1] = 0.0; │ │ │ │ │ +97 out[1][1][0] = sign_[1]*(-4.0*in[1]); │ │ │ │ │ +98 out[1][1][1] = sign_[1]*(1.0 - 4.0*in[0]); │ │ │ │ │ +99 │ │ │ │ │ +100 out[2][0][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]); │ │ │ │ │ +101 out[2][0][1] = sign_[2]*(4.0*in[0]); │ │ │ │ │ +102 out[2][1][0] = sign_[2]*(4.0*in[1]); │ │ │ │ │ +103 out[2][1][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]); │ │ │ │ │ +104 │ │ │ │ │ +105 out[3][0][0] = -5.0 + 16.0*in[0] + 4.0*in[1]; │ │ │ │ │ +106 out[3][0][1] = 4.0*in[0]; │ │ │ │ │ +107 out[3][1][0] = -6.0 + 8.0*in[1]; │ │ │ │ │ +108 out[3][1][1] = -7.0 + 8.0*in[0] + 8.0*in[1]; │ │ │ │ │ +109 │ │ │ │ │ +110 out[4][0][0] = 7.0 - 8.0*in[0] - 8.0*in[1]; │ │ │ │ │ +111 out[4][0][1] = 6.0 - 8.0*in[0]; │ │ │ │ │ +112 out[4][1][0] = -4.0*in[1]; │ │ │ │ │ +113 out[4][1][1] = 5.0 - 4.0*in[0] - 16.0*in[1]; │ │ │ │ │ +114 │ │ │ │ │ +115 out[5][0][0] = 1.0 - 8.0*in[0] + 4*in[1]; │ │ │ │ │ +116 out[5][0][1] = 4.0*in[0]; │ │ │ │ │ +117 out[5][1][0] = -4.0*in[1]; │ │ │ │ │ +118 out[5][1][1] = -1.0 - 4.0*in[0] + 8.0*in[1]; │ │ │ │ │ +119 │ │ │ │ │ +120 out[6][0][0] = 16.0 - 32.0*in[0] - 8.0*in[1]; │ │ │ │ │ +121 out[6][0][1] = -8.0*in[0]; │ │ │ │ │ +122 out[6][1][0] = -16.0*in[1]; │ │ │ │ │ +123 out[6][1][1] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ +124 │ │ │ │ │ +125 out[7][0][0] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ +126 out[7][0][1] = -16.0*in[0]; │ │ │ │ │ +127 out[7][1][0] = -8.0*in[1]; │ │ │ │ │ +128 out[7][1][1] = 16.0 - 8.0*in[0] - 32.0*in[1]; │ │ │ │ │ +129 } │ │ │ │ │ +130 │ │ │ │ │ +_1_3_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +133 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +134 std::vector& out) const // return value │ │ │ │ │ +135 { │ │ │ │ │ +136 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +137 if (totalOrder == 0) { │ │ │ │ │ +138 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +139 } else if (totalOrder == 1) { │ │ │ │ │ +140 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +141 out.resize(_s_i_z_e()); │ │ │ │ │ +142 │ │ │ │ │ +143 switch (direction) { │ │ │ │ │ +144 case 0: │ │ │ │ │ +145 out[0][0] = sign_[0]*(1.0 - 4.0*in[1]); │ │ │ │ │ +146 out[0][1] = 0.0; │ │ │ │ │ +147 out[1][0] = sign_[1]*(5.0 - 8.0*in[0]); │ │ │ │ │ +148 out[1][1] = sign_[1]*(-4.0*in[1]); │ │ │ │ │ +149 out[2][0] = sign_[2]*(-3.0 + 8.0*in[0] + 4.0*in[1]); │ │ │ │ │ +150 out[2][1] = sign_[2]*(4.0*in[1]); │ │ │ │ │ +151 out[3][0] = -5.0 + 16.0*in[0] + 4.0*in[1]; │ │ │ │ │ +152 out[3][1] = -6.0 + 8.0*in[1]; │ │ │ │ │ +153 out[4][0] = 7.0 - 8.0*in[0] - 8.0*in[1]; │ │ │ │ │ +154 out[4][1] = -4.0*in[1]; │ │ │ │ │ +155 out[5][0] = 1.0 - 8.0*in[0] + 4*in[1]; │ │ │ │ │ +156 out[5][1] = -4.0*in[1]; │ │ │ │ │ +157 out[6][0] = 16.0 - 32.0*in[0] - 8.0*in[1]; │ │ │ │ │ +158 out[6][1] = -16.0*in[1]; │ │ │ │ │ +159 out[7][0] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ +160 out[7][1] = -8.0*in[1]; │ │ │ │ │ +161 break; │ │ │ │ │ +162 case 1: │ │ │ │ │ +163 out[2][1] = sign_[2]*(-3.0 + 4.0*in[0] + 8.0*in[1]); │ │ │ │ │ +164 out[2][0] = sign_[2]*(4.0*in[0]); │ │ │ │ │ +165 out[1][1] = sign_[1]*(1.0 - 4.0*in[0]); │ │ │ │ │ +166 out[1][0] = 0.0; │ │ │ │ │ +167 out[0][0] = sign_[0]*(-4.0*in[0]); │ │ │ │ │ +168 out[0][1] = sign_[0]*(5.0 - 8.0*in[1]); │ │ │ │ │ +169 out[3][0] = 4.0*in[0]; │ │ │ │ │ +170 out[3][1] = -7.0 + 8.0*in[0] + 8.0*in[1]; │ │ │ │ │ +171 out[4][0] = 6.0 - 8.0*in[0]; │ │ │ │ │ +172 out[4][1] = 5.0 - 4.0*in[0] - 16.0*in[1]; │ │ │ │ │ +173 out[5][0] = 4.0*in[0]; │ │ │ │ │ +174 out[5][1] = -1.0 - 4.0*in[0] + 8.0*in[1]; │ │ │ │ │ +175 out[6][0] = -8.0*in[0]; │ │ │ │ │ +176 out[6][1] = 8.0 - 16.0*in[0] - 16.0*in[1]; │ │ │ │ │ +177 out[7][0] = -16.0*in[0]; │ │ │ │ │ +178 out[7][1] = 16.0 - 8.0*in[0] - 32.0*in[1]; │ │ │ │ │ +179 break; │ │ │ │ │ +180 default: │ │ │ │ │ +181 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +182 } │ │ │ │ │ +183 } else { │ │ │ │ │ +184 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +185 } │ │ │ │ │ +186 } │ │ │ │ │ +187 │ │ │ │ │ +_1_8_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ +190 { │ │ │ │ │ +191 return 2; │ │ │ │ │ +192 } │ │ │ │ │ +193 │ │ │ │ │ +194 private: │ │ │ │ │ +195 std::array sign_; │ │ │ │ │ +196 }; │ │ │ │ │ +197} │ │ │ │ │ +198#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT12DLocalBasis(std::bitset< 3 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 8. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:132 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:94 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ unsigned int order() const │ │ │ │ │ Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:174 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:189 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT1Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:161 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:57 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas12dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
class  Dune::RT12DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on the reference triangle. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ +raviartthomas12dlocalcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-1 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00224_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas12dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,83 +70,82 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalcoefficients.hh
│ │ │ │ +
raviartthomas12dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │
13namespace Dune
│ │ │ │
14{
│ │ │ │
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i=0; i < 4; i++)
│ │ │ │ -
31 {
│ │ │ │ -
32 li[2*i] = LocalKey(i,1,0);
│ │ │ │ -
33 li[2*i + 1] = LocalKey(i,1,1);
│ │ │ │ -
34 }
│ │ │ │ -
35
│ │ │ │ -
36 li[8] = LocalKey(0,0,0);
│ │ │ │ -
37 li[9] = LocalKey(0,0,1);
│ │ │ │ -
38 li[10] = LocalKey(0,0,2);
│ │ │ │ -
39 li[11] = LocalKey(0,0,3);
│ │ │ │ -
40 }
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
│ │ │ │ -
43 std::size_t size () const
│ │ │ │ -
44 {
│ │ │ │ -
45 return 12;
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
50 {
│ │ │ │ -
51 return li[i];
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54 private:
│ │ │ │ -
55 std::vector<LocalKey> li;
│ │ │ │ -
56 };
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24
│ │ │ │ +
25 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29 for (std::size_t i = 0; i < 3; i++)
│ │ │ │ +
30 {
│ │ │ │ +
31 li[i] = LocalKey(i,1,0);
│ │ │ │ +
32 li[3 + i] = LocalKey(i,1,1);
│ │ │ │ +
33 }
│ │ │ │ +
34
│ │ │ │ +
35 // last two DOF are associated with the cell (codim = 0)
│ │ │ │ +
36 li[6] = LocalKey(0,0,0);
│ │ │ │ +
37 li[7] = LocalKey(0,0,1);
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 std::size_t size () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return 8;
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
47 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
48 {
│ │ │ │ +
49 return li[i];
│ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
52 private:
│ │ │ │ +
53 std::vector<LocalKey> li;
│ │ │ │ +
54 };
│ │ │ │
│ │ │ │ -
57}
│ │ │ │ -
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
55}
│ │ │ │ +
56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube2dlocalcoefficients.hh:24
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas1cube2dlocalcoefficients.hh:49
│ │ │ │ -
RT1Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas1cube2dlocalcoefficients.hh:28
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas1cube2dlocalcoefficients.hh:43
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on the reference triangle.
Definition raviartthomas12dlocalcoefficients.hh:23
│ │ │ │ +
RT12DLocalCoefficients()
Standard constructor.
Definition raviartthomas12dlocalcoefficients.hh:27
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas12dlocalcoefficients.hh:47
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas12dlocalcoefficients.hh:41
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,81 +1,80 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ -raviartthomas1cube2dlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d │ │ │ │ │ +raviartthomas12dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ 11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ 13namespace _D_u_n_e │ │ │ │ │ 14{ │ │ │ │ │ 15 │ │ │ │ │ -_2_3 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(12) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i=0; i < 4; i++) │ │ │ │ │ -31 { │ │ │ │ │ -32 li[2*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -33 li[2*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -34 } │ │ │ │ │ -35 │ │ │ │ │ -36 li[8] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ -37 li[9] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ -38 li[10] = _L_o_c_a_l_K_e_y(0,0,2); │ │ │ │ │ -39 li[11] = _L_o_c_a_l_K_e_y(0,0,3); │ │ │ │ │ -40 } │ │ │ │ │ -41 │ │ │ │ │ -_4_3 std::size_t _s_i_z_e () const │ │ │ │ │ -44 { │ │ │ │ │ -45 return 12; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_4_9 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -50 { │ │ │ │ │ -51 return li[i]; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -54 private: │ │ │ │ │ -55 std::vector li; │ │ │ │ │ -56 }; │ │ │ │ │ -57} │ │ │ │ │ -58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +_2_2 class _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +23 { │ │ │ │ │ +24 │ │ │ │ │ +25 public: │ │ │ │ │ +_2_7 _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(8) │ │ │ │ │ +28 { │ │ │ │ │ +29 for (std::size_t i = 0; i < 3; i++) │ │ │ │ │ +30 { │ │ │ │ │ +31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 li[3 + i] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +33 } │ │ │ │ │ +34 │ │ │ │ │ +35 // last two DOF are associated with the cell (codim = 0) │ │ │ │ │ +36 li[6] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ +37 li[7] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 std::size_t _s_i_z_e () const │ │ │ │ │ +42 { │ │ │ │ │ +43 return 8; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +48 { │ │ │ │ │ +49 return li[i]; │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +52 private: │ │ │ │ │ +53 std::vector li; │ │ │ │ │ +54 }; │ │ │ │ │ +55} │ │ │ │ │ +56#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT12DLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ const LocalKey & localKey(std::size_t i) const │ │ │ │ │ get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT1Cube2DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ std::size_t size() const │ │ │ │ │ number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:43 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:41 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,26 +72,28 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas1cube2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube2DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT1Cube2DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,20 +3,22 @@ │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas1cube2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   First order Raviart-Thomas shape functions on the reference │ │ │ │ │ quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00227_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,119 +74,196 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
raviartthomas1cube2dlocalinterpolation.hh
│ │ │ │ +
raviartthomas1cube2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
24 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27
│ │ │ │ -
28 public:
│ │ │ │ -
│ │ │ │ -
34 RT1Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ -
35 {
│ │ │ │ -
36 for (size_t i=0; i<4; i++)
│ │ │ │ -
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
38
│ │ │ │ -
39 n_[0] = {-1.0, 0.0};
│ │ │ │ -
40 n_[1] = { 1.0, 0.0};
│ │ │ │ -
41 n_[2] = { 0.0, -1.0};
│ │ │ │ -
42 n_[3] = { 0.0, 1.0};
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ +
31 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ +
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
39 RT1Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ +
40 {
│ │ │ │ +
41 for (size_t i=0; i<4; i++)
│ │ │ │ +
42 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │
43 }
│ │ │ │
│ │ │ │
44
│ │ │ │ -
53 template<class F, class C>
│ │ │ │ -
│ │ │ │ -
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
55 {
│ │ │ │ -
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
59
│ │ │ │ +
│ │ │ │ +
46 unsigned int size () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return 12;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
59 {
│ │ │ │
60 out.resize(12);
│ │ │ │ -
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
62
│ │ │ │ -
63 const int qOrder = 3;
│ │ │ │ -
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
65
│ │ │ │ -
66 for (auto&& qp : rule1)
│ │ │ │ -
67 {
│ │ │ │ -
68 Scalar qPos = qp.position();
│ │ │ │ -
69 typename LB::Traits::DomainType localPos = {0.0, qPos};
│ │ │ │ -
70
│ │ │ │ -
71 auto y = f(localPos);
│ │ │ │ -
72 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ -
73 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
74
│ │ │ │ -
75 localPos = {1.0, qPos};
│ │ │ │ -
76 y = f(localPos);
│ │ │ │ -
77 out[2] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ -
78 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
79
│ │ │ │ -
80 localPos = {qPos, 0.0};
│ │ │ │ -
81 y = f(localPos);
│ │ │ │ -
82 out[4] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ -
83 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
84
│ │ │ │ -
85 localPos = {qPos, 1.0};
│ │ │ │ -
86 y = f(localPos);
│ │ │ │ -
87 out[6] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ -
88 out[7] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
89 }
│ │ │ │ -
90
│ │ │ │ -
91 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ -
92
│ │ │ │ -
93 for (auto&& qp : rule2)
│ │ │ │ -
94 {
│ │ │ │ -
95 auto qPos = qp.position();
│ │ │ │ -
96
│ │ │ │ -
97 auto y = f(qPos);
│ │ │ │ -
98 out[8] += y[0]*qp.weight();
│ │ │ │ -
99 out[9] += y[1]*qp.weight();
│ │ │ │ -
100 out[10] += y[0]*qPos[1]*qp.weight();
│ │ │ │ -
101 out[11] += y[1]*qPos[0]*qp.weight();
│ │ │ │ -
102 }
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
105 private:
│ │ │ │ -
106 // Edge orientations
│ │ │ │ -
107 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ +
61
│ │ │ │ +
62 out[0][0] = sign_[0]*(-1.0 + 4.0*in[0]-3*in[0]*in[0]);
│ │ │ │ +
63 out[0][1] = 0.0;
│ │ │ │ +
64 out[1][0] = 3.0 - 12.0*in[0] - 6.0*in[1] + 24.0*in[0]*in[1]+9*in[0]*in[0] - 18.0*in[0]*in[0]*in[1];
│ │ │ │ +
65 out[1][1] = 0.0;
│ │ │ │ +
66 out[2][0] = sign_[1]*(-2.0*in[0] + 3.0*in[0]*in[0]);
│ │ │ │ +
67 out[2][1] = 0.0;
│ │ │ │ +
68 out[3][0] = -6.0*in[0] + 12.0*in[0]*in[1] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[1];
│ │ │ │ +
69 out[3][1] = 0.0;
│ │ │ │ +
70 out[4][0] = 0.0;
│ │ │ │ +
71 out[4][1] = sign_[2]*(-1.0 + 4.0*in[1] - 3.0*in[1]*in[1]);
│ │ │ │ +
72 out[5][0] = 0.0;
│ │ │ │ +
73 out[5][1] = -3.0 + 6.0*in[0] + 12.0*in[1] - 24.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ +
74 out[6][0] = 0.0;
│ │ │ │ +
75 out[6][1] = sign_[3]*(-2.0*in[1] + 3.0*in[1]*in[1]);
│ │ │ │ +
76 out[7][0] = 0.0;
│ │ │ │ +
77 out[7][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ +
78 out[8][0] = 24.0*in[0] - 36.0*in[0]*in[1] - 24.0*in[0]*in[0] + 36.0*in[0]*in[0]*in[1];
│ │ │ │ +
79 out[8][1] = 0.0;
│ │ │ │ +
80 out[9][0] = 0.0;
│ │ │ │ +
81 out[9][1] = 24.0*in[1] - 36.0*in[0]*in[1] - 24.0*in[1]*in[1] + 36.0*in[0]*in[1]*in[1];
│ │ │ │ +
82 out[10][0] = -36.0*in[0] + 72.0*in[0]*in[1] + 36.0*in[0]*in[0] - 72.0*in[0]*in[0]*in[1];
│ │ │ │ +
83 out[10][1] = 0.0;
│ │ │ │ +
84 out[11][0] = 0.0;
│ │ │ │ +
85 out[11][1] = -36.0*in[1] + 72.0*in[0]*in[1] + 36*in[1]*in[1] - 72.0*in[0]*in[1]*in[1];
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
94 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
95 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
96 {
│ │ │ │ +
97 out.resize(12);
│ │ │ │ +
98
│ │ │ │ +
99 out[0][0][0] = sign_[0]*(4.0 - 6.0*in[0]);
│ │ │ │ +
100 out[0][0][1] = 0.0;
│ │ │ │ +
101 out[0][1][0] = 0.0;
│ │ │ │ +
102 out[0][1][1] = 0.0;
│ │ │ │ +
103
│ │ │ │ +
104 out[1][0][0] = -12.0 + 24.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1];
│ │ │ │ +
105 out[1][0][1] = -6 + 24.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ +
106 out[1][1][0] = 0.0;
│ │ │ │ +
107 out[1][1][1] = 0.0;
│ │ │ │
108
│ │ │ │ -
109 // Edge normals
│ │ │ │ -
110 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ -
111 };
│ │ │ │ +
109 out[2][0][0] = sign_[1]*(-2.0 + 6.0*in[0]);
│ │ │ │ +
110 out[2][0][1] = 0.0;
│ │ │ │ +
111 out[2][1][0] = 0.0;
│ │ │ │ +
112 out[2][1][1] = 0.0;
│ │ │ │ +
113
│ │ │ │ +
114 out[3][0][0] = -6.0 + 12.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1];
│ │ │ │ +
115 out[3][0][1] = 12.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ +
116 out[3][1][0] = 0.0;
│ │ │ │ +
117 out[3][1][1] = 0.0;
│ │ │ │ +
118
│ │ │ │ +
119 out[4][0][0] = 0.0;
│ │ │ │ +
120 out[4][0][1] = 0.0;
│ │ │ │ +
121 out[4][1][0] = 0.0;
│ │ │ │ +
122 out[4][1][1] = sign_[2]*(4.0 - 6.0*in[1]);
│ │ │ │ +
123
│ │ │ │ +
124 out[5][0][0] = 0.0;
│ │ │ │ +
125 out[5][0][1] = 0.0;
│ │ │ │ +
126 out[5][1][0] = 6.0 - 24.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ +
127 out[5][1][1] = 12.0 - 24.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];
│ │ │ │ +
128
│ │ │ │ +
129 out[6][0][0] = 0.0;
│ │ │ │ +
130 out[6][0][1] = 0.0;
│ │ │ │ +
131 out[6][1][0] = 0.0;
│ │ │ │ +
132 out[6][1][1] = sign_[3]*(-2.0 + 6.0*in[1]);
│ │ │ │ +
133
│ │ │ │ +
134 out[7][0][0] = 0.0;
│ │ │ │ +
135 out[7][0][1] = 0.0;
│ │ │ │ +
136 out[7][1][0] = -12.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ +
137 out[7][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[1]*in[0];
│ │ │ │ +
138
│ │ │ │ +
139 out[8][0][0] = 24.0 - 36.0*in[1] - 48.0*in[0] + 72.0*in[0]*in[1];
│ │ │ │ +
140 out[8][0][1] = -36.0*in[0] + 36.0*in[0]*in[0];
│ │ │ │ +
141 out[8][1][0] = 0.0;
│ │ │ │ +
142 out[8][1][1] = 0.0;
│ │ │ │ +
143
│ │ │ │ +
144 out[9][0][0] = 0.0;
│ │ │ │ +
145 out[9][0][1] = 0.0;
│ │ │ │ +
146 out[9][1][0] = -36.0*in[1] + 36.0*in[1]*in[1];
│ │ │ │ +
147 out[9][1][1] = 24.0 - 36.0*in[0] - 48.0*in[1] + 72.0*in[0]*in[1];
│ │ │ │ +
148
│ │ │ │ +
149 out[10][0][0] = -36.0 + 72.0*in[1] + 72.0*in[0] - 144.0*in[0]*in[1];
│ │ │ │ +
150 out[10][0][1] = 72.0*in[0] - 72.0*in[0]*in[0];
│ │ │ │ +
151 out[10][1][0] = 0.0;
│ │ │ │ +
152 out[10][1][1] = 0.0;
│ │ │ │ +
153
│ │ │ │ +
154 out[11][0][0] = 0.0;
│ │ │ │ +
155 out[11][0][1] = 0.0;
│ │ │ │ +
156 out[11][1][0] = 72.0*in[1] - 72.0*in[1]*in[1];
│ │ │ │ +
157 out[11][1][1] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1];
│ │ │ │ +
158 }
│ │ │ │ +
│ │ │ │ +
159
│ │ │ │ +
│ │ │ │ +
161 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
162 const typename Traits::DomainType& in, // position
│ │ │ │ +
163 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
164 {
│ │ │ │ +
165 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
166 if (totalOrder == 0) {
│ │ │ │ +
167 evaluateFunction(in, out);
│ │ │ │ +
168 } else {
│ │ │ │ +
169 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
170 }
│ │ │ │ +
171 }
│ │ │ │ +
│ │ │ │ +
172
│ │ │ │ +
│ │ │ │ +
174 unsigned int order () const
│ │ │ │ +
175 {
│ │ │ │ +
176 return 3;
│ │ │ │ +
177 }
│ │ │ │ +
│ │ │ │ +
178
│ │ │ │ +
179 private:
│ │ │ │ +
180 std::array<R,4> sign_;
│ │ │ │ +
181 };
│ │ │ │
│ │ │ │ -
112}
│ │ │ │ -
113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
182}
│ │ │ │ +
183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalinterpolation.hh:26
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas1cube2dlocalinterpolation.hh:54
│ │ │ │ -
RT1Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2dlocalinterpolation.hh:34
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalbasis.hh:28
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:94
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas1cube2dlocalbasis.hh:32
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:174
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:57
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas1cube2dlocalbasis.hh:46
│ │ │ │ +
RT1Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2dlocalbasis.hh:39
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas1cube2dlocalbasis.hh:161
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,119 +2,218 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ -raviartthomas1cube2dlocalinterpolation.hh │ │ │ │ │ +raviartthomas1cube2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -26 { │ │ │ │ │ -27 │ │ │ │ │ -28 public: │ │ │ │ │ -_3_4 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ -35 { │ │ │ │ │ -36 for (size_t i=0; i<4; i++) │ │ │ │ │ -37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -38 │ │ │ │ │ -39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ -40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ -41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ -42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ +40 { │ │ │ │ │ +41 for (size_t i=0; i<4; i++) │ │ │ │ │ +42 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ 43 } │ │ │ │ │ 44 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -55 { │ │ │ │ │ -56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -59 │ │ │ │ │ +_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return 12; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +58 std::vector& out) const │ │ │ │ │ +59 { │ │ │ │ │ 60 out.resize(12); │ │ │ │ │ -61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -62 │ │ │ │ │ -63 const int qOrder = 3; │ │ │ │ │ -64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ -qOrder); │ │ │ │ │ -65 │ │ │ │ │ -66 for (auto&& qp : rule1) │ │ │ │ │ -67 { │ │ │ │ │ -68 Scalar qPos = qp.position(); │ │ │ │ │ -69 typename LB::Traits::DomainType localPos = {0.0, qPos}; │ │ │ │ │ -70 │ │ │ │ │ -71 auto y = f(localPos); │ │ │ │ │ -72 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ -73 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -74 │ │ │ │ │ -75 localPos = {1.0, qPos}; │ │ │ │ │ -76 y = f(localPos); │ │ │ │ │ -77 out[2] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ -78 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -79 │ │ │ │ │ -80 localPos = {qPos, 0.0}; │ │ │ │ │ -81 y = f(localPos); │ │ │ │ │ -82 out[4] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ -83 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -84 │ │ │ │ │ -85 localPos = {qPos, 1.0}; │ │ │ │ │ -86 y = f(localPos); │ │ │ │ │ -87 out[6] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ -88 out[7] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -89 } │ │ │ │ │ -90 │ │ │ │ │ -91 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ -qOrder); │ │ │ │ │ -92 │ │ │ │ │ -93 for (auto&& qp : rule2) │ │ │ │ │ -94 { │ │ │ │ │ -95 auto qPos = qp.position(); │ │ │ │ │ -96 │ │ │ │ │ -97 auto y = f(qPos); │ │ │ │ │ -98 out[8] += y[0]*qp.weight(); │ │ │ │ │ -99 out[9] += y[1]*qp.weight(); │ │ │ │ │ -100 out[10] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ -101 out[11] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ -102 } │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -105 private: │ │ │ │ │ -106 // Edge orientations │ │ │ │ │ -107 std::array sign_; │ │ │ │ │ +61 │ │ │ │ │ +62 out[0][0] = sign_[0]*(-1.0 + 4.0*in[0]-3*in[0]*in[0]); │ │ │ │ │ +63 out[0][1] = 0.0; │ │ │ │ │ +64 out[1][0] = 3.0 - 12.0*in[0] - 6.0*in[1] + 24.0*in[0]*in[1]+9*in[0]*in[0] - │ │ │ │ │ +18.0*in[0]*in[0]*in[1]; │ │ │ │ │ +65 out[1][1] = 0.0; │ │ │ │ │ +66 out[2][0] = sign_[1]*(-2.0*in[0] + 3.0*in[0]*in[0]); │ │ │ │ │ +67 out[2][1] = 0.0; │ │ │ │ │ +68 out[3][0] = -6.0*in[0] + 12.0*in[0]*in[1] + 9.0*in[0]*in[0] - 18.0*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +69 out[3][1] = 0.0; │ │ │ │ │ +70 out[4][0] = 0.0; │ │ │ │ │ +71 out[4][1] = sign_[2]*(-1.0 + 4.0*in[1] - 3.0*in[1]*in[1]); │ │ │ │ │ +72 out[5][0] = 0.0; │ │ │ │ │ +73 out[5][1] = -3.0 + 6.0*in[0] + 12.0*in[1] - 24.0*in[0]*in[1] - 9.0*in[1]*in │ │ │ │ │ +[1] + 18.0*in[0]*in[1]*in[1]; │ │ │ │ │ +74 out[6][0] = 0.0; │ │ │ │ │ +75 out[6][1] = sign_[3]*(-2.0*in[1] + 3.0*in[1]*in[1]); │ │ │ │ │ +76 out[7][0] = 0.0; │ │ │ │ │ +77 out[7][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +78 out[8][0] = 24.0*in[0] - 36.0*in[0]*in[1] - 24.0*in[0]*in[0] + 36.0*in[0]*in │ │ │ │ │ +[0]*in[1]; │ │ │ │ │ +79 out[8][1] = 0.0; │ │ │ │ │ +80 out[9][0] = 0.0; │ │ │ │ │ +81 out[9][1] = 24.0*in[1] - 36.0*in[0]*in[1] - 24.0*in[1]*in[1] + 36.0*in[0]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +82 out[10][0] = -36.0*in[0] + 72.0*in[0]*in[1] + 36.0*in[0]*in[0] - 72.0*in │ │ │ │ │ +[0]*in[0]*in[1]; │ │ │ │ │ +83 out[10][1] = 0.0; │ │ │ │ │ +84 out[11][0] = 0.0; │ │ │ │ │ +85 out[11][1] = -36.0*in[1] + 72.0*in[0]*in[1] + 36*in[1]*in[1] - 72.0*in[0]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +86 } │ │ │ │ │ +87 │ │ │ │ │ +_9_4 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +95 std::vector& out) const │ │ │ │ │ +96 { │ │ │ │ │ +97 out.resize(12); │ │ │ │ │ +98 │ │ │ │ │ +99 out[0][0][0] = sign_[0]*(4.0 - 6.0*in[0]); │ │ │ │ │ +100 out[0][0][1] = 0.0; │ │ │ │ │ +101 out[0][1][0] = 0.0; │ │ │ │ │ +102 out[0][1][1] = 0.0; │ │ │ │ │ +103 │ │ │ │ │ +104 out[1][0][0] = -12.0 + 24.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1]; │ │ │ │ │ +105 out[1][0][1] = -6 + 24.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ +106 out[1][1][0] = 0.0; │ │ │ │ │ +107 out[1][1][1] = 0.0; │ │ │ │ │ 108 │ │ │ │ │ -109 // Edge normals │ │ │ │ │ -110 std::array n_; │ │ │ │ │ -111 }; │ │ │ │ │ -112} │ │ │ │ │ -113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +109 out[2][0][0] = sign_[1]*(-2.0 + 6.0*in[0]); │ │ │ │ │ +110 out[2][0][1] = 0.0; │ │ │ │ │ +111 out[2][1][0] = 0.0; │ │ │ │ │ +112 out[2][1][1] = 0.0; │ │ │ │ │ +113 │ │ │ │ │ +114 out[3][0][0] = -6.0 + 12.0*in[1] + 18.0*in[0] - 36.0*in[0]*in[1]; │ │ │ │ │ +115 out[3][0][1] = 12.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ +116 out[3][1][0] = 0.0; │ │ │ │ │ +117 out[3][1][1] = 0.0; │ │ │ │ │ +118 │ │ │ │ │ +119 out[4][0][0] = 0.0; │ │ │ │ │ +120 out[4][0][1] = 0.0; │ │ │ │ │ +121 out[4][1][0] = 0.0; │ │ │ │ │ +122 out[4][1][1] = sign_[2]*(4.0 - 6.0*in[1]); │ │ │ │ │ +123 │ │ │ │ │ +124 out[5][0][0] = 0.0; │ │ │ │ │ +125 out[5][0][1] = 0.0; │ │ │ │ │ +126 out[5][1][0] = 6.0 - 24.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ +127 out[5][1][1] = 12.0 - 24.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1]; │ │ │ │ │ +128 │ │ │ │ │ +129 out[6][0][0] = 0.0; │ │ │ │ │ +130 out[6][0][1] = 0.0; │ │ │ │ │ +131 out[6][1][0] = 0.0; │ │ │ │ │ +132 out[6][1][1] = sign_[3]*(-2.0 + 6.0*in[1]); │ │ │ │ │ +133 │ │ │ │ │ +134 out[7][0][0] = 0.0; │ │ │ │ │ +135 out[7][0][1] = 0.0; │ │ │ │ │ +136 out[7][1][0] = -12.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ +137 out[7][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[1]*in[0]; │ │ │ │ │ +138 │ │ │ │ │ +139 out[8][0][0] = 24.0 - 36.0*in[1] - 48.0*in[0] + 72.0*in[0]*in[1]; │ │ │ │ │ +140 out[8][0][1] = -36.0*in[0] + 36.0*in[0]*in[0]; │ │ │ │ │ +141 out[8][1][0] = 0.0; │ │ │ │ │ +142 out[8][1][1] = 0.0; │ │ │ │ │ +143 │ │ │ │ │ +144 out[9][0][0] = 0.0; │ │ │ │ │ +145 out[9][0][1] = 0.0; │ │ │ │ │ +146 out[9][1][0] = -36.0*in[1] + 36.0*in[1]*in[1]; │ │ │ │ │ +147 out[9][1][1] = 24.0 - 36.0*in[0] - 48.0*in[1] + 72.0*in[0]*in[1]; │ │ │ │ │ +148 │ │ │ │ │ +149 out[10][0][0] = -36.0 + 72.0*in[1] + 72.0*in[0] - 144.0*in[0]*in[1]; │ │ │ │ │ +150 out[10][0][1] = 72.0*in[0] - 72.0*in[0]*in[0]; │ │ │ │ │ +151 out[10][1][0] = 0.0; │ │ │ │ │ +152 out[10][1][1] = 0.0; │ │ │ │ │ +153 │ │ │ │ │ +154 out[11][0][0] = 0.0; │ │ │ │ │ +155 out[11][0][1] = 0.0; │ │ │ │ │ +156 out[11][1][0] = 72.0*in[1] - 72.0*in[1]*in[1]; │ │ │ │ │ +157 out[11][1][1] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1]; │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +_1_6_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +162 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +163 std::vector& out) const // return value │ │ │ │ │ +164 { │ │ │ │ │ +165 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +166 if (totalOrder == 0) { │ │ │ │ │ +167 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +168 } else { │ │ │ │ │ +169 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +170 } │ │ │ │ │ +171 } │ │ │ │ │ +172 │ │ │ │ │ +_1_7_4 unsigned int _o_r_d_e_r () const │ │ │ │ │ +175 { │ │ │ │ │ +176 return 3; │ │ │ │ │ +177 } │ │ │ │ │ +178 │ │ │ │ │ +179 private: │ │ │ │ │ +180 std::array sign_; │ │ │ │ │ +181 }; │ │ │ │ │ +182} │ │ │ │ │ +183#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT1Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:94 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ +2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:174 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT1Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:34 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:161 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,33 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas1cube2dlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PyramidLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
class  Dune::RT1Cube2DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference quadrilateral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ +raviartthomas1cube2dlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference │ │ │ │ │ + quadrilateral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00230_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,97 +70,123 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalinterpolation.hh
│ │ │ │ +
raviartthomas1cube2dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
20 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 {
│ │ │ │ -
23
│ │ │ │ -
24 public:
│ │ │ │ -
25
│ │ │ │ -
│ │ │ │ -
31 RT0PyramidLocalInterpolation (std::bitset<5> s = 0)
│ │ │ │ -
32 {
│ │ │ │ -
33 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
34
│ │ │ │ -
35 for (size_t i=0; i<5; i++)
│ │ │ │ -
36 sign[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
37
│ │ │ │ -
38 Scalar r = 1/std::sqrt(2);
│ │ │ │ -
39
│ │ │ │ -
40 n[0] = { 0.0, 0.0, -1.0};
│ │ │ │ -
41 n[1] = {-1.0, 0.0, 0.0};
│ │ │ │ -
42 n[2] = { r, 0.0, r};
│ │ │ │ -
43 n[3] = { 0.0, -1.0, 0.0};
│ │ │ │ -
44 n[4] = { 0.0, r, r};
│ │ │ │ -
45
│ │ │ │ -
46 c[0] = 1.0;
│ │ │ │ -
47 c[1] = 1/2.0;
│ │ │ │ -
48 c[2] = 1/2.0 * std::sqrt(2);
│ │ │ │ -
49 c[3] = 1/2.0;
│ │ │ │ -
50 c[4] = 1/2.0 * std::sqrt(2);
│ │ │ │ -
51
│ │ │ │ -
52 m[0] = { 0.5, 0.5, 0.0};
│ │ │ │ -
53 m[1] = { 0.0, 1/3.0, 1/3.0};
│ │ │ │ -
54 m[2] = { 2/3.0, 1/3.0, 1/3.0};
│ │ │ │ -
55 m[3] = { 1/3.0, 0.0, 1/3.0};
│ │ │ │ -
56 m[4] = { 1/3.0, 2/3.0, 1/3.0};
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
67 template<class F, class C>
│ │ │ │ -
│ │ │ │ -
68 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
69 {
│ │ │ │ -
70 out.resize(5);
│ │ │ │ -
71 for(int i=0; i<5; i++)
│ │ │ │ -
72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i];
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
24 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27
│ │ │ │ +
28 public:
│ │ │ │ +
│ │ │ │ +
34 RT1Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ +
35 {
│ │ │ │ +
36 for (size_t i=0; i<4; i++)
│ │ │ │ +
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
38
│ │ │ │ +
39 n_[0] = {-1.0, 0.0};
│ │ │ │ +
40 n_[1] = { 1.0, 0.0};
│ │ │ │ +
41 n_[2] = { 0.0, -1.0};
│ │ │ │ +
42 n_[3] = { 0.0, 1.0};
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
53 template<class F, class C>
│ │ │ │ +
│ │ │ │ +
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
55 {
│ │ │ │ +
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
59
│ │ │ │ +
60 out.resize(12);
│ │ │ │ +
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
62
│ │ │ │ +
63 const int qOrder = 3;
│ │ │ │ +
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ +
65
│ │ │ │ +
66 for (auto&& qp : rule1)
│ │ │ │ +
67 {
│ │ │ │ +
68 Scalar qPos = qp.position();
│ │ │ │ +
69 typename LB::Traits::DomainType localPos = {0.0, qPos};
│ │ │ │ +
70
│ │ │ │ +
71 auto y = f(localPos);
│ │ │ │ +
72 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ +
73 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │
74
│ │ │ │ -
75 private:
│ │ │ │ -
76 // Facet orientations
│ │ │ │ -
77 std::array<typename LB::Traits::RangeFieldType, 5> sign;
│ │ │ │ -
78 // Facet area
│ │ │ │ -
79 std::array<typename LB::Traits::RangeFieldType, 5> c;
│ │ │ │ -
80
│ │ │ │ -
81 // Facet normals
│ │ │ │ -
82 std::array<typename LB::Traits::DomainType, 5> n;
│ │ │ │ -
83 // Facet midpoints
│ │ │ │ -
84 std::array<typename LB::Traits::DomainType, 5> m;
│ │ │ │ -
85 };
│ │ │ │ +
75 localPos = {1.0, qPos};
│ │ │ │ +
76 y = f(localPos);
│ │ │ │ +
77 out[2] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ +
78 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
79
│ │ │ │ +
80 localPos = {qPos, 0.0};
│ │ │ │ +
81 y = f(localPos);
│ │ │ │ +
82 out[4] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ +
83 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ +
84
│ │ │ │ +
85 localPos = {qPos, 1.0};
│ │ │ │ +
86 y = f(localPos);
│ │ │ │ +
87 out[6] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ +
88 out[7] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ +
89 }
│ │ │ │ +
90
│ │ │ │ +
91 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
92
│ │ │ │ +
93 for (auto&& qp : rule2)
│ │ │ │ +
94 {
│ │ │ │ +
95 auto qPos = qp.position();
│ │ │ │ +
96
│ │ │ │ +
97 auto y = f(qPos);
│ │ │ │ +
98 out[8] += y[0]*qp.weight();
│ │ │ │ +
99 out[9] += y[1]*qp.weight();
│ │ │ │ +
100 out[10] += y[0]*qPos[1]*qp.weight();
│ │ │ │ +
101 out[11] += y[1]*qPos[0]*qp.weight();
│ │ │ │ +
102 }
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
105 private:
│ │ │ │ +
106 // Edge orientations
│ │ │ │ +
107 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ +
108
│ │ │ │ +
109 // Edge normals
│ │ │ │ +
110 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ +
111 };
│ │ │ │
│ │ │ │ -
86}
│ │ │ │ -
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
112}
│ │ │ │ +
113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas0pyramidlocalinterpolation.hh:22
│ │ │ │ -
RT0PyramidLocalInterpolation(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramidlocalinterpolation.hh:31
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas0pyramidlocalinterpolation.hh:68
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalinterpolation.hh:26
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas1cube2dlocalinterpolation.hh:54
│ │ │ │ +
RT1Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2dlocalinterpolation.hh:34
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,92 +1,120 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ -raviartthomas0pyramidlocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ +raviartthomas1cube2dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -22 { │ │ │ │ │ -23 │ │ │ │ │ -24 public: │ │ │ │ │ -25 │ │ │ │ │ -_3_1 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<5> s = 0) │ │ │ │ │ -32 { │ │ │ │ │ -33 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -34 │ │ │ │ │ -35 for (size_t i=0; i<5; i++) │ │ │ │ │ -36 sign[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -37 │ │ │ │ │ -38 Scalar r = 1/std::sqrt(2); │ │ │ │ │ -39 │ │ │ │ │ -40 n[0] = { 0.0, 0.0, -1.0}; │ │ │ │ │ -41 n[1] = {-1.0, 0.0, 0.0}; │ │ │ │ │ -42 n[2] = { r, 0.0, r}; │ │ │ │ │ -43 n[3] = { 0.0, -1.0, 0.0}; │ │ │ │ │ -44 n[4] = { 0.0, r, r}; │ │ │ │ │ -45 │ │ │ │ │ -46 c[0] = 1.0; │ │ │ │ │ -47 c[1] = 1/2.0; │ │ │ │ │ -48 c[2] = 1/2.0 * std::sqrt(2); │ │ │ │ │ -49 c[3] = 1/2.0; │ │ │ │ │ -50 c[4] = 1/2.0 * std::sqrt(2); │ │ │ │ │ -51 │ │ │ │ │ -52 m[0] = { 0.5, 0.5, 0.0}; │ │ │ │ │ -53 m[1] = { 0.0, 1/3.0, 1/3.0}; │ │ │ │ │ -54 m[2] = { 2/3.0, 1/3.0, 1/3.0}; │ │ │ │ │ -55 m[3] = { 1/3.0, 0.0, 1/3.0}; │ │ │ │ │ -56 m[4] = { 1/3.0, 2/3.0, 1/3.0}; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -67 template │ │ │ │ │ -_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -69 { │ │ │ │ │ -70 out.resize(5); │ │ │ │ │ -71 for(int i=0; i<5; i++) │ │ │ │ │ -72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i]; │ │ │ │ │ -73 } │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +26 { │ │ │ │ │ +27 │ │ │ │ │ +28 public: │ │ │ │ │ +_3_4 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ +35 { │ │ │ │ │ +36 for (size_t i=0; i<4; i++) │ │ │ │ │ +37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +38 │ │ │ │ │ +39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ +40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ +41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ +42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +55 { │ │ │ │ │ +56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +59 │ │ │ │ │ +60 out.resize(12); │ │ │ │ │ +61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +62 │ │ │ │ │ +63 const int qOrder = 3; │ │ │ │ │ +64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ +qOrder); │ │ │ │ │ +65 │ │ │ │ │ +66 for (auto&& qp : rule1) │ │ │ │ │ +67 { │ │ │ │ │ +68 Scalar qPos = qp.position(); │ │ │ │ │ +69 typename LB::Traits::DomainType localPos = {0.0, qPos}; │ │ │ │ │ +70 │ │ │ │ │ +71 auto y = f(localPos); │ │ │ │ │ +72 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ +73 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ 74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 // Facet orientations │ │ │ │ │ -77 std::array sign; │ │ │ │ │ -78 // Facet area │ │ │ │ │ -79 std::array c; │ │ │ │ │ -80 │ │ │ │ │ -81 // Facet normals │ │ │ │ │ -82 std::array n; │ │ │ │ │ -83 // Facet midpoints │ │ │ │ │ -84 std::array m; │ │ │ │ │ -85 }; │ │ │ │ │ -86} │ │ │ │ │ -87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ +75 localPos = {1.0, qPos}; │ │ │ │ │ +76 y = f(localPos); │ │ │ │ │ +77 out[2] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ +78 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +79 │ │ │ │ │ +80 localPos = {qPos, 0.0}; │ │ │ │ │ +81 y = f(localPos); │ │ │ │ │ +82 out[4] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ +83 out[5] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ +84 │ │ │ │ │ +85 localPos = {qPos, 1.0}; │ │ │ │ │ +86 y = f(localPos); │ │ │ │ │ +87 out[6] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ +88 out[7] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ +89 } │ │ │ │ │ +90 │ │ │ │ │ +91 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ +qOrder); │ │ │ │ │ +92 │ │ │ │ │ +93 for (auto&& qp : rule2) │ │ │ │ │ +94 { │ │ │ │ │ +95 auto qPos = qp.position(); │ │ │ │ │ +96 │ │ │ │ │ +97 auto y = f(qPos); │ │ │ │ │ +98 out[8] += y[0]*qp.weight(); │ │ │ │ │ +99 out[9] += y[1]*qp.weight(); │ │ │ │ │ +100 out[10] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ +101 out[11] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ +102 } │ │ │ │ │ +103 } │ │ │ │ │ +104 │ │ │ │ │ +105 private: │ │ │ │ │ +106 // Edge orientations │ │ │ │ │ +107 std::array sign_; │ │ │ │ │ +108 │ │ │ │ │ +109 // Edge normals │ │ │ │ │ +110 std::array n_; │ │ │ │ │ +111 }; │ │ │ │ │ +112} │ │ │ │ │ +113#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT0PyramidLocalInterpolation(std::bitset< 5 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:68 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT1Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:34 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas1cube2dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PyramidLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on pyramids. More...
class  Dune::RT1Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ +raviartthomas1cube2dlocalcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-1 elements on pyramids. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-1 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00233_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube2dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,83 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalcoefficients.hh
│ │ │ │ +
raviartthomas1cube2dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │
13namespace Dune
│ │ │ │
14{
│ │ │ │
15
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
24 {
│ │ │ │
25
│ │ │ │
26 public:
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
29 {
│ │ │ │ -
30 for(std::size_t i=0; i< size(); i++)
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
35 std::size_t size () const
│ │ │ │ -
36 {
│ │ │ │ -
37 return 5;
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
42 {
│ │ │ │ -
43 return li[i];
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector<LocalKey> li;
│ │ │ │ -
48 };
│ │ │ │ +
30 for (std::size_t i=0; i < 4; i++)
│ │ │ │ +
31 {
│ │ │ │ +
32 li[2*i] = LocalKey(i,1,0);
│ │ │ │ +
33 li[2*i + 1] = LocalKey(i,1,1);
│ │ │ │ +
34 }
│ │ │ │ +
35
│ │ │ │ +
36 li[8] = LocalKey(0,0,0);
│ │ │ │ +
37 li[9] = LocalKey(0,0,1);
│ │ │ │ +
38 li[10] = LocalKey(0,0,2);
│ │ │ │ +
39 li[11] = LocalKey(0,0,3);
│ │ │ │ +
40 }
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
43 std::size_t size () const
│ │ │ │ +
44 {
│ │ │ │ +
45 return 12;
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
49 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
50 {
│ │ │ │ +
51 return li[i];
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
54 private:
│ │ │ │ +
55 std::vector<LocalKey> li;
│ │ │ │ +
56 };
│ │ │ │
│ │ │ │ -
49}
│ │ │ │ -
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
57}
│ │ │ │ +
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on pyramids.
Definition raviartthomas0pyramidlocalcoefficients.hh:24
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0pyramidlocalcoefficients.hh:41
│ │ │ │ -
RT0PyramidLocalCoefficients()
Standard constructor.
Definition raviartthomas0pyramidlocalcoefficients.hh:28
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas0pyramidlocalcoefficients.hh:35
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube2dlocalcoefficients.hh:24
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas1cube2dlocalcoefficients.hh:49
│ │ │ │ +
RT1Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas1cube2dlocalcoefficients.hh:28
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas1cube2dlocalcoefficients.hh:43
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,73 +1,81 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ -raviartthomas0pyramidlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d │ │ │ │ │ +raviartthomas1cube2dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ 11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ 13namespace _D_u_n_e │ │ │ │ │ 14{ │ │ │ │ │ 15 │ │ │ │ │ -_2_3 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +_2_3 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ 24 { │ │ │ │ │ 25 │ │ │ │ │ 26 public: │ │ │ │ │ -_2_8 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ +_2_8 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(12) │ │ │ │ │ 29 { │ │ │ │ │ -30 for(std::size_t i=0; i< _s_i_z_e(); i++) │ │ │ │ │ -31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ -36 { │ │ │ │ │ -37 return 5; │ │ │ │ │ -38 } │ │ │ │ │ -39 │ │ │ │ │ -_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -42 { │ │ │ │ │ -43 return li[i]; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -46 private: │ │ │ │ │ -47 std::vector li; │ │ │ │ │ -48 }; │ │ │ │ │ -49} │ │ │ │ │ -50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ +30 for (std::size_t i=0; i < 4; i++) │ │ │ │ │ +31 { │ │ │ │ │ +32 li[2*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +33 li[2*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +34 } │ │ │ │ │ +35 │ │ │ │ │ +36 li[8] = _L_o_c_a_l_K_e_y(0,0,0); │ │ │ │ │ +37 li[9] = _L_o_c_a_l_K_e_y(0,0,1); │ │ │ │ │ +38 li[10] = _L_o_c_a_l_K_e_y(0,0,2); │ │ │ │ │ +39 li[11] = _L_o_c_a_l_K_e_y(0,0,3); │ │ │ │ │ +40 } │ │ │ │ │ +41 │ │ │ │ │ +_4_3 std::size_t _s_i_z_e () const │ │ │ │ │ +44 { │ │ │ │ │ +45 return 12; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_9 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +50 { │ │ │ │ │ +51 return li[i]; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +54 private: │ │ │ │ │ +55 std::vector li; │ │ │ │ │ +56 }; │ │ │ │ │ +57} │ │ │ │ │ +58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on pyramids. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ const LocalKey & localKey(std::size_t i) const │ │ │ │ │ get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT0PyramidLocalCoefficients() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT1Cube2DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ std::size_t size() const │ │ │ │ │ number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:35 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,50 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramidlocalbasis.hh File Reference
│ │ │ │ +
raviartthomassimplexinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/typeindex.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/utility/interpolationhelper.hh>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PyramidLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference pyramid. More...
class  Dune::LocalCoefficientsContainer
 
struct  Dune::RaviartThomasCoefficientsFactory< dim >
 
struct  Dune::RTL2InterpolationBuilder< dim, Field >
 
class  Dune::RaviartThomasL2Interpolation< dimension, F >
 An L2-based interpolation for Raviart Thomas. More...
 
struct  Dune::RaviartThomasL2InterpolationFactory< dim, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,39 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +raviartthomassimplexinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> │ │ │ │ │ +  An L2-based interpolation for Raviart Thomas. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00236_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramidlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,148 +70,547 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramidlocalbasis.hh
│ │ │ │ +
raviartthomassimplexinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include <dune/common/exceptions.hh>
│ │ │ │
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
13#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
15#include <dune/geometry/type.hh>
│ │ │ │ +
16#include <dune/geometry/typeindex.hh>
│ │ │ │ +
17
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
22
│ │ │ │ +
23namespace Dune
│ │ │ │ +
24{
│ │ │ │ +
25
│ │ │ │ +
26 // Internal Forward Declarations
│ │ │ │ +
27 // -----------------------------
│ │ │ │ +
28
│ │ │ │ +
29 template < unsigned int dim, class Field >
│ │ │ │ +
30 struct RaviartThomasL2InterpolationFactory;
│ │ │ │ +
31
│ │ │ │ +
32
│ │ │ │
33
│ │ │ │ -
│ │ │ │ -
39 RT0PyramidLocalBasis (std::bitset<5> s = 0)
│ │ │ │ -
40 {
│ │ │ │ -
41 for (size_t i=0; i<size(); i++)
│ │ │ │ -
42 sign[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 unsigned int size () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return 5;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
59 {
│ │ │ │ -
60 out.resize(5);
│ │ │ │ -
61 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
62 out[i] = {0.0,0.0,0.0};
│ │ │ │ +
34 // LocalCoefficientsContainer
│ │ │ │ +
35 // --------------------------
│ │ │ │ +
36
│ │ │ │ +
37 class LocalCoefficientsContainer
│ │ │ │ +
38 {
│ │ │ │ +
39 typedef LocalCoefficientsContainer This;
│ │ │ │ +
40
│ │ │ │ +
41 public:
│ │ │ │ +
42 template <class Setter>
│ │ │ │ +
│ │ │ │ +
43 LocalCoefficientsContainer ( const Setter &setter )
│ │ │ │ +
44 {
│ │ │ │ +
45 setter.setLocalKeys(localKey_);
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
48 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ +
49 {
│ │ │ │ +
50 assert( i < size() );
│ │ │ │ +
51 return localKey_[ i ];
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
54 std::size_t size () const
│ │ │ │ +
55 {
│ │ │ │ +
56 return localKey_.size();
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
59 private:
│ │ │ │ +
60 std::vector< LocalKey > localKey_;
│ │ │ │ +
61 };
│ │ │ │ +
62
│ │ │ │
63
│ │ │ │ -
64 out[0][0] = 1.5*in[0];
│ │ │ │ -
65 out[0][1] = 1.5*in[1];
│ │ │ │ -
66 out[0][2] = -1.0;
│ │ │ │ +
64
│ │ │ │ +
65 // RaviartThomasCoefficientsFactory
│ │ │ │ +
66 // --------------------------------
│ │ │ │
67
│ │ │ │ -
68 out[1][0] = -2.0 + 3.0*in[0];
│ │ │ │ -
69
│ │ │ │ -
70 out[2][0] = 3.0*in[0];
│ │ │ │ -
71
│ │ │ │ -
72 out[3][1] = -2.0 + 3.0*in[1];
│ │ │ │ +
68 template < unsigned int dim >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
70 {
│ │ │ │ +
71 typedef std::size_t Key;
│ │ │ │ + │ │ │ │
73
│ │ │ │ -
74 out[4][1] = 3.0*in[1];
│ │ │ │ -
75
│ │ │ │ -
76 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
77 out[i] *= sign[i];
│ │ │ │ -
78
│ │ │ │ -
79 }
│ │ │ │ +
74 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
75 static Object *create( const Key &key )
│ │ │ │ +
76 {
│ │ │ │ +
77 typedef RaviartThomasL2InterpolationFactory< dim, double > InterpolationFactory;
│ │ │ │ +
78 if( !supports< geometryId >( key ) )
│ │ │ │ +
79 return nullptr;
│ │ │ │ +
80 typename InterpolationFactory::Object *interpolation = InterpolationFactory::template create< geometryId >( key );
│ │ │ │ +
81 Object *localKeys = new Object( *interpolation );
│ │ │ │ +
82 InterpolationFactory::release( interpolation );
│ │ │ │ +
83 return localKeys;
│ │ │ │ +
84 }
│ │ │ │
│ │ │ │ -
80
│ │ │ │ +
85
│ │ │ │ +
86 template< GeometryType::Id geometryId >
│ │ │ │
│ │ │ │ -
87 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
88 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
89 {
│ │ │ │ -
90 out.resize(5);
│ │ │ │ -
91
│ │ │ │ -
92 for(int i=0; i<size(); i++)
│ │ │ │ -
93 for(int j=0; j<3; j++)
│ │ │ │ -
94 out[i][j] = {0.0, 0.0, 0.0};
│ │ │ │ +
87 static bool supports ( const Key &key )
│ │ │ │ +
88 {
│ │ │ │ +
89 return GeometryType(geometryId).isSimplex();
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91 static void release( Object *object ) { delete object; }
│ │ │ │ +
92 };
│ │ │ │ +
│ │ │ │ +
93
│ │ │ │ +
94
│ │ │ │
95
│ │ │ │ -
96 out[0][0][0] = sign[0]*(1.5);
│ │ │ │ -
97 out[0][1][1] = sign[0]*(1.5);
│ │ │ │ +
96 // RTL2InterpolationBuilder
│ │ │ │ +
97 // ------------------------
│ │ │ │
98
│ │ │ │ -
99 out[1][0][0] = sign[1]*(3.0);
│ │ │ │ -
100
│ │ │ │ -
101 out[2][0][0] = sign[2]*(3.0);
│ │ │ │ -
102
│ │ │ │ -
103 out[3][1][1] = sign[3]*(3.0);
│ │ │ │ -
104
│ │ │ │ -
105 out[4][1][1] = sign[4]*(3.0);
│ │ │ │ -
106 }
│ │ │ │ -
│ │ │ │ -
107
│ │ │ │ -
│ │ │ │ -
109 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
110 const typename Traits::DomainType& in, // position
│ │ │ │ -
111 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
112 {
│ │ │ │ -
113 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
114 if (totalOrder == 0) {
│ │ │ │ -
115 evaluateFunction(in, out);
│ │ │ │ -
116 } else {
│ │ │ │ -
117 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
118 }
│ │ │ │ -
119 }
│ │ │ │ -
│ │ │ │ +
99 // L2 Interpolation requires:
│ │ │ │ +
100 // - for element
│ │ │ │ +
101 // - test basis
│ │ │ │ +
102 // - for each face (dynamic)
│ │ │ │ +
103 // - test basis
│ │ │ │ +
104 // - normal
│ │ │ │ +
105 template< unsigned int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
107 {
│ │ │ │ +
108 static const unsigned int dimension = dim;
│ │ │ │ +
109
│ │ │ │ +
110 // for the dofs associated to the element
│ │ │ │ + │ │ │ │ + │ │ │ │ +
113
│ │ │ │ +
114 // for the dofs associated to the faces
│ │ │ │ + │ │ │ │ + │ │ │ │ +
117
│ │ │ │ +
118 // the normals of the faces
│ │ │ │ +
119 typedef FieldVector< Field, dimension > Normal;
│ │ │ │
120
│ │ │ │ -
│ │ │ │ -
122 unsigned int order () const
│ │ │ │ -
123 {
│ │ │ │ -
124 return 1;
│ │ │ │ -
125 }
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
127 private:
│ │ │ │ -
128 std::array<R,5> sign;
│ │ │ │ -
129 };
│ │ │ │ -
│ │ │ │ -
130}
│ │ │ │ -
131#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ + │ │ │ │ +
122
│ │ │ │ + │ │ │ │ + │ │ │ │ +
125
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
127 {
│ │ │ │ +
128 TestBasisFactory::release( testBasis_ );
│ │ │ │ +
129 for( FaceStructure &f : faceStructure_ )
│ │ │ │ + │ │ │ │ +
131 }
│ │ │ │ +
│ │ │ │ +
132
│ │ │ │ +
133 GeometryType type () const { return geometry_; }
│ │ │ │ +
134
│ │ │ │ +
135 std::size_t order () const { return order_; }
│ │ │ │ +
136
│ │ │ │ +
137 // number of faces
│ │ │ │ +
138 unsigned int faceSize () const { return faceSize_; }
│ │ │ │ +
139
│ │ │ │ +
140 // basis associated to the element
│ │ │ │ +
141 TestBasis *testBasis () const { return testBasis_; }
│ │ │ │ +
142
│ │ │ │ +
143 // basis associated to face f
│ │ │ │ +
144 TestFaceBasis *testFaceBasis ( unsigned int f ) const { assert( f < faceSize() ); return faceStructure_[ f ].basis_; }
│ │ │ │ +
145
│ │ │ │ +
146 // normal of face f
│ │ │ │ +
147 const Normal normal ( unsigned int f ) const { assert( f < faceSize() ); return faceStructure_[ f ].normal_; }
│ │ │ │ +
148
│ │ │ │ +
149 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
150 void build ( std::size_t order )
│ │ │ │ +
151 {
│ │ │ │ +
152 constexpr GeometryType geometry = geometryId;
│ │ │ │ +
153 geometry_ = geometry;
│ │ │ │ +
154 order_ = order;
│ │ │ │ +
155
│ │ │ │ +
156 testBasis_ = (order > 0 ? TestBasisFactory::template create< geometry >( order-1 ) : nullptr);
│ │ │ │ +
157
│ │ │ │ +
158 const auto &refElement = ReferenceElements< Field, dimension >::general( type() );
│ │ │ │ +
159 faceSize_ = refElement.size( 1 );
│ │ │ │ +
160 faceStructure_.reserve( faceSize_ );
│ │ │ │ +
161 for( unsigned int face = 0; face < faceSize_; ++face )
│ │ │ │ +
162 {
│ │ │ │ +
163 /* For simplices or cubes of arbitrary dimension you could just use
│ │ │ │ +
164 *
│ │ │ │ +
165 * ```
│ │ │ │ +
166 * GeometryType faceGeometry = Impl::getBase(geometry_);
│ │ │ │ +
167 * TestFaceBasis *faceBasis = TestFaceBasisFactory::template create< faceGeometry >( order );
│ │ │ │ +
168 * ```
│ │ │ │ +
169 *
│ │ │ │ +
170 * For i.e. Prisms and Pyramids in 3d this does not work because they contain squares and triangles as faces.
│ │ │ │ +
171 * And depending on the dynamic face index a different face geometry is needed.
│ │ │ │ +
172 *
│ │ │ │ +
173 */
│ │ │ │ +
174 TestFaceBasis *faceBasis = Impl::toGeometryTypeIdConstant<dimension-1>(refElement.type( face, 1 ), [&](auto faceGeometryTypeId) {
│ │ │ │ +
175 return TestFaceBasisFactory::template create< decltype(faceGeometryTypeId)::value >( order );
│ │ │ │ +
176 });
│ │ │ │ +
177 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal( face ) );
│ │ │ │ +
178 }
│ │ │ │ +
179 assert( faceStructure_.size() == faceSize_ );
│ │ │ │ +
180 }
│ │ │ │ +
│ │ │ │ +
181
│ │ │ │ +
182 private:
│ │ │ │ +
183 struct FaceStructure
│ │ │ │ +
184 {
│ │ │ │ +
185 FaceStructure( TestFaceBasis *tfb, const Normal n )
│ │ │ │ +
186 : basis_( tfb ), normal_( n )
│ │ │ │ +
187 {}
│ │ │ │ +
188
│ │ │ │ +
189 TestFaceBasis *basis_;
│ │ │ │ +
190 const Dune::FieldVector< Field, dimension > normal_;
│ │ │ │ +
191 };
│ │ │ │ +
192
│ │ │ │ +
193 std::vector< FaceStructure > faceStructure_;
│ │ │ │ +
194 TestBasis *testBasis_ = nullptr;
│ │ │ │ +
195 GeometryType geometry_;
│ │ │ │ +
196 unsigned int faceSize_;
│ │ │ │ +
197 std::size_t order_;
│ │ │ │ +
198 };
│ │ │ │ +
│ │ │ │ +
199
│ │ │ │ +
200
│ │ │ │ +
201
│ │ │ │ +
202 // RaviartThomasL2Interpolation
│ │ │ │ +
203 // ----------------------------
│ │ │ │ +
204
│ │ │ │ +
210 template< unsigned int dimension, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
212 : public InterpolationHelper< F ,dimension >
│ │ │ │ +
213 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
216
│ │ │ │ +
217 public:
│ │ │ │ +
218 typedef F Field;
│ │ │ │ + │ │ │ │ +
│ │ │ │ + │ │ │ │ +
221 : order_(0),
│ │ │ │ +
222 size_(0)
│ │ │ │ +
223 {}
│ │ │ │ +
│ │ │ │ +
224
│ │ │ │ +
225 template< class Function, class Vector,
│ │ │ │ +
226 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ +
227 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
228 void interpolate ( const Function &function, Vector &coefficients ) const
│ │ │ │ +
229 {
│ │ │ │ +
230 coefficients.resize(size());
│ │ │ │ +
231 typename Base::template Helper<Function,Vector,true> func( function,coefficients );
│ │ │ │ +
232 interpolate(func);
│ │ │ │ +
233 }
│ │ │ │ +
│ │ │ │ +
234
│ │ │ │ +
235 template< class Basis, class Matrix,
│ │ │ │ +
236 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ +
237 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ +
238 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
239 void interpolate ( const Basis &basis, Matrix &matrix ) const
│ │ │ │ +
240 {
│ │ │ │ +
241 matrix.resize( size(), basis.size() );
│ │ │ │ +
242 typename Base::template Helper<Basis,Matrix,false> func( basis,matrix );
│ │ │ │ +
243 interpolate(func);
│ │ │ │ +
244 }
│ │ │ │ +
│ │ │ │ +
245
│ │ │ │ +
│ │ │ │ +
246 std::size_t order() const
│ │ │ │ +
247 {
│ │ │ │ +
248 return order_;
│ │ │ │ +
249 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
250 std::size_t size() const
│ │ │ │ +
251 {
│ │ │ │ +
252 return size_;
│ │ │ │ +
253 }
│ │ │ │ +
│ │ │ │ +
254 template <GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
255 void build( std::size_t order )
│ │ │ │ +
256 {
│ │ │ │ +
257 size_ = 0;
│ │ │ │ +
258 order_ = order;
│ │ │ │ +
259 builder_.template build<geometryId>(order_);
│ │ │ │ +
260 if (builder_.testBasis())
│ │ │ │ +
261 size_ += dimension*builder_.testBasis()->size();
│ │ │ │ +
262 for ( unsigned int f=0; f<builder_.faceSize(); ++f )
│ │ │ │ +
263 if (builder_.testFaceBasis(f))
│ │ │ │ +
264 size_ += builder_.testFaceBasis(f)->size();
│ │ │ │ +
265 }
│ │ │ │ +
│ │ │ │ +
266
│ │ │ │ +
│ │ │ │ +
267 void setLocalKeys(std::vector< LocalKey > &keys) const
│ │ │ │ +
268 {
│ │ │ │ +
269 keys.resize(size());
│ │ │ │ +
270 unsigned int row = 0;
│ │ │ │ +
271 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ +
272 {
│ │ │ │ +
273 if (builder_.faceSize())
│ │ │ │ +
274 for (unsigned int i=0; i<builder_.testFaceBasis(f)->size(); ++i,++row)
│ │ │ │ +
275 keys[row] = LocalKey(f,1,i);
│ │ │ │ +
276 }
│ │ │ │ +
277 if (builder_.testBasis())
│ │ │ │ +
278 for (unsigned int i=0; i<builder_.testBasis()->size()*dimension; ++i,++row)
│ │ │ │ +
279 keys[row] = LocalKey(0,0,i);
│ │ │ │ +
280 assert( row == size() );
│ │ │ │ +
281 }
│ │ │ │ +
│ │ │ │ +
282
│ │ │ │ +
283 protected:
│ │ │ │ +
284 template< class Func, class Container, bool type >
│ │ │ │ +
│ │ │ │ +
285 void interpolate ( typename Base::template Helper<Func,Container,type> &func ) const
│ │ │ │ +
286 {
│ │ │ │ +
287 const Dune::GeometryType geoType = builder_.type();
│ │ │ │ +
288
│ │ │ │ +
289 std::vector< Field > testBasisVal;
│ │ │ │ +
290
│ │ │ │ +
291 for (unsigned int i=0; i<size(); ++i)
│ │ │ │ +
292 for (unsigned int j=0; j<func.size(); ++j)
│ │ │ │ +
293 func.set(i,j,0);
│ │ │ │ +
294
│ │ │ │ +
295 unsigned int row = 0;
│ │ │ │ +
296
│ │ │ │ +
297 // boundary dofs:
│ │ │ │ +
298 typedef Dune::QuadratureRule<Field, dimension-1> FaceQuadrature;
│ │ │ │ +
299 typedef Dune::QuadratureRules<Field, dimension-1> FaceQuadratureRules;
│ │ │ │ +
300
│ │ │ │ +
301 const auto &refElement = Dune::ReferenceElements< Field, dimension >::general( geoType );
│ │ │ │ +
302
│ │ │ │ +
303 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ +
304 {
│ │ │ │ +
305 if (!builder_.testFaceBasis(f))
│ │ │ │ +
306 continue;
│ │ │ │ +
307 testBasisVal.resize(builder_.testFaceBasis(f)->size());
│ │ │ │ +
308
│ │ │ │ +
309 const auto &geometry = refElement.template geometry< 1 >( f );
│ │ │ │ +
310 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 );
│ │ │ │ +
311 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ +
312
│ │ │ │ +
313 const unsigned int quadratureSize = faceQuad.size();
│ │ │ │ +
314 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ +
315 {
│ │ │ │ +
316 if (dimension>1)
│ │ │ │ +
317 builder_.testFaceBasis(f)->template evaluate<0>(faceQuad[qi].position(),testBasisVal);
│ │ │ │ +
318 else
│ │ │ │ +
319 testBasisVal[0] = 1.;
│ │ │ │ +
320 fillBnd( row, testBasisVal,
│ │ │ │ +
321 func.evaluate( geometry.global( faceQuad[qi].position() ) ),
│ │ │ │ +
322 builder_.normal(f), faceQuad[qi].weight(),
│ │ │ │ +
323 func);
│ │ │ │ +
324 }
│ │ │ │ +
325
│ │ │ │ +
326 row += builder_.testFaceBasis(f)->size();
│ │ │ │ +
327 }
│ │ │ │ +
328 // element dofs
│ │ │ │ +
329 if (builder_.testBasis())
│ │ │ │ +
330 {
│ │ │ │ +
331 testBasisVal.resize(builder_.testBasis()->size());
│ │ │ │ +
332
│ │ │ │ +
333 typedef Dune::QuadratureRule<Field, dimension> Quadrature;
│ │ │ │ +
334 typedef Dune::QuadratureRules<Field, dimension> QuadratureRules;
│ │ │ │ +
335 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 );
│ │ │ │ +
336
│ │ │ │ +
337 const unsigned int quadratureSize = elemQuad.size();
│ │ │ │ +
338 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ +
339 {
│ │ │ │ +
340 builder_.testBasis()->template evaluate<0>(elemQuad[qi].position(),testBasisVal);
│ │ │ │ +
341 fillInterior( row, testBasisVal,
│ │ │ │ +
342 func.evaluate(elemQuad[qi].position()),
│ │ │ │ +
343 elemQuad[qi].weight(),
│ │ │ │ +
344 func );
│ │ │ │ +
345 }
│ │ │ │ +
346
│ │ │ │ +
347 row += builder_.testBasis()->size()*dimension;
│ │ │ │ +
348 }
│ │ │ │ +
349 assert(row==size());
│ │ │ │ +
350 }
│ │ │ │ +
│ │ │ │ +
351
│ │ │ │ +
352 private:
│ │ │ │ +
362 template <class MVal, class RTVal,class Matrix>
│ │ │ │ +
363 void fillBnd (unsigned int startRow,
│ │ │ │ +
364 const MVal &mVal,
│ │ │ │ +
365 const RTVal &rtVal,
│ │ │ │ +
366 const FieldVector<Field,dimension> &normal,
│ │ │ │ +
367 const Field &weight,
│ │ │ │ +
368 Matrix &matrix) const
│ │ │ │ +
369 {
│ │ │ │ +
370 const unsigned int endRow = startRow+mVal.size();
│ │ │ │ +
371 typename RTVal::const_iterator rtiter = rtVal.begin();
│ │ │ │ +
372 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col)
│ │ │ │ +
373 {
│ │ │ │ +
374 Field cFactor = (*rtiter)*normal;
│ │ │ │ +
375 typename MVal::const_iterator miter = mVal.begin();
│ │ │ │ +
376 for (unsigned int row = startRow;
│ │ │ │ +
377 row!=endRow; ++miter, ++row )
│ │ │ │ +
378 {
│ │ │ │ +
379 matrix.add(row,col, (weight*cFactor)*(*miter) );
│ │ │ │ +
380 }
│ │ │ │ +
381 assert( miter == mVal.end() );
│ │ │ │ +
382 }
│ │ │ │ +
383 }
│ │ │ │ +
392 template <class MVal, class RTVal,class Matrix>
│ │ │ │ +
393 void fillInterior (unsigned int startRow,
│ │ │ │ +
394 const MVal &mVal,
│ │ │ │ +
395 const RTVal &rtVal,
│ │ │ │ +
396 Field weight,
│ │ │ │ +
397 Matrix &matrix) const
│ │ │ │ +
398 {
│ │ │ │ +
399 const unsigned int endRow = startRow+mVal.size()*dimension;
│ │ │ │ +
400 typename RTVal::const_iterator rtiter = rtVal.begin();
│ │ │ │ +
401 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col)
│ │ │ │ +
402 {
│ │ │ │ +
403 typename MVal::const_iterator miter = mVal.begin();
│ │ │ │ +
404 for (unsigned int row = startRow;
│ │ │ │ +
405 row!=endRow; ++miter,row+=dimension )
│ │ │ │ +
406 {
│ │ │ │ +
407 for (unsigned int i=0; i<dimension; ++i)
│ │ │ │ +
408 {
│ │ │ │ +
409 matrix.add(row+i,col, (weight*(*miter))*(*rtiter)[i] );
│ │ │ │ +
410 }
│ │ │ │ +
411 }
│ │ │ │ +
412 assert( miter == mVal.end() );
│ │ │ │ +
413 }
│ │ │ │ +
414 }
│ │ │ │ +
415
│ │ │ │ +
416 Builder builder_;
│ │ │ │ +
417 std::size_t order_;
│ │ │ │ +
418 std::size_t size_;
│ │ │ │ +
419 };
│ │ │ │ +
│ │ │ │ +
420
│ │ │ │ +
421 template < unsigned int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
423 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
426 typedef std::size_t Key;
│ │ │ │ +
427 typedef typename std::remove_const<Object>::type NonConstObject;
│ │ │ │ +
428
│ │ │ │ +
429 template <GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
430 static Object *create( const Key &key )
│ │ │ │ +
431 {
│ │ │ │ +
432 if ( !supports<geometryId>(key) )
│ │ │ │ +
433 return 0;
│ │ │ │ +
434 NonConstObject *interpol = new NonConstObject();
│ │ │ │ +
435 interpol->template build<geometryId>(key);
│ │ │ │ +
436 return interpol;
│ │ │ │ +
437 }
│ │ │ │ +
│ │ │ │ +
438 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
439 static bool supports ( const Key &key )
│ │ │ │ +
440 {
│ │ │ │ +
441 return GeometryType(geometryId).isSimplex();
│ │ │ │ +
442 }
│ │ │ │ +
│ │ │ │ +
443 static void release( Object *object ) { delete object; }
│ │ │ │ +
444 };
│ │ │ │ +
│ │ │ │ +
445
│ │ │ │ +
446} // namespace Dune
│ │ │ │ +
447
│ │ │ │ +
448#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference pyramid.
Definition raviartthomas0pyramidlocalbasis.hh:28
│ │ │ │ -
RT0PyramidLocalBasis(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramidlocalbasis.hh:39
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:57
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:87
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0pyramidlocalbasis.hh:32
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:122
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas0pyramidlocalbasis.hh:46
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:109
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition nedelecsimplexinterpolation.hh:41
│ │ │ │ +
LocalCoefficientsContainer(const Setter &setter)
Definition nedelecsimplexinterpolation.hh:46
│ │ │ │ +
const LocalKey & localKey(const unsigned int i) const
Definition raviartthomassimplexinterpolation.hh:48
│ │ │ │ +
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:57
│ │ │ │ +
Definition orthonormalbasis.hh:20
│ │ │ │ +
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │ +
Definition raviartthomassimplexinterpolation.hh:423
│ │ │ │ +
std::remove_const< Object >::type NonConstObject
Definition raviartthomassimplexinterpolation.hh:427
│ │ │ │ +
static void release(Object *object)
Definition raviartthomassimplexinterpolation.hh:443
│ │ │ │ +
static bool supports(const Key &key)
Definition raviartthomassimplexinterpolation.hh:439
│ │ │ │ +
static Object * create(const Key &key)
Definition raviartthomassimplexinterpolation.hh:430
│ │ │ │ +
RTL2InterpolationBuilder< dim, Field > Builder
Definition raviartthomassimplexinterpolation.hh:424
│ │ │ │ +
const RaviartThomasL2Interpolation< dim, Field > Object
Definition raviartthomassimplexinterpolation.hh:425
│ │ │ │ +
std::size_t Key
Definition raviartthomassimplexinterpolation.hh:426
│ │ │ │ +
Definition raviartthomassimplexinterpolation.hh:70
│ │ │ │ +
std::size_t Key
Definition raviartthomassimplexinterpolation.hh:71
│ │ │ │ +
static void release(Object *object)
Definition raviartthomassimplexinterpolation.hh:91
│ │ │ │ +
static bool supports(const Key &key)
Definition raviartthomassimplexinterpolation.hh:87
│ │ │ │ +
const LocalCoefficientsContainer Object
Definition raviartthomassimplexinterpolation.hh:72
│ │ │ │ +
static Object * create(const Key &key)
Definition raviartthomassimplexinterpolation.hh:75
│ │ │ │ +
Definition raviartthomassimplexinterpolation.hh:107
│ │ │ │ +
TestBasis * testBasis() const
Definition raviartthomassimplexinterpolation.hh:141
│ │ │ │ +
FieldVector< Field, dimension > Normal
Definition raviartthomassimplexinterpolation.hh:119
│ │ │ │ +
TestBasisFactory::Object TestBasis
Definition raviartthomassimplexinterpolation.hh:112
│ │ │ │ +
TestFaceBasisFactory::Object TestFaceBasis
Definition raviartthomassimplexinterpolation.hh:116
│ │ │ │ +
const Normal normal(unsigned int f) const
Definition raviartthomassimplexinterpolation.hh:147
│ │ │ │ +
unsigned int faceSize() const
Definition raviartthomassimplexinterpolation.hh:138
│ │ │ │ +
void build(std::size_t order)
Definition raviartthomassimplexinterpolation.hh:150
│ │ │ │ + │ │ │ │ +
TestFaceBasis * testFaceBasis(unsigned int f) const
Definition raviartthomassimplexinterpolation.hh:144
│ │ │ │ +
GeometryType type() const
Definition raviartthomassimplexinterpolation.hh:133
│ │ │ │ +
RTL2InterpolationBuilder(const RTL2InterpolationBuilder &)=delete
│ │ │ │ +
OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory
Definition raviartthomassimplexinterpolation.hh:115
│ │ │ │ +
RTL2InterpolationBuilder(RTL2InterpolationBuilder &&)=delete
│ │ │ │ +
OrthonormalBasisFactory< dimension, Field > TestBasisFactory
Definition raviartthomassimplexinterpolation.hh:111
│ │ │ │ +
std::size_t order() const
Definition raviartthomassimplexinterpolation.hh:135
│ │ │ │ +
static const unsigned int dimension
Definition raviartthomassimplexinterpolation.hh:108
│ │ │ │ +
~RTL2InterpolationBuilder()
Definition raviartthomassimplexinterpolation.hh:126
│ │ │ │ +
An L2-based interpolation for Raviart Thomas.
Definition raviartthomassimplexinterpolation.hh:213
│ │ │ │ +
std::size_t order() const
Definition raviartthomassimplexinterpolation.hh:246
│ │ │ │ +
void interpolate(const Function &function, Vector &coefficients) const
Definition raviartthomassimplexinterpolation.hh:228
│ │ │ │ +
RaviartThomasL2Interpolation()
Definition raviartthomassimplexinterpolation.hh:220
│ │ │ │ +
void interpolate(typename Base::template Helper< Func, Container, type > &func) const
Definition raviartthomassimplexinterpolation.hh:285
│ │ │ │ +
RTL2InterpolationBuilder< dimension, Field > Builder
Definition raviartthomassimplexinterpolation.hh:219
│ │ │ │ +
F Field
Definition raviartthomassimplexinterpolation.hh:218
│ │ │ │ +
void build(std::size_t order)
Definition raviartthomassimplexinterpolation.hh:255
│ │ │ │ +
std::size_t size() const
Definition raviartthomassimplexinterpolation.hh:250
│ │ │ │ +
void setLocalKeys(std::vector< LocalKey > &keys) const
Definition raviartthomassimplexinterpolation.hh:267
│ │ │ │ +
Definition interpolationhelper.hh:21
│ │ │ │ +
Definition interpolationhelper.hh:23
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │ +
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,159 +1,615 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ -raviartthomas0pyramidlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ +raviartthomassimplexinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13#include "../../common/localbasis.hh" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +22 │ │ │ │ │ +23namespace _D_u_n_e │ │ │ │ │ +24{ │ │ │ │ │ +25 │ │ │ │ │ +26 // Internal Forward Declarations │ │ │ │ │ +27 // ----------------------------- │ │ │ │ │ +28 │ │ │ │ │ +29 template < unsigned int dim, class Field > │ │ │ │ │ +30 struct RaviartThomasL2InterpolationFactory; │ │ │ │ │ +31 │ │ │ │ │ +32 │ │ │ │ │ 33 │ │ │ │ │ -_3_9 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s (std::bitset<5> s = 0) │ │ │ │ │ -40 { │ │ │ │ │ -41 for (size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -42 sign[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return 5; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -58 std::vector& out) const │ │ │ │ │ -59 { │ │ │ │ │ -60 out.resize(5); │ │ │ │ │ -61 for (std::size_t i=0; i │ │ │ │ │ +_4_3 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r ( const Setter &setter ) │ │ │ │ │ +44 { │ │ │ │ │ +45 setter.setLocalKeys(localKey_); │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_4_8 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ +49 { │ │ │ │ │ +50 assert( i < _s_i_z_e() ); │ │ │ │ │ +51 return localKey_[ i ]; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 std::size_t _s_i_z_e () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return localKey_.size(); │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 private: │ │ │ │ │ +60 std::vector< LocalKey > localKey_; │ │ │ │ │ +61 }; │ │ │ │ │ +62 │ │ │ │ │ 63 │ │ │ │ │ -64 out[0][0] = 1.5*in[0]; │ │ │ │ │ -65 out[0][1] = 1.5*in[1]; │ │ │ │ │ -66 out[0][2] = -1.0; │ │ │ │ │ +64 │ │ │ │ │ +65 // RaviartThomasCoefficientsFactory │ │ │ │ │ +66 // -------------------------------- │ │ │ │ │ 67 │ │ │ │ │ -68 out[1][0] = -2.0 + 3.0*in[0]; │ │ │ │ │ -69 │ │ │ │ │ -70 out[2][0] = 3.0*in[0]; │ │ │ │ │ -71 │ │ │ │ │ -72 out[3][1] = -2.0 + 3.0*in[1]; │ │ │ │ │ +68 template < unsigned int dim > │ │ │ │ │ +_6_9 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +70 { │ │ │ │ │ +_7_1 typedef std::size_t _K_e_y; │ │ │ │ │ +_7_2 typedef const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _O_b_j_e_c_t; │ │ │ │ │ 73 │ │ │ │ │ -74 out[4][1] = 3.0*in[1]; │ │ │ │ │ -75 │ │ │ │ │ -76 for (std::size_t i=0; i& out) const │ │ │ │ │ -89 { │ │ │ │ │ -90 out.resize(5); │ │ │ │ │ -91 │ │ │ │ │ -92 for(int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -93 for(int j=0; j<3; j++) │ │ │ │ │ -94 out[i][j] = {0.0, 0.0, 0.0}; │ │ │ │ │ +74 template< GeometryType::Id geometryId > │ │ │ │ │ +_7_5 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ +76 { │ │ │ │ │ +77 typedef _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _d_o_u_b_l_e_ _> │ │ │ │ │ +InterpolationFactory; │ │ │ │ │ +78 if( !supports< geometryId >( key ) ) │ │ │ │ │ +79 return nullptr; │ │ │ │ │ +80 typename InterpolationFactory::Object *interpolation = │ │ │ │ │ +InterpolationFactory::template create< geometryId >( key ); │ │ │ │ │ +81 _O_b_j_e_c_t *localKeys = new _O_b_j_e_c_t( *interpolation ); │ │ │ │ │ +82 InterpolationFactory::release( interpolation ); │ │ │ │ │ +83 return localKeys; │ │ │ │ │ +84 } │ │ │ │ │ +85 │ │ │ │ │ +86 template< GeometryType::Id geometryId > │ │ │ │ │ +_8_7 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ +88 { │ │ │ │ │ +89 return GeometryType(geometryId).isSimplex(); │ │ │ │ │ +90 } │ │ │ │ │ +_9_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +92 }; │ │ │ │ │ +93 │ │ │ │ │ +94 │ │ │ │ │ 95 │ │ │ │ │ -96 out[0][0][0] = sign[0]*(1.5); │ │ │ │ │ -97 out[0][1][1] = sign[0]*(1.5); │ │ │ │ │ +96 // RTL2InterpolationBuilder │ │ │ │ │ +97 // ------------------------ │ │ │ │ │ 98 │ │ │ │ │ -99 out[1][0][0] = sign[1]*(3.0); │ │ │ │ │ -100 │ │ │ │ │ -101 out[2][0][0] = sign[2]*(3.0); │ │ │ │ │ -102 │ │ │ │ │ -103 out[3][1][1] = sign[3]*(3.0); │ │ │ │ │ -104 │ │ │ │ │ -105 out[4][1][1] = sign[4]*(3.0); │ │ │ │ │ -106 } │ │ │ │ │ -107 │ │ │ │ │ -_1_0_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -110 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -111 std::vector& out) const // return value │ │ │ │ │ -112 { │ │ │ │ │ -113 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -114 if (totalOrder == 0) { │ │ │ │ │ -115 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -116 } else { │ │ │ │ │ -117 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -118 } │ │ │ │ │ -119 } │ │ │ │ │ +99 // L2 Interpolation requires: │ │ │ │ │ +100 // - for element │ │ │ │ │ +101 // - test basis │ │ │ │ │ +102 // - for each face (dynamic) │ │ │ │ │ +103 // - test basis │ │ │ │ │ +104 // - normal │ │ │ │ │ +105 template< unsigned int dim, class Field > │ │ │ │ │ +_1_0_6 struct _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +107 { │ │ │ │ │ +_1_0_8 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +109 │ │ │ │ │ +110 // for the dofs associated to the element │ │ │ │ │ +_1_1_1 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _F_i_e_l_d_ _> _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_1_1_2 typedef typename _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_B_a_s_i_s; │ │ │ │ │ +113 │ │ │ │ │ +114 // for the dofs associated to the faces │ │ │ │ │ +_1_1_5 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y< _d_i_m_e_n_s_i_o_n-1, Field > _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_1_1_6 typedef typename _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_F_a_c_e_B_a_s_i_s; │ │ │ │ │ +117 │ │ │ │ │ +118 // the normals of the faces │ │ │ │ │ +_1_1_9 typedef FieldVector< Field, dimension > _N_o_r_m_a_l; │ │ │ │ │ 120 │ │ │ │ │ -_1_2_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ -123 { │ │ │ │ │ -124 return 1; │ │ │ │ │ -125 } │ │ │ │ │ -126 │ │ │ │ │ -127 private: │ │ │ │ │ -128 std::array sign; │ │ │ │ │ -129 }; │ │ │ │ │ -130} │ │ │ │ │ -131#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ +_1_2_1 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () = default; │ │ │ │ │ +122 │ │ │ │ │ +_1_2_3 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( const _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r & ) = delete; │ │ │ │ │ +_1_2_4 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r && ) = delete; │ │ │ │ │ +125 │ │ │ │ │ +_1_2_6 _~_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () │ │ │ │ │ +127 { │ │ │ │ │ +128 _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( testBasis_ ); │ │ │ │ │ +129 for( FaceStructure &f : faceStructure_ ) │ │ │ │ │ +130 _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( f.basis_ ); │ │ │ │ │ +131 } │ │ │ │ │ +132 │ │ │ │ │ +_1_3_3 GeometryType _t_y_p_e () const { return geometry_; } │ │ │ │ │ +134 │ │ │ │ │ +_1_3_5 std::size_t _o_r_d_e_r () const { return order_; } │ │ │ │ │ +136 │ │ │ │ │ +137 // number of faces │ │ │ │ │ +_1_3_8 unsigned int _f_a_c_e_S_i_z_e () const { return faceSize_; } │ │ │ │ │ +139 │ │ │ │ │ +140 // basis associated to the element │ │ │ │ │ +_1_4_1 _T_e_s_t_B_a_s_i_s *_t_e_s_t_B_a_s_i_s () const { return testBasis_; } │ │ │ │ │ +142 │ │ │ │ │ +143 // basis associated to face f │ │ │ │ │ +_1_4_4 _T_e_s_t_F_a_c_e_B_a_s_i_s *_t_e_s_t_F_a_c_e_B_a_s_i_s ( unsigned int f ) const { assert( f < │ │ │ │ │ +_f_a_c_e_S_i_z_e() ); return faceStructure_[ f ].basis_; } │ │ │ │ │ +145 │ │ │ │ │ +146 // normal of face f │ │ │ │ │ +_1_4_7 const _N_o_r_m_a_l _n_o_r_m_a_l ( unsigned int f ) const { assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ +return faceStructure_[ f ].normal_; } │ │ │ │ │ +148 │ │ │ │ │ +149 template< GeometryType::Id geometryId > │ │ │ │ │ +_1_5_0 void _b_u_i_l_d ( std::size_t _o_r_d_e_r ) │ │ │ │ │ +151 { │ │ │ │ │ +152 constexpr GeometryType geometry = geometryId; │ │ │ │ │ +153 geometry_ = geometry; │ │ │ │ │ +154 order_ = _o_r_d_e_r; │ │ │ │ │ +155 │ │ │ │ │ +156 testBasis_ = (_o_r_d_e_r > 0 ? TestBasisFactory::template create< geometry > │ │ │ │ │ +( _o_r_d_e_r-1 ) : nullptr); │ │ │ │ │ +157 │ │ │ │ │ +158 const auto &refElement = ReferenceElements< Field, dimension >::general │ │ │ │ │ +( _t_y_p_e() ); │ │ │ │ │ +159 faceSize_ = refElement.size( 1 ); │ │ │ │ │ +160 faceStructure_.reserve( faceSize_ ); │ │ │ │ │ +161 for( unsigned int face = 0; face < faceSize_; ++face ) │ │ │ │ │ +162 { │ │ │ │ │ +163 /* For simplices or cubes of arbitrary dimension you could just use │ │ │ │ │ +164 * │ │ │ │ │ +165 * ``` │ │ │ │ │ +166 * GeometryType faceGeometry = Impl::getBase(geometry_); │ │ │ │ │ +167 * TestFaceBasis *faceBasis = TestFaceBasisFactory::template create< │ │ │ │ │ +faceGeometry >( order ); │ │ │ │ │ +168 * ``` │ │ │ │ │ +169 * │ │ │ │ │ +170 * For i.e. Prisms and Pyramids in 3d this does not work because they │ │ │ │ │ +contain squares and triangles as faces. │ │ │ │ │ +171 * And depending on the dynamic face index a different face geometry is │ │ │ │ │ +needed. │ │ │ │ │ +172 * │ │ │ │ │ +173 */ │ │ │ │ │ +174 _T_e_s_t_F_a_c_e_B_a_s_i_s *faceBasis = Impl::toGeometryTypeIdConstant<_d_i_m_e_n_s_i_o_n-1> │ │ │ │ │ +(refElement.type( face, 1 ), [&](auto faceGeometryTypeId) { │ │ │ │ │ +175 return TestFaceBasisFactory::template create< decltype │ │ │ │ │ +(faceGeometryTypeId)::value >( _o_r_d_e_r ); │ │ │ │ │ +176 }); │ │ │ │ │ +177 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal │ │ │ │ │ +( face ) ); │ │ │ │ │ +178 } │ │ │ │ │ +179 assert( faceStructure_.size() == faceSize_ ); │ │ │ │ │ +180 } │ │ │ │ │ +181 │ │ │ │ │ +182 private: │ │ │ │ │ +183 struct FaceStructure │ │ │ │ │ +184 { │ │ │ │ │ +185 FaceStructure( _T_e_s_t_F_a_c_e_B_a_s_i_s *tfb, const _N_o_r_m_a_l n ) │ │ │ │ │ +186 : basis_( tfb ), normal_( n ) │ │ │ │ │ +187 {} │ │ │ │ │ +188 │ │ │ │ │ +189 _T_e_s_t_F_a_c_e_B_a_s_i_s *basis_; │ │ │ │ │ +190 const Dune::FieldVector< Field, dimension > normal_; │ │ │ │ │ +191 }; │ │ │ │ │ +192 │ │ │ │ │ +193 std::vector< FaceStructure > faceStructure_; │ │ │ │ │ +194 _T_e_s_t_B_a_s_i_s *testBasis_ = nullptr; │ │ │ │ │ +195 GeometryType geometry_; │ │ │ │ │ +196 unsigned int faceSize_; │ │ │ │ │ +197 std::size_t order_; │ │ │ │ │ +198 }; │ │ │ │ │ +199 │ │ │ │ │ +200 │ │ │ │ │ +201 │ │ │ │ │ +202 // RaviartThomasL2Interpolation │ │ │ │ │ +203 // ---------------------------- │ │ │ │ │ +204 │ │ │ │ │ +210 template< unsigned int dimension, class F> │ │ │ │ │ +_2_1_1 class _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +212 : public _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r< F ,dimension > │ │ │ │ │ +213 { │ │ │ │ │ +214 typedef _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +215 typedef _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_F_,_d_i_m_e_n_s_i_o_n_> _B_a_s_e; │ │ │ │ │ +216 │ │ │ │ │ +217 public: │ │ │ │ │ +_2_1_8 typedef F _F_i_e_l_d; │ │ │ │ │ +_2_1_9 typedef _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ +_2_2_0 _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ +221 : order_(0), │ │ │ │ │ +222 size_(0) │ │ │ │ │ +223 {} │ │ │ │ │ +224 │ │ │ │ │ +225 template< class Function, class Vector, │ │ │ │ │ +226 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ +227 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ +_2_2_8 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, Vector &coefficients ) const │ │ │ │ │ +229 { │ │ │ │ │ +230 coefficients.resize(_s_i_z_e()); │ │ │ │ │ +231 typename Base::template _H_e_l_p_e_r_<_F_u_n_c_t_i_o_n_,_V_e_c_t_o_r_,_t_r_u_e_> func │ │ │ │ │ +( function,coefficients ); │ │ │ │ │ +232 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ +233 } │ │ │ │ │ +234 │ │ │ │ │ +235 template< class Basis, class Matrix, │ │ │ │ │ +236 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ +237 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ +238 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ +_2_3_9 void _i_n_t_e_r_p_o_l_a_t_e ( const Basis &basis, Matrix &matrix ) const │ │ │ │ │ +240 { │ │ │ │ │ +241 matrix.resize( _s_i_z_e(), basis.size() ); │ │ │ │ │ +242 typename Base::template _H_e_l_p_e_r_<_B_a_s_i_s_,_M_a_t_r_i_x_,_f_a_l_s_e_> func( basis,matrix ); │ │ │ │ │ +243 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ +244 } │ │ │ │ │ +245 │ │ │ │ │ +_2_4_6 std::size_t _o_r_d_e_r() const │ │ │ │ │ +247 { │ │ │ │ │ +248 return order_; │ │ │ │ │ +249 } │ │ │ │ │ +_2_5_0 std::size_t _s_i_z_e() const │ │ │ │ │ +251 { │ │ │ │ │ +252 return size_; │ │ │ │ │ +253 } │ │ │ │ │ +254 template │ │ │ │ │ +_2_5_5 void _b_u_i_l_d( std::size_t _o_r_d_e_r ) │ │ │ │ │ +256 { │ │ │ │ │ +257 size_ = 0; │ │ │ │ │ +258 order_ = _o_r_d_e_r; │ │ │ │ │ +259 builder_.template build(order_); │ │ │ │ │ +260 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +261 size_ += dimension*builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e(); │ │ │ │ │ +262 for ( unsigned int f=0; f_s_i_z_e(); │ │ │ │ │ +265 } │ │ │ │ │ +266 │ │ │ │ │ +_2_6_7 void _s_e_t_L_o_c_a_l_K_e_y_s(std::vector< LocalKey > &keys) const │ │ │ │ │ +268 { │ │ │ │ │ +269 keys.resize(_s_i_z_e()); │ │ │ │ │ +270 unsigned int row = 0; │ │ │ │ │ +271 for (unsigned int f=0; f_s_i_z_e(); ++i,++row) │ │ │ │ │ +275 keys[row] = _L_o_c_a_l_K_e_y(f,1,i); │ │ │ │ │ +276 } │ │ │ │ │ +277 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +278 for (unsigned int i=0; i_s_i_z_e()*dimension; ++i,++row) │ │ │ │ │ +279 keys[row] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +280 assert( row == _s_i_z_e() ); │ │ │ │ │ +281 } │ │ │ │ │ +282 │ │ │ │ │ +283 protected: │ │ │ │ │ +284 template< class Func, class Container, bool type > │ │ │ │ │ +_2_8_5 void _i_n_t_e_r_p_o_l_a_t_e ( typename Base::template _H_e_l_p_e_r_<_F_u_n_c_,_C_o_n_t_a_i_n_e_r_,_t_y_p_e_> │ │ │ │ │ +&func ) const │ │ │ │ │ +286 { │ │ │ │ │ +287 const Dune::GeometryType geoType = builder_._t_y_p_e(); │ │ │ │ │ +288 │ │ │ │ │ +289 std::vector< Field > testBasisVal; │ │ │ │ │ +290 │ │ │ │ │ +291 for (unsigned int i=0; i<_s_i_z_e(); ++i) │ │ │ │ │ +292 for (unsigned int j=0; j FaceQuadrature; │ │ │ │ │ +299 typedef Dune::QuadratureRules<_F_i_e_l_d, dimension-1> FaceQuadratureRules; │ │ │ │ │ +300 │ │ │ │ │ +301 const auto &refElement = Dune::ReferenceElements< Field, dimension >:: │ │ │ │ │ +general( geoType ); │ │ │ │ │ +302 │ │ │ │ │ +303 for (unsigned int f=0; f_s_i_z_e()); │ │ │ │ │ +308 │ │ │ │ │ +309 const auto &geometry = refElement.template geometry< 1 >( f ); │ │ │ │ │ +310 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 ); │ │ │ │ │ +311 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, │ │ │ │ │ +2*order_+2 ); │ │ │ │ │ +312 │ │ │ │ │ +313 const unsigned int quadratureSize = faceQuad.size(); │ │ │ │ │ +314 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ +315 { │ │ │ │ │ +316 if (dimension>1) │ │ │ │ │ +317 builder_._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->template evaluate<0>(faceQuad[qi].position │ │ │ │ │ +(),testBasisVal); │ │ │ │ │ +318 else │ │ │ │ │ +319 testBasisVal[0] = 1.; │ │ │ │ │ +320 fillBnd( row, testBasisVal, │ │ │ │ │ +321 func.evaluate( geometry.global( faceQuad[qi].position() ) ), │ │ │ │ │ +322 builder_._n_o_r_m_a_l(f), faceQuad[qi].weight(), │ │ │ │ │ +323 func); │ │ │ │ │ +324 } │ │ │ │ │ +325 │ │ │ │ │ +326 row += builder_._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e(); │ │ │ │ │ +327 } │ │ │ │ │ +328 // element dofs │ │ │ │ │ +329 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +330 { │ │ │ │ │ +331 testBasisVal.resize(builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e()); │ │ │ │ │ +332 │ │ │ │ │ +333 typedef Dune::QuadratureRule Quadrature; │ │ │ │ │ +334 typedef Dune::QuadratureRules QuadratureRules; │ │ │ │ │ +335 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 ); │ │ │ │ │ +336 │ │ │ │ │ +337 const unsigned int quadratureSize = elemQuad.size(); │ │ │ │ │ +338 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ +339 { │ │ │ │ │ +340 builder_._t_e_s_t_B_a_s_i_s()->template evaluate<0>(elemQuad[qi].position │ │ │ │ │ +(),testBasisVal); │ │ │ │ │ +341 fillInterior( row, testBasisVal, │ │ │ │ │ +342 func.evaluate(elemQuad[qi].position()), │ │ │ │ │ +343 elemQuad[qi].weight(), │ │ │ │ │ +344 func ); │ │ │ │ │ +345 } │ │ │ │ │ +346 │ │ │ │ │ +347 row += builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; │ │ │ │ │ +348 } │ │ │ │ │ +349 assert(row==_s_i_z_e()); │ │ │ │ │ +350 } │ │ │ │ │ +351 │ │ │ │ │ +352 private: │ │ │ │ │ +362 template │ │ │ │ │ +363 void fillBnd (unsigned int startRow, │ │ │ │ │ +364 const MVal &mVal, │ │ │ │ │ +365 const RTVal &rtVal, │ │ │ │ │ +366 const FieldVector &normal, │ │ │ │ │ +367 const _F_i_e_l_d &weight, │ │ │ │ │ +368 Matrix &matrix) const │ │ │ │ │ +369 { │ │ │ │ │ +370 const unsigned int endRow = startRow+mVal.size(); │ │ │ │ │ +371 typename RTVal::const_iterator rtiter = rtVal.begin(); │ │ │ │ │ +372 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col) │ │ │ │ │ +373 { │ │ │ │ │ +374 _F_i_e_l_d cFactor = (*rtiter)*normal; │ │ │ │ │ +375 typename MVal::const_iterator miter = mVal.begin(); │ │ │ │ │ +376 for (unsigned int row = startRow; │ │ │ │ │ +377 row!=endRow; ++miter, ++row ) │ │ │ │ │ +378 { │ │ │ │ │ +379 matrix.add(row,col, (weight*cFactor)*(*miter) ); │ │ │ │ │ +380 } │ │ │ │ │ +381 assert( miter == mVal.end() ); │ │ │ │ │ +382 } │ │ │ │ │ +383 } │ │ │ │ │ +392 template │ │ │ │ │ +393 void fillInterior (unsigned int startRow, │ │ │ │ │ +394 const MVal &mVal, │ │ │ │ │ +395 const RTVal &rtVal, │ │ │ │ │ +396 _F_i_e_l_d weight, │ │ │ │ │ +397 Matrix &matrix) const │ │ │ │ │ +398 { │ │ │ │ │ +399 const unsigned int endRow = startRow+mVal.size()*dimension; │ │ │ │ │ +400 typename RTVal::const_iterator rtiter = rtVal.begin(); │ │ │ │ │ +401 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col) │ │ │ │ │ +402 { │ │ │ │ │ +403 typename MVal::const_iterator miter = mVal.begin(); │ │ │ │ │ +404 for (unsigned int row = startRow; │ │ │ │ │ +405 row!=endRow; ++miter,row+=dimension ) │ │ │ │ │ +406 { │ │ │ │ │ +407 for (unsigned int i=0; i │ │ │ │ │ +_4_2_2 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +423 { │ │ │ │ │ +_4_2_4 typedef _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ +_4_2_5 typedef const _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_F_i_e_l_d_> _O_b_j_e_c_t; │ │ │ │ │ +_4_2_6 typedef std::size_t _K_e_y; │ │ │ │ │ +_4_2_7 typedef typename std::remove_const::type _N_o_n_C_o_n_s_t_O_b_j_e_c_t; │ │ │ │ │ +428 │ │ │ │ │ +429 template │ │ │ │ │ +_4_3_0 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ +431 { │ │ │ │ │ +432 if ( !supports(key) ) │ │ │ │ │ +433 return 0; │ │ │ │ │ +434 _N_o_n_C_o_n_s_t_O_b_j_e_c_t *interpol = new _N_o_n_C_o_n_s_t_O_b_j_e_c_t(); │ │ │ │ │ +435 interpol->template build(key); │ │ │ │ │ +436 return interpol; │ │ │ │ │ +437 } │ │ │ │ │ +438 template< GeometryType::Id geometryId > │ │ │ │ │ +_4_3_9 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ +440 { │ │ │ │ │ +441 return GeometryType(geometryId).isSimplex(); │ │ │ │ │ +442 } │ │ │ │ │ +_4_4_3 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +444 }; │ │ │ │ │ +445 │ │ │ │ │ +446} // namespace Dune │ │ │ │ │ +447 │ │ │ │ │ +448#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ +_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h │ │ │ │ │ +_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT0PyramidLocalBasis(std::bitset< 5 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:122 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +LocalCoefficientsContainer(const Setter &setter) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:423 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_N_o_n_C_o_n_s_t_O_b_j_e_c_t │ │ │ │ │ +std::remove_const< Object >::type NonConstObject │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:427 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:443 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:439 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:430 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_u_i_l_d_e_r │ │ │ │ │ +RTL2InterpolationBuilder< dim, Field > Builder │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:424 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const RaviartThomasL2Interpolation< dim, Field > Object │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:425 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:426 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:91 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const LocalCoefficientsContainer Object │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_B_a_s_i_s │ │ │ │ │ +TestBasis * testBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:141 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_o_r_m_a_l │ │ │ │ │ +FieldVector< Field, dimension > Normal │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s │ │ │ │ │ +TestBasisFactory::Object TestBasis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:112 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ +TestFaceBasisFactory::Object TestFaceBasis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:116 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_n_o_r_m_a_l │ │ │ │ │ +const Normal normal(unsigned int f) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:147 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_S_i_z_e │ │ │ │ │ +unsigned int faceSize() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:138 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_b_u_i_l_d │ │ │ │ │ +void build(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:150 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +RTL2InterpolationBuilder()=default │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ +TestFaceBasis * testFaceBasis(unsigned int f) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:144 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +RTL2InterpolationBuilder(const RTL2InterpolationBuilder &)=delete │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +RTL2InterpolationBuilder(RTL2InterpolationBuilder &&)=delete │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +OrthonormalBasisFactory< dimension, Field > TestBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:108 │ │ │ │ │ +_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_~_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +~RTL2InterpolationBuilder() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:126 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +An L2-based interpolation for Raviart Thomas. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:213 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:246 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const Function &function, Vector &coefficients) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:228 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RaviartThomasL2Interpolation() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:220 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(typename Base::template Helper< Func, Container, type > &func) │ │ │ │ │ +const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:285 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_u_i_l_d_e_r │ │ │ │ │ +RTL2InterpolationBuilder< dimension, Field > Builder │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:219 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:218 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d │ │ │ │ │ +void build(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:255 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:250 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_L_o_c_a_l_K_e_y_s │ │ │ │ │ +void setLocalKeys(std::vector< LocalKey > &keys) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:267 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:109 │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomassimplexbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ +#include "raviartthomassimplexinterpolation.hh"
│ │ │ │ +#include "raviartthomassimplexprebasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube3DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
struct  Dune::RaviartThomasBasisFactory< dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +raviartthomassimplexbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-1 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00239_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,72 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalcoefficients.hh
│ │ │ │ +
raviartthomassimplexbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.hh>
│ │ │ │
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i = 0; i < 6; i++)
│ │ │ │ -
31 {
│ │ │ │ -
32 li[i] = LocalKey(i,1,0);
│ │ │ │ -
33 li[i + 6] = LocalKey(i,1,1);
│ │ │ │ -
34 li[i + 12] = LocalKey(i,1,2);
│ │ │ │ -
35 li[i + 18] = LocalKey(i,1,3);
│ │ │ │ -
36 }
│ │ │ │ -
37
│ │ │ │ -
38 for (std::size_t i = 0; i < 12; i++)
│ │ │ │ -
39 {
│ │ │ │ -
40 li[i + 24] = LocalKey(0,0,i);
│ │ │ │ -
41 }
│ │ │ │ -
42 }
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
45 std::size_t size () const
│ │ │ │ -
46 {
│ │ │ │ -
47 return 36;
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
51 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
52 {
│ │ │ │ -
53 return li[i];
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
56 private:
│ │ │ │ -
57 std::vector<LocalKey> li;
│ │ │ │ -
58 };
│ │ │ │ -
│ │ │ │ -
59}
│ │ │ │ -
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17 /*
│ │ │ │ +
18 * `RTPreBasisFactory` provides a basis for the Raviart-Thomas function space.
│ │ │ │ +
19 * `RaviartThomasL2InterpolationFactory` provides the linear functionals.
│ │ │ │ +
20 *
│ │ │ │ +
21 * `Defaultbasisfactory::create` first builds the function space and the linear functionals.
│ │ │ │ +
22 * Then the constructor of `BasisMatrix` gets called. There the matrix
│ │ │ │ +
23 *
│ │ │ │ +
24 * \begin{equation}
│ │ │ │ +
25 * A_{i,j} := N_j(\phi_i)
│ │ │ │ +
26 * \end{equation}
│ │ │ │ +
27 *
│ │ │ │ +
28 * with linear functionals $N_j$ and basisfunctions $\phi_i$ gets assembled.
│ │ │ │ +
29 * Then the matrix gets inverted and is then used as a coefficient matrix for the standard monomial basis.
│ │ │ │ +
30 *
│ │ │ │ +
31 * For more details on the theory see the first chapter "Construction of Local Finite Element Spaces Using the Generic Reference Elements"
│ │ │ │ +
32 * of the book "Advances in Dune" by Dedner, Flemisch and Klöfkorn published in 2012.
│ │ │ │ +
33 */
│ │ │ │ +
34
│ │ │ │ +
35 template< unsigned int dim, class SF, class CF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 : public DefaultBasisFactory< RTPreBasisFactory<dim,CF>,
│ │ │ │ +
38 RaviartThomasL2InterpolationFactory<dim,CF>,
│ │ │ │ +
39 dim,dim,SF,CF >
│ │ │ │ +
40 {};
│ │ │ │ +
│ │ │ │ +
41}
│ │ │ │ +
42
│ │ │ │ +
43#endif // #ifndef DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube3dlocalcoefficients.hh:24
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas1cube3dlocalcoefficients.hh:45
│ │ │ │ -
RT1Cube3DLocalCoefficients()
Standard constructor.
Definition raviartthomas1cube3dlocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas1cube3dlocalcoefficients.hh:51
│ │ │ │ +
Definition raviartthomassimplexbasis.hh:40
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,83 +1,70 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ -raviartthomas1cube3dlocalcoefficients.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ +raviartthomassimplexbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -_2_3 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(36) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i = 0; i < 6; i++) │ │ │ │ │ -31 { │ │ │ │ │ -32 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -33 li[i + 6] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -34 li[i + 12] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -35 li[i + 18] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ -36 } │ │ │ │ │ -37 │ │ │ │ │ -38 for (std::size_t i = 0; i < 12; i++) │ │ │ │ │ -39 { │ │ │ │ │ -40 li[i + 24] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -41 } │ │ │ │ │ -42 } │ │ │ │ │ -43 │ │ │ │ │ -_4_5 std::size_t _s_i_z_e () const │ │ │ │ │ -46 { │ │ │ │ │ -47 return 36; │ │ │ │ │ -48 } │ │ │ │ │ -49 │ │ │ │ │ -_5_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -52 { │ │ │ │ │ -53 return li[i]; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -56 private: │ │ │ │ │ -57 std::vector li; │ │ │ │ │ -58 }; │ │ │ │ │ -59} │ │ │ │ │ -60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 /* │ │ │ │ │ +18 * `RTPreBasisFactory` provides a basis for the Raviart-Thomas function │ │ │ │ │ +space. │ │ │ │ │ +19 * `RaviartThomasL2InterpolationFactory` provides the linear functionals. │ │ │ │ │ +20 * │ │ │ │ │ +21 * `Defaultbasisfactory::create` first builds the function space and the │ │ │ │ │ +linear functionals. │ │ │ │ │ +22 * Then the constructor of `BasisMatrix` gets called. There the matrix │ │ │ │ │ +23 * │ │ │ │ │ +24 * \begin{equation} │ │ │ │ │ +25 * A_{i,j} := N_j(\phi_i) │ │ │ │ │ +26 * \end{equation} │ │ │ │ │ +27 * │ │ │ │ │ +28 * with linear functionals $N_j$ and basisfunctions $\phi_i$ gets assembled. │ │ │ │ │ +29 * Then the matrix gets inverted and is then used as a coefficient matrix for │ │ │ │ │ +the standard monomial basis. │ │ │ │ │ +30 * │ │ │ │ │ +31 * For more details on the theory see the first chapter "Construction of │ │ │ │ │ +Local Finite Element Spaces Using the Generic Reference Elements" │ │ │ │ │ +32 * of the book "Advances in Dune" by Dedner, Flemisch and Klöfkorn published │ │ │ │ │ +in 2012. │ │ │ │ │ +33 */ │ │ │ │ │ +34 │ │ │ │ │ +35 template< unsigned int dim, class SF, class CF > │ │ │ │ │ +_3_6 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +37 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< RTPreBasisFactory, │ │ │ │ │ +38 RaviartThomasL2InterpolationFactory, │ │ │ │ │ +39 dim,dim,SF,CF > │ │ │ │ │ +40 {}; │ │ │ │ │ +41} │ │ │ │ │ +42 │ │ │ │ │ +43#endif // #ifndef DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h │ │ │ │ │ +_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT1Cube3DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomassimplexprebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomassimplexprebasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube3DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
struct  Dune::RTPreBasisFactory< dim, Field >
 
struct  Dune::RTPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::RTVecMatrix< geometryId, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomassimplexprebasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F │ │ │ │ │ + _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_i_e_l_d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00242_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomassimplexprebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,154 +70,283 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalinterpolation.hh
│ │ │ │ +
raviartthomassimplexprebasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
22 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17 template < GeometryType::Id geometryId, class Field >
│ │ │ │ +
18 struct RTVecMatrix;
│ │ │ │ +
19
│ │ │ │ +
20 template <unsigned int dim, class Field>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 {
│ │ │ │ + │ │ │ │ +
24 typedef typename MBasisFactory::Object MBasis;
│ │ │ │ + │ │ │ │ + │ │ │ │
27
│ │ │ │ -
│ │ │ │ -
33 RT1Cube3DLocalInterpolation (std::bitset<6> s = 0)
│ │ │ │ -
34 {
│ │ │ │ -
35 for (size_t i=0; i<6; i++)
│ │ │ │ -
36 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
37
│ │ │ │ -
38 n_[0] = {-1.0, 0.0, 0.0};
│ │ │ │ -
39 n_[1] = { 1.0, 0.0, 0.0};
│ │ │ │ -
40 n_[2] = { 0.0, -1.0, 0.0};
│ │ │ │ -
41 n_[3] = { 0.0, 1.0, 0.0};
│ │ │ │ -
42 n_[4] = { 0.0, 0.0, -1.0};
│ │ │ │ -
43 n_[5] = { 0.0, 0.0, 1.0};
│ │ │ │ +
28 typedef const Basis Object;
│ │ │ │ +
29 typedef std::size_t Key;
│ │ │ │ +
30
│ │ │ │ +
31 template <unsigned int dd, class FF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {
│ │ │ │ + │ │ │ │ +
35 };
│ │ │ │ +
│ │ │ │ +
36 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
37 static Object *create ( const Key &order )
│ │ │ │ +
38 {
│ │ │ │ +
39 RTVecMatrix<geometryId,Field> vecMatrix(order);
│ │ │ │ +
40 MBasis *mbasis = MBasisFactory::template create<geometryId>(order+1);
│ │ │ │ +
41 typename std::remove_const<Object>::type *tmBasis = new typename std::remove_const<Object>::type(*mbasis);
│ │ │ │ +
42 tmBasis->fill(vecMatrix);
│ │ │ │ +
43 return tmBasis;
│ │ │ │
44 }
│ │ │ │
│ │ │ │ -
45
│ │ │ │ -
54 template<class F, class C>
│ │ │ │ +
45 static void release( Object *object ) { delete object; }
│ │ │ │ +
46 };
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
48 template <GeometryType::Id geometryId, class Field>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
50 {
│ │ │ │ +
51 static constexpr GeometryType geometry = geometryId;
│ │ │ │ +
52 static const unsigned int dim = geometry.dim();
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ -
55 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
56 {
│ │ │ │ -
57 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
58 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
59 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
60
│ │ │ │ -
61 out.resize(36);
│ │ │ │ -
62 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
63
│ │ │ │ -
64 const int qOrder = 3;
│ │ │ │ -
65 const auto& rule1 = QuadratureRules<Scalar,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ -
66
│ │ │ │ -
67 for (auto&& qp : rule1)
│ │ │ │ -
68 {
│ │ │ │ -
69 Dune::FieldVector<Scalar,2> qPos = qp.position();
│ │ │ │ -
70 typename LB::Traits::DomainType localPos;
│ │ │ │ -
71
│ │ │ │ -
72 localPos = {0.0, qPos[0], qPos[1]};
│ │ │ │ -
73 auto y = f(localPos);
│ │ │ │ -
74 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*qp.weight()*sign_[0];
│ │ │ │ -
75 out[6] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ -
76 out[12] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
77 out[18] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
78
│ │ │ │ -
79 localPos = {1.0, qPos[0], qPos[1]};
│ │ │ │ -
80 y = f(localPos);
│ │ │ │ -
81 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*qp.weight()*sign_[1];
│ │ │ │ -
82 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ -
83 out[13] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ -
84 out[19] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
85
│ │ │ │ -
86 localPos = {qPos[0], 0.0, qPos[1]};
│ │ │ │ -
87 y = f(localPos);
│ │ │ │ -
88 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*qp.weight()*sign_[2];
│ │ │ │ -
89 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ -
90 out[14] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
91 out[20] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
92
│ │ │ │ -
93 localPos = {qPos[0], 1.0, qPos[1]};
│ │ │ │ -
94 y = f(localPos);
│ │ │ │ -
95 out[3] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*qp.weight()*sign_[3];
│ │ │ │ -
96 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ -
97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ -
98 out[21] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
99
│ │ │ │ -
100 localPos = {qPos[0], qPos[1], 0.0};
│ │ │ │ -
101 y = f(localPos);
│ │ │ │ -
102 out[4] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*qp.weight()*sign_[4];
│ │ │ │ -
103 out[10] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ -
104 out[16] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ -
105 out[22] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
106
│ │ │ │ -
107 localPos = {qPos[0], qPos[1], 1.0};
│ │ │ │ -
108 y = f(localPos);
│ │ │ │ -
109 out[5] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*qp.weight()*sign_[5];
│ │ │ │ -
110 out[11] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ -
111 out[17] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
112 out[23] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ -
113 }
│ │ │ │ -
114
│ │ │ │ -
115 const auto& rule2 = QuadratureRules<Vector,3>::rule(GeometryTypes::cube(3), qOrder);
│ │ │ │ -
116 for (auto&& qp : rule2)
│ │ │ │ -
117 {
│ │ │ │ -
118 FieldVector<double,3> qPos = qp.position();
│ │ │ │ +
55 RTVecMatrix(std::size_t order)
│ │ │ │ +
56 {
│ │ │ │ +
57 /*
│ │ │ │ +
58 * Construction of Raviart-Thomas elements in high dimensions see "Mixed Finite Elements in \R^3" by Nedelec, 1980.
│ │ │ │ +
59 *
│ │ │ │ +
60 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree $\leq k$.
│ │ │ │ +
61 * The space of Raviart-Thomas functions in $n$ dimensions with index $k$ is defined as
│ │ │ │ +
62 *
│ │ │ │ +
63 * \begin{equation*}
│ │ │ │ +
64 * RT_k := (\P_{k-1})^n \oplus \widetilde \P_k x
│ │ │ │ +
65 * \end{equation*}
│ │ │ │ +
66 * with $x=(x_1,x_2,\dots, x_n)$ in $n$ dimensions and $\widetilde \P_k$ the homogeneous polynomials of degree $k$.
│ │ │ │ +
67 *
│ │ │ │ +
68 * For $RT_k$ holds
│ │ │ │ +
69 * \begin{equation*}
│ │ │ │ +
70 * (\P_{k-1})^n \subset RT_k \subset (\P_k)^n.
│ │ │ │ +
71 * \end{equation*}
│ │ │ │ +
72 *
│ │ │ │ +
73 * We construct $(\P_k)^n$ and and only use the monomials contained in $RT_k$.
│ │ │ │ +
74 *
│ │ │ │ +
75 */
│ │ │ │ +
76
│ │ │ │ +
77 MIBasis basis(order+1);
│ │ │ │ +
78 FieldVector< MI, dim > x;
│ │ │ │ +
79 /*
│ │ │ │ +
80 * Init MultiIndices
│ │ │ │ +
81 * x[0]=(1,0,0) x
│ │ │ │ +
82 * x[1]=(0,1,0) y
│ │ │ │ +
83 * x[2]=(0,0,1) z
│ │ │ │ +
84 */
│ │ │ │ +
85 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ +
86 x[ i ].set( i, 1 );
│ │ │ │ +
87 std::vector< MI > val( basis.size() );
│ │ │ │ +
88
│ │ │ │ +
89 // val now contains all monomials in $n$ dimensions with degree $\leq order+1$
│ │ │ │ +
90 basis.evaluate( x, val );
│ │ │ │ +
91
│ │ │ │ +
92 col_ = basis.size();
│ │ │ │ +
93
│ │ │ │ +
94 // get $\dim (\P_{order-1})$
│ │ │ │ +
95 unsigned int notHomogen = 0;
│ │ │ │ +
96 if (order>0)
│ │ │ │ +
97 notHomogen = basis.sizes()[order-1];
│ │ │ │ +
98
│ │ │ │ +
99 // get $\dim \widetilde (\P_order)$
│ │ │ │ +
100 unsigned int homogen = basis.sizes()[order]-notHomogen;
│ │ │ │ +
101
│ │ │ │ +
102 /*
│ │ │ │ +
103 *
│ │ │ │ +
104 * The set $RT_k$ is defined as
│ │ │ │ +
105 *
│ │ │ │ +
106 * \begin{equation}
│ │ │ │ +
107 * RT_k := (\P_k)^dim + \widetilde \P_k x with x\in \R^n.
│ │ │ │ +
108 * \end{equation}
│ │ │ │ +
109 *
│ │ │ │ +
110 * The space $\P_k$ is split in $\P_k = \P_{k-1} + \widetilde \P_k$.
│ │ │ │ +
111 *
│ │ │ │ +
112 * \begin{align}
│ │ │ │ +
113 * RT_k &= (\P_{k-1} + \widetilde \P_k)^dim + \widetilde \P_k x with x\in \R^n
│ │ │ │ +
114 * &= (\P_{k-1})^n + (\widetilde \P_k)^n + \widetilde \P_k x with x\in \R^n
│ │ │ │ +
115 * \end{align}
│ │ │ │ +
116 *
│ │ │ │ +
117 * Thus $\dim RT_k = n * \dim \P_{k-1} + (n+1)*\dim (\widetilde \P_k)$
│ │ │ │ +
118 */
│ │ │ │
119
│ │ │ │ -
120 auto y = f(qPos);
│ │ │ │ -
121 out[24] += y[0]*qp.weight();
│ │ │ │ -
122 out[25] += y[1]*qp.weight();
│ │ │ │ -
123 out[26] += y[2]*qp.weight();
│ │ │ │ -
124 out[27] += y[0]*qPos[1]*qp.weight();
│ │ │ │ -
125 out[28] += y[0]*qPos[2]*qp.weight();
│ │ │ │ -
126 out[29] += y[1]*qPos[0]*qp.weight();
│ │ │ │ -
127 out[30] += y[1]*qPos[2]*qp.weight();
│ │ │ │ -
128 out[31] += y[2]*qPos[0]*qp.weight();
│ │ │ │ -
129 out[32] += y[2]*qPos[1]*qp.weight();
│ │ │ │ -
130 out[33] += y[0]*qPos[1]*qPos[2]*qp.weight();
│ │ │ │ -
131 out[34] += y[1]*qPos[0]*qPos[2]*qp.weight();
│ │ │ │ -
132 out[35] += y[2]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ -
133 }
│ │ │ │ -
134 }
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
136 private:
│ │ │ │ -
137 // Facet orientations
│ │ │ │ -
138 std::array<typename LB::Traits::RangeFieldType, 6> sign_;
│ │ │ │ -
139
│ │ │ │ -
140 // Facet normals
│ │ │ │ -
141 std::array<typename LB::Traits::DomainType, 6> n_;
│ │ │ │ -
142 };
│ │ │ │ +
120 // row_ = \dim RT_k *dim
│ │ │ │ +
121 row_ = (notHomogen*dim+homogen*(dim+1))*dim;
│ │ │ │ +
122 mat_ = new Field*[row_];
│ │ │ │ +
123 int row = 0;
│ │ │ │ +
124
│ │ │ │ +
125 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_{oder-1})^dim$
│ │ │ │ +
126 * A basis function is represented by $dim$ rows.
│ │ │ │ +
127 */
│ │ │ │ +
128 for (unsigned int i=0; i<notHomogen+homogen; ++i)
│ │ │ │ +
129 {
│ │ │ │ +
130 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ +
131 {
│ │ │ │ +
132 for (unsigned int rr=0; rr<dim; ++rr)
│ │ │ │ +
133 {
│ │ │ │ +
134 // init row to zero
│ │ │ │ +
135 mat_[row] = new Field[col_];
│ │ │ │ +
136 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ +
137 {
│ │ │ │ +
138 mat_[row][j] = 0.;
│ │ │ │ +
139 }
│ │ │ │ +
140 if (r==rr)
│ │ │ │ +
141 mat_[row][i] = 1.;
│ │ │ │ +
142 ++row;
│ │ │ │ +
143 }
│ │ │ │ +
144 }
│ │ │ │ +
145 }
│ │ │ │ +
146
│ │ │ │ +
147 /* Assign the correct values for the homogeneous polymonials $p\in RT_k \backslash (\P_{oder-1})^dim$
│ │ │ │ +
148 * A basis function is represented by $dim$ rows.
│ │ │ │ +
149 */
│ │ │ │ +
150 for (unsigned int i=0; i<homogen; ++i)
│ │ │ │ +
151 {
│ │ │ │ +
152 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ +
153 {
│ │ │ │ +
154 // init rows to zero
│ │ │ │ +
155 mat_[row] = new Field[col_];
│ │ │ │ +
156 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ +
157 {
│ │ │ │ +
158 mat_[row][j] = 0.;
│ │ │ │ +
159 }
│ │ │ │ +
160
│ │ │ │ +
161 unsigned int w;
│ │ │ │ +
162 // get a monomial $ p \in \widetilde \P_{order}$
│ │ │ │ +
163 MI xval = val[notHomogen+i];
│ │ │ │ +
164 xval *= x[r];
│ │ │ │ +
165 for (w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ +
166 {
│ │ │ │ +
167 if (val[w] == xval)
│ │ │ │ +
168 {
│ │ │ │ +
169 mat_[row][w] = 1.;
│ │ │ │ +
170 break;
│ │ │ │ +
171 }
│ │ │ │ +
172 }
│ │ │ │ +
173 assert(w<val.size());
│ │ │ │ +
174 ++row;
│ │ │ │ +
175 }
│ │ │ │ +
176 }
│ │ │ │ +
177 }
│ │ │ │ +
│ │ │ │ +
178
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
180 {
│ │ │ │ +
181 for (unsigned int i=0; i<rows(); ++i) {
│ │ │ │ +
182 delete [] mat_[i];
│ │ │ │ +
183 }
│ │ │ │ +
184 delete [] mat_;
│ │ │ │ +
185 }
│ │ │ │ +
│ │ │ │ +
186
│ │ │ │ +
│ │ │ │ +
187 unsigned int cols() const {
│ │ │ │ +
188 return col_;
│ │ │ │ +
189 }
│ │ │ │ +
│ │ │ │ +
190
│ │ │ │ +
│ │ │ │ +
191 unsigned int rows() const {
│ │ │ │ +
192 return row_;
│ │ │ │ +
193 }
│ │ │ │ +
│ │ │ │ +
194
│ │ │ │ +
195 template <class Vector>
│ │ │ │ +
│ │ │ │ +
196 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
197 {
│ │ │ │ +
198 const unsigned int N = cols();
│ │ │ │ +
199 assert( vec.size() == N );
│ │ │ │ +
200 for (unsigned int i=0; i<N; ++i)
│ │ │ │ +
201 field_cast(mat_[row][i],vec[i]);
│ │ │ │ +
202 }
│ │ │ │ +
│ │ │ │ +
203 unsigned int row_,col_;
│ │ │ │ +
204 Field **mat_;
│ │ │ │ +
205 };
│ │ │ │
│ │ │ │ -
143}
│ │ │ │ -
144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
206
│ │ │ │ +
207
│ │ │ │ +
208}
│ │ │ │ +
209#endif // DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalinterpolation.hh:24
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas1cube3dlocalinterpolation.hh:55
│ │ │ │ -
RT1Cube3DLocalInterpolation(std::bitset< 6 > s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas1cube3dlocalinterpolation.hh:33
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition raviartthomassimplexprebasis.hh:50
│ │ │ │ +
static const unsigned int dim
Definition raviartthomassimplexprebasis.hh:52
│ │ │ │ +
~RTVecMatrix()
Definition raviartthomassimplexprebasis.hh:179
│ │ │ │ +
Field ** mat_
Definition raviartthomassimplexprebasis.hh:204
│ │ │ │ +
RTVecMatrix(std::size_t order)
Definition raviartthomassimplexprebasis.hh:55
│ │ │ │ +
unsigned int cols() const
Definition raviartthomassimplexprebasis.hh:187
│ │ │ │ +
unsigned int row_
Definition raviartthomassimplexprebasis.hh:203
│ │ │ │ +
MultiIndex< dim, Field > MI
Definition raviartthomassimplexprebasis.hh:53
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition raviartthomassimplexprebasis.hh:196
│ │ │ │ +
MonomialBasis< geometryId, MI > MIBasis
Definition raviartthomassimplexprebasis.hh:54
│ │ │ │ +
static constexpr GeometryType geometry
Definition raviartthomassimplexprebasis.hh:51
│ │ │ │ +
unsigned int rows() const
Definition raviartthomassimplexprebasis.hh:191
│ │ │ │ +
unsigned int col_
Definition raviartthomassimplexprebasis.hh:203
│ │ │ │ +
Definition raviartthomassimplexprebasis.hh:22
│ │ │ │ +
const Basis Object
Definition raviartthomassimplexprebasis.hh:28
│ │ │ │ +
MonomialBasisProvider< dim, Field > MBasisFactory
Definition raviartthomassimplexprebasis.hh:23
│ │ │ │ +
PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis
Definition raviartthomassimplexprebasis.hh:26
│ │ │ │ +
MBasisFactory::Object MBasis
Definition raviartthomassimplexprebasis.hh:24
│ │ │ │ +
std::size_t Key
Definition raviartthomassimplexprebasis.hh:29
│ │ │ │ +
static void release(Object *object)
Definition raviartthomassimplexprebasis.hh:45
│ │ │ │ +
StandardEvaluator< MBasis > EvalMBasis
Definition raviartthomassimplexprebasis.hh:25
│ │ │ │ +
static Object * create(const Key &order)
Definition raviartthomassimplexprebasis.hh:37
│ │ │ │ +
Definition raviartthomassimplexprebasis.hh:33
│ │ │ │ +
MonomialBasisProvider< dd, FF > Type
Definition raviartthomassimplexprebasis.hh:34
│ │ │ │ +
Definition basisevaluator.hh:131
│ │ │ │ +
Definition monomialbasis.hh:440
│ │ │ │ +
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ +
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ +
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ +
Definition monomialbasis.hh:780
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
Definition polynomialbasis.hh:348
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,175 +1,329 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ -raviartthomas1cube3dlocalinterpolation.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ +raviartthomassimplexprebasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -24 { │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 template < GeometryType::Id geometryId, class Field > │ │ │ │ │ +18 struct RTVecMatrix; │ │ │ │ │ +19 │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 struct _R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +22 { │ │ │ │ │ +_2_3 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_i_m_,_F_i_e_l_d_> _M_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_2_4 typedef typename MBasisFactory::Object _M_B_a_s_i_s; │ │ │ │ │ +_2_5 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_B_a_s_i_s_> _E_v_a_l_M_B_a_s_i_s; │ │ │ │ │ +_2_6 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_M_B_a_s_i_s_,_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_d_i_m_> > │ │ │ │ │ +_B_a_s_i_s; │ │ │ │ │ 27 │ │ │ │ │ -_3_3 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<6> s = 0) │ │ │ │ │ -34 { │ │ │ │ │ -35 for (size_t i=0; i<6; i++) │ │ │ │ │ -36 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -37 │ │ │ │ │ -38 n_[0] = {-1.0, 0.0, 0.0}; │ │ │ │ │ -39 n_[1] = { 1.0, 0.0, 0.0}; │ │ │ │ │ -40 n_[2] = { 0.0, -1.0, 0.0}; │ │ │ │ │ -41 n_[3] = { 0.0, 1.0, 0.0}; │ │ │ │ │ -42 n_[4] = { 0.0, 0.0, -1.0}; │ │ │ │ │ -43 n_[5] = { 0.0, 0.0, 1.0}; │ │ │ │ │ +_2_8 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ +_2_9 typedef std::size_t _K_e_y; │ │ │ │ │ +30 │ │ │ │ │ +31 template │ │ │ │ │ +_3_2 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +33 { │ │ │ │ │ +_3_4 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ +35 }; │ │ │ │ │ +36 template< GeometryType::Id geometryId > │ │ │ │ │ +_3_7 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ +38 { │ │ │ │ │ +39 _R_T_V_e_c_M_a_t_r_i_x_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> vecMatrix(order); │ │ │ │ │ +40 _M_B_a_s_i_s *mbasis = MBasisFactory::template create(order+1); │ │ │ │ │ +41 typename std::remove_const::type *tmBasis = new typename std:: │ │ │ │ │ +remove_const::type(*mbasis); │ │ │ │ │ +42 tmBasis->fill(vecMatrix); │ │ │ │ │ +43 return tmBasis; │ │ │ │ │ 44 } │ │ │ │ │ -45 │ │ │ │ │ -54 template │ │ │ │ │ -_5_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +_4_5 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +46 }; │ │ │ │ │ +47 │ │ │ │ │ +48 template │ │ │ │ │ +_4_9 struct _R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ +50 { │ │ │ │ │ +_5_1 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ +_5_2 static const unsigned int _d_i_m = _g_e_o_m_e_t_r_y._d_i_m(); │ │ │ │ │ +_5_3 typedef _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _M_I; │ │ │ │ │ +_5_4 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_M_I_> _M_I_B_a_s_i_s; │ │ │ │ │ +_5_5 _R_T_V_e_c_M_a_t_r_i_x(std::size_t order) │ │ │ │ │ 56 { │ │ │ │ │ -57 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -58 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -59 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -60 │ │ │ │ │ -61 out.resize(36); │ │ │ │ │ -62 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -63 │ │ │ │ │ -64 const int qOrder = 3; │ │ │ │ │ -65 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ -qOrder); │ │ │ │ │ -66 │ │ │ │ │ -67 for (auto&& qp : rule1) │ │ │ │ │ -68 { │ │ │ │ │ -69 Dune::FieldVector qPos = qp.position(); │ │ │ │ │ -70 typename LB::Traits::DomainType localPos; │ │ │ │ │ -71 │ │ │ │ │ -72 localPos = {0.0, qPos[0], qPos[1]}; │ │ │ │ │ -73 auto y = f(localPos); │ │ │ │ │ -74 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*qp.weight()*sign_ │ │ │ │ │ -[0]; │ │ │ │ │ -75 out[6] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -76 out[12] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[1] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -77 out[18] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -78 │ │ │ │ │ -79 localPos = {1.0, qPos[0], qPos[1]}; │ │ │ │ │ -80 y = f(localPos); │ │ │ │ │ -81 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*qp.weight()*sign_ │ │ │ │ │ -[1]; │ │ │ │ │ -82 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*qp.weight(); │ │ │ │ │ -83 out[13] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[1])*qp.weight(); │ │ │ │ │ -84 out[19] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -85 │ │ │ │ │ -86 localPos = {qPos[0], 0.0, qPos[1]}; │ │ │ │ │ -87 y = f(localPos); │ │ │ │ │ -88 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*qp.weight()*sign_ │ │ │ │ │ -[2]; │ │ │ │ │ -89 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*qp.weight(); │ │ │ │ │ -90 out[14] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(2.0*qPos[1] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -91 out[20] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -92 │ │ │ │ │ -93 localPos = {qPos[0], 1.0, qPos[1]}; │ │ │ │ │ -94 y = f(localPos); │ │ │ │ │ -95 out[3] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*qp.weight()*sign_ │ │ │ │ │ -[3]; │ │ │ │ │ -96 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[1])*qp.weight(); │ │ │ │ │ -98 out[21] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -99 │ │ │ │ │ -100 localPos = {qPos[0], qPos[1], 0.0}; │ │ │ │ │ -101 y = f(localPos); │ │ │ │ │ -102 out[4] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*qp.weight()*sign_ │ │ │ │ │ -[4]; │ │ │ │ │ -103 out[10] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*qp.weight(); │ │ │ │ │ -104 out[16] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[1])*qp.weight(); │ │ │ │ │ -105 out[22] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ -[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -106 │ │ │ │ │ -107 localPos = {qPos[0], qPos[1], 1.0}; │ │ │ │ │ -108 y = f(localPos); │ │ │ │ │ -109 out[5] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*qp.weight()*sign_ │ │ │ │ │ -[5]; │ │ │ │ │ -110 out[11] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -111 out[17] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[1] - │ │ │ │ │ -1.0)*qp.weight(); │ │ │ │ │ -112 out[23] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - │ │ │ │ │ -1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ -113 } │ │ │ │ │ -114 │ │ │ │ │ -115 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(3), │ │ │ │ │ -qOrder); │ │ │ │ │ -116 for (auto&& qp : rule2) │ │ │ │ │ -117 { │ │ │ │ │ -118 FieldVector qPos = qp.position(); │ │ │ │ │ +57 /* │ │ │ │ │ +58 * Construction of Raviart-Thomas elements in high dimensions see "Mixed │ │ │ │ │ +Finite Elements in \R^3" by Nedelec, 1980. │ │ │ │ │ +59 * │ │ │ │ │ +60 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree │ │ │ │ │ +$\leq k$. │ │ │ │ │ +61 * The space of Raviart-Thomas functions in $n$ dimensions with index $k$ is │ │ │ │ │ +defined as │ │ │ │ │ +62 * │ │ │ │ │ +63 * \begin{equation*} │ │ │ │ │ +64 * RT_k := (\P_{k-1})^n \oplus \widetilde \P_k x │ │ │ │ │ +65 * \end{equation*} │ │ │ │ │ +66 * with $x=(x_1,x_2,\dots, x_n)$ in $n$ dimensions and $\widetilde \P_k$ the │ │ │ │ │ +homogeneous polynomials of degree $k$. │ │ │ │ │ +67 * │ │ │ │ │ +68 * For $RT_k$ holds │ │ │ │ │ +69 * \begin{equation*} │ │ │ │ │ +70 * (\P_{k-1})^n \subset RT_k \subset (\P_k)^n. │ │ │ │ │ +71 * \end{equation*} │ │ │ │ │ +72 * │ │ │ │ │ +73 * We construct $(\P_k)^n$ and and only use the monomials contained in │ │ │ │ │ +$RT_k$. │ │ │ │ │ +74 * │ │ │ │ │ +75 */ │ │ │ │ │ +76 │ │ │ │ │ +77 _M_I_B_a_s_i_s basis(order+1); │ │ │ │ │ +78 FieldVector< MI, dim > x; │ │ │ │ │ +79 /* │ │ │ │ │ +80 * Init MultiIndices │ │ │ │ │ +81 * x[0]=(1,0,0) x │ │ │ │ │ +82 * x[1]=(0,1,0) y │ │ │ │ │ +83 * x[2]=(0,0,1) z │ │ │ │ │ +84 */ │ │ │ │ │ +85 for( unsigned int i = 0; i < _d_i_m; ++i ) │ │ │ │ │ +86 x[ i ].set( i, 1 ); │ │ │ │ │ +87 std::vector< MI > val( basis._s_i_z_e() ); │ │ │ │ │ +88 │ │ │ │ │ +89 // val now contains all monomials in $n$ dimensions with degree $\leq │ │ │ │ │ +order+1$ │ │ │ │ │ +90 basis._e_v_a_l_u_a_t_e( x, val ); │ │ │ │ │ +91 │ │ │ │ │ +92 _c_o_l__ = basis._s_i_z_e(); │ │ │ │ │ +93 │ │ │ │ │ +94 // get $\dim (\P_{order-1})$ │ │ │ │ │ +95 unsigned int notHomogen = 0; │ │ │ │ │ +96 if (order>0) │ │ │ │ │ +97 notHomogen = basis._s_i_z_e_s()[order-1]; │ │ │ │ │ +98 │ │ │ │ │ +99 // get $\dim \widetilde (\P_order)$ │ │ │ │ │ +100 unsigned int homogen = basis._s_i_z_e_s()[order]-notHomogen; │ │ │ │ │ +101 │ │ │ │ │ +102 /* │ │ │ │ │ +103 * │ │ │ │ │ +104 * The set $RT_k$ is defined as │ │ │ │ │ +105 * │ │ │ │ │ +106 * \begin{equation} │ │ │ │ │ +107 * RT_k := (\P_k)^dim + \widetilde \P_k x with x\in \R^n. │ │ │ │ │ +108 * \end{equation} │ │ │ │ │ +109 * │ │ │ │ │ +110 * The space $\P_k$ is split in $\P_k = \P_{k-1} + \widetilde \P_k$. │ │ │ │ │ +111 * │ │ │ │ │ +112 * \begin{align} │ │ │ │ │ +113 * RT_k &= (\P_{k-1} + \widetilde \P_k)^dim + \widetilde \P_k x with x\in │ │ │ │ │ +\R^n │ │ │ │ │ +114 * &= (\P_{k-1})^n + (\widetilde \P_k)^n + \widetilde \P_k x with x\in \R^n │ │ │ │ │ +115 * \end{align} │ │ │ │ │ +116 * │ │ │ │ │ +117 * Thus $\dim RT_k = n * \dim \P_{k-1} + (n+1)*\dim (\widetilde \P_k)$ │ │ │ │ │ +118 */ │ │ │ │ │ 119 │ │ │ │ │ -120 auto y = f(qPos); │ │ │ │ │ -121 out[24] += y[0]*qp.weight(); │ │ │ │ │ -122 out[25] += y[1]*qp.weight(); │ │ │ │ │ -123 out[26] += y[2]*qp.weight(); │ │ │ │ │ -124 out[27] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ -125 out[28] += y[0]*qPos[2]*qp.weight(); │ │ │ │ │ -126 out[29] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ -127 out[30] += y[1]*qPos[2]*qp.weight(); │ │ │ │ │ -128 out[31] += y[2]*qPos[0]*qp.weight(); │ │ │ │ │ -129 out[32] += y[2]*qPos[1]*qp.weight(); │ │ │ │ │ -130 out[33] += y[0]*qPos[1]*qPos[2]*qp.weight(); │ │ │ │ │ -131 out[34] += y[1]*qPos[0]*qPos[2]*qp.weight(); │ │ │ │ │ -132 out[35] += y[2]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ -133 } │ │ │ │ │ -134 } │ │ │ │ │ -135 │ │ │ │ │ -136 private: │ │ │ │ │ -137 // Facet orientations │ │ │ │ │ -138 std::array sign_; │ │ │ │ │ -139 │ │ │ │ │ -140 // Facet normals │ │ │ │ │ -141 std::array n_; │ │ │ │ │ -142 }; │ │ │ │ │ -143} │ │ │ │ │ -144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +120 // row_ = \dim RT_k *dim │ │ │ │ │ +121 _r_o_w__ = (notHomogen*_d_i_m+homogen*(_d_i_m+1))*_d_i_m; │ │ │ │ │ +122 _m_a_t__ = new Field*[_r_o_w__]; │ │ │ │ │ +123 int _r_o_w = 0; │ │ │ │ │ +124 │ │ │ │ │ +125 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_ │ │ │ │ │ +{oder-1})^dim$ │ │ │ │ │ +126 * A basis function is represented by $dim$ rows. │ │ │ │ │ +127 */ │ │ │ │ │ +128 for (unsigned int i=0; i │ │ │ │ │ +_1_9_6 void _r_o_w( const unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ +197 { │ │ │ │ │ +198 const unsigned int N = _c_o_l_s(); │ │ │ │ │ +199 assert( vec.size() == N ); │ │ │ │ │ +200 for (unsigned int i=0; i &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT1Cube3DLocalInterpolation(std::bitset< 6 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_d_i_m │ │ │ │ │ +static const unsigned int dim │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_~_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ +~RTVecMatrix() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:179 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_m_a_t__ │ │ │ │ │ +Field ** mat_ │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:204 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ +RTVecMatrix(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ +unsigned int cols() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w__ │ │ │ │ │ +unsigned int row_ │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:203 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_M_I │ │ │ │ │ +MultiIndex< dim, Field > MI │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:196 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_M_I_B_a_s_i_s │ │ │ │ │ +MonomialBasis< geometryId, MI > MIBasis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ +unsigned int rows() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:191 │ │ │ │ │ +_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_c_o_l__ │ │ │ │ │ +unsigned int col_ │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:203 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const Basis Object │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +MonomialBasisProvider< dim, Field > MBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ +PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s │ │ │ │ │ +MBasisFactory::Object MBasis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_M_B_a_s_i_s │ │ │ │ │ +StandardEvaluator< MBasis > EvalMBasis │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &order) │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +MonomialBasisProvider< dd, FF > Type │ │ │ │ │ +DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ +const unsigned int * sizes(unsigned int order) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube3DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
class  Dune::RT0PyramidLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on pyramids. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0pyramidlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-1 elements on pyramids. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00245_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,642 +70,75 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3dlocalbasis.hh
│ │ │ │ +
raviartthomas0pyramidlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ +
8#include <cstddef>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for(std::size_t i=0; i< size(); i++)
│ │ │ │ +
31 li[i] = LocalKey(i,1,0);
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │
33
│ │ │ │ -
│ │ │ │ -
39 RT1Cube3DLocalBasis (unsigned int s = 0)
│ │ │ │ -
40 {
│ │ │ │ -
41 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
42 if (s & 1)
│ │ │ │ -
43 {
│ │ │ │ -
44 sign0 = -1.0;
│ │ │ │ -
45 }
│ │ │ │ -
46 if (s & 2)
│ │ │ │ -
47 {
│ │ │ │ -
48 sign1 = -1.0;
│ │ │ │ -
49 }
│ │ │ │ -
50 if (s & 4)
│ │ │ │ -
51 {
│ │ │ │ -
52 sign2 = -1.0;
│ │ │ │ -
53 }
│ │ │ │ -
54 if (s & 8)
│ │ │ │ -
55 {
│ │ │ │ -
56 sign3 = -1.0;
│ │ │ │ -
57 }
│ │ │ │ -
58 if (s & 16)
│ │ │ │ -
59 {
│ │ │ │ -
60 sign4 = -1.0;
│ │ │ │ -
61 }
│ │ │ │ -
62 if (s & 32)
│ │ │ │ -
63 {
│ │ │ │ -
64 sign5 = -1.0;
│ │ │ │ -
65 }
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
69 unsigned int size () const
│ │ │ │ -
70 {
│ │ │ │ -
71 return 36;
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
│ │ │ │ -
80 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
81 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
82 {
│ │ │ │ -
83 out.resize(36);
│ │ │ │ -
84
│ │ │ │ -
85 out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0);
│ │ │ │ -
86 out[0][1] = 0.0;
│ │ │ │ -
87 out[0][2] = 0.0;
│ │ │ │ -
88
│ │ │ │ -
89 out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]);
│ │ │ │ -
90 out[1][1] = 0.0;
│ │ │ │ -
91 out[1][2] = 0.0;
│ │ │ │ -
92
│ │ │ │ -
93 out[2][0] = 0.0;
│ │ │ │ -
94 out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0);
│ │ │ │ -
95 out[2][2] = 0.0;
│ │ │ │ -
96
│ │ │ │ -
97 out[3][0] = 0.0;
│ │ │ │ -
98 out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]);
│ │ │ │ -
99 out[3][2] = 0.0;
│ │ │ │ -
100
│ │ │ │ -
101 out[4][0] = 0.0;
│ │ │ │ -
102 out[4][1] = 0.0;
│ │ │ │ -
103 out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0);
│ │ │ │ -
104
│ │ │ │ -
105 out[5][0] = 0.0;
│ │ │ │ -
106 out[5][1] = 0.0;
│ │ │ │ -
107 out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]);
│ │ │ │ -
108
│ │ │ │ -
109 out[6][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - 6.0*in[1] -12.0*in[0] + 3.0;
│ │ │ │ -
110 out[6][1] = 0.0;
│ │ │ │ -
111 out[6][2] = 0.0;
│ │ │ │ -
112
│ │ │ │ -
113 out[7][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - 6.0*in[0];
│ │ │ │ -
114 out[7][1] = 0.0;
│ │ │ │ -
115 out[7][2] = 0.0;
│ │ │ │ -
116
│ │ │ │ -
117 out[8][0] = 0.0;
│ │ │ │ -
118 out[8][1] = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + 12.0*in[1] + 6.0*in[0] - 3.0;
│ │ │ │ -
119 out[8][2] = 0.0;
│ │ │ │ -
120
│ │ │ │ -
121 out[9][0] = 0.0;
│ │ │ │ -
122 out[9][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ -
123 out[9][2] = 0.0;
│ │ │ │ -
124
│ │ │ │ -
125 out[10][0] = 0.0;
│ │ │ │ -
126 out[10][1] = 0.0;
│ │ │ │ -
127 out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
│ │ │ │ -
128
│ │ │ │ -
129 out[11][0] = 0.0;
│ │ │ │ -
130 out[11][1] = 0.0;
│ │ │ │ -
131 out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
│ │ │ │ -
132
│ │ │ │ -
133 out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
│ │ │ │ -
134 out[12][1] = 0.0;
│ │ │ │ -
135 out[12][2] = 0.0;
│ │ │ │ -
136
│ │ │ │ -
137 out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
│ │ │ │ -
138 out[13][1] = 0.0;
│ │ │ │ -
139 out[13][2] = 0.0;
│ │ │ │ -
140
│ │ │ │ -
141 out[14][0] = 0.0;
│ │ │ │ -
142 out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
│ │ │ │ -
143 out[14][2] = 0.0;
│ │ │ │ -
144
│ │ │ │ -
145 out[15][0] = 0.0;
│ │ │ │ -
146 out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
│ │ │ │ -
147 out[15][2] = 0.0;
│ │ │ │ -
148
│ │ │ │ -
149 out[16][0] = 0.0;
│ │ │ │ -
150 out[16][1] = 0.0;
│ │ │ │ -
151 out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
│ │ │ │ -
152
│ │ │ │ -
153 out[17][0] = 0.0;
│ │ │ │ -
154 out[17][1] = 0.0;
│ │ │ │ -
155 out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
│ │ │ │ -
156
│ │ │ │ -
157 out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] - 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
158 out[18][1] = 0.0;
│ │ │ │ -
159 out[18][2] = 0.0;
│ │ │ │ -
160
│ │ │ │ -
161 out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
162 out[19][1] = 0.0;
│ │ │ │ -
163 out[19][2] = 0.0;
│ │ │ │ -
164
│ │ │ │ -
165 out[20][0] = 0.0;
│ │ │ │ -
166 out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] + 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
167 out[20][2] = 0.0;
│ │ │ │ -
168
│ │ │ │ -
169 out[21][0] = 0.0;
│ │ │ │ -
170 out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
171 out[21][2] = 0.0;
│ │ │ │ -
172
│ │ │ │ -
173 out[22][0] = 0.0;
│ │ │ │ -
174 out[22][1] = 0.0;
│ │ │ │ -
175 out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] + 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
176
│ │ │ │ -
177 out[23][0] = 0.0;
│ │ │ │ -
178 out[23][1] = 0.0;
│ │ │ │ -
179 out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
180
│ │ │ │ -
181 out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
182 out[24][1] = 0.0;
│ │ │ │ -
183 out[24][2] = 0.0;
│ │ │ │ -
184
│ │ │ │ -
185 out[25][0] = 0.0;
│ │ │ │ -
186 out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
187 out[25][2] = 0.0;
│ │ │ │ -
188
│ │ │ │ -
189 out[26][0] = 0.0;
│ │ │ │ -
190 out[26][1] = 0.0;
│ │ │ │ -
191 out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
192
│ │ │ │ -
193 out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - 216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
194 out[27][1] = 0.0;
│ │ │ │ -
195 out[27][2] = 0.0;
│ │ │ │ -
196
│ │ │ │ -
197 out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - 288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
198 out[28][1] = 0.0;
│ │ │ │ -
199 out[28][2] = 0.0;
│ │ │ │ -
200
│ │ │ │ -
201 out[29][0] = 0.0;
│ │ │ │ -
202 out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - 216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
203 out[29][2] = 0.0;
│ │ │ │ -
204
│ │ │ │ -
205 out[30][0] = 0.0;
│ │ │ │ -
206 out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - 288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
207 out[30][2] = 0.0;
│ │ │ │ -
208
│ │ │ │ -
209 out[31][0] = 0.0;
│ │ │ │ -
210 out[31][1] = 0.0;
│ │ │ │ -
211 out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
212
│ │ │ │ -
213 out[32][0] = 0.0;
│ │ │ │ -
214 out[32][1] = 0.0;
│ │ │ │ -
215 out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - 288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
216
│ │ │ │ -
217 out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ -
218 out[33][1] = 0.0;
│ │ │ │ -
219 out[33][2] = 0.0;
│ │ │ │ -
220
│ │ │ │ -
221 out[34][0] = 0.0;
│ │ │ │ -
222 out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ -
223 out[34][2] = 0.0;
│ │ │ │ -
224
│ │ │ │ -
225 out[35][0] = 0.0;
│ │ │ │ -
226 out[35][1] = 0.0;
│ │ │ │ -
227 out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ -
228 }
│ │ │ │ -
│ │ │ │ -
229
│ │ │ │ -
│ │ │ │ -
236 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
237 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
238 {
│ │ │ │ -
239 out.resize(36);
│ │ │ │ -
240
│ │ │ │ -
241 out[0][0][0] = sign0*(-6.0*in[0] + 4);
│ │ │ │ -
242 out[0][0][1] = 0;
│ │ │ │ -
243 out[0][0][2] = 0;
│ │ │ │ -
244 out[0][1][0] = 0;
│ │ │ │ -
245 out[0][1][1] = 0;
│ │ │ │ -
246 out[0][1][2] = 0;
│ │ │ │ -
247 out[0][2][0] = 0;
│ │ │ │ -
248 out[0][2][1] = 0;
│ │ │ │ -
249 out[0][2][2] = 0;
│ │ │ │ -
250
│ │ │ │ -
251 out[1][0][0] = sign1*(-2 + 6.0*in[0]);
│ │ │ │ -
252 out[1][0][1] = 0;
│ │ │ │ -
253 out[1][0][2] = 0;
│ │ │ │ -
254 out[1][1][0] = 0;
│ │ │ │ -
255 out[1][1][1] = 0;
│ │ │ │ -
256 out[1][1][2] = 0;
│ │ │ │ -
257 out[1][2][0] = 0;
│ │ │ │ -
258 out[1][2][1] = 0;
│ │ │ │ -
259 out[1][2][2] = 0;
│ │ │ │ -
260
│ │ │ │ -
261 out[2][0][0] = 0;
│ │ │ │ -
262 out[2][0][1] = 0;
│ │ │ │ -
263 out[2][0][2] = 0;
│ │ │ │ -
264 out[2][1][0] = 0;
│ │ │ │ -
265 out[2][1][1] = sign2*(-6.0*in[1] + 4);
│ │ │ │ -
266 out[2][1][2] = 0;
│ │ │ │ -
267 out[2][2][0] = 0;
│ │ │ │ -
268 out[2][2][1] = 0;
│ │ │ │ -
269 out[2][2][2] = 0;
│ │ │ │ -
270
│ │ │ │ -
271 out[3][0][0] = 0;
│ │ │ │ -
272 out[3][0][1] = 0;
│ │ │ │ -
273 out[3][0][2] = 0;
│ │ │ │ -
274 out[3][1][0] = 0;
│ │ │ │ -
275 out[3][1][1] = sign3*(6.0*in[1] - 2);
│ │ │ │ -
276 out[3][1][2] = 0;
│ │ │ │ -
277 out[3][2][0] = 0;
│ │ │ │ -
278 out[3][2][1] = 0;
│ │ │ │ -
279 out[3][2][2] = 0;
│ │ │ │ -
280
│ │ │ │ -
281 out[4][0][0] = 0;
│ │ │ │ -
282 out[4][0][1] = 0;
│ │ │ │ -
283 out[4][0][2] = 0;
│ │ │ │ -
284 out[4][1][0] = 0;
│ │ │ │ -
285 out[4][1][1] = 0;
│ │ │ │ -
286 out[4][1][2] = 0;
│ │ │ │ -
287 out[4][2][0] = 0;
│ │ │ │ -
288 out[4][2][1] = 0;
│ │ │ │ -
289 out[4][2][2] = sign4*(-6.0*in[2] + 4);
│ │ │ │ -
290
│ │ │ │ -
291 out[5][0][0] = 0;
│ │ │ │ -
292 out[5][0][1] = 0;
│ │ │ │ -
293 out[5][0][2] = 0;
│ │ │ │ -
294 out[5][1][0] = 0;
│ │ │ │ -
295 out[5][1][1] = 0;
│ │ │ │ -
296 out[5][1][2] = 0;
│ │ │ │ -
297 out[5][2][0] = 0;
│ │ │ │ -
298 out[5][2][1] = 0;
│ │ │ │ -
299 out[5][2][2] = sign5*(6.0*in[2] - 2);
│ │ │ │ -
300
│ │ │ │ -
301 out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0;
│ │ │ │ -
302 out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6;
│ │ │ │ -
303 out[6][0][2] = 0.0;
│ │ │ │ -
304 out[6][1][0] = 0.0;
│ │ │ │ -
305 out[6][1][1] = 0.0;
│ │ │ │ -
306 out[6][1][2] = 0.0;
│ │ │ │ -
307 out[6][2][0] = 0.0;
│ │ │ │ -
308 out[6][2][1] = 0.0;
│ │ │ │ -
309 out[6][2][2] = 0.0;
│ │ │ │ -
310
│ │ │ │ -
311 out[7][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0;
│ │ │ │ -
312 out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0];
│ │ │ │ -
313 out[7][0][2] = 0.0;
│ │ │ │ -
314 out[7][1][0] = 0.0;
│ │ │ │ -
315 out[7][1][1] = 0.0;
│ │ │ │ -
316 out[7][1][2] = 0.0;
│ │ │ │ -
317 out[7][2][0] = 0.0;
│ │ │ │ -
318 out[7][2][1] = 0.0;
│ │ │ │ -
319 out[7][2][2] = 0.0;
│ │ │ │ -
320
│ │ │ │ -
321 out[8][0][0] = 0.0;
│ │ │ │ -
322 out[8][0][1] = 0.0;
│ │ │ │ -
323 out[8][0][2] = 0.0;
│ │ │ │ -
324 out[8][1][0] = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0;
│ │ │ │ -
325 out[8][1][1] = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0;
│ │ │ │ -
326 out[8][1][2] = 0.0;
│ │ │ │ -
327 out[8][2][0] = 0.0;
│ │ │ │ -
328 out[8][2][1] = 0.0;
│ │ │ │ -
329 out[8][2][2] = 0.0;
│ │ │ │ -
330
│ │ │ │ -
331 out[9][0][0] = 0.0;
│ │ │ │ -
332 out[9][0][1] = 0.0;
│ │ │ │ -
333 out[9][0][2] = 0.0;
│ │ │ │ -
334 out[9][1][0] = -12.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ -
335 out[9][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];;
│ │ │ │ -
336 out[9][1][2] = 0.0;
│ │ │ │ -
337 out[9][2][0] = 0.0;
│ │ │ │ -
338 out[9][2][1] = 0.0;
│ │ │ │ -
339 out[9][2][2] = 0.0;
│ │ │ │ -
340
│ │ │ │ -
341 out[10][0][0] = 0.0;
│ │ │ │ -
342 out[10][0][1] = 0.0;
│ │ │ │ -
343 out[10][0][2] = 0.0;
│ │ │ │ -
344 out[10][1][0] = 0.0;
│ │ │ │ -
345 out[10][1][1] = 0.0;
│ │ │ │ -
346 out[10][1][2] = 0.0;
│ │ │ │ -
347 out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ -
348 out[10][2][1] = 0.0;
│ │ │ │ -
349 out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
│ │ │ │ -
350
│ │ │ │ -
351 out[11][0][0] = 0.0;
│ │ │ │ -
352 out[11][0][1] = 0.0;
│ │ │ │ -
353 out[11][0][2] = 0.0;
│ │ │ │ -
354 out[11][1][0] = 0.0;
│ │ │ │ -
355 out[11][1][1] = 0.0;
│ │ │ │ -
356 out[11][1][2] = 0.0;
│ │ │ │ -
357 out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ -
358 out[11][2][1] = 0.0;
│ │ │ │ -
359 out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
│ │ │ │ -
360
│ │ │ │ -
361 out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
│ │ │ │ -
362 out[12][0][1] = 0.0;
│ │ │ │ -
363 out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ -
364 out[12][1][0] = 0.0;
│ │ │ │ -
365 out[12][1][1] = 0.0;
│ │ │ │ -
366 out[12][1][2] = 0.0;
│ │ │ │ -
367 out[12][2][0] = 0.0;
│ │ │ │ -
368 out[12][2][1] = 0.0;
│ │ │ │ -
369 out[12][2][2] = 0.0;
│ │ │ │ -
370
│ │ │ │ -
371 out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
│ │ │ │ -
372 out[13][0][1] = 0.0;
│ │ │ │ -
373 out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ -
374 out[13][1][0] = 0.0;
│ │ │ │ -
375 out[13][1][1] = 0.0;
│ │ │ │ -
376 out[13][1][2] = 0.0;
│ │ │ │ -
377 out[13][2][0] = 0.0;
│ │ │ │ -
378 out[13][2][1] = 0.0;
│ │ │ │ -
379 out[13][2][2] = 0.0;
│ │ │ │ -
380
│ │ │ │ -
381 out[14][0][0] = 0.0;
│ │ │ │ -
382 out[14][0][1] = 0.0;
│ │ │ │ -
383 out[14][0][2] = 0.0;
│ │ │ │ -
384 out[14][1][0] = 0.0;
│ │ │ │ -
385 out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
│ │ │ │ -
386 out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1];
│ │ │ │ -
387 out[14][2][0] = 0.0;
│ │ │ │ -
388 out[14][2][1] = 0.0;
│ │ │ │ -
389 out[14][2][2] = 0.0;
│ │ │ │ -
390
│ │ │ │ -
391 out[15][0][0] = 0.0;
│ │ │ │ -
392 out[15][0][1] = 0.0;
│ │ │ │ -
393 out[15][0][2] = 0.0;
│ │ │ │ -
394 out[15][1][0] = 0.0;
│ │ │ │ -
395 out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
│ │ │ │ -
396 out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1];
│ │ │ │ -
397 out[15][2][0] = 0.0;
│ │ │ │ -
398 out[15][2][1] = 0.0;
│ │ │ │ -
399 out[15][2][2] = 0.0;
│ │ │ │ -
400
│ │ │ │ -
401 out[16][0][0] = 0.0;
│ │ │ │ -
402 out[16][0][1] = 0.0;
│ │ │ │ -
403 out[16][0][2] = 0.0;
│ │ │ │ -
404 out[16][1][0] = 0.0;
│ │ │ │ -
405 out[16][1][1] = 0.0;
│ │ │ │ -
406 out[16][1][2] = 0.0;
│ │ │ │ -
407 out[16][2][0] = 0.0;
│ │ │ │ -
408 out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ -
409 out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
│ │ │ │ -
410
│ │ │ │ -
411 out[17][0][0] = 0.0;
│ │ │ │ -
412 out[17][0][1] = 0.0;
│ │ │ │ -
413 out[17][0][2] = 0.0;
│ │ │ │ -
414 out[17][1][0] = 0.0;
│ │ │ │ -
415 out[17][1][1] = 0.0;
│ │ │ │ -
416 out[17][1][2] = 0.0;
│ │ │ │ -
417 out[17][2][0] = 0.0;
│ │ │ │ -
418 out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ -
419 out[17][2][2] = 6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
│ │ │ │ -
420
│ │ │ │ -
421 out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
422 out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
│ │ │ │ -
423 out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
│ │ │ │ -
424 out[18][1][0] = 0.0;
│ │ │ │ -
425 out[18][1][1] = 0.0;
│ │ │ │ -
426 out[18][1][2] = 0.0;
│ │ │ │ -
427 out[18][2][0] = 0.0;
│ │ │ │ -
428 out[18][2][1] = 0.0;
│ │ │ │ -
429 out[18][2][2] = 0.0;
│ │ │ │ -
430
│ │ │ │ -
431 out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
432 out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
│ │ │ │ -
433 out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
│ │ │ │ -
434 out[19][1][0] = 0.0;
│ │ │ │ -
435 out[19][1][1] = 0.0;
│ │ │ │ -
436 out[19][1][2] = 0.0;
│ │ │ │ -
437 out[19][2][0] = 0.0;
│ │ │ │ -
438 out[19][2][1] = 0.0;
│ │ │ │ -
439 out[19][2][2] = 0.0;
│ │ │ │ -
440
│ │ │ │ -
441 out[20][0][0] = 0.0;
│ │ │ │ -
442 out[20][0][1] = 0.0;
│ │ │ │ -
443 out[20][0][2] = 0.0;
│ │ │ │ -
444 out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
│ │ │ │ -
445 out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
446 out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
│ │ │ │ -
447 out[20][2][0] = 0.0;
│ │ │ │ -
448 out[20][2][1] = 0.0;
│ │ │ │ -
449 out[20][2][2] = 0.0;
│ │ │ │ -
450
│ │ │ │ -
451 out[21][0][0] = 0.0;
│ │ │ │ -
452 out[21][0][1] = 0.0;
│ │ │ │ -
453 out[21][0][2] = 0.0;
│ │ │ │ -
454 out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
│ │ │ │ -
455 out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
456 out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
│ │ │ │ -
457 out[21][2][0] = 0.0;
│ │ │ │ -
458 out[21][2][1] = 0.0;
│ │ │ │ -
459 out[21][2][2] = 0.0;
│ │ │ │ -
460
│ │ │ │ -
461 out[22][0][0] = 0.0;
│ │ │ │ -
462 out[22][0][1] = 0.0;
│ │ │ │ -
463 out[22][0][2] = 0.0;
│ │ │ │ -
464 out[22][1][0] = 0.0;
│ │ │ │ -
465 out[22][1][1] = 0.0;
│ │ │ │ -
466 out[22][1][2] = 0.0;
│ │ │ │ -
467 out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
│ │ │ │ -
468 out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
│ │ │ │ -
469 out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
470
│ │ │ │ -
471 out[23][0][0] = 0.0;
│ │ │ │ -
472 out[23][0][1] = 0.0;
│ │ │ │ -
473 out[23][0][2] = 0.0;
│ │ │ │ -
474 out[23][1][0] = 0.0;
│ │ │ │ -
475 out[23][1][1] = 0.0;
│ │ │ │ -
476 out[23][1][2] = 0.0;
│ │ │ │ -
477 out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
│ │ │ │ -
478 out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
│ │ │ │ -
479 out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ -
480
│ │ │ │ -
481 out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - 192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ -
482 out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[2];
│ │ │ │ -
483 out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1];
│ │ │ │ -
484 out[24][1][0] = 0.0;
│ │ │ │ -
485 out[24][1][1] = 0.0;
│ │ │ │ -
486 out[24][1][2] = 0.0;
│ │ │ │ -
487 out[24][2][0] = 0.0;
│ │ │ │ -
488 out[24][2][1] = 0.0;
│ │ │ │ -
489 out[24][2][2] = 0.0;
│ │ │ │ -
490
│ │ │ │ -
491 out[25][0][0] = 0.0;
│ │ │ │ -
492 out[25][0][1] = 0.0;
│ │ │ │ -
493 out[25][0][2] = 0.0;
│ │ │ │ -
494 out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[1]*in[1]*in[2];
│ │ │ │ -
495 out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - 192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ -
496 out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1];
│ │ │ │ -
497 out[25][2][0] = 0.0;
│ │ │ │ -
498 out[25][2][1] = 0.0;
│ │ │ │ -
499 out[25][2][2] = 0.0;
│ │ │ │ -
500
│ │ │ │ -
501 out[26][0][0] = 0.0;
│ │ │ │ -
502 out[26][0][1] = 0.0;
│ │ │ │ -
503 out[26][0][2] = 0.0;
│ │ │ │ -
504 out[26][1][0] = 0.0;
│ │ │ │ -
505 out[26][1][1] = 0.0;
│ │ │ │ -
506 out[26][1][2] = 0.0;
│ │ │ │ -
507 out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[1]*in[2]*in[2];
│ │ │ │ -
508 out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2];
│ │ │ │ -
509 out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - 192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ -
510
│ │ │ │ -
511 out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
512 out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
│ │ │ │ -
513 out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
│ │ │ │ -
514 out[27][1][0] = 0.0;
│ │ │ │ -
515 out[27][1][1] = 0.0;
│ │ │ │ -
516 out[27][1][2] = 0.0;
│ │ │ │ -
517 out[27][2][0] = 0.0;
│ │ │ │ -
518 out[27][2][1] = 0.0;
│ │ │ │ -
519 out[27][2][2] = 0.0;
│ │ │ │ -
520
│ │ │ │ -
521 out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
522 out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
│ │ │ │ -
523 out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
│ │ │ │ -
524 out[28][1][0] = 0.0;
│ │ │ │ -
525 out[28][1][1] = 0.0;
│ │ │ │ -
526 out[28][1][2] = 0.0;
│ │ │ │ -
527 out[28][2][0] = 0.0;
│ │ │ │ -
528 out[28][2][1] = 0.0;
│ │ │ │ -
529 out[28][2][2] = 0.0;
│ │ │ │ -
530
│ │ │ │ -
531 out[29][0][0] = 0.0;
│ │ │ │ -
532 out[29][0][1] = 0.0;
│ │ │ │ -
533 out[29][0][2] = 0.0;
│ │ │ │ -
534 out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
│ │ │ │ -
535 out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
536 out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
│ │ │ │ -
537 out[29][2][0] = 0.0;
│ │ │ │ -
538 out[29][2][1] = 0.0;
│ │ │ │ -
539 out[29][2][2] = 0.0;
│ │ │ │ -
540
│ │ │ │ -
541 out[30][0][0] = 0.0;
│ │ │ │ -
542 out[30][0][1] = 0.0;
│ │ │ │ -
543 out[30][0][2] = 0.0;
│ │ │ │ -
544 out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
│ │ │ │ -
545 out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
546 out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
│ │ │ │ -
547 out[30][2][0] = 0.0;
│ │ │ │ -
548 out[30][2][1] = 0.0;
│ │ │ │ -
549 out[30][2][2] = 0.0;
│ │ │ │ -
550
│ │ │ │ -
551 out[31][0][0] = 0.0;
│ │ │ │ -
552 out[31][0][1] = 0.0;
│ │ │ │ -
553 out[31][0][2] = 0.0;
│ │ │ │ -
554 out[31][1][0] = 0.0;
│ │ │ │ -
555 out[31][1][1] = 0.0;
│ │ │ │ -
556 out[31][1][2] = 0.0;
│ │ │ │ -
557 out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
│ │ │ │ -
558 out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
│ │ │ │ -
559 out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
560
│ │ │ │ -
561 out[32][0][0] = 0.0;
│ │ │ │ -
562 out[32][0][1] = 0.0;
│ │ │ │ -
563 out[32][0][2] = 0.0;
│ │ │ │ -
564 out[32][1][0] = 0.0;
│ │ │ │ -
565 out[32][1][1] = 0.0;
│ │ │ │ -
566 out[32][1][2] = 0.0;
│ │ │ │ -
567 out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
│ │ │ │ -
568 out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
│ │ │ │ -
569 out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ -
570
│ │ │ │ -
571 out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - 432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ -
572 out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[2];
│ │ │ │ -
573 out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[1];
│ │ │ │ -
574 out[33][1][0] = 0.0;
│ │ │ │ -
575 out[33][1][1] = 0.0;
│ │ │ │ -
576 out[33][1][2] = 0.0;
│ │ │ │ -
577 out[33][2][0] = 0.0;
│ │ │ │ -
578 out[33][2][1] = 0.0;
│ │ │ │ -
579 out[33][2][2] = 0.0;
│ │ │ │ -
580
│ │ │ │ -
581 out[34][0][0] = 0.0;
│ │ │ │ -
582 out[34][0][1] = 0.0;
│ │ │ │ -
583 out[34][0][2] = 0.0;
│ │ │ │ -
584 out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - 864.0*in[1]*in[1]*in[2];
│ │ │ │ -
585 out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - 432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ -
586 out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - 864.0*in[0]*in[1]*in[1];
│ │ │ │ -
587 out[34][2][0] = 0.0;
│ │ │ │ -
588 out[34][2][1] = 0.0;
│ │ │ │ -
589 out[34][2][2] = 0.0;
│ │ │ │ -
590
│ │ │ │ -
591 out[35][0][0] = 0.0;
│ │ │ │ -
592 out[35][0][1] = 0.0;
│ │ │ │ -
593 out[35][0][2] = 0.0;
│ │ │ │ -
594 out[35][1][0] = 0.0;
│ │ │ │ -
595 out[35][1][1] = 0.0;
│ │ │ │ -
596 out[35][1][2] = 0.0;
│ │ │ │ -
597 out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - 864.0*in[1]*in[2]*in[2];
│ │ │ │ -
598 out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - 864.0*in[0]*in[2]*in[2];
│ │ │ │ -
599 out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - 432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ -
600 }
│ │ │ │ -
│ │ │ │ -
601
│ │ │ │ -
│ │ │ │ -
603 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
604 const typename Traits::DomainType& in, // position
│ │ │ │ -
605 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
606 {
│ │ │ │ -
607 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
608 if (totalOrder == 0) {
│ │ │ │ -
609 evaluateFunction(in, out);
│ │ │ │ -
610 } else {
│ │ │ │ -
611 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
612 }
│ │ │ │ -
613 }
│ │ │ │ -
│ │ │ │ -
614
│ │ │ │ -
│ │ │ │ -
616 unsigned int order () const
│ │ │ │ -
617 {
│ │ │ │ -
618 return 3;
│ │ │ │ -
619 }
│ │ │ │ -
│ │ │ │ -
620
│ │ │ │ -
621 private:
│ │ │ │ -
622 R sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ -
623 };
│ │ │ │ +
│ │ │ │ +
35 std::size_t size () const
│ │ │ │ +
36 {
│ │ │ │ +
37 return 5;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
42 {
│ │ │ │ +
43 return li[i];
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector<LocalKey> li;
│ │ │ │ +
48 };
│ │ │ │
│ │ │ │ -
624}
│ │ │ │ -
625#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
49}
│ │ │ │ +
50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalbasis.hh:28
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:603
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas1cube3dlocalbasis.hh:32
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas1cube3dlocalbasis.hh:69
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:80
│ │ │ │ -
RT1Cube3DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas1cube3dlocalbasis.hh:39
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:236
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:616
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on pyramids.
Definition raviartthomas0pyramidlocalcoefficients.hh:24
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0pyramidlocalcoefficients.hh:41
│ │ │ │ +
RT0PyramidLocalCoefficients()
Standard constructor.
Definition raviartthomas0pyramidlocalcoefficients.hh:28
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas0pyramidlocalcoefficients.hh:35
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,758 +1,73 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ -raviartthomas1cube3dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ +raviartthomas0pyramidlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ 12 │ │ │ │ │ -13#include "../../common/localbasis.hh" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ +29 { │ │ │ │ │ +30 for(std::size_t i=0; i< _s_i_z_e(); i++) │ │ │ │ │ +31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +32 } │ │ │ │ │ 33 │ │ │ │ │ -_3_9 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ -40 { │ │ │ │ │ -41 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ -42 if (s & 1) │ │ │ │ │ -43 { │ │ │ │ │ -44 sign0 = -1.0; │ │ │ │ │ -45 } │ │ │ │ │ -46 if (s & 2) │ │ │ │ │ -47 { │ │ │ │ │ -48 sign1 = -1.0; │ │ │ │ │ -49 } │ │ │ │ │ -50 if (s & 4) │ │ │ │ │ -51 { │ │ │ │ │ -52 sign2 = -1.0; │ │ │ │ │ -53 } │ │ │ │ │ -54 if (s & 8) │ │ │ │ │ -55 { │ │ │ │ │ -56 sign3 = -1.0; │ │ │ │ │ -57 } │ │ │ │ │ -58 if (s & 16) │ │ │ │ │ -59 { │ │ │ │ │ -60 sign4 = -1.0; │ │ │ │ │ -61 } │ │ │ │ │ -62 if (s & 32) │ │ │ │ │ -63 { │ │ │ │ │ -64 sign5 = -1.0; │ │ │ │ │ -65 } │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ -70 { │ │ │ │ │ -71 return 36; │ │ │ │ │ -72 } │ │ │ │ │ -73 │ │ │ │ │ -_8_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -81 std::vector& out) const │ │ │ │ │ -82 { │ │ │ │ │ -83 out.resize(36); │ │ │ │ │ -84 │ │ │ │ │ -85 out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0); │ │ │ │ │ -86 out[0][1] = 0.0; │ │ │ │ │ -87 out[0][2] = 0.0; │ │ │ │ │ -88 │ │ │ │ │ -89 out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]); │ │ │ │ │ -90 out[1][1] = 0.0; │ │ │ │ │ -91 out[1][2] = 0.0; │ │ │ │ │ -92 │ │ │ │ │ -93 out[2][0] = 0.0; │ │ │ │ │ -94 out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0); │ │ │ │ │ -95 out[2][2] = 0.0; │ │ │ │ │ -96 │ │ │ │ │ -97 out[3][0] = 0.0; │ │ │ │ │ -98 out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]); │ │ │ │ │ -99 out[3][2] = 0.0; │ │ │ │ │ -100 │ │ │ │ │ -101 out[4][0] = 0.0; │ │ │ │ │ -102 out[4][1] = 0.0; │ │ │ │ │ -103 out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0); │ │ │ │ │ -104 │ │ │ │ │ -105 out[5][0] = 0.0; │ │ │ │ │ -106 out[5][1] = 0.0; │ │ │ │ │ -107 out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]); │ │ │ │ │ -108 │ │ │ │ │ -109 out[6][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - │ │ │ │ │ -6.0*in[1] -12.0*in[0] + 3.0; │ │ │ │ │ -110 out[6][1] = 0.0; │ │ │ │ │ -111 out[6][2] = 0.0; │ │ │ │ │ -112 │ │ │ │ │ -113 out[7][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - │ │ │ │ │ -6.0*in[0]; │ │ │ │ │ -114 out[7][1] = 0.0; │ │ │ │ │ -115 out[7][2] = 0.0; │ │ │ │ │ -116 │ │ │ │ │ -117 out[8][0] = 0.0; │ │ │ │ │ -118 out[8][1] = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + │ │ │ │ │ -12.0*in[1] + 6.0*in[0] - 3.0; │ │ │ │ │ -119 out[8][2] = 0.0; │ │ │ │ │ -120 │ │ │ │ │ -121 out[9][0] = 0.0; │ │ │ │ │ -122 out[9][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -123 out[9][2] = 0.0; │ │ │ │ │ -124 │ │ │ │ │ -125 out[10][0] = 0.0; │ │ │ │ │ -126 out[10][1] = 0.0; │ │ │ │ │ -127 out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in │ │ │ │ │ -[2]*in[2] + 18.0*in[0]*in[2]*in[2]; │ │ │ │ │ -128 │ │ │ │ │ -129 out[11][0] = 0.0; │ │ │ │ │ -130 out[11][1] = 0.0; │ │ │ │ │ -131 out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in │ │ │ │ │ -[2]*in[2]; │ │ │ │ │ -132 │ │ │ │ │ -133 out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in │ │ │ │ │ -[0] - 18.0*in[0]*in[0]*in[2]; │ │ │ │ │ -134 out[12][1] = 0.0; │ │ │ │ │ -135 out[12][2] = 0.0; │ │ │ │ │ -136 │ │ │ │ │ -137 out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in │ │ │ │ │ -[0]*in[0]*in[2]; │ │ │ │ │ -138 out[13][1] = 0.0; │ │ │ │ │ -139 out[13][2] = 0.0; │ │ │ │ │ -140 │ │ │ │ │ -141 out[14][0] = 0.0; │ │ │ │ │ -142 out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in │ │ │ │ │ -[1] - 18.0*in[1]*in[1]*in[2]; │ │ │ │ │ -143 out[14][2] = 0.0; │ │ │ │ │ -144 │ │ │ │ │ -145 out[15][0] = 0.0; │ │ │ │ │ -146 out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in │ │ │ │ │ -[1]*in[1]*in[2]; │ │ │ │ │ -147 out[15][2] = 0.0; │ │ │ │ │ -148 │ │ │ │ │ -149 out[16][0] = 0.0; │ │ │ │ │ -150 out[16][1] = 0.0; │ │ │ │ │ -151 out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in │ │ │ │ │ -[2]*in[2] + 18.0*in[1]*in[2]*in[2]; │ │ │ │ │ -152 │ │ │ │ │ -153 out[17][0] = 0.0; │ │ │ │ │ -154 out[17][1] = 0.0; │ │ │ │ │ -155 out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in │ │ │ │ │ -[2]*in[2]; │ │ │ │ │ -156 │ │ │ │ │ -157 out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] │ │ │ │ │ -- 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in │ │ │ │ │ -[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in │ │ │ │ │ -[1]*in[2]; │ │ │ │ │ -158 out[18][1] = 0.0; │ │ │ │ │ -159 out[18][2] = 0.0; │ │ │ │ │ -160 │ │ │ │ │ -161 out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in │ │ │ │ │ -[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ -162 out[19][1] = 0.0; │ │ │ │ │ -163 out[19][2] = 0.0; │ │ │ │ │ -164 │ │ │ │ │ -165 out[20][0] = 0.0; │ │ │ │ │ -166 out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] │ │ │ │ │ -+ 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in │ │ │ │ │ -[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[2]; │ │ │ │ │ -167 out[20][2] = 0.0; │ │ │ │ │ -168 │ │ │ │ │ -169 out[21][0] = 0.0; │ │ │ │ │ -170 out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in │ │ │ │ │ -[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in │ │ │ │ │ -[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ -171 out[21][2] = 0.0; │ │ │ │ │ -172 │ │ │ │ │ -173 out[22][0] = 0.0; │ │ │ │ │ -174 out[22][1] = 0.0; │ │ │ │ │ -175 out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] │ │ │ │ │ -+ 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in │ │ │ │ │ -[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in │ │ │ │ │ -[2]*in[2]; │ │ │ │ │ -176 │ │ │ │ │ -177 out[23][0] = 0.0; │ │ │ │ │ -178 out[23][1] = 0.0; │ │ │ │ │ -179 out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in │ │ │ │ │ -[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in │ │ │ │ │ -[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ -180 │ │ │ │ │ -181 out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in │ │ │ │ │ -[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ -182 out[24][1] = 0.0; │ │ │ │ │ -183 out[24][2] = 0.0; │ │ │ │ │ -184 │ │ │ │ │ -185 out[25][0] = 0.0; │ │ │ │ │ -186 out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in │ │ │ │ │ -[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ -187 out[25][2] = 0.0; │ │ │ │ │ -188 │ │ │ │ │ -189 out[26][0] = 0.0; │ │ │ │ │ -190 out[26][1] = 0.0; │ │ │ │ │ -191 out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in │ │ │ │ │ -[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ -192 │ │ │ │ │ -193 out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - │ │ │ │ │ -432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - │ │ │ │ │ -216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ -194 out[27][1] = 0.0; │ │ │ │ │ -195 out[27][2] = 0.0; │ │ │ │ │ -196 │ │ │ │ │ -197 out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - │ │ │ │ │ -432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - │ │ │ │ │ -288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ -198 out[28][1] = 0.0; │ │ │ │ │ -199 out[28][2] = 0.0; │ │ │ │ │ -200 │ │ │ │ │ -201 out[29][0] = 0.0; │ │ │ │ │ -202 out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - │ │ │ │ │ -432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - │ │ │ │ │ -216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ -203 out[29][2] = 0.0; │ │ │ │ │ -204 │ │ │ │ │ -205 out[30][0] = 0.0; │ │ │ │ │ -206 out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - │ │ │ │ │ -432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - │ │ │ │ │ -288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ -207 out[30][2] = 0.0; │ │ │ │ │ -208 │ │ │ │ │ -209 out[31][0] = 0.0; │ │ │ │ │ -210 out[31][1] = 0.0; │ │ │ │ │ -211 out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in │ │ │ │ │ -[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in │ │ │ │ │ -[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ -212 │ │ │ │ │ -213 out[32][0] = 0.0; │ │ │ │ │ -214 out[32][1] = 0.0; │ │ │ │ │ -215 out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - │ │ │ │ │ -432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - │ │ │ │ │ -288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ -216 │ │ │ │ │ -217 out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in │ │ │ │ │ -[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ -218 out[33][1] = 0.0; │ │ │ │ │ -219 out[33][2] = 0.0; │ │ │ │ │ -220 │ │ │ │ │ -221 out[34][0] = 0.0; │ │ │ │ │ -222 out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in │ │ │ │ │ -[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ -223 out[34][2] = 0.0; │ │ │ │ │ -224 │ │ │ │ │ -225 out[35][0] = 0.0; │ │ │ │ │ -226 out[35][1] = 0.0; │ │ │ │ │ -227 out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in │ │ │ │ │ -[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in │ │ │ │ │ -[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ -228 } │ │ │ │ │ -229 │ │ │ │ │ -_2_3_6 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -237 std::vector& out) const │ │ │ │ │ -238 { │ │ │ │ │ -239 out.resize(36); │ │ │ │ │ -240 │ │ │ │ │ -241 out[0][0][0] = sign0*(-6.0*in[0] + 4); │ │ │ │ │ -242 out[0][0][1] = 0; │ │ │ │ │ -243 out[0][0][2] = 0; │ │ │ │ │ -244 out[0][1][0] = 0; │ │ │ │ │ -245 out[0][1][1] = 0; │ │ │ │ │ -246 out[0][1][2] = 0; │ │ │ │ │ -247 out[0][2][0] = 0; │ │ │ │ │ -248 out[0][2][1] = 0; │ │ │ │ │ -249 out[0][2][2] = 0; │ │ │ │ │ -250 │ │ │ │ │ -251 out[1][0][0] = sign1*(-2 + 6.0*in[0]); │ │ │ │ │ -252 out[1][0][1] = 0; │ │ │ │ │ -253 out[1][0][2] = 0; │ │ │ │ │ -254 out[1][1][0] = 0; │ │ │ │ │ -255 out[1][1][1] = 0; │ │ │ │ │ -256 out[1][1][2] = 0; │ │ │ │ │ -257 out[1][2][0] = 0; │ │ │ │ │ -258 out[1][2][1] = 0; │ │ │ │ │ -259 out[1][2][2] = 0; │ │ │ │ │ -260 │ │ │ │ │ -261 out[2][0][0] = 0; │ │ │ │ │ -262 out[2][0][1] = 0; │ │ │ │ │ -263 out[2][0][2] = 0; │ │ │ │ │ -264 out[2][1][0] = 0; │ │ │ │ │ -265 out[2][1][1] = sign2*(-6.0*in[1] + 4); │ │ │ │ │ -266 out[2][1][2] = 0; │ │ │ │ │ -267 out[2][2][0] = 0; │ │ │ │ │ -268 out[2][2][1] = 0; │ │ │ │ │ -269 out[2][2][2] = 0; │ │ │ │ │ -270 │ │ │ │ │ -271 out[3][0][0] = 0; │ │ │ │ │ -272 out[3][0][1] = 0; │ │ │ │ │ -273 out[3][0][2] = 0; │ │ │ │ │ -274 out[3][1][0] = 0; │ │ │ │ │ -275 out[3][1][1] = sign3*(6.0*in[1] - 2); │ │ │ │ │ -276 out[3][1][2] = 0; │ │ │ │ │ -277 out[3][2][0] = 0; │ │ │ │ │ -278 out[3][2][1] = 0; │ │ │ │ │ -279 out[3][2][2] = 0; │ │ │ │ │ -280 │ │ │ │ │ -281 out[4][0][0] = 0; │ │ │ │ │ -282 out[4][0][1] = 0; │ │ │ │ │ -283 out[4][0][2] = 0; │ │ │ │ │ -284 out[4][1][0] = 0; │ │ │ │ │ -285 out[4][1][1] = 0; │ │ │ │ │ -286 out[4][1][2] = 0; │ │ │ │ │ -287 out[4][2][0] = 0; │ │ │ │ │ -288 out[4][2][1] = 0; │ │ │ │ │ -289 out[4][2][2] = sign4*(-6.0*in[2] + 4); │ │ │ │ │ -290 │ │ │ │ │ -291 out[5][0][0] = 0; │ │ │ │ │ -292 out[5][0][1] = 0; │ │ │ │ │ -293 out[5][0][2] = 0; │ │ │ │ │ -294 out[5][1][0] = 0; │ │ │ │ │ -295 out[5][1][1] = 0; │ │ │ │ │ -296 out[5][1][2] = 0; │ │ │ │ │ -297 out[5][2][0] = 0; │ │ │ │ │ -298 out[5][2][1] = 0; │ │ │ │ │ -299 out[5][2][2] = sign5*(6.0*in[2] - 2); │ │ │ │ │ -300 │ │ │ │ │ -301 out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0; │ │ │ │ │ -302 out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6; │ │ │ │ │ -303 out[6][0][2] = 0.0; │ │ │ │ │ -304 out[6][1][0] = 0.0; │ │ │ │ │ -305 out[6][1][1] = 0.0; │ │ │ │ │ -306 out[6][1][2] = 0.0; │ │ │ │ │ -307 out[6][2][0] = 0.0; │ │ │ │ │ -308 out[6][2][1] = 0.0; │ │ │ │ │ -309 out[6][2][2] = 0.0; │ │ │ │ │ -310 │ │ │ │ │ -311 out[7][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0; │ │ │ │ │ -312 out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0]; │ │ │ │ │ -313 out[7][0][2] = 0.0; │ │ │ │ │ -314 out[7][1][0] = 0.0; │ │ │ │ │ -315 out[7][1][1] = 0.0; │ │ │ │ │ -316 out[7][1][2] = 0.0; │ │ │ │ │ -317 out[7][2][0] = 0.0; │ │ │ │ │ -318 out[7][2][1] = 0.0; │ │ │ │ │ -319 out[7][2][2] = 0.0; │ │ │ │ │ -320 │ │ │ │ │ -321 out[8][0][0] = 0.0; │ │ │ │ │ -322 out[8][0][1] = 0.0; │ │ │ │ │ -323 out[8][0][2] = 0.0; │ │ │ │ │ -324 out[8][1][0] = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0; │ │ │ │ │ -325 out[8][1][1] = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0; │ │ │ │ │ -326 out[8][1][2] = 0.0; │ │ │ │ │ -327 out[8][2][0] = 0.0; │ │ │ │ │ -328 out[8][2][1] = 0.0; │ │ │ │ │ -329 out[8][2][2] = 0.0; │ │ │ │ │ -330 │ │ │ │ │ -331 out[9][0][0] = 0.0; │ │ │ │ │ -332 out[9][0][1] = 0.0; │ │ │ │ │ -333 out[9][0][2] = 0.0; │ │ │ │ │ -334 out[9][1][0] = -12.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ -335 out[9][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];; │ │ │ │ │ -336 out[9][1][2] = 0.0; │ │ │ │ │ -337 out[9][2][0] = 0.0; │ │ │ │ │ -338 out[9][2][1] = 0.0; │ │ │ │ │ -339 out[9][2][2] = 0.0; │ │ │ │ │ -340 │ │ │ │ │ -341 out[10][0][0] = 0.0; │ │ │ │ │ -342 out[10][0][1] = 0.0; │ │ │ │ │ -343 out[10][0][2] = 0.0; │ │ │ │ │ -344 out[10][1][0] = 0.0; │ │ │ │ │ -345 out[10][1][1] = 0.0; │ │ │ │ │ -346 out[10][1][2] = 0.0; │ │ │ │ │ -347 out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ -348 out[10][2][1] = 0.0; │ │ │ │ │ -349 out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2]; │ │ │ │ │ -350 │ │ │ │ │ -351 out[11][0][0] = 0.0; │ │ │ │ │ -352 out[11][0][1] = 0.0; │ │ │ │ │ -353 out[11][0][2] = 0.0; │ │ │ │ │ -354 out[11][1][0] = 0.0; │ │ │ │ │ -355 out[11][1][1] = 0.0; │ │ │ │ │ -356 out[11][1][2] = 0.0; │ │ │ │ │ -357 out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ -358 out[11][2][1] = 0.0; │ │ │ │ │ -359 out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2]; │ │ │ │ │ -360 │ │ │ │ │ -361 out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2]; │ │ │ │ │ -362 out[12][0][1] = 0.0; │ │ │ │ │ -363 out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ -364 out[12][1][0] = 0.0; │ │ │ │ │ -365 out[12][1][1] = 0.0; │ │ │ │ │ -366 out[12][1][2] = 0.0; │ │ │ │ │ -367 out[12][2][0] = 0.0; │ │ │ │ │ -368 out[12][2][1] = 0.0; │ │ │ │ │ -369 out[12][2][2] = 0.0; │ │ │ │ │ -370 │ │ │ │ │ -371 out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2]; │ │ │ │ │ -372 out[13][0][1] = 0.0; │ │ │ │ │ -373 out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ -374 out[13][1][0] = 0.0; │ │ │ │ │ -375 out[13][1][1] = 0.0; │ │ │ │ │ -376 out[13][1][2] = 0.0; │ │ │ │ │ -377 out[13][2][0] = 0.0; │ │ │ │ │ -378 out[13][2][1] = 0.0; │ │ │ │ │ -379 out[13][2][2] = 0.0; │ │ │ │ │ -380 │ │ │ │ │ -381 out[14][0][0] = 0.0; │ │ │ │ │ -382 out[14][0][1] = 0.0; │ │ │ │ │ -383 out[14][0][2] = 0.0; │ │ │ │ │ -384 out[14][1][0] = 0.0; │ │ │ │ │ -385 out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2]; │ │ │ │ │ -386 out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1]; │ │ │ │ │ -387 out[14][2][0] = 0.0; │ │ │ │ │ -388 out[14][2][1] = 0.0; │ │ │ │ │ -389 out[14][2][2] = 0.0; │ │ │ │ │ -390 │ │ │ │ │ -391 out[15][0][0] = 0.0; │ │ │ │ │ -392 out[15][0][1] = 0.0; │ │ │ │ │ -393 out[15][0][2] = 0.0; │ │ │ │ │ -394 out[15][1][0] = 0.0; │ │ │ │ │ -395 out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2]; │ │ │ │ │ -396 out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1]; │ │ │ │ │ -397 out[15][2][0] = 0.0; │ │ │ │ │ -398 out[15][2][1] = 0.0; │ │ │ │ │ -399 out[15][2][2] = 0.0; │ │ │ │ │ -400 │ │ │ │ │ -401 out[16][0][0] = 0.0; │ │ │ │ │ -402 out[16][0][1] = 0.0; │ │ │ │ │ -403 out[16][0][2] = 0.0; │ │ │ │ │ -404 out[16][1][0] = 0.0; │ │ │ │ │ -405 out[16][1][1] = 0.0; │ │ │ │ │ -406 out[16][1][2] = 0.0; │ │ │ │ │ -407 out[16][2][0] = 0.0; │ │ │ │ │ -408 out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ -409 out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2]; │ │ │ │ │ -410 │ │ │ │ │ -411 out[17][0][0] = 0.0; │ │ │ │ │ -412 out[17][0][1] = 0.0; │ │ │ │ │ -413 out[17][0][2] = 0.0; │ │ │ │ │ -414 out[17][1][0] = 0.0; │ │ │ │ │ -415 out[17][1][1] = 0.0; │ │ │ │ │ -416 out[17][1][2] = 0.0; │ │ │ │ │ -417 out[17][2][0] = 0.0; │ │ │ │ │ -418 out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ -419 out[17][2][2] = 6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2]; │ │ │ │ │ -420 │ │ │ │ │ -421 out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - │ │ │ │ │ -54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -422 out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + │ │ │ │ │ -54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2]; │ │ │ │ │ -423 out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + │ │ │ │ │ -54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1]; │ │ │ │ │ -424 out[18][1][0] = 0.0; │ │ │ │ │ -425 out[18][1][1] = 0.0; │ │ │ │ │ -426 out[18][1][2] = 0.0; │ │ │ │ │ -427 out[18][2][0] = 0.0; │ │ │ │ │ -428 out[18][2][1] = 0.0; │ │ │ │ │ -429 out[18][2][2] = 0.0; │ │ │ │ │ -430 │ │ │ │ │ -431 out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in │ │ │ │ │ -[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -432 out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - │ │ │ │ │ -108.0*in[0]*in[0]*in[2]; │ │ │ │ │ -433 out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - │ │ │ │ │ -108.0*in[0]*in[0]*in[1]; │ │ │ │ │ -434 out[19][1][0] = 0.0; │ │ │ │ │ -435 out[19][1][1] = 0.0; │ │ │ │ │ -436 out[19][1][2] = 0.0; │ │ │ │ │ -437 out[19][2][0] = 0.0; │ │ │ │ │ -438 out[19][2][1] = 0.0; │ │ │ │ │ -439 out[19][2][2] = 0.0; │ │ │ │ │ -440 │ │ │ │ │ -441 out[20][0][0] = 0.0; │ │ │ │ │ -442 out[20][0][1] = 0.0; │ │ │ │ │ -443 out[20][0][2] = 0.0; │ │ │ │ │ -444 out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - │ │ │ │ │ -54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2]; │ │ │ │ │ -445 out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + │ │ │ │ │ -54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -446 out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - │ │ │ │ │ -54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1]; │ │ │ │ │ -447 out[20][2][0] = 0.0; │ │ │ │ │ -448 out[20][2][1] = 0.0; │ │ │ │ │ -449 out[20][2][2] = 0.0; │ │ │ │ │ -450 │ │ │ │ │ -451 out[21][0][0] = 0.0; │ │ │ │ │ -452 out[21][0][1] = 0.0; │ │ │ │ │ -453 out[21][0][2] = 0.0; │ │ │ │ │ -454 out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in │ │ │ │ │ -[1]*in[1]*in[2]; │ │ │ │ │ -455 out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + │ │ │ │ │ -54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -456 out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in │ │ │ │ │ -[0]*in[1]*in[1]; │ │ │ │ │ -457 out[21][2][0] = 0.0; │ │ │ │ │ -458 out[21][2][1] = 0.0; │ │ │ │ │ -459 out[21][2][2] = 0.0; │ │ │ │ │ -460 │ │ │ │ │ -461 out[22][0][0] = 0.0; │ │ │ │ │ -462 out[22][0][1] = 0.0; │ │ │ │ │ -463 out[22][0][2] = 0.0; │ │ │ │ │ -464 out[22][1][0] = 0.0; │ │ │ │ │ -465 out[22][1][1] = 0.0; │ │ │ │ │ -466 out[22][1][2] = 0.0; │ │ │ │ │ -467 out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - │ │ │ │ │ -54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2]; │ │ │ │ │ -468 out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - │ │ │ │ │ -54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2]; │ │ │ │ │ -469 out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + │ │ │ │ │ -54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -470 │ │ │ │ │ -471 out[23][0][0] = 0.0; │ │ │ │ │ -472 out[23][0][1] = 0.0; │ │ │ │ │ -473 out[23][0][2] = 0.0; │ │ │ │ │ -474 out[23][1][0] = 0.0; │ │ │ │ │ -475 out[23][1][1] = 0.0; │ │ │ │ │ -476 out[23][1][2] = 0.0; │ │ │ │ │ -477 out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in │ │ │ │ │ -[1]*in[2]*in[2]; │ │ │ │ │ -478 out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in │ │ │ │ │ -[0]*in[2]*in[2]; │ │ │ │ │ -479 out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + │ │ │ │ │ -54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ -480 │ │ │ │ │ -481 out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - │ │ │ │ │ -192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ -482 out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - │ │ │ │ │ -216.0*in[0]*in[0]*in[2]; │ │ │ │ │ -483 out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - │ │ │ │ │ -216.0*in[0]*in[0]*in[1]; │ │ │ │ │ -484 out[24][1][0] = 0.0; │ │ │ │ │ -485 out[24][1][1] = 0.0; │ │ │ │ │ -486 out[24][1][2] = 0.0; │ │ │ │ │ -487 out[24][2][0] = 0.0; │ │ │ │ │ -488 out[24][2][1] = 0.0; │ │ │ │ │ -489 out[24][2][2] = 0.0; │ │ │ │ │ -490 │ │ │ │ │ -491 out[25][0][0] = 0.0; │ │ │ │ │ -492 out[25][0][1] = 0.0; │ │ │ │ │ -493 out[25][0][2] = 0.0; │ │ │ │ │ -494 out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - │ │ │ │ │ -216.0*in[1]*in[1]*in[2]; │ │ │ │ │ -495 out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - │ │ │ │ │ -192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ -496 out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - │ │ │ │ │ -216.0*in[0]*in[1]*in[1]; │ │ │ │ │ -497 out[25][2][0] = 0.0; │ │ │ │ │ -498 out[25][2][1] = 0.0; │ │ │ │ │ -499 out[25][2][2] = 0.0; │ │ │ │ │ -500 │ │ │ │ │ -501 out[26][0][0] = 0.0; │ │ │ │ │ -502 out[26][0][1] = 0.0; │ │ │ │ │ -503 out[26][0][2] = 0.0; │ │ │ │ │ -504 out[26][1][0] = 0.0; │ │ │ │ │ -505 out[26][1][1] = 0.0; │ │ │ │ │ -506 out[26][1][2] = 0.0; │ │ │ │ │ -507 out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - │ │ │ │ │ -216.0*in[1]*in[2]*in[2]; │ │ │ │ │ -508 out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - │ │ │ │ │ -216.0*in[0]*in[2]*in[2]; │ │ │ │ │ -509 out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - │ │ │ │ │ -192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ -510 │ │ │ │ │ -511 out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + │ │ │ │ │ -288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -512 out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + │ │ │ │ │ -432.0*in[0]*in[0]*in[2]; │ │ │ │ │ -513 out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + │ │ │ │ │ -432.0*in[0]*in[0]*in[1]; │ │ │ │ │ -514 out[27][1][0] = 0.0; │ │ │ │ │ -515 out[27][1][1] = 0.0; │ │ │ │ │ -516 out[27][1][2] = 0.0; │ │ │ │ │ -517 out[27][2][0] = 0.0; │ │ │ │ │ -518 out[27][2][1] = 0.0; │ │ │ │ │ -519 out[27][2][2] = 0.0; │ │ │ │ │ -520 │ │ │ │ │ -521 out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + │ │ │ │ │ -288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -522 out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + │ │ │ │ │ -432.0*in[0]*in[0]*in[2]; │ │ │ │ │ -523 out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + │ │ │ │ │ -432.0*in[0]*in[0]*in[1]; │ │ │ │ │ -524 out[28][1][0] = 0.0; │ │ │ │ │ -525 out[28][1][1] = 0.0; │ │ │ │ │ -526 out[28][1][2] = 0.0; │ │ │ │ │ -527 out[28][2][0] = 0.0; │ │ │ │ │ -528 out[28][2][1] = 0.0; │ │ │ │ │ -529 out[28][2][2] = 0.0; │ │ │ │ │ -530 │ │ │ │ │ -531 out[29][0][0] = 0.0; │ │ │ │ │ -532 out[29][0][1] = 0.0; │ │ │ │ │ -533 out[29][0][2] = 0.0; │ │ │ │ │ -534 out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + │ │ │ │ │ -432.0*in[1]*in[1]*in[2]; │ │ │ │ │ -535 out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + │ │ │ │ │ -288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -536 out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + │ │ │ │ │ -432.0*in[0]*in[1]*in[1]; │ │ │ │ │ -537 out[29][2][0] = 0.0; │ │ │ │ │ -538 out[29][2][1] = 0.0; │ │ │ │ │ -539 out[29][2][2] = 0.0; │ │ │ │ │ -540 │ │ │ │ │ -541 out[30][0][0] = 0.0; │ │ │ │ │ -542 out[30][0][1] = 0.0; │ │ │ │ │ -543 out[30][0][2] = 0.0; │ │ │ │ │ -544 out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + │ │ │ │ │ -432.0*in[1]*in[1]*in[2]; │ │ │ │ │ -545 out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + │ │ │ │ │ -288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -546 out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + │ │ │ │ │ -432.0*in[0]*in[1]*in[1]; │ │ │ │ │ -547 out[30][2][0] = 0.0; │ │ │ │ │ -548 out[30][2][1] = 0.0; │ │ │ │ │ -549 out[30][2][2] = 0.0; │ │ │ │ │ -550 │ │ │ │ │ -551 out[31][0][0] = 0.0; │ │ │ │ │ -552 out[31][0][1] = 0.0; │ │ │ │ │ -553 out[31][0][2] = 0.0; │ │ │ │ │ -554 out[31][1][0] = 0.0; │ │ │ │ │ -555 out[31][1][1] = 0.0; │ │ │ │ │ -556 out[31][1][2] = 0.0; │ │ │ │ │ -557 out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + │ │ │ │ │ -432.0*in[1]*in[2]*in[2]; │ │ │ │ │ -558 out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + │ │ │ │ │ -432.0*in[0]*in[2]*in[2]; │ │ │ │ │ -559 out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + │ │ │ │ │ -288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -560 │ │ │ │ │ -561 out[32][0][0] = 0.0; │ │ │ │ │ -562 out[32][0][1] = 0.0; │ │ │ │ │ -563 out[32][0][2] = 0.0; │ │ │ │ │ -564 out[32][1][0] = 0.0; │ │ │ │ │ -565 out[32][1][1] = 0.0; │ │ │ │ │ -566 out[32][1][2] = 0.0; │ │ │ │ │ -567 out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + │ │ │ │ │ -432.0*in[1]*in[2]*in[2]; │ │ │ │ │ -568 out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + │ │ │ │ │ -432.0*in[0]*in[2]*in[2]; │ │ │ │ │ -569 out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + │ │ │ │ │ -288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ -570 │ │ │ │ │ -571 out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - │ │ │ │ │ -432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ -572 out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - │ │ │ │ │ -864.0*in[0]*in[0]*in[2]; │ │ │ │ │ -573 out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - │ │ │ │ │ -864.0*in[0]*in[0]*in[1]; │ │ │ │ │ -574 out[33][1][0] = 0.0; │ │ │ │ │ -575 out[33][1][1] = 0.0; │ │ │ │ │ -576 out[33][1][2] = 0.0; │ │ │ │ │ -577 out[33][2][0] = 0.0; │ │ │ │ │ -578 out[33][2][1] = 0.0; │ │ │ │ │ -579 out[33][2][2] = 0.0; │ │ │ │ │ -580 │ │ │ │ │ -581 out[34][0][0] = 0.0; │ │ │ │ │ -582 out[34][0][1] = 0.0; │ │ │ │ │ -583 out[34][0][2] = 0.0; │ │ │ │ │ -584 out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - │ │ │ │ │ -864.0*in[1]*in[1]*in[2]; │ │ │ │ │ -585 out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - │ │ │ │ │ -432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ -586 out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - │ │ │ │ │ -864.0*in[0]*in[1]*in[1]; │ │ │ │ │ -587 out[34][2][0] = 0.0; │ │ │ │ │ -588 out[34][2][1] = 0.0; │ │ │ │ │ -589 out[34][2][2] = 0.0; │ │ │ │ │ -590 │ │ │ │ │ -591 out[35][0][0] = 0.0; │ │ │ │ │ -592 out[35][0][1] = 0.0; │ │ │ │ │ -593 out[35][0][2] = 0.0; │ │ │ │ │ -594 out[35][1][0] = 0.0; │ │ │ │ │ -595 out[35][1][1] = 0.0; │ │ │ │ │ -596 out[35][1][2] = 0.0; │ │ │ │ │ -597 out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - │ │ │ │ │ -864.0*in[1]*in[2]*in[2]; │ │ │ │ │ -598 out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - │ │ │ │ │ -864.0*in[0]*in[2]*in[2]; │ │ │ │ │ -599 out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - │ │ │ │ │ -432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ -600 } │ │ │ │ │ -601 │ │ │ │ │ -_6_0_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -604 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -605 std::vector& out) const // return value │ │ │ │ │ -606 { │ │ │ │ │ -607 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -608 if (totalOrder == 0) { │ │ │ │ │ -609 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -610 } else { │ │ │ │ │ -611 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -612 } │ │ │ │ │ -613 } │ │ │ │ │ -614 │ │ │ │ │ -_6_1_6 unsigned int _o_r_d_e_r () const │ │ │ │ │ -617 { │ │ │ │ │ -618 return 3; │ │ │ │ │ -619 } │ │ │ │ │ -620 │ │ │ │ │ -621 private: │ │ │ │ │ -622 R sign0, sign1, sign2, sign3, sign4, sign5; │ │ │ │ │ -623 }; │ │ │ │ │ -624} │ │ │ │ │ -625#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ +36 { │ │ │ │ │ +37 return 5; │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +42 { │ │ │ │ │ +43 return li[i]; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector li; │ │ │ │ │ +48 }; │ │ │ │ │ +49} │ │ │ │ │ +50#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:603 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT1Cube3DLocalBasis(unsigned int s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:236 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:616 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on pyramids. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT0PyramidLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:35 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2d.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube2d.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas1cube2d/raviartthomas1cube2dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas1cube2d/raviartthomas1cube2dlocalinterpolation.hh"
│ │ │ │ -#include "raviartthomas1cube2d/raviartthomas1cube2dlocalcoefficients.hh"
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube2DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on quadrilaterals. More...
class  Dune::RT0PyramidLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference pyramid. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +raviartthomas0pyramidlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00248_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube2d.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,148 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube2d.hh
│ │ │ │ +
raviartthomas0pyramidlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │ -
17
│ │ │ │
26 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
28 {
│ │ │ │
29
│ │ │ │
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 basis(s),
│ │ │ │ -
47 interpolation(s)
│ │ │ │ -
48 {}
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
51 {
│ │ │ │ -
52 return basis;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ -
57 return coefficients;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
61 {
│ │ │ │ -
62 return interpolation;
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ -
66 unsigned int size () const
│ │ │ │ -
67 {
│ │ │ │ -
68 return basis.size();
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ -
71 static constexpr GeometryType type ()
│ │ │ │ -
72 {
│ │ │ │ -
73 return GeometryTypes::quadrilateral;
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ +
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
39 RT0PyramidLocalBasis (std::bitset<5> s = 0)
│ │ │ │ +
40 {
│ │ │ │ +
41 for (size_t i=0; i<size(); i++)
│ │ │ │ +
42 sign[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 unsigned int size () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return 5;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
57 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
58 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
59 {
│ │ │ │ +
60 out.resize(5);
│ │ │ │ +
61 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
62 out[i] = {0.0,0.0,0.0};
│ │ │ │ +
63
│ │ │ │ +
64 out[0][0] = 1.5*in[0];
│ │ │ │ +
65 out[0][1] = 1.5*in[1];
│ │ │ │ +
66 out[0][2] = -1.0;
│ │ │ │ +
67
│ │ │ │ +
68 out[1][0] = -2.0 + 3.0*in[0];
│ │ │ │ +
69
│ │ │ │ +
70 out[2][0] = 3.0*in[0];
│ │ │ │ +
71
│ │ │ │ +
72 out[3][1] = -2.0 + 3.0*in[1];
│ │ │ │ +
73
│ │ │ │ +
74 out[4][1] = 3.0*in[1];
│ │ │ │
75
│ │ │ │ -
76 private:
│ │ │ │ - │ │ │ │ -
78 RT1Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81}
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
76 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
77 out[i] *= sign[i];
│ │ │ │ +
78
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
│ │ │ │ +
87 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
88 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
89 {
│ │ │ │ +
90 out.resize(5);
│ │ │ │ +
91
│ │ │ │ +
92 for(int i=0; i<size(); i++)
│ │ │ │ +
93 for(int j=0; j<3; j++)
│ │ │ │ +
94 out[i][j] = {0.0, 0.0, 0.0};
│ │ │ │ +
95
│ │ │ │ +
96 out[0][0][0] = sign[0]*(1.5);
│ │ │ │ +
97 out[0][1][1] = sign[0]*(1.5);
│ │ │ │ +
98
│ │ │ │ +
99 out[1][0][0] = sign[1]*(3.0);
│ │ │ │ +
100
│ │ │ │ +
101 out[2][0][0] = sign[2]*(3.0);
│ │ │ │ +
102
│ │ │ │ +
103 out[3][1][1] = sign[3]*(3.0);
│ │ │ │ +
104
│ │ │ │ +
105 out[4][1][1] = sign[4]*(3.0);
│ │ │ │ +
106 }
│ │ │ │ +
│ │ │ │ +
107
│ │ │ │ +
│ │ │ │ +
109 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
110 const typename Traits::DomainType& in, // position
│ │ │ │ +
111 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
112 {
│ │ │ │ +
113 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
114 if (totalOrder == 0) {
│ │ │ │ +
115 evaluateFunction(in, out);
│ │ │ │ +
116 } else {
│ │ │ │ +
117 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
118 }
│ │ │ │ +
119 }
│ │ │ │ +
│ │ │ │ +
120
│ │ │ │ +
│ │ │ │ +
122 unsigned int order () const
│ │ │ │ +
123 {
│ │ │ │ +
124 return 1;
│ │ │ │ +
125 }
│ │ │ │ +
│ │ │ │ +
126
│ │ │ │ +
127 private:
│ │ │ │ +
128 std::array<R,5> sign;
│ │ │ │ +
129 };
│ │ │ │ +
│ │ │ │ +
130}
│ │ │ │ +
131#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on quadrilaterals.
Definition raviartthomas1cube2d.hh:28
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas1cube2d.hh:71
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas1cube2d.hh:55
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas1cube2d.hh:60
│ │ │ │ -
LocalFiniteElementTraits< RT1Cube2DLocalBasis< D, R >, RT1Cube2DLocalCoefficients, RT1Cube2DLocalInterpolation< RT1Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas1cube2d.hh:34
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas1cube2d.hh:66
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas1cube2d.hh:50
│ │ │ │ -
RT1Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas1cube2d.hh:45
│ │ │ │ -
RT1Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas1cube2d.hh:37
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube2dlocalcoefficients.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas1cube2dlocalinterpolation.hh:26
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference pyramid.
Definition raviartthomas0pyramidlocalbasis.hh:28
│ │ │ │ +
RT0PyramidLocalBasis(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramidlocalbasis.hh:39
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:57
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:87
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0pyramidlocalbasis.hh:32
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:122
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas0pyramidlocalbasis.hh:46
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0pyramidlocalbasis.hh:109
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,159 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas1cube2d.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ +raviartthomas0pyramidlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ -17 │ │ │ │ │ 26 template │ │ │ │ │ -_2_7 class _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +_2_7 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ 28 { │ │ │ │ │ 29 │ │ │ │ │ 30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -32 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -33 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_4 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -_3_7 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -38 {} │ │ │ │ │ -39 │ │ │ │ │ -_4_5 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -46 basis(s), │ │ │ │ │ -47 interpolation(s) │ │ │ │ │ -48 {} │ │ │ │ │ -49 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return basis; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return coefficients; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return interpolation; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ -67 { │ │ │ │ │ -68 return basis.size(); │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -72 { │ │ │ │ │ -73 return GeometryTypes::quadrilateral; │ │ │ │ │ -74 } │ │ │ │ │ +31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s (std::bitset<5> s = 0) │ │ │ │ │ +40 { │ │ │ │ │ +41 for (size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +42 sign[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_6 unsigned int _s_i_z_e () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return 5; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_7 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +58 std::vector& out) const │ │ │ │ │ +59 { │ │ │ │ │ +60 out.resize(5); │ │ │ │ │ +61 for (std::size_t i=0; i basis; │ │ │ │ │ -78 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -79 _R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -80 }; │ │ │ │ │ -81} │ │ │ │ │ -82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +76 for (std::size_t i=0; i& out) const │ │ │ │ │ +89 { │ │ │ │ │ +90 out.resize(5); │ │ │ │ │ +91 │ │ │ │ │ +92 for(int i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +93 for(int j=0; j<3; j++) │ │ │ │ │ +94 out[i][j] = {0.0, 0.0, 0.0}; │ │ │ │ │ +95 │ │ │ │ │ +96 out[0][0][0] = sign[0]*(1.5); │ │ │ │ │ +97 out[0][1][1] = sign[0]*(1.5); │ │ │ │ │ +98 │ │ │ │ │ +99 out[1][0][0] = sign[1]*(3.0); │ │ │ │ │ +100 │ │ │ │ │ +101 out[2][0][0] = sign[2]*(3.0); │ │ │ │ │ +102 │ │ │ │ │ +103 out[3][1][1] = sign[3]*(3.0); │ │ │ │ │ +104 │ │ │ │ │ +105 out[4][1][1] = sign[4]*(3.0); │ │ │ │ │ +106 } │ │ │ │ │ +107 │ │ │ │ │ +_1_0_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +110 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +111 std::vector& out) const // return value │ │ │ │ │ +112 { │ │ │ │ │ +113 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +114 if (totalOrder == 0) { │ │ │ │ │ +115 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +116 } else { │ │ │ │ │ +117 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +118 } │ │ │ │ │ +119 } │ │ │ │ │ +120 │ │ │ │ │ +_1_2_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ +123 { │ │ │ │ │ +124 return 1; │ │ │ │ │ +125 } │ │ │ │ │ +126 │ │ │ │ │ +127 private: │ │ │ │ │ +128 std::array sign; │ │ │ │ │ +129 }; │ │ │ │ │ +130} │ │ │ │ │ +131#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT1Cube2DLocalBasis< D, R >, │ │ │ │ │ -RT1Cube2DLocalCoefficients, RT1Cube2DLocalInterpolation< RT1Cube2DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT0PyramidLocalBasis(std::bitset< 5 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:122 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT1Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT1Cube2DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2dlocalinterpolation.hh:26 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:109 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,32 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalbasis.hh File Reference
│ │ │ │ +
raviartthomas0pyramidlocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT4Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::RT0PyramidLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas4cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas0pyramidlocalinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00251_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas0pyramidlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,814 +70,97 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalbasis.hh
│ │ │ │ +
raviartthomas0pyramidlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <bitset>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include "../../common/localbasis.hh"
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
33 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
20 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 {
│ │ │ │ +
23
│ │ │ │ +
24 public:
│ │ │ │ +
25
│ │ │ │ +
│ │ │ │ +
31 RT0PyramidLocalInterpolation (std::bitset<5> s = 0)
│ │ │ │ +
32 {
│ │ │ │ +
33 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │
34
│ │ │ │ -
│ │ │ │ -
40 RT4Cube2DLocalBasis (std::bitset<4> s = 0)
│ │ │ │ -
41 {
│ │ │ │ -
42 sign0 = (s[0]) ? -1.0 : 1.0;
│ │ │ │ -
43 sign1 = (s[1]) ? -1.0 : 1.0;
│ │ │ │ -
44 sign2 = (s[2]) ? -1.0 : 1.0;
│ │ │ │ -
45 sign3 = (s[3]) ? -1.0 : 1.0;
│ │ │ │ -
46 }
│ │ │ │ +
35 for (size_t i=0; i<5; i++)
│ │ │ │ +
36 sign[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
37
│ │ │ │ +
38 Scalar r = 1/std::sqrt(2);
│ │ │ │ +
39
│ │ │ │ +
40 n[0] = { 0.0, 0.0, -1.0};
│ │ │ │ +
41 n[1] = {-1.0, 0.0, 0.0};
│ │ │ │ +
42 n[2] = { r, 0.0, r};
│ │ │ │ +
43 n[3] = { 0.0, -1.0, 0.0};
│ │ │ │ +
44 n[4] = { 0.0, r, r};
│ │ │ │ +
45
│ │ │ │ +
46 c[0] = 1.0;
│ │ │ │ +
47 c[1] = 1/2.0;
│ │ │ │ +
48 c[2] = 1/2.0 * std::sqrt(2);
│ │ │ │ +
49 c[3] = 1/2.0;
│ │ │ │ +
50 c[4] = 1/2.0 * std::sqrt(2);
│ │ │ │ +
51
│ │ │ │ +
52 m[0] = { 0.5, 0.5, 0.0};
│ │ │ │ +
53 m[1] = { 0.0, 1/3.0, 1/3.0};
│ │ │ │ +
54 m[2] = { 2/3.0, 1/3.0, 1/3.0};
│ │ │ │ +
55 m[3] = { 1/3.0, 0.0, 1/3.0};
│ │ │ │ +
56 m[4] = { 1/3.0, 2/3.0, 1/3.0};
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
67 template<class F, class C>
│ │ │ │ +
│ │ │ │ +
68 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
69 {
│ │ │ │ +
70 out.resize(5);
│ │ │ │ +
71 for(int i=0; i<5; i++)
│ │ │ │ +
72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i];
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ +
76 // Facet orientations
│ │ │ │ +
77 std::array<typename LB::Traits::RangeFieldType, 5> sign;
│ │ │ │ +
78 // Facet area
│ │ │ │ +
79 std::array<typename LB::Traits::RangeFieldType, 5> c;
│ │ │ │ +
80
│ │ │ │ +
81 // Facet normals
│ │ │ │ +
82 std::array<typename LB::Traits::DomainType, 5> n;
│ │ │ │ +
83 // Facet midpoints
│ │ │ │ +
84 std::array<typename LB::Traits::DomainType, 5> m;
│ │ │ │ +
85 };
│ │ │ │
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 unsigned int size () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return 60;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
60 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
61 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
62 {
│ │ │ │ -
63 out.resize(60);
│ │ │ │ -
64
│ │ │ │ -
65 auto const& x = in[0], y = in[1];
│ │ │ │ -
66
│ │ │ │ -
67 const auto l1_x = 2*x - 1;
│ │ │ │ -
68 const auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ -
69 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
70 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ -
71 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
72 const auto l1_y = 2*y - 1;
│ │ │ │ -
73 const auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ -
74 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
75 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ -
76 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
77
│ │ │ │ -
78 out[0][0]=sign0*(0.5*(-l4_x)+0.5*l5_x);
│ │ │ │ -
79 out[0][1]=0.0;
│ │ │ │ -
80 out[1][0]=-(1.5)*l4_x*l1_y+1.5*l5_x*l1_y;
│ │ │ │ -
81 out[1][1]=0.0;
│ │ │ │ -
82 out[2][0]=sign0*(-(2.5)*l4_x*l2_y+2.5*l5_x*l2_y);
│ │ │ │ -
83 out[2][1]=0.0;
│ │ │ │ -
84 out[3][0]=-(3.5)*l4_x*l3_y+3.5*l5_x*l3_y;
│ │ │ │ -
85 out[3][1]=0.0;
│ │ │ │ -
86 out[4][0]=sign0*(-(4.5)*l4_x*l4_y+4.5*l5_x*l4_y);
│ │ │ │ -
87 out[4][1]=0.0;
│ │ │ │ -
88
│ │ │ │ -
89 out[5][0]=sign1*(0.5*l4_x+0.5*l5_x);
│ │ │ │ -
90 out[5][1]=0.0;
│ │ │ │ -
91 out[6][0]=-(1.5)*l4_x*l1_y-1.5*l5_x*l1_y;
│ │ │ │ -
92 out[6][1]=0.0;
│ │ │ │ -
93 out[7][0]=sign1*(2.5*l4_x*l2_y+2.5*l5_x*l2_y);
│ │ │ │ -
94 out[7][1]=0.0;
│ │ │ │ -
95 out[8][0]=-(3.5)*l4_x*l3_y-3.5*l5_x*l3_y;
│ │ │ │ -
96 out[8][1]=0.0;
│ │ │ │ -
97 out[9][0]=sign1*(4.5*l4_x*l4_y+4.5*l5_x*l4_y);
│ │ │ │ -
98 out[9][1]=0.0;
│ │ │ │ -
99
│ │ │ │ -
100 out[10][0]=0.0;
│ │ │ │ -
101 out[10][1]=sign2*(0.5*(-l4_y)+0.5*l5_y);
│ │ │ │ -
102 out[11][0]=0.0;
│ │ │ │ -
103 out[11][1]=1.5*l1_x*l4_y-1.5*l1_x*l5_y;
│ │ │ │ -
104 out[12][0]=0.0;
│ │ │ │ -
105 out[12][1]=sign2*(-(2.5)*l2_x*l4_y+2.5*l2_x*l5_y);
│ │ │ │ -
106 out[13][0]=0.0;
│ │ │ │ -
107 out[13][1]=3.5*l3_x*l4_y-3.5*l3_x*l5_y;
│ │ │ │ -
108 out[14][0]=0.0;
│ │ │ │ -
109 out[14][1]=sign2*(-(4.5)*l4_x*l4_y+4.5*l4_x*l5_y);
│ │ │ │ -
110
│ │ │ │ -
111 out[15][0]=0.0;
│ │ │ │ -
112 out[15][1]=sign3*(0.5*l4_y+0.5*l5_y);
│ │ │ │ -
113 out[16][0]=0.0;
│ │ │ │ -
114 out[16][1]=1.5*l1_x*l4_y+1.5*l1_x*l5_y;
│ │ │ │ -
115 out[17][0]=0.0;
│ │ │ │ -
116 out[17][1]=sign3*(2.5*l2_x*l4_y+2.5*l2_x*l5_y);
│ │ │ │ -
117 out[18][0]=0.0;
│ │ │ │ -
118 out[18][1]=3.5*l3_x*l4_y+3.5*l3_x*l5_y;
│ │ │ │ -
119 out[19][0]=0.0;
│ │ │ │ -
120 out[19][1]=sign3*(4.5*l4_x*l4_y+4.5*l4_x*l5_y);
│ │ │ │ -
121
│ │ │ │ -
122 out[20][0]=1.0-l4_x;
│ │ │ │ -
123 out[20][1]=0.0;
│ │ │ │ -
124 out[21][0]=3.0*l1_y-3.0*l4_x*l1_y;
│ │ │ │ -
125 out[21][1]=0.0;
│ │ │ │ -
126 out[22][0]=5.0*l2_y-5.0*l4_x*l2_y;
│ │ │ │ -
127 out[22][1]=0.0;
│ │ │ │ -
128 out[23][0]=7.0*l3_y-7.0*l4_x*l3_y;
│ │ │ │ -
129 out[23][1]=0.0;
│ │ │ │ -
130 out[24][0]=9.0*l4_y-9.0*l4_x*l4_y;
│ │ │ │ -
131 out[24][1]=0.0;
│ │ │ │ -
132 out[25][0]=3.0*l1_x-3.0*l5_x;
│ │ │ │ -
133 out[25][1]=0.0;
│ │ │ │ -
134 out[26][0]=9.0*l1_x*l1_y-9.0*l5_x*l1_y;
│ │ │ │ -
135 out[26][1]=0.0;
│ │ │ │ -
136 out[27][0]=15.0*l1_x*l2_y-15.0*l5_x*l2_y;
│ │ │ │ -
137 out[27][1]=0.0;
│ │ │ │ -
138 out[28][0]=21.0*l1_x*l3_y-21.0*l5_x*l3_y;
│ │ │ │ -
139 out[28][1]=0.0;
│ │ │ │ -
140 out[29][0]=27.0*l1_x*l4_y-27.0*l5_x*l4_y;
│ │ │ │ -
141 out[29][1]=0.0;
│ │ │ │ -
142 out[30][0]=5.0*l2_x-5.0*l4_x;
│ │ │ │ -
143 out[30][1]=0.0;
│ │ │ │ -
144 out[31][0]=15.0*l2_x*l1_y-15.0*l4_x*l1_y;
│ │ │ │ -
145 out[31][1]=0.0;
│ │ │ │ -
146 out[32][0]=25.0*l2_x*l2_y-25.0*l4_x*l2_y;
│ │ │ │ -
147 out[32][1]=0.0;
│ │ │ │ -
148 out[33][0]=35.0*l2_x*l3_y-35.0*l4_x*l3_y;
│ │ │ │ -
149 out[33][1]=0.0;
│ │ │ │ -
150 out[34][0]=45.0*l2_x*l4_y-45.0*l4_x*l4_y;
│ │ │ │ -
151 out[34][1]=0.0;
│ │ │ │ -
152 out[35][0]=7.0*l3_x-7.0*l5_x;
│ │ │ │ -
153 out[35][1]=0.0;
│ │ │ │ -
154 out[36][0]=21.0*l3_x*l1_y-21.0*l5_x*l1_y;
│ │ │ │ -
155 out[36][1]=0.0;
│ │ │ │ -
156 out[37][0]=35.0*l3_x*l2_y-35.0*l5_x*l2_y;
│ │ │ │ -
157 out[37][1]=0.0;
│ │ │ │ -
158 out[38][0]=49.0*l3_x*l3_y-49.0*l5_x*l3_y;
│ │ │ │ -
159 out[38][1]=0.0;
│ │ │ │ -
160 out[39][0]=63.0*l3_x*l4_y-63.0*l5_x*l4_y;
│ │ │ │ -
161 out[39][1]=0.0;
│ │ │ │ -
162 out[40][0]=0.0;
│ │ │ │ -
163 out[40][1]=1.0-l4_y;
│ │ │ │ -
164 out[41][0]=0.0;
│ │ │ │ -
165 out[41][1]=3.0*l1_y-3.0*l5_y;
│ │ │ │ -
166 out[42][0]=0.0;
│ │ │ │ -
167 out[42][1]=5.0*l2_y-5.0*l4_y;
│ │ │ │ -
168 out[43][0]=0.0;
│ │ │ │ -
169 out[43][1]=7.0*l3_y-7.0*l5_y;
│ │ │ │ -
170 out[44][0]=0.0;
│ │ │ │ -
171 out[44][1]=3.0*l1_x-3.0*l1_x*l4_y;
│ │ │ │ -
172 out[45][0]=0.0;
│ │ │ │ -
173 out[45][1]=9.0*l1_x*l1_y-9.0*l1_x*l5_y;
│ │ │ │ -
174 out[46][0]=0.0;
│ │ │ │ -
175 out[46][1]=15.0*l1_x*l2_y-15.0*l1_x*l4_y;
│ │ │ │ -
176 out[47][0]=0.0;
│ │ │ │ -
177 out[47][1]=21.0*l1_x*l3_y-21.0*l1_x*l5_y;
│ │ │ │ -
178 out[48][0]=0.0;
│ │ │ │ -
179 out[48][1]=5.0*l2_x-5.0*l2_x*l4_y;
│ │ │ │ -
180 out[49][0]=0.0;
│ │ │ │ -
181 out[49][1]=15.0*l2_x*l1_y-15.0*l2_x*l5_y;
│ │ │ │ -
182 out[50][0]=0.0;
│ │ │ │ -
183 out[50][1]=25.0*l2_x*l2_y-25.0*l2_x*l4_y;
│ │ │ │ -
184 out[51][0]=0.0;
│ │ │ │ -
185 out[51][1]=35.0*l2_x*l3_y-35.0*l2_x*l5_y;
│ │ │ │ -
186 out[52][0]=0.0;
│ │ │ │ -
187 out[52][1]=7.0*l3_x-7.0*l3_x*l4_y;
│ │ │ │ -
188 out[53][0]=0.0;
│ │ │ │ -
189 out[53][1]=21.0*l3_x*l1_y-21.0*l3_x*l5_y;
│ │ │ │ -
190 out[54][0]=0.0;
│ │ │ │ -
191 out[54][1]=35.0*l3_x*l2_y-35.0*l3_x*l4_y;
│ │ │ │ -
192 out[55][0]=0.0;
│ │ │ │ -
193 out[55][1]=49.0*l3_x*l3_y-49.0*l3_x*l5_y;
│ │ │ │ -
194 out[56][0]=0.0;
│ │ │ │ -
195 out[56][1]=9.0*l4_x-9.0*l4_x*l4_y;
│ │ │ │ -
196 out[57][0]=0.0;
│ │ │ │ -
197 out[57][1]=27.0*l4_x*l1_y-27.0*l4_x*l5_y;
│ │ │ │ -
198 out[58][0]=0.0;
│ │ │ │ -
199 out[58][1]=45.0*l4_x*l2_y-45.0*l4_x*l4_y;
│ │ │ │ -
200 out[59][0]=0.0;
│ │ │ │ -
201 out[59][1]=63.0*l4_x*l3_y-63.0*l4_x*l5_y;
│ │ │ │ -
202 }
│ │ │ │ -
│ │ │ │ -
203
│ │ │ │ -
│ │ │ │ -
210 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
211 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
212 {
│ │ │ │ -
213 out.resize(60);
│ │ │ │ -
214 auto const& x = in[0], y = in[1];
│ │ │ │ -
215
│ │ │ │ -
216 const auto l1_x = 2*x - 1;
│ │ │ │ -
217 const auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ -
218 const auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
219 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ -
220 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
221 const auto l1_y = 2*y - 1;
│ │ │ │ -
222 const auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ -
223 const auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
224 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ -
225 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
226
│ │ │ │ -
227 const auto dxl1_x = 2.0;
│ │ │ │ -
228 const auto dxl2_x = 12*x - 6;
│ │ │ │ -
229 const auto dxl3_x = x*(60*x - 60) + 12;
│ │ │ │ -
230 const auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
│ │ │ │ -
231 const auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
│ │ │ │ -
232 const auto dyl1_y = 2.0;
│ │ │ │ -
233 const auto dyl2_y = 12*y - 6;
│ │ │ │ -
234 const auto dyl3_y = y*(60*y - 60) + 12;
│ │ │ │ -
235 const auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
│ │ │ │ -
236 const auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
│ │ │ │ -
237
│ │ │ │ -
238 // x-component
│ │ │ │ -
239 out[0][0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
│ │ │ │ -
240 out[0][1][0]=0.0;
│ │ │ │ -
241 out[1][0][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
│ │ │ │ -
242 out[1][1][0]=0.0;
│ │ │ │ -
243 out[2][0][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ -
244 out[2][1][0]=0.0;
│ │ │ │ -
245 out[3][0][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
│ │ │ │ -
246 out[3][1][0]=0.0;
│ │ │ │ -
247 out[4][0][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ -
248 out[4][1][0]=0.0;
│ │ │ │ -
249
│ │ │ │ -
250 out[5][0][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
│ │ │ │ -
251 out[5][1][0]=0.0;
│ │ │ │ -
252 out[6][0][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
│ │ │ │ -
253 out[6][1][0]=0.0;
│ │ │ │ -
254 out[7][0][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ -
255 out[7][1][0]=0.0;
│ │ │ │ -
256 out[8][0][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
│ │ │ │ -
257 out[8][1][0]=0.0;
│ │ │ │ -
258 out[9][0][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ -
259 out[9][1][0]=0.0;
│ │ │ │ -
260
│ │ │ │ -
261 out[10][0][0]=0.0;
│ │ │ │ -
262 out[10][1][0]=0.0;
│ │ │ │ -
263 out[11][0][0]=0.0;
│ │ │ │ -
264 out[11][1][0]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
│ │ │ │ -
265 out[12][0][0]=0.0;
│ │ │ │ -
266 out[12][1][0]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ -
267 out[13][0][0]=0.0;
│ │ │ │ -
268 out[13][1][0]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
│ │ │ │ -
269 out[14][0][0]=0.0;
│ │ │ │ -
270 out[14][1][0]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ -
271
│ │ │ │ -
272 out[15][0][0]=0.0;
│ │ │ │ -
273 out[15][1][0]=0.0;
│ │ │ │ -
274 out[16][0][0]=0.0;
│ │ │ │ -
275 out[16][1][0]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
│ │ │ │ -
276 out[17][0][0]=0.0;
│ │ │ │ -
277 out[17][1][0]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ -
278 out[18][0][0]=0.0;
│ │ │ │ -
279 out[18][1][0]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
│ │ │ │ -
280 out[19][0][0]=0.0;
│ │ │ │ -
281 out[19][1][0]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ -
282
│ │ │ │ -
283 out[20][0][0]=-dxl4_x;
│ │ │ │ -
284 out[20][1][0]=0.0;
│ │ │ │ -
285 out[21][0][0]=-3.0*dxl4_x*l1_y;
│ │ │ │ -
286 out[21][1][0]=0.0;
│ │ │ │ -
287 out[22][0][0]=-5.0*dxl4_x*l2_y;
│ │ │ │ -
288 out[22][1][0]=0.0;
│ │ │ │ -
289 out[23][0][0]=-7.0*dxl4_x*l3_y;
│ │ │ │ -
290 out[23][1][0]=0.0;
│ │ │ │ -
291 out[24][0][0]=-9.0*dxl4_x*l4_y;
│ │ │ │ -
292 out[24][1][0]=0.0;
│ │ │ │ -
293 out[25][0][0]=3.0*dxl1_x-3.0*dxl5_x;
│ │ │ │ -
294 out[25][1][0]=0.0;
│ │ │ │ -
295 out[26][0][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
│ │ │ │ -
296 out[26][1][0]=0.0;
│ │ │ │ -
297 out[27][0][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
│ │ │ │ -
298 out[27][1][0]=0.0;
│ │ │ │ -
299 out[28][0][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
│ │ │ │ -
300 out[28][1][0]=0.0;
│ │ │ │ -
301 out[29][0][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
│ │ │ │ -
302 out[29][1][0]=0.0;
│ │ │ │ -
303 out[30][0][0]=5.0*dxl2_x-5.0*dxl4_x;
│ │ │ │ -
304 out[30][1][0]=0.0;
│ │ │ │ -
305 out[31][0][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
│ │ │ │ -
306 out[31][1][0]=0.0;
│ │ │ │ -
307 out[32][0][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
│ │ │ │ -
308 out[32][1][0]=0.0;
│ │ │ │ -
309 out[33][0][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
│ │ │ │ -
310 out[33][1][0]=0.0;
│ │ │ │ -
311 out[34][0][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
│ │ │ │ -
312 out[34][1][0]=0.0;
│ │ │ │ -
313 out[35][0][0]=7.0*dxl3_x-7.0*dxl5_x;
│ │ │ │ -
314 out[35][1][0]=0.0;
│ │ │ │ -
315 out[36][0][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
│ │ │ │ -
316 out[36][1][0]=0.0;
│ │ │ │ -
317 out[37][0][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
│ │ │ │ -
318 out[37][1][0]=0.0;
│ │ │ │ -
319 out[38][0][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
│ │ │ │ -
320 out[38][1][0]=0.0;
│ │ │ │ -
321 out[39][0][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
│ │ │ │ -
322 out[39][1][0]=0.0;
│ │ │ │ -
323 out[40][0][0]=0.0;
│ │ │ │ -
324 out[40][1][0]=0.0;
│ │ │ │ -
325 out[41][0][0]=0.0;
│ │ │ │ -
326 out[41][1][0]=0.0;
│ │ │ │ -
327 out[42][0][0]=0.0;
│ │ │ │ -
328 out[42][1][0]=0.0;
│ │ │ │ -
329 out[43][0][0]=0.0;
│ │ │ │ -
330 out[43][1][0]=0.0;
│ │ │ │ -
331 out[44][0][0]=0.0;
│ │ │ │ -
332 out[44][1][0]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
│ │ │ │ -
333 out[45][0][0]=0.0;
│ │ │ │ -
334 out[45][1][0]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
│ │ │ │ -
335 out[46][0][0]=0.0;
│ │ │ │ -
336 out[46][1][0]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
│ │ │ │ -
337 out[47][0][0]=0.0;
│ │ │ │ -
338 out[47][1][0]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
│ │ │ │ -
339 out[48][0][0]=0.0;
│ │ │ │ -
340 out[48][1][0]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
│ │ │ │ -
341 out[49][0][0]=0.0;
│ │ │ │ -
342 out[49][1][0]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
│ │ │ │ -
343 out[50][0][0]=0.0;
│ │ │ │ -
344 out[50][1][0]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
│ │ │ │ -
345 out[51][0][0]=0.0;
│ │ │ │ -
346 out[51][1][0]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
│ │ │ │ -
347 out[52][0][0]=0.0;
│ │ │ │ -
348 out[52][1][0]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
│ │ │ │ -
349 out[53][0][0]=0.0;
│ │ │ │ -
350 out[53][1][0]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
│ │ │ │ -
351 out[54][0][0]=0.0;
│ │ │ │ -
352 out[54][1][0]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
│ │ │ │ -
353 out[55][0][0]=0.0;
│ │ │ │ -
354 out[55][1][0]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
│ │ │ │ -
355 out[56][0][0]=0.0;
│ │ │ │ -
356 out[56][1][0]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
│ │ │ │ -
357 out[57][0][0]=0.0;
│ │ │ │ -
358 out[57][1][0]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
│ │ │ │ -
359 out[58][0][0]=0.0;
│ │ │ │ -
360 out[58][1][0]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
│ │ │ │ -
361 out[59][0][0]=0.0;
│ │ │ │ -
362 out[59][1][0]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
│ │ │ │ -
363
│ │ │ │ -
364 // y-component
│ │ │ │ -
365 out[0][0][1]=0.0;
│ │ │ │ -
366 out[0][1][1]=0.0;
│ │ │ │ -
367 out[1][0][1]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
│ │ │ │ -
368 out[1][1][1]=0.0;
│ │ │ │ -
369 out[2][0][1]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ -
370 out[2][1][1]=0.0;
│ │ │ │ -
371 out[3][0][1]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
│ │ │ │ -
372 out[3][1][1]=0.0;
│ │ │ │ -
373 out[4][0][1]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ -
374 out[4][1][1]=0.0;
│ │ │ │ -
375
│ │ │ │ -
376 out[5][0][1]=0.0;
│ │ │ │ -
377 out[5][1][1]=0.0;
│ │ │ │ -
378 out[6][0][1]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
│ │ │ │ -
379 out[6][1][1]=0.0;
│ │ │ │ -
380 out[7][0][1]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ -
381 out[7][1][1]=0.0;
│ │ │ │ -
382 out[8][0][1]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
│ │ │ │ -
383 out[8][1][1]=0.0;
│ │ │ │ -
384 out[9][0][1]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ -
385 out[9][1][1]=0.0;
│ │ │ │ -
386
│ │ │ │ -
387 out[10][0][1]=0.0;
│ │ │ │ -
388 out[10][1][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
│ │ │ │ -
389 out[11][0][1]=0.0;
│ │ │ │ -
390 out[11][1][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
│ │ │ │ -
391 out[12][0][1]=0.0;
│ │ │ │ -
392 out[12][1][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ -
393 out[13][0][1]=0.0;
│ │ │ │ -
394 out[13][1][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
│ │ │ │ -
395 out[14][0][1]=0.0;
│ │ │ │ -
396 out[14][1][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ -
397
│ │ │ │ -
398 out[15][0][1]=0.0;
│ │ │ │ -
399 out[15][1][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
│ │ │ │ -
400 out[16][0][1]=0.0;
│ │ │ │ -
401 out[16][1][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
│ │ │ │ -
402 out[17][0][1]=0.0;
│ │ │ │ -
403 out[17][1][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ -
404 out[18][0][1]=0.0;
│ │ │ │ -
405 out[18][1][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
│ │ │ │ -
406 out[19][0][1]=0.0;
│ │ │ │ -
407 out[19][1][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ -
408
│ │ │ │ -
409 out[20][0][1]=0.0;
│ │ │ │ -
410 out[20][1][1]=0.0;
│ │ │ │ -
411 out[21][0][1]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
│ │ │ │ -
412 out[21][1][1]=0.0;
│ │ │ │ -
413 out[22][0][1]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
│ │ │ │ -
414 out[22][1][1]=0.0;
│ │ │ │ -
415 out[23][0][1]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
│ │ │ │ -
416 out[23][1][1]=0.0;
│ │ │ │ -
417 out[24][0][1]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
│ │ │ │ -
418 out[24][1][1]=0.0;
│ │ │ │ -
419 out[25][0][1]=0.0;
│ │ │ │ -
420 out[25][1][1]=0.0;
│ │ │ │ -
421 out[26][0][1]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
│ │ │ │ -
422 out[26][1][1]=0.0;
│ │ │ │ -
423 out[27][0][1]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
│ │ │ │ -
424 out[27][1][1]=0.0;
│ │ │ │ -
425 out[28][0][1]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
│ │ │ │ -
426 out[28][1][1]=0.0;
│ │ │ │ -
427 out[29][0][1]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
│ │ │ │ -
428 out[29][1][1]=0.0;
│ │ │ │ -
429 out[30][0][1]=0.0;
│ │ │ │ -
430 out[30][1][1]=0.0;
│ │ │ │ -
431 out[31][0][1]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
│ │ │ │ -
432 out[31][1][1]=0.0;
│ │ │ │ -
433 out[32][0][1]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
│ │ │ │ -
434 out[32][1][1]=0.0;
│ │ │ │ -
435 out[33][0][1]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
│ │ │ │ -
436 out[33][1][1]=0.0;
│ │ │ │ -
437 out[34][0][1]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
│ │ │ │ -
438 out[34][1][1]=0.0;
│ │ │ │ -
439 out[35][0][1]=0.0;
│ │ │ │ -
440 out[35][1][1]=0.0;
│ │ │ │ -
441 out[36][0][1]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
│ │ │ │ -
442 out[36][1][1]=0.0;
│ │ │ │ -
443 out[37][0][1]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
│ │ │ │ -
444 out[37][1][1]=0.0;
│ │ │ │ -
445 out[38][0][1]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
│ │ │ │ -
446 out[38][1][1]=0.0;
│ │ │ │ -
447 out[39][0][1]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
│ │ │ │ -
448 out[39][1][1]=0.0;
│ │ │ │ -
449 out[40][0][1]=0.0;
│ │ │ │ -
450 out[40][1][1]=-dyl4_y;
│ │ │ │ -
451 out[41][0][1]=0.0;
│ │ │ │ -
452 out[41][1][1]=3.0*dyl1_y-3.0*dyl5_y;
│ │ │ │ -
453 out[42][0][1]=0.0;
│ │ │ │ -
454 out[42][1][1]=5.0*dyl2_y-5.0*dyl4_y;
│ │ │ │ -
455 out[43][0][1]=0.0;
│ │ │ │ -
456 out[43][1][1]=7.0*dyl3_y-7.0*dyl5_y;
│ │ │ │ -
457 out[44][0][1]=0.0;
│ │ │ │ -
458 out[44][1][1]=-3.0*l1_x*dyl4_y;
│ │ │ │ -
459 out[45][0][1]=0.0;
│ │ │ │ -
460 out[45][1][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
│ │ │ │ -
461 out[46][0][1]=0.0;
│ │ │ │ -
462 out[46][1][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
│ │ │ │ -
463 out[47][0][1]=0.0;
│ │ │ │ -
464 out[47][1][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
│ │ │ │ -
465 out[48][0][1]=0.0;
│ │ │ │ -
466 out[48][1][1]=-5.0*l2_x*dyl4_y;
│ │ │ │ -
467 out[49][0][1]=0.0;
│ │ │ │ -
468 out[49][1][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
│ │ │ │ -
469 out[50][0][1]=0.0;
│ │ │ │ -
470 out[50][1][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
│ │ │ │ -
471 out[51][0][1]=0.0;
│ │ │ │ -
472 out[51][1][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
│ │ │ │ -
473 out[52][0][1]=0.0;
│ │ │ │ -
474 out[52][1][1]=-7.0*l3_x*dyl4_y;
│ │ │ │ -
475 out[53][0][1]=0.0;
│ │ │ │ -
476 out[53][1][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
│ │ │ │ -
477 out[54][0][1]=0.0;
│ │ │ │ -
478 out[54][1][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
│ │ │ │ -
479 out[55][0][1]=0.0;
│ │ │ │ -
480 out[55][1][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
│ │ │ │ -
481 out[56][0][1]=0.0;
│ │ │ │ -
482 out[56][1][1]=-9.0*l4_x*dyl4_y;
│ │ │ │ -
483 out[57][0][1]=0.0;
│ │ │ │ -
484 out[57][1][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
│ │ │ │ -
485 out[58][0][1]=0.0;
│ │ │ │ -
486 out[58][1][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
│ │ │ │ -
487 out[59][0][1]=0.0;
│ │ │ │ -
488 out[59][1][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
│ │ │ │ -
489 }
│ │ │ │ -
│ │ │ │ -
490
│ │ │ │ -
│ │ │ │ -
492 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
493 const typename Traits::DomainType& in, // position
│ │ │ │ -
494 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
495 {
│ │ │ │ -
496 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
497 if (totalOrder == 0) {
│ │ │ │ -
498 evaluateFunction(in, out);
│ │ │ │ -
499 } else if (totalOrder == 1) {
│ │ │ │ -
500 out.resize(size());
│ │ │ │ -
501 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
502 auto const& x = in[0], y = in[1];
│ │ │ │ -
503
│ │ │ │ -
504 auto l1_x = 2*x - 1;
│ │ │ │ -
505 auto l2_x = x*(6*x - 6) + 1;
│ │ │ │ -
506 auto l3_x = x*(x*(20*x - 30) + 12) - 1;
│ │ │ │ -
507 auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1;
│ │ │ │ -
508 auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
509 auto l1_y = 2*y - 1;
│ │ │ │ -
510 auto l2_y = y*(6*y - 6) + 1;
│ │ │ │ -
511 auto l3_y = y*(y*(20*y - 30) + 12) - 1;
│ │ │ │ -
512 auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1;
│ │ │ │ -
513 auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1;
│ │ │ │ -
514
│ │ │ │ -
515 if (direction == 0) {
│ │ │ │ -
516 auto dxl1_x = 2.0;
│ │ │ │ -
517 auto dxl2_x = 12*x - 6;
│ │ │ │ -
518 auto dxl3_x = x*(60*x - 60) + 12;
│ │ │ │ -
519 auto dxl4_x = x*(x*(280*x - 420) + 180) - 20;
│ │ │ │ -
520 auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30;
│ │ │ │ -
521
│ │ │ │ -
522 out[0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x);
│ │ │ │ -
523 out[0][1]=0.0;
│ │ │ │ -
524 out[1][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y;
│ │ │ │ -
525 out[1][1]=0.0;
│ │ │ │ -
526 out[2][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ -
527 out[2][1]=0.0;
│ │ │ │ -
528 out[3][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y;
│ │ │ │ -
529 out[3][1]=0.0;
│ │ │ │ -
530 out[4][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ -
531 out[4][1]=0.0;
│ │ │ │ -
532
│ │ │ │ -
533 out[5][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x);
│ │ │ │ -
534 out[5][1]=0.0;
│ │ │ │ -
535 out[6][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y;
│ │ │ │ -
536 out[6][1]=0.0;
│ │ │ │ -
537 out[7][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y);
│ │ │ │ -
538 out[7][1]=0.0;
│ │ │ │ -
539 out[8][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y;
│ │ │ │ -
540 out[8][1]=0.0;
│ │ │ │ -
541 out[9][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y);
│ │ │ │ -
542 out[9][1]=0.0;
│ │ │ │ -
543
│ │ │ │ -
544 out[10][0]=0.0;
│ │ │ │ -
545 out[10][1]=0.0;
│ │ │ │ -
546 out[11][0]=0.0;
│ │ │ │ -
547 out[11][1]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y;
│ │ │ │ -
548 out[12][0]=0.0;
│ │ │ │ -
549 out[12][1]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ -
550 out[13][0]=0.0;
│ │ │ │ -
551 out[13][1]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y;
│ │ │ │ -
552 out[14][0]=0.0;
│ │ │ │ -
553 out[14][1]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ -
554
│ │ │ │ -
555 out[15][0]=0.0;
│ │ │ │ -
556 out[15][1]=0.0;
│ │ │ │ -
557 out[16][0]=0.0;
│ │ │ │ -
558 out[16][1]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y;
│ │ │ │ -
559 out[17][0]=0.0;
│ │ │ │ -
560 out[17][1]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y);
│ │ │ │ -
561 out[18][0]=0.0;
│ │ │ │ -
562 out[18][1]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y;
│ │ │ │ -
563 out[19][0]=0.0;
│ │ │ │ -
564 out[19][1]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y);
│ │ │ │ -
565
│ │ │ │ -
566 out[20][0]=-dxl4_x;
│ │ │ │ -
567 out[20][1]=0.0;
│ │ │ │ -
568 out[21][0]=-3.0*dxl4_x*l1_y;
│ │ │ │ -
569 out[21][1]=0.0;
│ │ │ │ -
570 out[22][0]=-5.0*dxl4_x*l2_y;
│ │ │ │ -
571 out[22][1]=0.0;
│ │ │ │ -
572 out[23][0]=-7.0*dxl4_x*l3_y;
│ │ │ │ -
573 out[23][1]=0.0;
│ │ │ │ -
574 out[24][0]=-9.0*dxl4_x*l4_y;
│ │ │ │ -
575 out[24][1]=0.0;
│ │ │ │ -
576 out[25][0]=3.0*dxl1_x-3.0*dxl5_x;
│ │ │ │ -
577 out[25][1]=0.0;
│ │ │ │ -
578 out[26][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y;
│ │ │ │ -
579 out[26][1]=0.0;
│ │ │ │ -
580 out[27][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y;
│ │ │ │ -
581 out[27][1]=0.0;
│ │ │ │ -
582 out[28][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y;
│ │ │ │ -
583 out[28][1]=0.0;
│ │ │ │ -
584 out[29][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y;
│ │ │ │ -
585 out[29][1]=0.0;
│ │ │ │ -
586 out[30][0]=5.0*dxl2_x-5.0*dxl4_x;
│ │ │ │ -
587 out[30][1]=0.0;
│ │ │ │ -
588 out[31][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y;
│ │ │ │ -
589 out[31][1]=0.0;
│ │ │ │ -
590 out[32][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y;
│ │ │ │ -
591 out[32][1]=0.0;
│ │ │ │ -
592 out[33][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y;
│ │ │ │ -
593 out[33][1]=0.0;
│ │ │ │ -
594 out[34][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y;
│ │ │ │ -
595 out[34][1]=0.0;
│ │ │ │ -
596 out[35][0]=7.0*dxl3_x-7.0*dxl5_x;
│ │ │ │ -
597 out[35][1]=0.0;
│ │ │ │ -
598 out[36][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y;
│ │ │ │ -
599 out[36][1]=0.0;
│ │ │ │ -
600 out[37][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y;
│ │ │ │ -
601 out[37][1]=0.0;
│ │ │ │ -
602 out[38][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y;
│ │ │ │ -
603 out[38][1]=0.0;
│ │ │ │ -
604 out[39][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y;
│ │ │ │ -
605 out[39][1]=0.0;
│ │ │ │ -
606 out[40][0]=0.0;
│ │ │ │ -
607 out[40][1]=0.0;
│ │ │ │ -
608 out[41][0]=0.0;
│ │ │ │ -
609 out[41][1]=0.0;
│ │ │ │ -
610 out[42][0]=0.0;
│ │ │ │ -
611 out[42][1]=0.0;
│ │ │ │ -
612 out[43][0]=0.0;
│ │ │ │ -
613 out[43][1]=0.0;
│ │ │ │ -
614 out[44][0]=0.0;
│ │ │ │ -
615 out[44][1]=3.0*dxl1_x-3.0*dxl1_x*l4_y;
│ │ │ │ -
616 out[45][0]=0.0;
│ │ │ │ -
617 out[45][1]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y;
│ │ │ │ -
618 out[46][0]=0.0;
│ │ │ │ -
619 out[46][1]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y;
│ │ │ │ -
620 out[47][0]=0.0;
│ │ │ │ -
621 out[47][1]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y;
│ │ │ │ -
622 out[48][0]=0.0;
│ │ │ │ -
623 out[48][1]=5.0*dxl2_x-5.0*dxl2_x*l4_y;
│ │ │ │ -
624 out[49][0]=0.0;
│ │ │ │ -
625 out[49][1]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y;
│ │ │ │ -
626 out[50][0]=0.0;
│ │ │ │ -
627 out[50][1]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y;
│ │ │ │ -
628 out[51][0]=0.0;
│ │ │ │ -
629 out[51][1]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y;
│ │ │ │ -
630 out[52][0]=0.0;
│ │ │ │ -
631 out[52][1]=7.0*dxl3_x-7.0*dxl3_x*l4_y;
│ │ │ │ -
632 out[53][0]=0.0;
│ │ │ │ -
633 out[53][1]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y;
│ │ │ │ -
634 out[54][0]=0.0;
│ │ │ │ -
635 out[54][1]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y;
│ │ │ │ -
636 out[55][0]=0.0;
│ │ │ │ -
637 out[55][1]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y;
│ │ │ │ -
638 out[56][0]=0.0;
│ │ │ │ -
639 out[56][1]=9.0*dxl4_x-9.0*dxl4_x*l4_y;
│ │ │ │ -
640 out[57][0]=0.0;
│ │ │ │ -
641 out[57][1]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y;
│ │ │ │ -
642 out[58][0]=0.0;
│ │ │ │ -
643 out[58][1]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y;
│ │ │ │ -
644 out[59][0]=0.0;
│ │ │ │ -
645 out[59][1]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y;
│ │ │ │ -
646
│ │ │ │ -
647 } else if (direction == 1) {
│ │ │ │ -
648 auto dyl1_y = 2.0;
│ │ │ │ -
649 auto dyl2_y = 12*y - 6;
│ │ │ │ -
650 auto dyl3_y = y*(60*y - 60) + 12;
│ │ │ │ -
651 auto dyl4_y = y*(y*(280*y - 420) + 180) - 20;
│ │ │ │ -
652 auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30;
│ │ │ │ -
653
│ │ │ │ -
654 out[0][0]=0.0;
│ │ │ │ -
655 out[0][1]=0.0;
│ │ │ │ -
656 out[1][0]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y;
│ │ │ │ -
657 out[1][1]=0.0;
│ │ │ │ -
658 out[2][0]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ -
659 out[2][1]=0.0;
│ │ │ │ -
660 out[3][0]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y;
│ │ │ │ -
661 out[3][1]=0.0;
│ │ │ │ -
662 out[4][0]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ -
663 out[4][1]=0.0;
│ │ │ │ -
664
│ │ │ │ -
665 out[5][0]=0.0;
│ │ │ │ -
666 out[5][1]=0.0;
│ │ │ │ -
667 out[6][0]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y;
│ │ │ │ -
668 out[6][1]=0.0;
│ │ │ │ -
669 out[7][0]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y);
│ │ │ │ -
670 out[7][1]=0.0;
│ │ │ │ -
671 out[8][0]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y;
│ │ │ │ -
672 out[8][1]=0.0;
│ │ │ │ -
673 out[9][0]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y);
│ │ │ │ -
674 out[9][1]=0.0;
│ │ │ │ -
675
│ │ │ │ -
676 out[10][0]=0.0;
│ │ │ │ -
677 out[10][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y);
│ │ │ │ -
678 out[11][0]=0.0;
│ │ │ │ -
679 out[11][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y;
│ │ │ │ -
680 out[12][0]=0.0;
│ │ │ │ -
681 out[12][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ -
682 out[13][0]=0.0;
│ │ │ │ -
683 out[13][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y;
│ │ │ │ -
684 out[14][0]=0.0;
│ │ │ │ -
685 out[14][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ -
686
│ │ │ │ -
687 out[15][0]=0.0;
│ │ │ │ -
688 out[15][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y);
│ │ │ │ -
689 out[16][0]=0.0;
│ │ │ │ -
690 out[16][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y;
│ │ │ │ -
691 out[17][0]=0.0;
│ │ │ │ -
692 out[17][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y);
│ │ │ │ -
693 out[18][0]=0.0;
│ │ │ │ -
694 out[18][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y;
│ │ │ │ -
695 out[19][0]=0.0;
│ │ │ │ -
696 out[19][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y);
│ │ │ │ -
697
│ │ │ │ -
698 out[20][0]=0.0;
│ │ │ │ -
699 out[20][1]=0.0;
│ │ │ │ -
700 out[21][0]=3.0*dyl1_y-3.0*l4_x*dyl1_y;
│ │ │ │ -
701 out[21][1]=0.0;
│ │ │ │ -
702 out[22][0]=5.0*dyl2_y-5.0*l4_x*dyl2_y;
│ │ │ │ -
703 out[22][1]=0.0;
│ │ │ │ -
704 out[23][0]=7.0*dyl3_y-7.0*l4_x*dyl3_y;
│ │ │ │ -
705 out[23][1]=0.0;
│ │ │ │ -
706 out[24][0]=9.0*dyl4_y-9.0*l4_x*dyl4_y;
│ │ │ │ -
707 out[24][1]=0.0;
│ │ │ │ -
708 out[25][0]=0.0;
│ │ │ │ -
709 out[25][1]=0.0;
│ │ │ │ -
710 out[26][0]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y;
│ │ │ │ -
711 out[26][1]=0.0;
│ │ │ │ -
712 out[27][0]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y;
│ │ │ │ -
713 out[27][1]=0.0;
│ │ │ │ -
714 out[28][0]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y;
│ │ │ │ -
715 out[28][1]=0.0;
│ │ │ │ -
716 out[29][0]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y;
│ │ │ │ -
717 out[29][1]=0.0;
│ │ │ │ -
718 out[30][0]=0.0;
│ │ │ │ -
719 out[30][1]=0.0;
│ │ │ │ -
720 out[31][0]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y;
│ │ │ │ -
721 out[31][1]=0.0;
│ │ │ │ -
722 out[32][0]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y;
│ │ │ │ -
723 out[32][1]=0.0;
│ │ │ │ -
724 out[33][0]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y;
│ │ │ │ -
725 out[33][1]=0.0;
│ │ │ │ -
726 out[34][0]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y;
│ │ │ │ -
727 out[34][1]=0.0;
│ │ │ │ -
728 out[35][0]=0.0;
│ │ │ │ -
729 out[35][1]=0.0;
│ │ │ │ -
730 out[36][0]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y;
│ │ │ │ -
731 out[36][1]=0.0;
│ │ │ │ -
732 out[37][0]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y;
│ │ │ │ -
733 out[37][1]=0.0;
│ │ │ │ -
734 out[38][0]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y;
│ │ │ │ -
735 out[38][1]=0.0;
│ │ │ │ -
736 out[39][0]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y;
│ │ │ │ -
737 out[39][1]=0.0;
│ │ │ │ -
738 out[40][0]=0.0;
│ │ │ │ -
739 out[40][1]=-dyl4_y;
│ │ │ │ -
740 out[41][0]=0.0;
│ │ │ │ -
741 out[41][1]=3.0*dyl1_y-3.0*dyl5_y;
│ │ │ │ -
742 out[42][0]=0.0;
│ │ │ │ -
743 out[42][1]=5.0*dyl2_y-5.0*dyl4_y;
│ │ │ │ -
744 out[43][0]=0.0;
│ │ │ │ -
745 out[43][1]=7.0*dyl3_y-7.0*dyl5_y;
│ │ │ │ -
746 out[44][0]=0.0;
│ │ │ │ -
747 out[44][1]=-3.0*l1_x*dyl4_y;
│ │ │ │ -
748 out[45][0]=0.0;
│ │ │ │ -
749 out[45][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y;
│ │ │ │ -
750 out[46][0]=0.0;
│ │ │ │ -
751 out[46][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y;
│ │ │ │ -
752 out[47][0]=0.0;
│ │ │ │ -
753 out[47][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y;
│ │ │ │ -
754 out[48][0]=0.0;
│ │ │ │ -
755 out[48][1]=-5.0*l2_x*dyl4_y;
│ │ │ │ -
756 out[49][0]=0.0;
│ │ │ │ -
757 out[49][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y;
│ │ │ │ -
758 out[50][0]=0.0;
│ │ │ │ -
759 out[50][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y;
│ │ │ │ -
760 out[51][0]=0.0;
│ │ │ │ -
761 out[51][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y;
│ │ │ │ -
762 out[52][0]=0.0;
│ │ │ │ -
763 out[52][1]=-7.0*l3_x*dyl4_y;
│ │ │ │ -
764 out[53][0]=0.0;
│ │ │ │ -
765 out[53][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y;
│ │ │ │ -
766 out[54][0]=0.0;
│ │ │ │ -
767 out[54][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y;
│ │ │ │ -
768 out[55][0]=0.0;
│ │ │ │ -
769 out[55][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y;
│ │ │ │ -
770 out[56][0]=0.0;
│ │ │ │ -
771 out[56][1]=-9.0*l4_x*dyl4_y;
│ │ │ │ -
772 out[57][0]=0.0;
│ │ │ │ -
773 out[57][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y;
│ │ │ │ -
774 out[58][0]=0.0;
│ │ │ │ -
775 out[58][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y;
│ │ │ │ -
776 out[59][0]=0.0;
│ │ │ │ -
777 out[59][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y;
│ │ │ │ -
778 } else {
│ │ │ │ -
779 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
780 }
│ │ │ │ -
781 } else {
│ │ │ │ -
782 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
783 }
│ │ │ │ -
784 }
│ │ │ │ -
│ │ │ │ -
785
│ │ │ │ -
│ │ │ │ -
787 unsigned int order () const
│ │ │ │ -
788 {
│ │ │ │ -
789 return 9;
│ │ │ │ -
790 }
│ │ │ │ -
│ │ │ │ -
791
│ │ │ │ -
792 private:
│ │ │ │ -
793 R sign0, sign1, sign2, sign3;
│ │ │ │ -
794 };
│ │ │ │ -
│ │ │ │ -
795}
│ │ │ │ -
796
│ │ │ │ -
797#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
86}
│ │ │ │ +
87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas4cube2dlocalbasis.hh:29
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:492
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:60
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas4cube2dlocalbasis.hh:33
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas4cube2dlocalbasis.hh:49
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:787
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas4cube2dlocalbasis.hh:210
│ │ │ │ -
RT4Cube2DLocalBasis(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2dlocalbasis.hh:40
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas0pyramidlocalinterpolation.hh:22
│ │ │ │ +
RT0PyramidLocalInterpolation(std::bitset< 5 > s=0)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramidlocalinterpolation.hh:31
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas0pyramidlocalinterpolation.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,826 +1,92 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ -raviartthomas4cube2dlocalbasis.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d │ │ │ │ │ +raviartthomas0pyramidlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include "../../common/localbasis.hh" │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -29 { │ │ │ │ │ -30 │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +22 { │ │ │ │ │ +23 │ │ │ │ │ +24 public: │ │ │ │ │ +25 │ │ │ │ │ +_3_1 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<5> s = 0) │ │ │ │ │ +32 { │ │ │ │ │ +33 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ 34 │ │ │ │ │ -_4_0 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s = 0) │ │ │ │ │ -41 { │ │ │ │ │ -42 sign0 = (s[0]) ? -1.0 : 1.0; │ │ │ │ │ -43 sign1 = (s[1]) ? -1.0 : 1.0; │ │ │ │ │ -44 sign2 = (s[2]) ? -1.0 : 1.0; │ │ │ │ │ -45 sign3 = (s[3]) ? -1.0 : 1.0; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return 60; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_6_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -61 std::vector& out) const │ │ │ │ │ -62 { │ │ │ │ │ -63 out.resize(60); │ │ │ │ │ -64 │ │ │ │ │ -65 auto const& x = in[0], y = in[1]; │ │ │ │ │ -66 │ │ │ │ │ -67 const auto l1_x = 2*x - 1; │ │ │ │ │ -68 const auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ -69 const auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -70 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ -71 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -72 const auto l1_y = 2*y - 1; │ │ │ │ │ -73 const auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ -74 const auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -75 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ -76 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -77 │ │ │ │ │ -78 out[0][0]=sign0*(0.5*(-l4_x)+0.5*l5_x); │ │ │ │ │ -79 out[0][1]=0.0; │ │ │ │ │ -80 out[1][0]=-(1.5)*l4_x*l1_y+1.5*l5_x*l1_y; │ │ │ │ │ -81 out[1][1]=0.0; │ │ │ │ │ -82 out[2][0]=sign0*(-(2.5)*l4_x*l2_y+2.5*l5_x*l2_y); │ │ │ │ │ -83 out[2][1]=0.0; │ │ │ │ │ -84 out[3][0]=-(3.5)*l4_x*l3_y+3.5*l5_x*l3_y; │ │ │ │ │ -85 out[3][1]=0.0; │ │ │ │ │ -86 out[4][0]=sign0*(-(4.5)*l4_x*l4_y+4.5*l5_x*l4_y); │ │ │ │ │ -87 out[4][1]=0.0; │ │ │ │ │ -88 │ │ │ │ │ -89 out[5][0]=sign1*(0.5*l4_x+0.5*l5_x); │ │ │ │ │ -90 out[5][1]=0.0; │ │ │ │ │ -91 out[6][0]=-(1.5)*l4_x*l1_y-1.5*l5_x*l1_y; │ │ │ │ │ -92 out[6][1]=0.0; │ │ │ │ │ -93 out[7][0]=sign1*(2.5*l4_x*l2_y+2.5*l5_x*l2_y); │ │ │ │ │ -94 out[7][1]=0.0; │ │ │ │ │ -95 out[8][0]=-(3.5)*l4_x*l3_y-3.5*l5_x*l3_y; │ │ │ │ │ -96 out[8][1]=0.0; │ │ │ │ │ -97 out[9][0]=sign1*(4.5*l4_x*l4_y+4.5*l5_x*l4_y); │ │ │ │ │ -98 out[9][1]=0.0; │ │ │ │ │ -99 │ │ │ │ │ -100 out[10][0]=0.0; │ │ │ │ │ -101 out[10][1]=sign2*(0.5*(-l4_y)+0.5*l5_y); │ │ │ │ │ -102 out[11][0]=0.0; │ │ │ │ │ -103 out[11][1]=1.5*l1_x*l4_y-1.5*l1_x*l5_y; │ │ │ │ │ -104 out[12][0]=0.0; │ │ │ │ │ -105 out[12][1]=sign2*(-(2.5)*l2_x*l4_y+2.5*l2_x*l5_y); │ │ │ │ │ -106 out[13][0]=0.0; │ │ │ │ │ -107 out[13][1]=3.5*l3_x*l4_y-3.5*l3_x*l5_y; │ │ │ │ │ -108 out[14][0]=0.0; │ │ │ │ │ -109 out[14][1]=sign2*(-(4.5)*l4_x*l4_y+4.5*l4_x*l5_y); │ │ │ │ │ -110 │ │ │ │ │ -111 out[15][0]=0.0; │ │ │ │ │ -112 out[15][1]=sign3*(0.5*l4_y+0.5*l5_y); │ │ │ │ │ -113 out[16][0]=0.0; │ │ │ │ │ -114 out[16][1]=1.5*l1_x*l4_y+1.5*l1_x*l5_y; │ │ │ │ │ -115 out[17][0]=0.0; │ │ │ │ │ -116 out[17][1]=sign3*(2.5*l2_x*l4_y+2.5*l2_x*l5_y); │ │ │ │ │ -117 out[18][0]=0.0; │ │ │ │ │ -118 out[18][1]=3.5*l3_x*l4_y+3.5*l3_x*l5_y; │ │ │ │ │ -119 out[19][0]=0.0; │ │ │ │ │ -120 out[19][1]=sign3*(4.5*l4_x*l4_y+4.5*l4_x*l5_y); │ │ │ │ │ -121 │ │ │ │ │ -122 out[20][0]=1.0-l4_x; │ │ │ │ │ -123 out[20][1]=0.0; │ │ │ │ │ -124 out[21][0]=3.0*l1_y-3.0*l4_x*l1_y; │ │ │ │ │ -125 out[21][1]=0.0; │ │ │ │ │ -126 out[22][0]=5.0*l2_y-5.0*l4_x*l2_y; │ │ │ │ │ -127 out[22][1]=0.0; │ │ │ │ │ -128 out[23][0]=7.0*l3_y-7.0*l4_x*l3_y; │ │ │ │ │ -129 out[23][1]=0.0; │ │ │ │ │ -130 out[24][0]=9.0*l4_y-9.0*l4_x*l4_y; │ │ │ │ │ -131 out[24][1]=0.0; │ │ │ │ │ -132 out[25][0]=3.0*l1_x-3.0*l5_x; │ │ │ │ │ -133 out[25][1]=0.0; │ │ │ │ │ -134 out[26][0]=9.0*l1_x*l1_y-9.0*l5_x*l1_y; │ │ │ │ │ -135 out[26][1]=0.0; │ │ │ │ │ -136 out[27][0]=15.0*l1_x*l2_y-15.0*l5_x*l2_y; │ │ │ │ │ -137 out[27][1]=0.0; │ │ │ │ │ -138 out[28][0]=21.0*l1_x*l3_y-21.0*l5_x*l3_y; │ │ │ │ │ -139 out[28][1]=0.0; │ │ │ │ │ -140 out[29][0]=27.0*l1_x*l4_y-27.0*l5_x*l4_y; │ │ │ │ │ -141 out[29][1]=0.0; │ │ │ │ │ -142 out[30][0]=5.0*l2_x-5.0*l4_x; │ │ │ │ │ -143 out[30][1]=0.0; │ │ │ │ │ -144 out[31][0]=15.0*l2_x*l1_y-15.0*l4_x*l1_y; │ │ │ │ │ -145 out[31][1]=0.0; │ │ │ │ │ -146 out[32][0]=25.0*l2_x*l2_y-25.0*l4_x*l2_y; │ │ │ │ │ -147 out[32][1]=0.0; │ │ │ │ │ -148 out[33][0]=35.0*l2_x*l3_y-35.0*l4_x*l3_y; │ │ │ │ │ -149 out[33][1]=0.0; │ │ │ │ │ -150 out[34][0]=45.0*l2_x*l4_y-45.0*l4_x*l4_y; │ │ │ │ │ -151 out[34][1]=0.0; │ │ │ │ │ -152 out[35][0]=7.0*l3_x-7.0*l5_x; │ │ │ │ │ -153 out[35][1]=0.0; │ │ │ │ │ -154 out[36][0]=21.0*l3_x*l1_y-21.0*l5_x*l1_y; │ │ │ │ │ -155 out[36][1]=0.0; │ │ │ │ │ -156 out[37][0]=35.0*l3_x*l2_y-35.0*l5_x*l2_y; │ │ │ │ │ -157 out[37][1]=0.0; │ │ │ │ │ -158 out[38][0]=49.0*l3_x*l3_y-49.0*l5_x*l3_y; │ │ │ │ │ -159 out[38][1]=0.0; │ │ │ │ │ -160 out[39][0]=63.0*l3_x*l4_y-63.0*l5_x*l4_y; │ │ │ │ │ -161 out[39][1]=0.0; │ │ │ │ │ -162 out[40][0]=0.0; │ │ │ │ │ -163 out[40][1]=1.0-l4_y; │ │ │ │ │ -164 out[41][0]=0.0; │ │ │ │ │ -165 out[41][1]=3.0*l1_y-3.0*l5_y; │ │ │ │ │ -166 out[42][0]=0.0; │ │ │ │ │ -167 out[42][1]=5.0*l2_y-5.0*l4_y; │ │ │ │ │ -168 out[43][0]=0.0; │ │ │ │ │ -169 out[43][1]=7.0*l3_y-7.0*l5_y; │ │ │ │ │ -170 out[44][0]=0.0; │ │ │ │ │ -171 out[44][1]=3.0*l1_x-3.0*l1_x*l4_y; │ │ │ │ │ -172 out[45][0]=0.0; │ │ │ │ │ -173 out[45][1]=9.0*l1_x*l1_y-9.0*l1_x*l5_y; │ │ │ │ │ -174 out[46][0]=0.0; │ │ │ │ │ -175 out[46][1]=15.0*l1_x*l2_y-15.0*l1_x*l4_y; │ │ │ │ │ -176 out[47][0]=0.0; │ │ │ │ │ -177 out[47][1]=21.0*l1_x*l3_y-21.0*l1_x*l5_y; │ │ │ │ │ -178 out[48][0]=0.0; │ │ │ │ │ -179 out[48][1]=5.0*l2_x-5.0*l2_x*l4_y; │ │ │ │ │ -180 out[49][0]=0.0; │ │ │ │ │ -181 out[49][1]=15.0*l2_x*l1_y-15.0*l2_x*l5_y; │ │ │ │ │ -182 out[50][0]=0.0; │ │ │ │ │ -183 out[50][1]=25.0*l2_x*l2_y-25.0*l2_x*l4_y; │ │ │ │ │ -184 out[51][0]=0.0; │ │ │ │ │ -185 out[51][1]=35.0*l2_x*l3_y-35.0*l2_x*l5_y; │ │ │ │ │ -186 out[52][0]=0.0; │ │ │ │ │ -187 out[52][1]=7.0*l3_x-7.0*l3_x*l4_y; │ │ │ │ │ -188 out[53][0]=0.0; │ │ │ │ │ -189 out[53][1]=21.0*l3_x*l1_y-21.0*l3_x*l5_y; │ │ │ │ │ -190 out[54][0]=0.0; │ │ │ │ │ -191 out[54][1]=35.0*l3_x*l2_y-35.0*l3_x*l4_y; │ │ │ │ │ -192 out[55][0]=0.0; │ │ │ │ │ -193 out[55][1]=49.0*l3_x*l3_y-49.0*l3_x*l5_y; │ │ │ │ │ -194 out[56][0]=0.0; │ │ │ │ │ -195 out[56][1]=9.0*l4_x-9.0*l4_x*l4_y; │ │ │ │ │ -196 out[57][0]=0.0; │ │ │ │ │ -197 out[57][1]=27.0*l4_x*l1_y-27.0*l4_x*l5_y; │ │ │ │ │ -198 out[58][0]=0.0; │ │ │ │ │ -199 out[58][1]=45.0*l4_x*l2_y-45.0*l4_x*l4_y; │ │ │ │ │ -200 out[59][0]=0.0; │ │ │ │ │ -201 out[59][1]=63.0*l4_x*l3_y-63.0*l4_x*l5_y; │ │ │ │ │ -202 } │ │ │ │ │ -203 │ │ │ │ │ -_2_1_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -211 std::vector& out) const │ │ │ │ │ -212 { │ │ │ │ │ -213 out.resize(60); │ │ │ │ │ -214 auto const& x = in[0], y = in[1]; │ │ │ │ │ -215 │ │ │ │ │ -216 const auto l1_x = 2*x - 1; │ │ │ │ │ -217 const auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ -218 const auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -219 const auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ -220 const auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -221 const auto l1_y = 2*y - 1; │ │ │ │ │ -222 const auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ -223 const auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -224 const auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ -225 const auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -226 │ │ │ │ │ -227 const auto dxl1_x = 2.0; │ │ │ │ │ -228 const auto dxl2_x = 12*x - 6; │ │ │ │ │ -229 const auto dxl3_x = x*(60*x - 60) + 12; │ │ │ │ │ -230 const auto dxl4_x = x*(x*(280*x - 420) + 180) - 20; │ │ │ │ │ -231 const auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30; │ │ │ │ │ -232 const auto dyl1_y = 2.0; │ │ │ │ │ -233 const auto dyl2_y = 12*y - 6; │ │ │ │ │ -234 const auto dyl3_y = y*(60*y - 60) + 12; │ │ │ │ │ -235 const auto dyl4_y = y*(y*(280*y - 420) + 180) - 20; │ │ │ │ │ -236 const auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30; │ │ │ │ │ -237 │ │ │ │ │ -238 // x-component │ │ │ │ │ -239 out[0][0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x); │ │ │ │ │ -240 out[0][1][0]=0.0; │ │ │ │ │ -241 out[1][0][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y; │ │ │ │ │ -242 out[1][1][0]=0.0; │ │ │ │ │ -243 out[2][0][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ -244 out[2][1][0]=0.0; │ │ │ │ │ -245 out[3][0][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y; │ │ │ │ │ -246 out[3][1][0]=0.0; │ │ │ │ │ -247 out[4][0][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ -248 out[4][1][0]=0.0; │ │ │ │ │ -249 │ │ │ │ │ -250 out[5][0][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x); │ │ │ │ │ -251 out[5][1][0]=0.0; │ │ │ │ │ -252 out[6][0][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y; │ │ │ │ │ -253 out[6][1][0]=0.0; │ │ │ │ │ -254 out[7][0][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ -255 out[7][1][0]=0.0; │ │ │ │ │ -256 out[8][0][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y; │ │ │ │ │ -257 out[8][1][0]=0.0; │ │ │ │ │ -258 out[9][0][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ -259 out[9][1][0]=0.0; │ │ │ │ │ -260 │ │ │ │ │ -261 out[10][0][0]=0.0; │ │ │ │ │ -262 out[10][1][0]=0.0; │ │ │ │ │ -263 out[11][0][0]=0.0; │ │ │ │ │ -264 out[11][1][0]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y; │ │ │ │ │ -265 out[12][0][0]=0.0; │ │ │ │ │ -266 out[12][1][0]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ -267 out[13][0][0]=0.0; │ │ │ │ │ -268 out[13][1][0]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y; │ │ │ │ │ -269 out[14][0][0]=0.0; │ │ │ │ │ -270 out[14][1][0]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ -271 │ │ │ │ │ -272 out[15][0][0]=0.0; │ │ │ │ │ -273 out[15][1][0]=0.0; │ │ │ │ │ -274 out[16][0][0]=0.0; │ │ │ │ │ -275 out[16][1][0]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y; │ │ │ │ │ -276 out[17][0][0]=0.0; │ │ │ │ │ -277 out[17][1][0]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ -278 out[18][0][0]=0.0; │ │ │ │ │ -279 out[18][1][0]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y; │ │ │ │ │ -280 out[19][0][0]=0.0; │ │ │ │ │ -281 out[19][1][0]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ -282 │ │ │ │ │ -283 out[20][0][0]=-dxl4_x; │ │ │ │ │ -284 out[20][1][0]=0.0; │ │ │ │ │ -285 out[21][0][0]=-3.0*dxl4_x*l1_y; │ │ │ │ │ -286 out[21][1][0]=0.0; │ │ │ │ │ -287 out[22][0][0]=-5.0*dxl4_x*l2_y; │ │ │ │ │ -288 out[22][1][0]=0.0; │ │ │ │ │ -289 out[23][0][0]=-7.0*dxl4_x*l3_y; │ │ │ │ │ -290 out[23][1][0]=0.0; │ │ │ │ │ -291 out[24][0][0]=-9.0*dxl4_x*l4_y; │ │ │ │ │ -292 out[24][1][0]=0.0; │ │ │ │ │ -293 out[25][0][0]=3.0*dxl1_x-3.0*dxl5_x; │ │ │ │ │ -294 out[25][1][0]=0.0; │ │ │ │ │ -295 out[26][0][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y; │ │ │ │ │ -296 out[26][1][0]=0.0; │ │ │ │ │ -297 out[27][0][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y; │ │ │ │ │ -298 out[27][1][0]=0.0; │ │ │ │ │ -299 out[28][0][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y; │ │ │ │ │ -300 out[28][1][0]=0.0; │ │ │ │ │ -301 out[29][0][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y; │ │ │ │ │ -302 out[29][1][0]=0.0; │ │ │ │ │ -303 out[30][0][0]=5.0*dxl2_x-5.0*dxl4_x; │ │ │ │ │ -304 out[30][1][0]=0.0; │ │ │ │ │ -305 out[31][0][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y; │ │ │ │ │ -306 out[31][1][0]=0.0; │ │ │ │ │ -307 out[32][0][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y; │ │ │ │ │ -308 out[32][1][0]=0.0; │ │ │ │ │ -309 out[33][0][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y; │ │ │ │ │ -310 out[33][1][0]=0.0; │ │ │ │ │ -311 out[34][0][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y; │ │ │ │ │ -312 out[34][1][0]=0.0; │ │ │ │ │ -313 out[35][0][0]=7.0*dxl3_x-7.0*dxl5_x; │ │ │ │ │ -314 out[35][1][0]=0.0; │ │ │ │ │ -315 out[36][0][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y; │ │ │ │ │ -316 out[36][1][0]=0.0; │ │ │ │ │ -317 out[37][0][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y; │ │ │ │ │ -318 out[37][1][0]=0.0; │ │ │ │ │ -319 out[38][0][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y; │ │ │ │ │ -320 out[38][1][0]=0.0; │ │ │ │ │ -321 out[39][0][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y; │ │ │ │ │ -322 out[39][1][0]=0.0; │ │ │ │ │ -323 out[40][0][0]=0.0; │ │ │ │ │ -324 out[40][1][0]=0.0; │ │ │ │ │ -325 out[41][0][0]=0.0; │ │ │ │ │ -326 out[41][1][0]=0.0; │ │ │ │ │ -327 out[42][0][0]=0.0; │ │ │ │ │ -328 out[42][1][0]=0.0; │ │ │ │ │ -329 out[43][0][0]=0.0; │ │ │ │ │ -330 out[43][1][0]=0.0; │ │ │ │ │ -331 out[44][0][0]=0.0; │ │ │ │ │ -332 out[44][1][0]=3.0*dxl1_x-3.0*dxl1_x*l4_y; │ │ │ │ │ -333 out[45][0][0]=0.0; │ │ │ │ │ -334 out[45][1][0]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y; │ │ │ │ │ -335 out[46][0][0]=0.0; │ │ │ │ │ -336 out[46][1][0]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y; │ │ │ │ │ -337 out[47][0][0]=0.0; │ │ │ │ │ -338 out[47][1][0]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y; │ │ │ │ │ -339 out[48][0][0]=0.0; │ │ │ │ │ -340 out[48][1][0]=5.0*dxl2_x-5.0*dxl2_x*l4_y; │ │ │ │ │ -341 out[49][0][0]=0.0; │ │ │ │ │ -342 out[49][1][0]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y; │ │ │ │ │ -343 out[50][0][0]=0.0; │ │ │ │ │ -344 out[50][1][0]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y; │ │ │ │ │ -345 out[51][0][0]=0.0; │ │ │ │ │ -346 out[51][1][0]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y; │ │ │ │ │ -347 out[52][0][0]=0.0; │ │ │ │ │ -348 out[52][1][0]=7.0*dxl3_x-7.0*dxl3_x*l4_y; │ │ │ │ │ -349 out[53][0][0]=0.0; │ │ │ │ │ -350 out[53][1][0]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y; │ │ │ │ │ -351 out[54][0][0]=0.0; │ │ │ │ │ -352 out[54][1][0]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y; │ │ │ │ │ -353 out[55][0][0]=0.0; │ │ │ │ │ -354 out[55][1][0]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y; │ │ │ │ │ -355 out[56][0][0]=0.0; │ │ │ │ │ -356 out[56][1][0]=9.0*dxl4_x-9.0*dxl4_x*l4_y; │ │ │ │ │ -357 out[57][0][0]=0.0; │ │ │ │ │ -358 out[57][1][0]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y; │ │ │ │ │ -359 out[58][0][0]=0.0; │ │ │ │ │ -360 out[58][1][0]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y; │ │ │ │ │ -361 out[59][0][0]=0.0; │ │ │ │ │ -362 out[59][1][0]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y; │ │ │ │ │ -363 │ │ │ │ │ -364 // y-component │ │ │ │ │ -365 out[0][0][1]=0.0; │ │ │ │ │ -366 out[0][1][1]=0.0; │ │ │ │ │ -367 out[1][0][1]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y; │ │ │ │ │ -368 out[1][1][1]=0.0; │ │ │ │ │ -369 out[2][0][1]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ -370 out[2][1][1]=0.0; │ │ │ │ │ -371 out[3][0][1]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y; │ │ │ │ │ -372 out[3][1][1]=0.0; │ │ │ │ │ -373 out[4][0][1]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ -374 out[4][1][1]=0.0; │ │ │ │ │ -375 │ │ │ │ │ -376 out[5][0][1]=0.0; │ │ │ │ │ -377 out[5][1][1]=0.0; │ │ │ │ │ -378 out[6][0][1]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y; │ │ │ │ │ -379 out[6][1][1]=0.0; │ │ │ │ │ -380 out[7][0][1]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ -381 out[7][1][1]=0.0; │ │ │ │ │ -382 out[8][0][1]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y; │ │ │ │ │ -383 out[8][1][1]=0.0; │ │ │ │ │ -384 out[9][0][1]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ -385 out[9][1][1]=0.0; │ │ │ │ │ -386 │ │ │ │ │ -387 out[10][0][1]=0.0; │ │ │ │ │ -388 out[10][1][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y); │ │ │ │ │ -389 out[11][0][1]=0.0; │ │ │ │ │ -390 out[11][1][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y; │ │ │ │ │ -391 out[12][0][1]=0.0; │ │ │ │ │ -392 out[12][1][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ -393 out[13][0][1]=0.0; │ │ │ │ │ -394 out[13][1][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y; │ │ │ │ │ -395 out[14][0][1]=0.0; │ │ │ │ │ -396 out[14][1][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ -397 │ │ │ │ │ -398 out[15][0][1]=0.0; │ │ │ │ │ -399 out[15][1][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y); │ │ │ │ │ -400 out[16][0][1]=0.0; │ │ │ │ │ -401 out[16][1][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y; │ │ │ │ │ -402 out[17][0][1]=0.0; │ │ │ │ │ -403 out[17][1][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ -404 out[18][0][1]=0.0; │ │ │ │ │ -405 out[18][1][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y; │ │ │ │ │ -406 out[19][0][1]=0.0; │ │ │ │ │ -407 out[19][1][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ -408 │ │ │ │ │ -409 out[20][0][1]=0.0; │ │ │ │ │ -410 out[20][1][1]=0.0; │ │ │ │ │ -411 out[21][0][1]=3.0*dyl1_y-3.0*l4_x*dyl1_y; │ │ │ │ │ -412 out[21][1][1]=0.0; │ │ │ │ │ -413 out[22][0][1]=5.0*dyl2_y-5.0*l4_x*dyl2_y; │ │ │ │ │ -414 out[22][1][1]=0.0; │ │ │ │ │ -415 out[23][0][1]=7.0*dyl3_y-7.0*l4_x*dyl3_y; │ │ │ │ │ -416 out[23][1][1]=0.0; │ │ │ │ │ -417 out[24][0][1]=9.0*dyl4_y-9.0*l4_x*dyl4_y; │ │ │ │ │ -418 out[24][1][1]=0.0; │ │ │ │ │ -419 out[25][0][1]=0.0; │ │ │ │ │ -420 out[25][1][1]=0.0; │ │ │ │ │ -421 out[26][0][1]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y; │ │ │ │ │ -422 out[26][1][1]=0.0; │ │ │ │ │ -423 out[27][0][1]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y; │ │ │ │ │ -424 out[27][1][1]=0.0; │ │ │ │ │ -425 out[28][0][1]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y; │ │ │ │ │ -426 out[28][1][1]=0.0; │ │ │ │ │ -427 out[29][0][1]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y; │ │ │ │ │ -428 out[29][1][1]=0.0; │ │ │ │ │ -429 out[30][0][1]=0.0; │ │ │ │ │ -430 out[30][1][1]=0.0; │ │ │ │ │ -431 out[31][0][1]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y; │ │ │ │ │ -432 out[31][1][1]=0.0; │ │ │ │ │ -433 out[32][0][1]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y; │ │ │ │ │ -434 out[32][1][1]=0.0; │ │ │ │ │ -435 out[33][0][1]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y; │ │ │ │ │ -436 out[33][1][1]=0.0; │ │ │ │ │ -437 out[34][0][1]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y; │ │ │ │ │ -438 out[34][1][1]=0.0; │ │ │ │ │ -439 out[35][0][1]=0.0; │ │ │ │ │ -440 out[35][1][1]=0.0; │ │ │ │ │ -441 out[36][0][1]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y; │ │ │ │ │ -442 out[36][1][1]=0.0; │ │ │ │ │ -443 out[37][0][1]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y; │ │ │ │ │ -444 out[37][1][1]=0.0; │ │ │ │ │ -445 out[38][0][1]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y; │ │ │ │ │ -446 out[38][1][1]=0.0; │ │ │ │ │ -447 out[39][0][1]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y; │ │ │ │ │ -448 out[39][1][1]=0.0; │ │ │ │ │ -449 out[40][0][1]=0.0; │ │ │ │ │ -450 out[40][1][1]=-dyl4_y; │ │ │ │ │ -451 out[41][0][1]=0.0; │ │ │ │ │ -452 out[41][1][1]=3.0*dyl1_y-3.0*dyl5_y; │ │ │ │ │ -453 out[42][0][1]=0.0; │ │ │ │ │ -454 out[42][1][1]=5.0*dyl2_y-5.0*dyl4_y; │ │ │ │ │ -455 out[43][0][1]=0.0; │ │ │ │ │ -456 out[43][1][1]=7.0*dyl3_y-7.0*dyl5_y; │ │ │ │ │ -457 out[44][0][1]=0.0; │ │ │ │ │ -458 out[44][1][1]=-3.0*l1_x*dyl4_y; │ │ │ │ │ -459 out[45][0][1]=0.0; │ │ │ │ │ -460 out[45][1][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y; │ │ │ │ │ -461 out[46][0][1]=0.0; │ │ │ │ │ -462 out[46][1][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y; │ │ │ │ │ -463 out[47][0][1]=0.0; │ │ │ │ │ -464 out[47][1][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y; │ │ │ │ │ -465 out[48][0][1]=0.0; │ │ │ │ │ -466 out[48][1][1]=-5.0*l2_x*dyl4_y; │ │ │ │ │ -467 out[49][0][1]=0.0; │ │ │ │ │ -468 out[49][1][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y; │ │ │ │ │ -469 out[50][0][1]=0.0; │ │ │ │ │ -470 out[50][1][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y; │ │ │ │ │ -471 out[51][0][1]=0.0; │ │ │ │ │ -472 out[51][1][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y; │ │ │ │ │ -473 out[52][0][1]=0.0; │ │ │ │ │ -474 out[52][1][1]=-7.0*l3_x*dyl4_y; │ │ │ │ │ -475 out[53][0][1]=0.0; │ │ │ │ │ -476 out[53][1][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y; │ │ │ │ │ -477 out[54][0][1]=0.0; │ │ │ │ │ -478 out[54][1][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y; │ │ │ │ │ -479 out[55][0][1]=0.0; │ │ │ │ │ -480 out[55][1][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y; │ │ │ │ │ -481 out[56][0][1]=0.0; │ │ │ │ │ -482 out[56][1][1]=-9.0*l4_x*dyl4_y; │ │ │ │ │ -483 out[57][0][1]=0.0; │ │ │ │ │ -484 out[57][1][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y; │ │ │ │ │ -485 out[58][0][1]=0.0; │ │ │ │ │ -486 out[58][1][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y; │ │ │ │ │ -487 out[59][0][1]=0.0; │ │ │ │ │ -488 out[59][1][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y; │ │ │ │ │ -489 } │ │ │ │ │ -490 │ │ │ │ │ -_4_9_2 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -493 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -494 std::vector& out) const // return value │ │ │ │ │ -495 { │ │ │ │ │ -496 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -497 if (totalOrder == 0) { │ │ │ │ │ -498 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -499 } else if (totalOrder == 1) { │ │ │ │ │ -500 out.resize(_s_i_z_e()); │ │ │ │ │ -501 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -502 auto const& x = in[0], y = in[1]; │ │ │ │ │ -503 │ │ │ │ │ -504 auto l1_x = 2*x - 1; │ │ │ │ │ -505 auto l2_x = x*(6*x - 6) + 1; │ │ │ │ │ -506 auto l3_x = x*(x*(20*x - 30) + 12) - 1; │ │ │ │ │ -507 auto l4_x = x*(x*(x*(70*x - 140) + 90) - 20) + 1; │ │ │ │ │ -508 auto l5_x = x*(x*(x*(x*(252*x - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -509 auto l1_y = 2*y - 1; │ │ │ │ │ -510 auto l2_y = y*(6*y - 6) + 1; │ │ │ │ │ -511 auto l3_y = y*(y*(20*y - 30) + 12) - 1; │ │ │ │ │ -512 auto l4_y = y*(y*(y*(70*y - 140) + 90) - 20) + 1; │ │ │ │ │ -513 auto l5_y = y*(y*(y*(y*(252*y - 630) + 560) - 210) + 30) - 1; │ │ │ │ │ -514 │ │ │ │ │ -515 if (direction == 0) { │ │ │ │ │ -516 auto dxl1_x = 2.0; │ │ │ │ │ -517 auto dxl2_x = 12*x - 6; │ │ │ │ │ -518 auto dxl3_x = x*(60*x - 60) + 12; │ │ │ │ │ -519 auto dxl4_x = x*(x*(280*x - 420) + 180) - 20; │ │ │ │ │ -520 auto dxl5_x = x*(x*(x*(1260*x - 2520) + 1680) - 420) + 30; │ │ │ │ │ -521 │ │ │ │ │ -522 out[0][0]=sign0*(0.5*(-dxl4_x)+0.5*dxl5_x); │ │ │ │ │ -523 out[0][1]=0.0; │ │ │ │ │ -524 out[1][0]=-(1.5)*dxl4_x*l1_y+1.5*dxl5_x*l1_y; │ │ │ │ │ -525 out[1][1]=0.0; │ │ │ │ │ -526 out[2][0]=sign0*(-(2.5)*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ -527 out[2][1]=0.0; │ │ │ │ │ -528 out[3][0]=-(3.5)*dxl4_x*l3_y+3.5*dxl5_x*l3_y; │ │ │ │ │ -529 out[3][1]=0.0; │ │ │ │ │ -530 out[4][0]=sign0*(-(4.5)*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ -531 out[4][1]=0.0; │ │ │ │ │ -532 │ │ │ │ │ -533 out[5][0]=sign1*(0.5*dxl4_x+0.5*dxl5_x); │ │ │ │ │ -534 out[5][1]=0.0; │ │ │ │ │ -535 out[6][0]=-(1.5)*dxl4_x*l1_y-1.5*dxl5_x*l1_y; │ │ │ │ │ -536 out[6][1]=0.0; │ │ │ │ │ -537 out[7][0]=sign1*(2.5*dxl4_x*l2_y+2.5*dxl5_x*l2_y); │ │ │ │ │ -538 out[7][1]=0.0; │ │ │ │ │ -539 out[8][0]=-(3.5)*dxl4_x*l3_y-3.5*dxl5_x*l3_y; │ │ │ │ │ -540 out[8][1]=0.0; │ │ │ │ │ -541 out[9][0]=sign1*(4.5*dxl4_x*l4_y+4.5*dxl5_x*l4_y); │ │ │ │ │ -542 out[9][1]=0.0; │ │ │ │ │ -543 │ │ │ │ │ -544 out[10][0]=0.0; │ │ │ │ │ -545 out[10][1]=0.0; │ │ │ │ │ -546 out[11][0]=0.0; │ │ │ │ │ -547 out[11][1]=1.5*dxl1_x*l4_y-1.5*dxl1_x*l5_y; │ │ │ │ │ -548 out[12][0]=0.0; │ │ │ │ │ -549 out[12][1]=sign2*(-(2.5)*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ -550 out[13][0]=0.0; │ │ │ │ │ -551 out[13][1]=3.5*dxl3_x*l4_y-3.5*dxl3_x*l5_y; │ │ │ │ │ -552 out[14][0]=0.0; │ │ │ │ │ -553 out[14][1]=sign2*(-(4.5)*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ -554 │ │ │ │ │ -555 out[15][0]=0.0; │ │ │ │ │ -556 out[15][1]=0.0; │ │ │ │ │ -557 out[16][0]=0.0; │ │ │ │ │ -558 out[16][1]=1.5*dxl1_x*l4_y+1.5*dxl1_x*l5_y; │ │ │ │ │ -559 out[17][0]=0.0; │ │ │ │ │ -560 out[17][1]=sign3*(2.5*dxl2_x*l4_y+2.5*dxl2_x*l5_y); │ │ │ │ │ -561 out[18][0]=0.0; │ │ │ │ │ -562 out[18][1]=3.5*dxl3_x*l4_y+3.5*dxl3_x*l5_y; │ │ │ │ │ -563 out[19][0]=0.0; │ │ │ │ │ -564 out[19][1]=sign3*(4.5*dxl4_x*l4_y+4.5*dxl4_x*l5_y); │ │ │ │ │ -565 │ │ │ │ │ -566 out[20][0]=-dxl4_x; │ │ │ │ │ -567 out[20][1]=0.0; │ │ │ │ │ -568 out[21][0]=-3.0*dxl4_x*l1_y; │ │ │ │ │ -569 out[21][1]=0.0; │ │ │ │ │ -570 out[22][0]=-5.0*dxl4_x*l2_y; │ │ │ │ │ -571 out[22][1]=0.0; │ │ │ │ │ -572 out[23][0]=-7.0*dxl4_x*l3_y; │ │ │ │ │ -573 out[23][1]=0.0; │ │ │ │ │ -574 out[24][0]=-9.0*dxl4_x*l4_y; │ │ │ │ │ -575 out[24][1]=0.0; │ │ │ │ │ -576 out[25][0]=3.0*dxl1_x-3.0*dxl5_x; │ │ │ │ │ -577 out[25][1]=0.0; │ │ │ │ │ -578 out[26][0]=9.0*dxl1_x*l1_y-9.0*dxl5_x*l1_y; │ │ │ │ │ -579 out[26][1]=0.0; │ │ │ │ │ -580 out[27][0]=15.0*dxl1_x*l2_y-15.0*dxl5_x*l2_y; │ │ │ │ │ -581 out[27][1]=0.0; │ │ │ │ │ -582 out[28][0]=21.0*dxl1_x*l3_y-21.0*dxl5_x*l3_y; │ │ │ │ │ -583 out[28][1]=0.0; │ │ │ │ │ -584 out[29][0]=27.0*dxl1_x*l4_y-27.0*dxl5_x*l4_y; │ │ │ │ │ -585 out[29][1]=0.0; │ │ │ │ │ -586 out[30][0]=5.0*dxl2_x-5.0*dxl4_x; │ │ │ │ │ -587 out[30][1]=0.0; │ │ │ │ │ -588 out[31][0]=15.0*dxl2_x*l1_y-15.0*dxl4_x*l1_y; │ │ │ │ │ -589 out[31][1]=0.0; │ │ │ │ │ -590 out[32][0]=25.0*dxl2_x*l2_y-25.0*dxl4_x*l2_y; │ │ │ │ │ -591 out[32][1]=0.0; │ │ │ │ │ -592 out[33][0]=35.0*dxl2_x*l3_y-35.0*dxl4_x*l3_y; │ │ │ │ │ -593 out[33][1]=0.0; │ │ │ │ │ -594 out[34][0]=45.0*dxl2_x*l4_y-45.0*dxl4_x*l4_y; │ │ │ │ │ -595 out[34][1]=0.0; │ │ │ │ │ -596 out[35][0]=7.0*dxl3_x-7.0*dxl5_x; │ │ │ │ │ -597 out[35][1]=0.0; │ │ │ │ │ -598 out[36][0]=21.0*dxl3_x*l1_y-21.0*dxl5_x*l1_y; │ │ │ │ │ -599 out[36][1]=0.0; │ │ │ │ │ -600 out[37][0]=35.0*dxl3_x*l2_y-35.0*dxl5_x*l2_y; │ │ │ │ │ -601 out[37][1]=0.0; │ │ │ │ │ -602 out[38][0]=49.0*dxl3_x*l3_y-49.0*dxl5_x*l3_y; │ │ │ │ │ -603 out[38][1]=0.0; │ │ │ │ │ -604 out[39][0]=63.0*dxl3_x*l4_y-63.0*dxl5_x*l4_y; │ │ │ │ │ -605 out[39][1]=0.0; │ │ │ │ │ -606 out[40][0]=0.0; │ │ │ │ │ -607 out[40][1]=0.0; │ │ │ │ │ -608 out[41][0]=0.0; │ │ │ │ │ -609 out[41][1]=0.0; │ │ │ │ │ -610 out[42][0]=0.0; │ │ │ │ │ -611 out[42][1]=0.0; │ │ │ │ │ -612 out[43][0]=0.0; │ │ │ │ │ -613 out[43][1]=0.0; │ │ │ │ │ -614 out[44][0]=0.0; │ │ │ │ │ -615 out[44][1]=3.0*dxl1_x-3.0*dxl1_x*l4_y; │ │ │ │ │ -616 out[45][0]=0.0; │ │ │ │ │ -617 out[45][1]=9.0*dxl1_x*l1_y-9.0*dxl1_x*l5_y; │ │ │ │ │ -618 out[46][0]=0.0; │ │ │ │ │ -619 out[46][1]=15.0*dxl1_x*l2_y-15.0*dxl1_x*l4_y; │ │ │ │ │ -620 out[47][0]=0.0; │ │ │ │ │ -621 out[47][1]=21.0*dxl1_x*l3_y-21.0*dxl1_x*l5_y; │ │ │ │ │ -622 out[48][0]=0.0; │ │ │ │ │ -623 out[48][1]=5.0*dxl2_x-5.0*dxl2_x*l4_y; │ │ │ │ │ -624 out[49][0]=0.0; │ │ │ │ │ -625 out[49][1]=15.0*dxl2_x*l1_y-15.0*dxl2_x*l5_y; │ │ │ │ │ -626 out[50][0]=0.0; │ │ │ │ │ -627 out[50][1]=25.0*dxl2_x*l2_y-25.0*dxl2_x*l4_y; │ │ │ │ │ -628 out[51][0]=0.0; │ │ │ │ │ -629 out[51][1]=35.0*dxl2_x*l3_y-35.0*dxl2_x*l5_y; │ │ │ │ │ -630 out[52][0]=0.0; │ │ │ │ │ -631 out[52][1]=7.0*dxl3_x-7.0*dxl3_x*l4_y; │ │ │ │ │ -632 out[53][0]=0.0; │ │ │ │ │ -633 out[53][1]=21.0*dxl3_x*l1_y-21.0*dxl3_x*l5_y; │ │ │ │ │ -634 out[54][0]=0.0; │ │ │ │ │ -635 out[54][1]=35.0*dxl3_x*l2_y-35.0*dxl3_x*l4_y; │ │ │ │ │ -636 out[55][0]=0.0; │ │ │ │ │ -637 out[55][1]=49.0*dxl3_x*l3_y-49.0*dxl3_x*l5_y; │ │ │ │ │ -638 out[56][0]=0.0; │ │ │ │ │ -639 out[56][1]=9.0*dxl4_x-9.0*dxl4_x*l4_y; │ │ │ │ │ -640 out[57][0]=0.0; │ │ │ │ │ -641 out[57][1]=27.0*dxl4_x*l1_y-27.0*dxl4_x*l5_y; │ │ │ │ │ -642 out[58][0]=0.0; │ │ │ │ │ -643 out[58][1]=45.0*dxl4_x*l2_y-45.0*dxl4_x*l4_y; │ │ │ │ │ -644 out[59][0]=0.0; │ │ │ │ │ -645 out[59][1]=63.0*dxl4_x*l3_y-63.0*dxl4_x*l5_y; │ │ │ │ │ -646 │ │ │ │ │ -647 } else if (direction == 1) { │ │ │ │ │ -648 auto dyl1_y = 2.0; │ │ │ │ │ -649 auto dyl2_y = 12*y - 6; │ │ │ │ │ -650 auto dyl3_y = y*(60*y - 60) + 12; │ │ │ │ │ -651 auto dyl4_y = y*(y*(280*y - 420) + 180) - 20; │ │ │ │ │ -652 auto dyl5_y = y*(y*(y*(1260*y - 2520) + 1680) - 420) + 30; │ │ │ │ │ -653 │ │ │ │ │ -654 out[0][0]=0.0; │ │ │ │ │ -655 out[0][1]=0.0; │ │ │ │ │ -656 out[1][0]=-(1.5)*l4_x*dyl1_y+1.5*l5_x*dyl1_y; │ │ │ │ │ -657 out[1][1]=0.0; │ │ │ │ │ -658 out[2][0]=sign0*(-(2.5)*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ -659 out[2][1]=0.0; │ │ │ │ │ -660 out[3][0]=-(3.5)*l4_x*dyl3_y+3.5*l5_x*dyl3_y; │ │ │ │ │ -661 out[3][1]=0.0; │ │ │ │ │ -662 out[4][0]=sign0*(-(4.5)*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ -663 out[4][1]=0.0; │ │ │ │ │ -664 │ │ │ │ │ -665 out[5][0]=0.0; │ │ │ │ │ -666 out[5][1]=0.0; │ │ │ │ │ -667 out[6][0]=-(1.5)*l4_x*dyl1_y-1.5*l5_x*dyl1_y; │ │ │ │ │ -668 out[6][1]=0.0; │ │ │ │ │ -669 out[7][0]=sign1*(2.5*l4_x*dyl2_y+2.5*l5_x*dyl2_y); │ │ │ │ │ -670 out[7][1]=0.0; │ │ │ │ │ -671 out[8][0]=-(3.5)*l4_x*dyl3_y-3.5*l5_x*dyl3_y; │ │ │ │ │ -672 out[8][1]=0.0; │ │ │ │ │ -673 out[9][0]=sign1*(4.5*l4_x*dyl4_y+4.5*l5_x*dyl4_y); │ │ │ │ │ -674 out[9][1]=0.0; │ │ │ │ │ -675 │ │ │ │ │ -676 out[10][0]=0.0; │ │ │ │ │ -677 out[10][1]=sign2*(0.5*(-dyl4_y)+0.5*dyl5_y); │ │ │ │ │ -678 out[11][0]=0.0; │ │ │ │ │ -679 out[11][1]=1.5*l1_x*dyl4_y-1.5*l1_x*dyl5_y; │ │ │ │ │ -680 out[12][0]=0.0; │ │ │ │ │ -681 out[12][1]=sign2*(-(2.5)*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ -682 out[13][0]=0.0; │ │ │ │ │ -683 out[13][1]=3.5*l3_x*dyl4_y-3.5*l3_x*dyl5_y; │ │ │ │ │ -684 out[14][0]=0.0; │ │ │ │ │ -685 out[14][1]=sign2*(-(4.5)*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ -686 │ │ │ │ │ -687 out[15][0]=0.0; │ │ │ │ │ -688 out[15][1]=sign3*(0.5*dyl4_y+0.5*dyl5_y); │ │ │ │ │ -689 out[16][0]=0.0; │ │ │ │ │ -690 out[16][1]=1.5*l1_x*dyl4_y+1.5*l1_x*dyl5_y; │ │ │ │ │ -691 out[17][0]=0.0; │ │ │ │ │ -692 out[17][1]=sign3*(2.5*l2_x*dyl4_y+2.5*l2_x*dyl5_y); │ │ │ │ │ -693 out[18][0]=0.0; │ │ │ │ │ -694 out[18][1]=3.5*l3_x*dyl4_y+3.5*l3_x*dyl5_y; │ │ │ │ │ -695 out[19][0]=0.0; │ │ │ │ │ -696 out[19][1]=sign3*(4.5*l4_x*dyl4_y+4.5*l4_x*dyl5_y); │ │ │ │ │ -697 │ │ │ │ │ -698 out[20][0]=0.0; │ │ │ │ │ -699 out[20][1]=0.0; │ │ │ │ │ -700 out[21][0]=3.0*dyl1_y-3.0*l4_x*dyl1_y; │ │ │ │ │ -701 out[21][1]=0.0; │ │ │ │ │ -702 out[22][0]=5.0*dyl2_y-5.0*l4_x*dyl2_y; │ │ │ │ │ -703 out[22][1]=0.0; │ │ │ │ │ -704 out[23][0]=7.0*dyl3_y-7.0*l4_x*dyl3_y; │ │ │ │ │ -705 out[23][1]=0.0; │ │ │ │ │ -706 out[24][0]=9.0*dyl4_y-9.0*l4_x*dyl4_y; │ │ │ │ │ -707 out[24][1]=0.0; │ │ │ │ │ -708 out[25][0]=0.0; │ │ │ │ │ -709 out[25][1]=0.0; │ │ │ │ │ -710 out[26][0]=9.0*l1_x*dyl1_y-9.0*l5_x*dyl1_y; │ │ │ │ │ -711 out[26][1]=0.0; │ │ │ │ │ -712 out[27][0]=15.0*l1_x*dyl2_y-15.0*l5_x*dyl2_y; │ │ │ │ │ -713 out[27][1]=0.0; │ │ │ │ │ -714 out[28][0]=21.0*l1_x*dyl3_y-21.0*l5_x*dyl3_y; │ │ │ │ │ -715 out[28][1]=0.0; │ │ │ │ │ -716 out[29][0]=27.0*l1_x*dyl4_y-27.0*l5_x*dyl4_y; │ │ │ │ │ -717 out[29][1]=0.0; │ │ │ │ │ -718 out[30][0]=0.0; │ │ │ │ │ -719 out[30][1]=0.0; │ │ │ │ │ -720 out[31][0]=15.0*l2_x*dyl1_y-15.0*l4_x*dyl1_y; │ │ │ │ │ -721 out[31][1]=0.0; │ │ │ │ │ -722 out[32][0]=25.0*l2_x*dyl2_y-25.0*l4_x*dyl2_y; │ │ │ │ │ -723 out[32][1]=0.0; │ │ │ │ │ -724 out[33][0]=35.0*l2_x*dyl3_y-35.0*l4_x*dyl3_y; │ │ │ │ │ -725 out[33][1]=0.0; │ │ │ │ │ -726 out[34][0]=45.0*l2_x*dyl4_y-45.0*l4_x*dyl4_y; │ │ │ │ │ -727 out[34][1]=0.0; │ │ │ │ │ -728 out[35][0]=0.0; │ │ │ │ │ -729 out[35][1]=0.0; │ │ │ │ │ -730 out[36][0]=21.0*l3_x*dyl1_y-21.0*l5_x*dyl1_y; │ │ │ │ │ -731 out[36][1]=0.0; │ │ │ │ │ -732 out[37][0]=35.0*l3_x*dyl2_y-35.0*l5_x*dyl2_y; │ │ │ │ │ -733 out[37][1]=0.0; │ │ │ │ │ -734 out[38][0]=49.0*l3_x*dyl3_y-49.0*l5_x*dyl3_y; │ │ │ │ │ -735 out[38][1]=0.0; │ │ │ │ │ -736 out[39][0]=63.0*l3_x*dyl4_y-63.0*l5_x*dyl4_y; │ │ │ │ │ -737 out[39][1]=0.0; │ │ │ │ │ -738 out[40][0]=0.0; │ │ │ │ │ -739 out[40][1]=-dyl4_y; │ │ │ │ │ -740 out[41][0]=0.0; │ │ │ │ │ -741 out[41][1]=3.0*dyl1_y-3.0*dyl5_y; │ │ │ │ │ -742 out[42][0]=0.0; │ │ │ │ │ -743 out[42][1]=5.0*dyl2_y-5.0*dyl4_y; │ │ │ │ │ -744 out[43][0]=0.0; │ │ │ │ │ -745 out[43][1]=7.0*dyl3_y-7.0*dyl5_y; │ │ │ │ │ -746 out[44][0]=0.0; │ │ │ │ │ -747 out[44][1]=-3.0*l1_x*dyl4_y; │ │ │ │ │ -748 out[45][0]=0.0; │ │ │ │ │ -749 out[45][1]=9.0*l1_x*dyl1_y-9.0*l1_x*dyl5_y; │ │ │ │ │ -750 out[46][0]=0.0; │ │ │ │ │ -751 out[46][1]=15.0*l1_x*dyl2_y-15.0*l1_x*dyl4_y; │ │ │ │ │ -752 out[47][0]=0.0; │ │ │ │ │ -753 out[47][1]=21.0*l1_x*dyl3_y-21.0*l1_x*dyl5_y; │ │ │ │ │ -754 out[48][0]=0.0; │ │ │ │ │ -755 out[48][1]=-5.0*l2_x*dyl4_y; │ │ │ │ │ -756 out[49][0]=0.0; │ │ │ │ │ -757 out[49][1]=15.0*l2_x*dyl1_y-15.0*l2_x*dyl5_y; │ │ │ │ │ -758 out[50][0]=0.0; │ │ │ │ │ -759 out[50][1]=25.0*l2_x*dyl2_y-25.0*l2_x*dyl4_y; │ │ │ │ │ -760 out[51][0]=0.0; │ │ │ │ │ -761 out[51][1]=35.0*l2_x*dyl3_y-35.0*l2_x*dyl5_y; │ │ │ │ │ -762 out[52][0]=0.0; │ │ │ │ │ -763 out[52][1]=-7.0*l3_x*dyl4_y; │ │ │ │ │ -764 out[53][0]=0.0; │ │ │ │ │ -765 out[53][1]=21.0*l3_x*dyl1_y-21.0*l3_x*dyl5_y; │ │ │ │ │ -766 out[54][0]=0.0; │ │ │ │ │ -767 out[54][1]=35.0*l3_x*dyl2_y-35.0*l3_x*dyl4_y; │ │ │ │ │ -768 out[55][0]=0.0; │ │ │ │ │ -769 out[55][1]=49.0*l3_x*dyl3_y-49.0*l3_x*dyl5_y; │ │ │ │ │ -770 out[56][0]=0.0; │ │ │ │ │ -771 out[56][1]=-9.0*l4_x*dyl4_y; │ │ │ │ │ -772 out[57][0]=0.0; │ │ │ │ │ -773 out[57][1]=27.0*l4_x*dyl1_y-27.0*l4_x*dyl5_y; │ │ │ │ │ -774 out[58][0]=0.0; │ │ │ │ │ -775 out[58][1]=45.0*l4_x*dyl2_y-45.0*l4_x*dyl4_y; │ │ │ │ │ -776 out[59][0]=0.0; │ │ │ │ │ -777 out[59][1]=63.0*l4_x*dyl3_y-63.0*l4_x*dyl5_y; │ │ │ │ │ -778 } else { │ │ │ │ │ -779 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -780 } │ │ │ │ │ -781 } else { │ │ │ │ │ -782 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -783 } │ │ │ │ │ -784 } │ │ │ │ │ -785 │ │ │ │ │ -_7_8_7 unsigned int _o_r_d_e_r () const │ │ │ │ │ -788 { │ │ │ │ │ -789 return 9; │ │ │ │ │ -790 } │ │ │ │ │ -791 │ │ │ │ │ -792 private: │ │ │ │ │ -793 R sign0, sign1, sign2, sign3; │ │ │ │ │ -794 }; │ │ │ │ │ -795} │ │ │ │ │ -796 │ │ │ │ │ -797#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +35 for (size_t i=0; i<5; i++) │ │ │ │ │ +36 sign[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +37 │ │ │ │ │ +38 Scalar r = 1/std::sqrt(2); │ │ │ │ │ +39 │ │ │ │ │ +40 n[0] = { 0.0, 0.0, -1.0}; │ │ │ │ │ +41 n[1] = {-1.0, 0.0, 0.0}; │ │ │ │ │ +42 n[2] = { r, 0.0, r}; │ │ │ │ │ +43 n[3] = { 0.0, -1.0, 0.0}; │ │ │ │ │ +44 n[4] = { 0.0, r, r}; │ │ │ │ │ +45 │ │ │ │ │ +46 c[0] = 1.0; │ │ │ │ │ +47 c[1] = 1/2.0; │ │ │ │ │ +48 c[2] = 1/2.0 * std::sqrt(2); │ │ │ │ │ +49 c[3] = 1/2.0; │ │ │ │ │ +50 c[4] = 1/2.0 * std::sqrt(2); │ │ │ │ │ +51 │ │ │ │ │ +52 m[0] = { 0.5, 0.5, 0.0}; │ │ │ │ │ +53 m[1] = { 0.0, 1/3.0, 1/3.0}; │ │ │ │ │ +54 m[2] = { 2/3.0, 1/3.0, 1/3.0}; │ │ │ │ │ +55 m[3] = { 1/3.0, 0.0, 1/3.0}; │ │ │ │ │ +56 m[4] = { 1/3.0, 2/3.0, 1/3.0}; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +67 template │ │ │ │ │ +_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +69 { │ │ │ │ │ +70 out.resize(5); │ │ │ │ │ +71 for(int i=0; i<5; i++) │ │ │ │ │ +72 out[i] = f(m[i]).dot(n[i]) * c[i] * sign[i]; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 // Facet orientations │ │ │ │ │ +77 std::array sign; │ │ │ │ │ +78 // Facet area │ │ │ │ │ +79 std::array c; │ │ │ │ │ +80 │ │ │ │ │ +81 // Facet normals │ │ │ │ │ +82 std::array n; │ │ │ │ │ +83 // Facet midpoints │ │ │ │ │ +84 std::array m; │ │ │ │ │ +85 }; │ │ │ │ │ +86} │ │ │ │ │ +87#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:492 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:787 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:210 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT4Cube2DLocalBasis(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT0PyramidLocalInterpolation(std::bitset< 5 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 32. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:68 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas2cube2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
raviartthomas2cube2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localfiniteelementtraits.hh"
│ │ │ │ +#include "raviartthomas2cube2d/raviartthomas2cube2dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas2cube2d/raviartthomas2cube2dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas2cube2d/raviartthomas2cube2dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT4Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-4 elements on quadrilaterals. More...
class  Dune::RT2Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas4cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +raviartthomas2cube2d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-4 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00254_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas2cube2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,123 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalcoefficients.hh
│ │ │ │ +
raviartthomas2cube2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24
│ │ │ │ -
25 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ -
30 {
│ │ │ │ -
31 li[5*i] = LocalKey(i,1,0);
│ │ │ │ -
32 li[5*i + 1] = LocalKey(i,1,1);
│ │ │ │ -
33 li[5*i + 2] = LocalKey(i,1,2);
│ │ │ │ -
34 li[5*i + 3] = LocalKey(i,1,3);
│ │ │ │ -
35 li[5*i + 4] = LocalKey(i,1,4);
│ │ │ │ -
36 }
│ │ │ │ -
37
│ │ │ │ -
38 for (std::size_t i=0; i<40; i++)
│ │ │ │ -
39 {
│ │ │ │ -
40 li[20 + i] = LocalKey(0,0,i);
│ │ │ │ -
41 }
│ │ │ │ -
42 }
│ │ │ │ -
│ │ │ │ -
43
│ │ │ │ -
│ │ │ │ -
45 std::size_t size () const
│ │ │ │ -
46 {
│ │ │ │ -
47 return 60;
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
51 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
52 {
│ │ │ │ -
53 return li[i];
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
56 private:
│ │ │ │ -
57 std::vector<LocalKey> li;
│ │ │ │ -
58 };
│ │ │ │ -
│ │ │ │ -
59}
│ │ │ │ -
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ +
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 basis(s),
│ │ │ │ +
46 interpolation(s)
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return basis;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return coefficients;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
60 {
│ │ │ │ +
61 return interpolation;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
65 unsigned int size () const
│ │ │ │ +
66 {
│ │ │ │ +
67 return basis.size();
│ │ │ │ +
68 }
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::quadrilateral;
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77 RT2Cube2DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
79 };
│ │ │ │ +
│ │ │ │ +
80}
│ │ │ │ +
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-4 elements on quadrilaterals.
Definition raviartthomas4cube2dlocalcoefficients.hh:23
│ │ │ │ -
RT4Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas4cube2dlocalcoefficients.hh:27
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas4cube2dlocalcoefficients.hh:45
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas4cube2dlocalcoefficients.hh:51
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas2cube2d.hh:27
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas2cube2d.hh:49
│ │ │ │ +
LocalFiniteElementTraits< RT2Cube2DLocalBasis< D, R >, RT2Cube2DLocalCoefficients, RT2Cube2DLocalInterpolation< RT2Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas2cube2d.hh:33
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas2cube2d.hh:54
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas2cube2d.hh:65
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas2cube2d.hh:70
│ │ │ │ +
RT2Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2d.hh:44
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas2cube2d.hh:59
│ │ │ │ +
RT2Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas2cube2d.hh:36
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas2cube2dlocalbasis.hh:28
│ │ │ │ +
Layout map for Raviart-Thomas-2 elements on quadrilaterals.
Definition raviartthomas2cube2dlocalcoefficients.hh:23
│ │ │ │ +
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas2cube2dlocalinterpolation.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,83 +1,136 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ -raviartthomas4cube2dlocalcoefficients.hh │ │ │ │ │ +raviartthomas2cube2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -_2_2 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -23 { │ │ │ │ │ -24 │ │ │ │ │ -25 public: │ │ │ │ │ -_2_7 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(60) │ │ │ │ │ -28 { │ │ │ │ │ -29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ -30 { │ │ │ │ │ -31 li[5*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 li[5*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -33 li[5*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -34 li[5*i + 3] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ -35 li[5*i + 4] = _L_o_c_a_l_K_e_y(i,1,4); │ │ │ │ │ -36 } │ │ │ │ │ -37 │ │ │ │ │ -38 for (std::size_t i=0; i<40; i++) │ │ │ │ │ -39 { │ │ │ │ │ -40 li[20 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -41 } │ │ │ │ │ -42 } │ │ │ │ │ -43 │ │ │ │ │ -_4_5 std::size_t _s_i_z_e () const │ │ │ │ │ -46 { │ │ │ │ │ -47 return 60; │ │ │ │ │ -48 } │ │ │ │ │ -49 │ │ │ │ │ -_5_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -52 { │ │ │ │ │ -53 return li[i]; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -56 private: │ │ │ │ │ -57 std::vector li; │ │ │ │ │ -58 }; │ │ │ │ │ -59} │ │ │ │ │ -60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +27 { │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +31 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +32 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_6 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_4 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ +45 basis(s), │ │ │ │ │ +46 interpolation(s) │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return basis; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return coefficients; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +60 { │ │ │ │ │ +61 return interpolation; │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ +66 { │ │ │ │ │ +67 return basis.size(); │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::quadrilateral; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +77 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +78 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +79 }; │ │ │ │ │ +80} │ │ │ │ │ +81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-4 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT4Cube2DLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT2Cube2DLocalBasis< D, R >, │ │ │ │ │ +RT2Cube2DLocalCoefficients, RT2Cube2DLocalInterpolation< RT2Cube2DLocalBasis< │ │ │ │ │ +D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT2Cube2DLocalFiniteElement(int s) │ │ │ │ │ +Make set number s, where 0 <= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT2Cube2DLocalFiniteElement() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalcoefficients.hh:51 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2d.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-2 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:25 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas03d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas4cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
raviartthomas03d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "raviartthomas03d/raviartthomas03dlocalbasis.hh"
│ │ │ │ +#include "raviartthomas03d/raviartthomas03dlocalcoefficients.hh"
│ │ │ │ +#include "raviartthomas03d/raviartthomas03dlocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT4Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference triangle. More...
class  Dune::RT03DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on tetrahedra. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas4cube2dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +raviartthomas03d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +  _Z_e_r_o order Raviart-Thomas shape functions on tetrahedra. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00257_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas4cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas03d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,173 +70,125 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas4cube2dlocalinterpolation.hh
│ │ │ │ +
raviartthomas03d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
28
│ │ │ │ -
│ │ │ │ -
34 RT4Cube2DLocalInterpolation (unsigned int s = 0)
│ │ │ │ -
35 {
│ │ │ │ -
36 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ -
37 if (s & 1)
│ │ │ │ -
38 {
│ │ │ │ -
39 sign0 *= -1.0;
│ │ │ │ -
40 }
│ │ │ │ -
41 if (s & 2)
│ │ │ │ -
42 {
│ │ │ │ -
43 sign1 *= -1.0;
│ │ │ │ -
44 }
│ │ │ │ -
45 if (s & 4)
│ │ │ │ -
46 {
│ │ │ │ -
47 sign2 *= -1.0;
│ │ │ │ -
48 }
│ │ │ │ -
49 if (s & 8)
│ │ │ │ -
50 {
│ │ │ │ -
51 sign3 *= -1.0;
│ │ │ │ -
52 }
│ │ │ │ -
53
│ │ │ │ -
54 n0[0] = -1.0;
│ │ │ │ -
55 n0[1] = 0.0;
│ │ │ │ -
56 n1[0] = 1.0;
│ │ │ │ -
57 n1[1] = 0.0;
│ │ │ │ -
58 n2[0] = 0.0;
│ │ │ │ -
59 n2[1] = -1.0;
│ │ │ │ -
60 n3[0] = 0.0;
│ │ │ │ -
61 n3[1] = 1.0;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
72 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
73 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
74 {
│ │ │ │ -
75 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
76 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
77 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ +
27 class
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 {}
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
43 RT03DLocalFiniteElement (std::bitset<4> s) :
│ │ │ │ +
44 basis(s),
│ │ │ │ +
45 interpolation(s)
│ │ │ │ +
46 {}
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ +
48 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
49 {
│ │ │ │ +
50 return basis;
│ │ │ │ +
51 }
│ │ │ │ +
│ │ │ │ +
52
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
54 {
│ │ │ │ +
55 return coefficients;
│ │ │ │ +
56 }
│ │ │ │ +
│ │ │ │ +
57
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
59 {
│ │ │ │ +
60 return interpolation;
│ │ │ │ +
61 }
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ +
63 unsigned int size () const
│ │ │ │ +
64 {
│ │ │ │ +
65 return 4;
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
68 static constexpr GeometryType type ()
│ │ │ │ +
69 {
│ │ │ │ +
70 return GeometryTypes::tetrahedron;
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
73 private:
│ │ │ │ + │ │ │ │ +
75 RT03DLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
77 };
│ │ │ │ +
│ │ │ │
78
│ │ │ │ -
79 out.resize(60);
│ │ │ │ -
80 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
81
│ │ │ │ -
82 const int qOrder = 12;
│ │ │ │ -
83 const QuadratureRule<Scalar,1>& rule = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
84
│ │ │ │ -
85 for (typename QuadratureRule<Scalar,1>::const_iterator it=rule.begin(); it!=rule.end(); ++it)
│ │ │ │ -
86 {
│ │ │ │ -
87 Scalar qPos = it->position();
│ │ │ │ -
88 typename LB::Traits::DomainType localPos;
│ │ │ │ -
89
│ │ │ │ -
90 localPos[0] = 0.0;
│ │ │ │ -
91 localPos[1] = qPos;
│ │ │ │ -
92 auto y = f(localPos);
│ │ │ │ -
93 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0;
│ │ │ │ -
94 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ -
95 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign0;
│ │ │ │ -
96 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*it->weight();
│ │ │ │ -
97 out[4] += (y[0]*n0[0] + y[1]*n0[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign0;
│ │ │ │ -
98
│ │ │ │ -
99 localPos[0] = 1.0;
│ │ │ │ -
100 localPos[1] = qPos;
│ │ │ │ -
101 y = f(localPos);
│ │ │ │ -
102 out[5] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1;
│ │ │ │ -
103 out[6] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ -
104 out[7] += (y[0]*n1[0] + y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign1;
│ │ │ │ -
105 out[8] += (y[0]*n1[0] + y[1]*n1[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*it->weight();
│ │ │ │ -
106 out[9] += (y[0]*n1[0] + y[1]*n1[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign1;
│ │ │ │ -
107
│ │ │ │ -
108 localPos[0] = qPos;
│ │ │ │ -
109 localPos[1] = 0.0;
│ │ │ │ -
110 y = f(localPos);
│ │ │ │ -
111 out[10] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2;
│ │ │ │ -
112 out[11] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight();
│ │ │ │ -
113 out[12] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign2;
│ │ │ │ -
114 out[13] += (y[0]*n2[0] + y[1]*n2[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos - 12.0*qPos + 1.0)*it->weight();
│ │ │ │ -
115 out[14] += (y[0]*n2[0] + y[1]*n2[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign2;
│ │ │ │ -
116
│ │ │ │ -
117 localPos[0] = qPos;
│ │ │ │ -
118 localPos[1] = 1.0;
│ │ │ │ -
119 y = f(localPos);
│ │ │ │ -
120 out[15] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3;
│ │ │ │ -
121 out[16] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight();
│ │ │ │ -
122 out[17] += (y[0]*n3[0] + y[1]*n3[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it->weight()*sign3;
│ │ │ │ -
123 out[18] += (y[0]*n3[0] + y[1]*n3[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + 12.0*qPos - 1.0)*it->weight();
│ │ │ │ -
124 out[19] += (y[0]*n3[0] + y[1]*n3[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)-140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign3;
│ │ │ │ -
125 }
│ │ │ │ -
126
│ │ │ │ -
127 const QuadratureRule<Vector,2>& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ -
128
│ │ │ │ -
129 for (typename QuadratureRule<Vector,2>::const_iterator it = rule2.begin();
│ │ │ │ -
130 it != rule2.end(); ++it)
│ │ │ │ -
131 {
│ │ │ │ -
132 FieldVector<double,2> qPos = it->position();
│ │ │ │ -
133
│ │ │ │ -
134 auto y = f(qPos);
│ │ │ │ -
135 std::vector<std::vector<double> > l(2,std::vector<double> (5));
│ │ │ │ -
136 l[0][0]=1.0;
│ │ │ │ -
137 l[1][0]=1.0;
│ │ │ │ -
138 l[0][1]=2.0*qPos[0]-1.0;
│ │ │ │ -
139 l[1][1]=2.0*qPos[1]-1.0;
│ │ │ │ -
140 l[0][2]=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0;
│ │ │ │ -
141 l[1][2]=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0;
│ │ │ │ -
142 l[0][3]=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] - 1.0;
│ │ │ │ -
143 l[1][3]=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] - 1.0;
│ │ │ │ -
144 l[0][4]=1.0-20.0*qPos[0]+90.0*pow(qPos[0],2)-140.0*pow(qPos[0],3)+70.0*pow(qPos[0],4);
│ │ │ │ -
145 l[1][4]=1.0-20.0*qPos[1]+90.0*pow(qPos[1],2)-140.0*pow(qPos[1],3)+70.0*pow(qPos[1],4);
│ │ │ │ -
146
│ │ │ │ -
147 for (int i=0;i<4;i++)
│ │ │ │ -
148 for (int j=0;j<5;j++)
│ │ │ │ -
149 out[20+i*5+j] +=y[0]*l[0][i]*l[1][j]*it->weight();
│ │ │ │ -
150
│ │ │ │ -
151 for (int i=0;i<5;i++)
│ │ │ │ -
152 for (int j=0;j<4;j++)
│ │ │ │ -
153 out[40+i*4+j] +=y[1]*l[0][i]*l[1][j]*it->weight();
│ │ │ │ -
154 }
│ │ │ │ -
155 }
│ │ │ │ -
│ │ │ │ -
156
│ │ │ │ -
157 private:
│ │ │ │ -
158 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3;
│ │ │ │ -
159 typename LB::Traits::DomainType n0, n1, n2, n3;
│ │ │ │ -
160 };
│ │ │ │ -
│ │ │ │ -
161}
│ │ │ │ -
162
│ │ │ │ -
163#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
79}
│ │ │ │ +
80
│ │ │ │ +
81#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas4cube2dlocalinterpolation.hh:25
│ │ │ │ -
RT4Cube2DLocalInterpolation(unsigned int s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas4cube2dlocalinterpolation.hh:34
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas4cube2dlocalinterpolation.hh:73
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Zero order Raviart-Thomas shape functions on tetrahedra.
Definition raviartthomas03d.hh:29
│ │ │ │ +
LocalFiniteElementTraits< RT03DLocalBasis< D, R >, RT03DLocalCoefficients, RT03DLocalInterpolation< RT03DLocalBasis< D, R > > > Traits
Definition raviartthomas03d.hh:32
│ │ │ │ +
unsigned int size() const
Definition raviartthomas03d.hh:63
│ │ │ │ +
static constexpr GeometryType type()
Definition raviartthomas03d.hh:68
│ │ │ │ +
RT03DLocalFiniteElement(std::bitset< 4 > s)
Constructor with explicitly given face orientations.
Definition raviartthomas03d.hh:43
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas03d.hh:53
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas03d.hh:48
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas03d.hh:58
│ │ │ │ +
RT03DLocalFiniteElement()
Standard constructor.
Definition raviartthomas03d.hh:35
│ │ │ │ +
Definition raviartthomas03dlocalbasis.hh:27
│ │ │ │ +
Definition raviartthomas03dlocalcoefficients.hh:25
│ │ │ │ +
Definition raviartthomas03dlocalinterpolation.hh:17
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,187 +1,134 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d │ │ │ │ │ -raviartthomas4cube2dlocalinterpolation.hh │ │ │ │ │ +raviartthomas03d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS4_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -25 { │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -28 │ │ │ │ │ -_3_4 _R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s = 0) │ │ │ │ │ -35 { │ │ │ │ │ -36 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ -37 if (s & 1) │ │ │ │ │ -38 { │ │ │ │ │ -39 sign0 *= -1.0; │ │ │ │ │ -40 } │ │ │ │ │ -41 if (s & 2) │ │ │ │ │ -42 { │ │ │ │ │ -43 sign1 *= -1.0; │ │ │ │ │ -44 } │ │ │ │ │ -45 if (s & 4) │ │ │ │ │ -46 { │ │ │ │ │ -47 sign2 *= -1.0; │ │ │ │ │ -48 } │ │ │ │ │ -49 if (s & 8) │ │ │ │ │ -50 { │ │ │ │ │ -51 sign3 *= -1.0; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -54 n0[0] = -1.0; │ │ │ │ │ -55 n0[1] = 0.0; │ │ │ │ │ -56 n1[0] = 1.0; │ │ │ │ │ -57 n1[1] = 0.0; │ │ │ │ │ -58 n2[0] = 0.0; │ │ │ │ │ -59 n2[1] = -1.0; │ │ │ │ │ -60 n3[0] = 0.0; │ │ │ │ │ -61 n3[1] = 1.0; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -72 template │ │ │ │ │ -_7_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -74 { │ │ │ │ │ -75 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -76 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -77 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class │ │ │ │ │ +28 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_2 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_5 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +36 {} │ │ │ │ │ +37 │ │ │ │ │ +_4_3 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<4> s) : │ │ │ │ │ +44 basis(s), │ │ │ │ │ +45 interpolation(s) │ │ │ │ │ +46 {} │ │ │ │ │ +47 │ │ │ │ │ +_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +49 { │ │ │ │ │ +50 return basis; │ │ │ │ │ +51 } │ │ │ │ │ +52 │ │ │ │ │ +_5_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +54 { │ │ │ │ │ +55 return coefficients; │ │ │ │ │ +56 } │ │ │ │ │ +57 │ │ │ │ │ +_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +59 { │ │ │ │ │ +60 return interpolation; │ │ │ │ │ +61 } │ │ │ │ │ +62 │ │ │ │ │ +_6_3 unsigned int _s_i_z_e () const │ │ │ │ │ +64 { │ │ │ │ │ +65 return 4; │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +69 { │ │ │ │ │ +70 return GeometryTypes::tetrahedron; │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +73 private: │ │ │ │ │ +74 _R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +75 _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +76 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ +77 }; │ │ │ │ │ 78 │ │ │ │ │ -79 out.resize(60); │ │ │ │ │ -80 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -81 │ │ │ │ │ -82 const int qOrder = 12; │ │ │ │ │ -83 const QuadratureRule& rule = QuadratureRules::rule │ │ │ │ │ -(GeometryTypes::cube(1), qOrder); │ │ │ │ │ -84 │ │ │ │ │ -85 for (typename QuadratureRule::const_iterator it=rule.begin(); │ │ │ │ │ -it!=rule.end(); ++it) │ │ │ │ │ -86 { │ │ │ │ │ -87 Scalar qPos = it->position(); │ │ │ │ │ -88 typename LB::Traits::DomainType localPos; │ │ │ │ │ -89 │ │ │ │ │ -90 localPos[0] = 0.0; │ │ │ │ │ -91 localPos[1] = qPos; │ │ │ │ │ -92 auto y = f(localPos); │ │ │ │ │ -93 out[0] += (y[0]*n0[0] + y[1]*n0[1])*it->weight()*sign0; │ │ │ │ │ -94 out[1] += (y[0]*n0[0] + y[1]*n0[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -95 out[2] += (y[0]*n0[0] + y[1]*n0[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign0; │ │ │ │ │ -96 out[3] += (y[0]*n0[0] + y[1]*n0[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos + │ │ │ │ │ -12.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -97 out[4] += (y[0]*n0[0] + y[1]*n0[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ -140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign0; │ │ │ │ │ -98 │ │ │ │ │ -99 localPos[0] = 1.0; │ │ │ │ │ -100 localPos[1] = qPos; │ │ │ │ │ -101 y = f(localPos); │ │ │ │ │ -102 out[5] += (y[0]*n1[0] + y[1]*n1[1])*it->weight()*sign1; │ │ │ │ │ -103 out[6] += (y[0]*n1[0] + y[1]*n1[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ -104 out[7] += (y[0]*n1[0] + y[1]*n1[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign1; │ │ │ │ │ -105 out[8] += (y[0]*n1[0] + y[1]*n1[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos │ │ │ │ │ -- 12.0*qPos + 1.0)*it->weight(); │ │ │ │ │ -106 out[9] += (y[0]*n1[0] + y[1]*n1[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ -140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign1; │ │ │ │ │ -107 │ │ │ │ │ -108 localPos[0] = qPos; │ │ │ │ │ -109 localPos[1] = 0.0; │ │ │ │ │ -110 y = f(localPos); │ │ │ │ │ -111 out[10] += (y[0]*n2[0] + y[1]*n2[1])*it->weight()*sign2; │ │ │ │ │ -112 out[11] += (y[0]*n2[0] + y[1]*n2[1])*(1.0 - 2.0*qPos)*it->weight(); │ │ │ │ │ -113 out[12] += (y[0]*n2[0] + y[1]*n2[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign2; │ │ │ │ │ -114 out[13] += (y[0]*n2[0] + y[1]*n2[1])*(-20.0*qPos*qPos*qPos + 30.0*qPos*qPos │ │ │ │ │ -- 12.0*qPos + 1.0)*it->weight(); │ │ │ │ │ -115 out[14] += (y[0]*n2[0] + y[1]*n2[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ -140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign2; │ │ │ │ │ -116 │ │ │ │ │ -117 localPos[0] = qPos; │ │ │ │ │ -118 localPos[1] = 1.0; │ │ │ │ │ -119 y = f(localPos); │ │ │ │ │ -120 out[15] += (y[0]*n3[0] + y[1]*n3[1])*it->weight()*sign3; │ │ │ │ │ -121 out[16] += (y[0]*n3[0] + y[1]*n3[1])*(2.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -122 out[17] += (y[0]*n3[0] + y[1]*n3[1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*it- │ │ │ │ │ ->weight()*sign3; │ │ │ │ │ -123 out[18] += (y[0]*n3[0] + y[1]*n3[1])*(20.0*qPos*qPos*qPos - 30.0*qPos*qPos │ │ │ │ │ -+ 12.0*qPos - 1.0)*it->weight(); │ │ │ │ │ -124 out[19] += (y[0]*n3[0] + y[1]*n3[1])*(1.0-20.0*qPos+90.0*pow(qPos,2)- │ │ │ │ │ -140.0*pow(qPos,3)+70.0*pow(qPos,4))*it->weight()*sign3; │ │ │ │ │ -125 } │ │ │ │ │ -126 │ │ │ │ │ -127 const QuadratureRule& rule2 = QuadratureRules::rule │ │ │ │ │ -(GeometryTypes::cube(2), qOrder); │ │ │ │ │ -128 │ │ │ │ │ -129 for (typename QuadratureRule::const_iterator it = rule2.begin(); │ │ │ │ │ -130 it != rule2.end(); ++it) │ │ │ │ │ -131 { │ │ │ │ │ -132 FieldVector qPos = it->position(); │ │ │ │ │ -133 │ │ │ │ │ -134 auto y = f(qPos); │ │ │ │ │ -135 std::vector > l(2,std::vector (5)); │ │ │ │ │ -136 l[0][0]=1.0; │ │ │ │ │ -137 l[1][0]=1.0; │ │ │ │ │ -138 l[0][1]=2.0*qPos[0]-1.0; │ │ │ │ │ -139 l[1][1]=2.0*qPos[1]-1.0; │ │ │ │ │ -140 l[0][2]=6.0*qPos[0]*qPos[0]-6.0*qPos[0]+1.0; │ │ │ │ │ -141 l[1][2]=6.0*qPos[1]*qPos[1]-6.0*qPos[1]+1.0; │ │ │ │ │ -142 l[0][3]=20.0*qPos[0]*qPos[0]*qPos[0] - 30.0*qPos[0]*qPos[0] + 12.0*qPos[0] │ │ │ │ │ -- 1.0; │ │ │ │ │ -143 l[1][3]=20.0*qPos[1]*qPos[1]*qPos[1] - 30.0*qPos[1]*qPos[1] + 12.0*qPos[1] │ │ │ │ │ -- 1.0; │ │ │ │ │ -144 l[0][4]=1.0-20.0*qPos[0]+90.0*pow(qPos[0],2)-140.0*pow(qPos[0],3)+70.0*pow │ │ │ │ │ -(qPos[0],4); │ │ │ │ │ -145 l[1][4]=1.0-20.0*qPos[1]+90.0*pow(qPos[1],2)-140.0*pow(qPos[1],3)+70.0*pow │ │ │ │ │ -(qPos[1],4); │ │ │ │ │ -146 │ │ │ │ │ -147 for (int i=0;i<4;i++) │ │ │ │ │ -148 for (int j=0;j<5;j++) │ │ │ │ │ -149 out[20+i*5+j] +=y[0]*l[0][i]*l[1][j]*it->weight(); │ │ │ │ │ -150 │ │ │ │ │ -151 for (int i=0;i<5;i++) │ │ │ │ │ -152 for (int j=0;j<4;j++) │ │ │ │ │ -153 out[40+i*4+j] +=y[1]*l[0][i]*l[1][j]*it->weight(); │ │ │ │ │ -154 } │ │ │ │ │ -155 } │ │ │ │ │ -156 │ │ │ │ │ -157 private: │ │ │ │ │ -158 typename LB::Traits::RangeFieldType sign0, sign1, sign2, sign3; │ │ │ │ │ -159 typename LB::Traits::DomainType n0, n1, n2, n3; │ │ │ │ │ -160 }; │ │ │ │ │ -161} │ │ │ │ │ -162 │ │ │ │ │ -163#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS3_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +79} │ │ │ │ │ +80 │ │ │ │ │ +81#endif │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT4Cube2DLocalInterpolation(unsigned int s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2dlocalinterpolation.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Zero order Raviart-Thomas shape functions on tetrahedra. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RT03DLocalBasis< D, R >, RT03DLocalCoefficients, │ │ │ │ │ +RT03DLocalInterpolation< RT03DLocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT03DLocalFiniteElement(std::bitset< 4 > s) │ │ │ │ │ +Constructor with explicitly given face orientations. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:58 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RT03DLocalFiniteElement() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03d.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:17 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramid.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0pyramid.hh File Reference
│ │ │ │ +
raviartthomas1cube3dlocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas0pyramid/raviartthomas0pyramidlocalbasis.hh"
│ │ │ │ -#include "raviartthomas0pyramid/raviartthomas0pyramidlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas0pyramid/raviartthomas0pyramidlocalinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include "../../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PyramidLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on pyramids. More...
class  Dune::RT1Cube3DLocalCoefficients
 Layout map for Raviart-Thomas-1 elements on quadrilaterals. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0pyramid.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +raviartthomas1cube3dlocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on pyramids. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Layout map for Raviart-Thomas-1 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00260_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0pyramid.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0pyramid.hh
│ │ │ │ +
raviartthomas1cube3dlocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::pyramid;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 RT0PyramidLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "../../common/localkey.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for (std::size_t i = 0; i < 6; i++)
│ │ │ │ +
31 {
│ │ │ │ +
32 li[i] = LocalKey(i,1,0);
│ │ │ │ +
33 li[i + 6] = LocalKey(i,1,1);
│ │ │ │ +
34 li[i + 12] = LocalKey(i,1,2);
│ │ │ │ +
35 li[i + 18] = LocalKey(i,1,3);
│ │ │ │ +
36 }
│ │ │ │ +
37
│ │ │ │ +
38 for (std::size_t i = 0; i < 12; i++)
│ │ │ │ +
39 {
│ │ │ │ +
40 li[i + 24] = LocalKey(0,0,i);
│ │ │ │ +
41 }
│ │ │ │ +
42 }
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
45 std::size_t size () const
│ │ │ │ +
46 {
│ │ │ │ +
47 return 36;
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
51 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
52 {
│ │ │ │ +
53 return li[i];
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
56 private:
│ │ │ │ +
57 std::vector<LocalKey> li;
│ │ │ │ +
58 };
│ │ │ │ +
│ │ │ │ +
59}
│ │ │ │ +
60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on pyramids.
Definition raviartthomas0pyramid.hh:27
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0pyramid.hh:54
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0pyramid.hh:65
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas0pyramid.hh:70
│ │ │ │ -
RT0PyramidLocalFiniteElement(int s)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0pyramid.hh:44
│ │ │ │ -
LocalFiniteElementTraits< RT0PyramidLocalBasis< D, R >, RT0PyramidLocalCoefficients, RT0PyramidLocalInterpolation< RT0PyramidLocalBasis< D, R > > > Traits
Definition raviartthomas0pyramid.hh:33
│ │ │ │ -
RT0PyramidLocalFiniteElement()
Standard constructor.
Definition raviartthomas0pyramid.hh:36
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0pyramid.hh:49
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0pyramid.hh:59
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference pyramid.
Definition raviartthomas0pyramidlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on pyramids.
Definition raviartthomas0pyramidlocalcoefficients.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas0pyramidlocalinterpolation.hh:22
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube3dlocalcoefficients.hh:24
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition raviartthomas1cube3dlocalcoefficients.hh:45
│ │ │ │ +
RT1Cube3DLocalCoefficients()
Standard constructor.
Definition raviartthomas1cube3dlocalcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas1cube3dlocalcoefficients.hh:51
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +1,83 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0pyramid.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ +raviartthomas1cube3dlocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::pyramid; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PYRAMID_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "../../common/localkey.hh" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +_2_3 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(36) │ │ │ │ │ +29 { │ │ │ │ │ +30 for (std::size_t i = 0; i < 6; i++) │ │ │ │ │ +31 { │ │ │ │ │ +32 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ +33 li[i + 6] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ +34 li[i + 12] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ +35 li[i + 18] = _L_o_c_a_l_K_e_y(i,1,3); │ │ │ │ │ +36 } │ │ │ │ │ +37 │ │ │ │ │ +38 for (std::size_t i = 0; i < 12; i++) │ │ │ │ │ +39 { │ │ │ │ │ +40 li[i + 24] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +41 } │ │ │ │ │ +42 } │ │ │ │ │ +43 │ │ │ │ │ +_4_5 std::size_t _s_i_z_e () const │ │ │ │ │ +46 { │ │ │ │ │ +47 return 36; │ │ │ │ │ +48 } │ │ │ │ │ +49 │ │ │ │ │ +_5_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +52 { │ │ │ │ │ +53 return li[i]; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +56 private: │ │ │ │ │ +57 std::vector li; │ │ │ │ │ +58 }; │ │ │ │ │ +59} │ │ │ │ │ +60#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALCOEFFICIENTS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on pyramids. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0PyramidLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT0PyramidLocalBasis< D, R >, │ │ │ │ │ -RT0PyramidLocalCoefficients, RT0PyramidLocalInterpolation< │ │ │ │ │ -RT0PyramidLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0PyramidLocalFiniteElement() │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RT1Cube3DLocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramid.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on pyramids. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_y_r_a_m_i_d_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0pyramidlocalinterpolation.hh:22 │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:51 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prism.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0prism.hh File Reference
│ │ │ │ +
raviartthomas1cube3dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas0prism/raviartthomas0prismlocalbasis.hh"
│ │ │ │ -#include "raviartthomas0prism/raviartthomas0prismlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas0prism/raviartthomas0prismlocalinterpolation.hh"
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include "../../common/localbasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0PrismLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on prisms. More...
class  Dune::RT1Cube3DLocalBasis< D, R >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0prism.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +raviartthomas1cube3dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on prisms. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00263_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0prism.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,642 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0prism.hh
│ │ │ │ +
raviartthomas1cube3dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include "../../common/localbasis.hh"
│ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 basis(s),
│ │ │ │ -
47 interpolation(s)
│ │ │ │ -
48 {}
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
50 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
51 {
│ │ │ │ -
52 return basis;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ -
57 return coefficients;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
61 {
│ │ │ │ -
62 return interpolation;
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ -
66 unsigned int size () const
│ │ │ │ -
67 {
│ │ │ │ -
68 return basis.size();
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ -
71 static constexpr GeometryType type ()
│ │ │ │ -
72 {
│ │ │ │ -
73 return GeometryTypes::prism;
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
76 private:
│ │ │ │ - │ │ │ │ -
78 RT0PrismLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81}
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
26 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ +
31 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ +
32 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
39 RT1Cube3DLocalBasis (unsigned int s = 0)
│ │ │ │ +
40 {
│ │ │ │ +
41 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ +
42 if (s & 1)
│ │ │ │ +
43 {
│ │ │ │ +
44 sign0 = -1.0;
│ │ │ │ +
45 }
│ │ │ │ +
46 if (s & 2)
│ │ │ │ +
47 {
│ │ │ │ +
48 sign1 = -1.0;
│ │ │ │ +
49 }
│ │ │ │ +
50 if (s & 4)
│ │ │ │ +
51 {
│ │ │ │ +
52 sign2 = -1.0;
│ │ │ │ +
53 }
│ │ │ │ +
54 if (s & 8)
│ │ │ │ +
55 {
│ │ │ │ +
56 sign3 = -1.0;
│ │ │ │ +
57 }
│ │ │ │ +
58 if (s & 16)
│ │ │ │ +
59 {
│ │ │ │ +
60 sign4 = -1.0;
│ │ │ │ +
61 }
│ │ │ │ +
62 if (s & 32)
│ │ │ │ +
63 {
│ │ │ │ +
64 sign5 = -1.0;
│ │ │ │ +
65 }
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
69 unsigned int size () const
│ │ │ │ +
70 {
│ │ │ │ +
71 return 36;
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
73
│ │ │ │ +
│ │ │ │ +
80 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
81 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
82 {
│ │ │ │ +
83 out.resize(36);
│ │ │ │ +
84
│ │ │ │ +
85 out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0);
│ │ │ │ +
86 out[0][1] = 0.0;
│ │ │ │ +
87 out[0][2] = 0.0;
│ │ │ │ +
88
│ │ │ │ +
89 out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]);
│ │ │ │ +
90 out[1][1] = 0.0;
│ │ │ │ +
91 out[1][2] = 0.0;
│ │ │ │ +
92
│ │ │ │ +
93 out[2][0] = 0.0;
│ │ │ │ +
94 out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0);
│ │ │ │ +
95 out[2][2] = 0.0;
│ │ │ │ +
96
│ │ │ │ +
97 out[3][0] = 0.0;
│ │ │ │ +
98 out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]);
│ │ │ │ +
99 out[3][2] = 0.0;
│ │ │ │ +
100
│ │ │ │ +
101 out[4][0] = 0.0;
│ │ │ │ +
102 out[4][1] = 0.0;
│ │ │ │ +
103 out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0);
│ │ │ │ +
104
│ │ │ │ +
105 out[5][0] = 0.0;
│ │ │ │ +
106 out[5][1] = 0.0;
│ │ │ │ +
107 out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]);
│ │ │ │ +
108
│ │ │ │ +
109 out[6][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - 6.0*in[1] -12.0*in[0] + 3.0;
│ │ │ │ +
110 out[6][1] = 0.0;
│ │ │ │ +
111 out[6][2] = 0.0;
│ │ │ │ +
112
│ │ │ │ +
113 out[7][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - 6.0*in[0];
│ │ │ │ +
114 out[7][1] = 0.0;
│ │ │ │ +
115 out[7][2] = 0.0;
│ │ │ │ +
116
│ │ │ │ +
117 out[8][0] = 0.0;
│ │ │ │ +
118 out[8][1] = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + 12.0*in[1] + 6.0*in[0] - 3.0;
│ │ │ │ +
119 out[8][2] = 0.0;
│ │ │ │ +
120
│ │ │ │ +
121 out[9][0] = 0.0;
│ │ │ │ +
122 out[9][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in[1]*in[1];
│ │ │ │ +
123 out[9][2] = 0.0;
│ │ │ │ +
124
│ │ │ │ +
125 out[10][0] = 0.0;
│ │ │ │ +
126 out[10][1] = 0.0;
│ │ │ │ +
127 out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
│ │ │ │ +
128
│ │ │ │ +
129 out[11][0] = 0.0;
│ │ │ │ +
130 out[11][1] = 0.0;
│ │ │ │ +
131 out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in[2]*in[2];
│ │ │ │ +
132
│ │ │ │ +
133 out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
│ │ │ │ +
134 out[12][1] = 0.0;
│ │ │ │ +
135 out[12][2] = 0.0;
│ │ │ │ +
136
│ │ │ │ +
137 out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in[0]*in[0]*in[2];
│ │ │ │ +
138 out[13][1] = 0.0;
│ │ │ │ +
139 out[13][2] = 0.0;
│ │ │ │ +
140
│ │ │ │ +
141 out[14][0] = 0.0;
│ │ │ │ +
142 out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
│ │ │ │ +
143 out[14][2] = 0.0;
│ │ │ │ +
144
│ │ │ │ +
145 out[15][0] = 0.0;
│ │ │ │ +
146 out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in[1]*in[1]*in[2];
│ │ │ │ +
147 out[15][2] = 0.0;
│ │ │ │ +
148
│ │ │ │ +
149 out[16][0] = 0.0;
│ │ │ │ +
150 out[16][1] = 0.0;
│ │ │ │ +
151 out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
│ │ │ │ +
152
│ │ │ │ +
153 out[17][0] = 0.0;
│ │ │ │ +
154 out[17][1] = 0.0;
│ │ │ │ +
155 out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in[2]*in[2];
│ │ │ │ +
156
│ │ │ │ +
157 out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] - 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
158 out[18][1] = 0.0;
│ │ │ │ +
159 out[18][2] = 0.0;
│ │ │ │ +
160
│ │ │ │ +
161 out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
162 out[19][1] = 0.0;
│ │ │ │ +
163 out[19][2] = 0.0;
│ │ │ │ +
164
│ │ │ │ +
165 out[20][0] = 0.0;
│ │ │ │ +
166 out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] + 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
167 out[20][2] = 0.0;
│ │ │ │ +
168
│ │ │ │ +
169 out[21][0] = 0.0;
│ │ │ │ +
170 out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
171 out[21][2] = 0.0;
│ │ │ │ +
172
│ │ │ │ +
173 out[22][0] = 0.0;
│ │ │ │ +
174 out[22][1] = 0.0;
│ │ │ │ +
175 out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] + 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
176
│ │ │ │ +
177 out[23][0] = 0.0;
│ │ │ │ +
178 out[23][1] = 0.0;
│ │ │ │ +
179 out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
180
│ │ │ │ +
181 out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
182 out[24][1] = 0.0;
│ │ │ │ +
183 out[24][2] = 0.0;
│ │ │ │ +
184
│ │ │ │ +
185 out[25][0] = 0.0;
│ │ │ │ +
186 out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
187 out[25][2] = 0.0;
│ │ │ │ +
188
│ │ │ │ +
189 out[26][0] = 0.0;
│ │ │ │ +
190 out[26][1] = 0.0;
│ │ │ │ +
191 out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
192
│ │ │ │ +
193 out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - 216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
194 out[27][1] = 0.0;
│ │ │ │ +
195 out[27][2] = 0.0;
│ │ │ │ +
196
│ │ │ │ +
197 out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - 288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
198 out[28][1] = 0.0;
│ │ │ │ +
199 out[28][2] = 0.0;
│ │ │ │ +
200
│ │ │ │ +
201 out[29][0] = 0.0;
│ │ │ │ +
202 out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - 216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
203 out[29][2] = 0.0;
│ │ │ │ +
204
│ │ │ │ +
205 out[30][0] = 0.0;
│ │ │ │ +
206 out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - 288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
207 out[30][2] = 0.0;
│ │ │ │ +
208
│ │ │ │ +
209 out[31][0] = 0.0;
│ │ │ │ +
210 out[31][1] = 0.0;
│ │ │ │ +
211 out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
212
│ │ │ │ +
213 out[32][0] = 0.0;
│ │ │ │ +
214 out[32][1] = 0.0;
│ │ │ │ +
215 out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - 288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
216
│ │ │ │ +
217 out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2];
│ │ │ │ +
218 out[33][1] = 0.0;
│ │ │ │ +
219 out[33][2] = 0.0;
│ │ │ │ +
220
│ │ │ │ +
221 out[34][0] = 0.0;
│ │ │ │ +
222 out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2];
│ │ │ │ +
223 out[34][2] = 0.0;
│ │ │ │ +
224
│ │ │ │ +
225 out[35][0] = 0.0;
│ │ │ │ +
226 out[35][1] = 0.0;
│ │ │ │ +
227 out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2];
│ │ │ │ +
228 }
│ │ │ │ +
│ │ │ │ +
229
│ │ │ │ +
│ │ │ │ +
236 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ +
237 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
238 {
│ │ │ │ +
239 out.resize(36);
│ │ │ │ +
240
│ │ │ │ +
241 out[0][0][0] = sign0*(-6.0*in[0] + 4);
│ │ │ │ +
242 out[0][0][1] = 0;
│ │ │ │ +
243 out[0][0][2] = 0;
│ │ │ │ +
244 out[0][1][0] = 0;
│ │ │ │ +
245 out[0][1][1] = 0;
│ │ │ │ +
246 out[0][1][2] = 0;
│ │ │ │ +
247 out[0][2][0] = 0;
│ │ │ │ +
248 out[0][2][1] = 0;
│ │ │ │ +
249 out[0][2][2] = 0;
│ │ │ │ +
250
│ │ │ │ +
251 out[1][0][0] = sign1*(-2 + 6.0*in[0]);
│ │ │ │ +
252 out[1][0][1] = 0;
│ │ │ │ +
253 out[1][0][2] = 0;
│ │ │ │ +
254 out[1][1][0] = 0;
│ │ │ │ +
255 out[1][1][1] = 0;
│ │ │ │ +
256 out[1][1][2] = 0;
│ │ │ │ +
257 out[1][2][0] = 0;
│ │ │ │ +
258 out[1][2][1] = 0;
│ │ │ │ +
259 out[1][2][2] = 0;
│ │ │ │ +
260
│ │ │ │ +
261 out[2][0][0] = 0;
│ │ │ │ +
262 out[2][0][1] = 0;
│ │ │ │ +
263 out[2][0][2] = 0;
│ │ │ │ +
264 out[2][1][0] = 0;
│ │ │ │ +
265 out[2][1][1] = sign2*(-6.0*in[1] + 4);
│ │ │ │ +
266 out[2][1][2] = 0;
│ │ │ │ +
267 out[2][2][0] = 0;
│ │ │ │ +
268 out[2][2][1] = 0;
│ │ │ │ +
269 out[2][2][2] = 0;
│ │ │ │ +
270
│ │ │ │ +
271 out[3][0][0] = 0;
│ │ │ │ +
272 out[3][0][1] = 0;
│ │ │ │ +
273 out[3][0][2] = 0;
│ │ │ │ +
274 out[3][1][0] = 0;
│ │ │ │ +
275 out[3][1][1] = sign3*(6.0*in[1] - 2);
│ │ │ │ +
276 out[3][1][2] = 0;
│ │ │ │ +
277 out[3][2][0] = 0;
│ │ │ │ +
278 out[3][2][1] = 0;
│ │ │ │ +
279 out[3][2][2] = 0;
│ │ │ │ +
280
│ │ │ │ +
281 out[4][0][0] = 0;
│ │ │ │ +
282 out[4][0][1] = 0;
│ │ │ │ +
283 out[4][0][2] = 0;
│ │ │ │ +
284 out[4][1][0] = 0;
│ │ │ │ +
285 out[4][1][1] = 0;
│ │ │ │ +
286 out[4][1][2] = 0;
│ │ │ │ +
287 out[4][2][0] = 0;
│ │ │ │ +
288 out[4][2][1] = 0;
│ │ │ │ +
289 out[4][2][2] = sign4*(-6.0*in[2] + 4);
│ │ │ │ +
290
│ │ │ │ +
291 out[5][0][0] = 0;
│ │ │ │ +
292 out[5][0][1] = 0;
│ │ │ │ +
293 out[5][0][2] = 0;
│ │ │ │ +
294 out[5][1][0] = 0;
│ │ │ │ +
295 out[5][1][1] = 0;
│ │ │ │ +
296 out[5][1][2] = 0;
│ │ │ │ +
297 out[5][2][0] = 0;
│ │ │ │ +
298 out[5][2][1] = 0;
│ │ │ │ +
299 out[5][2][2] = sign5*(6.0*in[2] - 2);
│ │ │ │ +
300
│ │ │ │ +
301 out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0;
│ │ │ │ +
302 out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6;
│ │ │ │ +
303 out[6][0][2] = 0.0;
│ │ │ │ +
304 out[6][1][0] = 0.0;
│ │ │ │ +
305 out[6][1][1] = 0.0;
│ │ │ │ +
306 out[6][1][2] = 0.0;
│ │ │ │ +
307 out[6][2][0] = 0.0;
│ │ │ │ +
308 out[6][2][1] = 0.0;
│ │ │ │ +
309 out[6][2][2] = 0.0;
│ │ │ │ +
310
│ │ │ │ +
311 out[7][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0;
│ │ │ │ +
312 out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0];
│ │ │ │ +
313 out[7][0][2] = 0.0;
│ │ │ │ +
314 out[7][1][0] = 0.0;
│ │ │ │ +
315 out[7][1][1] = 0.0;
│ │ │ │ +
316 out[7][1][2] = 0.0;
│ │ │ │ +
317 out[7][2][0] = 0.0;
│ │ │ │ +
318 out[7][2][1] = 0.0;
│ │ │ │ +
319 out[7][2][2] = 0.0;
│ │ │ │ +
320
│ │ │ │ +
321 out[8][0][0] = 0.0;
│ │ │ │ +
322 out[8][0][1] = 0.0;
│ │ │ │ +
323 out[8][0][2] = 0.0;
│ │ │ │ +
324 out[8][1][0] = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0;
│ │ │ │ +
325 out[8][1][1] = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0;
│ │ │ │ +
326 out[8][1][2] = 0.0;
│ │ │ │ +
327 out[8][2][0] = 0.0;
│ │ │ │ +
328 out[8][2][1] = 0.0;
│ │ │ │ +
329 out[8][2][2] = 0.0;
│ │ │ │ +
330
│ │ │ │ +
331 out[9][0][0] = 0.0;
│ │ │ │ +
332 out[9][0][1] = 0.0;
│ │ │ │ +
333 out[9][0][2] = 0.0;
│ │ │ │ +
334 out[9][1][0] = -12.0*in[1] + 18.0*in[1]*in[1];
│ │ │ │ +
335 out[9][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];;
│ │ │ │ +
336 out[9][1][2] = 0.0;
│ │ │ │ +
337 out[9][2][0] = 0.0;
│ │ │ │ +
338 out[9][2][1] = 0.0;
│ │ │ │ +
339 out[9][2][2] = 0.0;
│ │ │ │ +
340
│ │ │ │ +
341 out[10][0][0] = 0.0;
│ │ │ │ +
342 out[10][0][1] = 0.0;
│ │ │ │ +
343 out[10][0][2] = 0.0;
│ │ │ │ +
344 out[10][1][0] = 0.0;
│ │ │ │ +
345 out[10][1][1] = 0.0;
│ │ │ │ +
346 out[10][1][2] = 0.0;
│ │ │ │ +
347 out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ +
348 out[10][2][1] = 0.0;
│ │ │ │ +
349 out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
│ │ │ │ +
350
│ │ │ │ +
351 out[11][0][0] = 0.0;
│ │ │ │ +
352 out[11][0][1] = 0.0;
│ │ │ │ +
353 out[11][0][2] = 0.0;
│ │ │ │ +
354 out[11][1][0] = 0.0;
│ │ │ │ +
355 out[11][1][1] = 0.0;
│ │ │ │ +
356 out[11][1][2] = 0.0;
│ │ │ │ +
357 out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ +
358 out[11][2][1] = 0.0;
│ │ │ │ +
359 out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2];
│ │ │ │ +
360
│ │ │ │ +
361 out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
│ │ │ │ +
362 out[12][0][1] = 0.0;
│ │ │ │ +
363 out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ +
364 out[12][1][0] = 0.0;
│ │ │ │ +
365 out[12][1][1] = 0.0;
│ │ │ │ +
366 out[12][1][2] = 0.0;
│ │ │ │ +
367 out[12][2][0] = 0.0;
│ │ │ │ +
368 out[12][2][1] = 0.0;
│ │ │ │ +
369 out[12][2][2] = 0.0;
│ │ │ │ +
370
│ │ │ │ +
371 out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2];
│ │ │ │ +
372 out[13][0][1] = 0.0;
│ │ │ │ +
373 out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0];
│ │ │ │ +
374 out[13][1][0] = 0.0;
│ │ │ │ +
375 out[13][1][1] = 0.0;
│ │ │ │ +
376 out[13][1][2] = 0.0;
│ │ │ │ +
377 out[13][2][0] = 0.0;
│ │ │ │ +
378 out[13][2][1] = 0.0;
│ │ │ │ +
379 out[13][2][2] = 0.0;
│ │ │ │ +
380
│ │ │ │ +
381 out[14][0][0] = 0.0;
│ │ │ │ +
382 out[14][0][1] = 0.0;
│ │ │ │ +
383 out[14][0][2] = 0.0;
│ │ │ │ +
384 out[14][1][0] = 0.0;
│ │ │ │ +
385 out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
│ │ │ │ +
386 out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1];
│ │ │ │ +
387 out[14][2][0] = 0.0;
│ │ │ │ +
388 out[14][2][1] = 0.0;
│ │ │ │ +
389 out[14][2][2] = 0.0;
│ │ │ │ +
390
│ │ │ │ +
391 out[15][0][0] = 0.0;
│ │ │ │ +
392 out[15][0][1] = 0.0;
│ │ │ │ +
393 out[15][0][2] = 0.0;
│ │ │ │ +
394 out[15][1][0] = 0.0;
│ │ │ │ +
395 out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2];
│ │ │ │ +
396 out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1];
│ │ │ │ +
397 out[15][2][0] = 0.0;
│ │ │ │ +
398 out[15][2][1] = 0.0;
│ │ │ │ +
399 out[15][2][2] = 0.0;
│ │ │ │ +
400
│ │ │ │ +
401 out[16][0][0] = 0.0;
│ │ │ │ +
402 out[16][0][1] = 0.0;
│ │ │ │ +
403 out[16][0][2] = 0.0;
│ │ │ │ +
404 out[16][1][0] = 0.0;
│ │ │ │ +
405 out[16][1][1] = 0.0;
│ │ │ │ +
406 out[16][1][2] = 0.0;
│ │ │ │ +
407 out[16][2][0] = 0.0;
│ │ │ │ +
408 out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ +
409 out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
│ │ │ │ +
410
│ │ │ │ +
411 out[17][0][0] = 0.0;
│ │ │ │ +
412 out[17][0][1] = 0.0;
│ │ │ │ +
413 out[17][0][2] = 0.0;
│ │ │ │ +
414 out[17][1][0] = 0.0;
│ │ │ │ +
415 out[17][1][1] = 0.0;
│ │ │ │ +
416 out[17][1][2] = 0.0;
│ │ │ │ +
417 out[17][2][0] = 0.0;
│ │ │ │ +
418 out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2];
│ │ │ │ +
419 out[17][2][2] = 6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2];
│ │ │ │ +
420
│ │ │ │ +
421 out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
422 out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
│ │ │ │ +
423 out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
│ │ │ │ +
424 out[18][1][0] = 0.0;
│ │ │ │ +
425 out[18][1][1] = 0.0;
│ │ │ │ +
426 out[18][1][2] = 0.0;
│ │ │ │ +
427 out[18][2][0] = 0.0;
│ │ │ │ +
428 out[18][2][1] = 0.0;
│ │ │ │ +
429 out[18][2][2] = 0.0;
│ │ │ │ +
430
│ │ │ │ +
431 out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
432 out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2];
│ │ │ │ +
433 out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1];
│ │ │ │ +
434 out[19][1][0] = 0.0;
│ │ │ │ +
435 out[19][1][1] = 0.0;
│ │ │ │ +
436 out[19][1][2] = 0.0;
│ │ │ │ +
437 out[19][2][0] = 0.0;
│ │ │ │ +
438 out[19][2][1] = 0.0;
│ │ │ │ +
439 out[19][2][2] = 0.0;
│ │ │ │ +
440
│ │ │ │ +
441 out[20][0][0] = 0.0;
│ │ │ │ +
442 out[20][0][1] = 0.0;
│ │ │ │ +
443 out[20][0][2] = 0.0;
│ │ │ │ +
444 out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
│ │ │ │ +
445 out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
446 out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
│ │ │ │ +
447 out[20][2][0] = 0.0;
│ │ │ │ +
448 out[20][2][1] = 0.0;
│ │ │ │ +
449 out[20][2][2] = 0.0;
│ │ │ │ +
450
│ │ │ │ +
451 out[21][0][0] = 0.0;
│ │ │ │ +
452 out[21][0][1] = 0.0;
│ │ │ │ +
453 out[21][0][2] = 0.0;
│ │ │ │ +
454 out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2];
│ │ │ │ +
455 out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + 54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
456 out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1];
│ │ │ │ +
457 out[21][2][0] = 0.0;
│ │ │ │ +
458 out[21][2][1] = 0.0;
│ │ │ │ +
459 out[21][2][2] = 0.0;
│ │ │ │ +
460
│ │ │ │ +
461 out[22][0][0] = 0.0;
│ │ │ │ +
462 out[22][0][1] = 0.0;
│ │ │ │ +
463 out[22][0][2] = 0.0;
│ │ │ │ +
464 out[22][1][0] = 0.0;
│ │ │ │ +
465 out[22][1][1] = 0.0;
│ │ │ │ +
466 out[22][1][2] = 0.0;
│ │ │ │ +
467 out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
│ │ │ │ +
468 out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
│ │ │ │ +
469 out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
470
│ │ │ │ +
471 out[23][0][0] = 0.0;
│ │ │ │ +
472 out[23][0][1] = 0.0;
│ │ │ │ +
473 out[23][0][2] = 0.0;
│ │ │ │ +
474 out[23][1][0] = 0.0;
│ │ │ │ +
475 out[23][1][1] = 0.0;
│ │ │ │ +
476 out[23][1][2] = 0.0;
│ │ │ │ +
477 out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2];
│ │ │ │ +
478 out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2];
│ │ │ │ +
479 out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + 54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2];
│ │ │ │ +
480
│ │ │ │ +
481 out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - 192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ +
482 out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[2];
│ │ │ │ +
483 out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1];
│ │ │ │ +
484 out[24][1][0] = 0.0;
│ │ │ │ +
485 out[24][1][1] = 0.0;
│ │ │ │ +
486 out[24][1][2] = 0.0;
│ │ │ │ +
487 out[24][2][0] = 0.0;
│ │ │ │ +
488 out[24][2][1] = 0.0;
│ │ │ │ +
489 out[24][2][2] = 0.0;
│ │ │ │ +
490
│ │ │ │ +
491 out[25][0][0] = 0.0;
│ │ │ │ +
492 out[25][0][1] = 0.0;
│ │ │ │ +
493 out[25][0][2] = 0.0;
│ │ │ │ +
494 out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[1]*in[1]*in[2];
│ │ │ │ +
495 out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - 192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ +
496 out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1];
│ │ │ │ +
497 out[25][2][0] = 0.0;
│ │ │ │ +
498 out[25][2][1] = 0.0;
│ │ │ │ +
499 out[25][2][2] = 0.0;
│ │ │ │ +
500
│ │ │ │ +
501 out[26][0][0] = 0.0;
│ │ │ │ +
502 out[26][0][1] = 0.0;
│ │ │ │ +
503 out[26][0][2] = 0.0;
│ │ │ │ +
504 out[26][1][0] = 0.0;
│ │ │ │ +
505 out[26][1][1] = 0.0;
│ │ │ │ +
506 out[26][1][2] = 0.0;
│ │ │ │ +
507 out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[1]*in[2]*in[2];
│ │ │ │ +
508 out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2];
│ │ │ │ +
509 out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - 192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2];
│ │ │ │ +
510
│ │ │ │ +
511 out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
512 out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
│ │ │ │ +
513 out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
│ │ │ │ +
514 out[27][1][0] = 0.0;
│ │ │ │ +
515 out[27][1][1] = 0.0;
│ │ │ │ +
516 out[27][1][2] = 0.0;
│ │ │ │ +
517 out[27][2][0] = 0.0;
│ │ │ │ +
518 out[27][2][1] = 0.0;
│ │ │ │ +
519 out[27][2][2] = 0.0;
│ │ │ │ +
520
│ │ │ │ +
521 out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + 288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
522 out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[2];
│ │ │ │ +
523 out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1];
│ │ │ │ +
524 out[28][1][0] = 0.0;
│ │ │ │ +
525 out[28][1][1] = 0.0;
│ │ │ │ +
526 out[28][1][2] = 0.0;
│ │ │ │ +
527 out[28][2][0] = 0.0;
│ │ │ │ +
528 out[28][2][1] = 0.0;
│ │ │ │ +
529 out[28][2][2] = 0.0;
│ │ │ │ +
530
│ │ │ │ +
531 out[29][0][0] = 0.0;
│ │ │ │ +
532 out[29][0][1] = 0.0;
│ │ │ │ +
533 out[29][0][2] = 0.0;
│ │ │ │ +
534 out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
│ │ │ │ +
535 out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
536 out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
│ │ │ │ +
537 out[29][2][0] = 0.0;
│ │ │ │ +
538 out[29][2][1] = 0.0;
│ │ │ │ +
539 out[29][2][2] = 0.0;
│ │ │ │ +
540
│ │ │ │ +
541 out[30][0][0] = 0.0;
│ │ │ │ +
542 out[30][0][1] = 0.0;
│ │ │ │ +
543 out[30][0][2] = 0.0;
│ │ │ │ +
544 out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[1]*in[1]*in[2];
│ │ │ │ +
545 out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + 288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
546 out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1];
│ │ │ │ +
547 out[30][2][0] = 0.0;
│ │ │ │ +
548 out[30][2][1] = 0.0;
│ │ │ │ +
549 out[30][2][2] = 0.0;
│ │ │ │ +
550
│ │ │ │ +
551 out[31][0][0] = 0.0;
│ │ │ │ +
552 out[31][0][1] = 0.0;
│ │ │ │ +
553 out[31][0][2] = 0.0;
│ │ │ │ +
554 out[31][1][0] = 0.0;
│ │ │ │ +
555 out[31][1][1] = 0.0;
│ │ │ │ +
556 out[31][1][2] = 0.0;
│ │ │ │ +
557 out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
│ │ │ │ +
558 out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
│ │ │ │ +
559 out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
560
│ │ │ │ +
561 out[32][0][0] = 0.0;
│ │ │ │ +
562 out[32][0][1] = 0.0;
│ │ │ │ +
563 out[32][0][2] = 0.0;
│ │ │ │ +
564 out[32][1][0] = 0.0;
│ │ │ │ +
565 out[32][1][1] = 0.0;
│ │ │ │ +
566 out[32][1][2] = 0.0;
│ │ │ │ +
567 out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[1]*in[2]*in[2];
│ │ │ │ +
568 out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2];
│ │ │ │ +
569 out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + 288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2];
│ │ │ │ +
570
│ │ │ │ +
571 out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - 432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ +
572 out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[2];
│ │ │ │ +
573 out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - 864.0*in[0]*in[0]*in[1];
│ │ │ │ +
574 out[33][1][0] = 0.0;
│ │ │ │ +
575 out[33][1][1] = 0.0;
│ │ │ │ +
576 out[33][1][2] = 0.0;
│ │ │ │ +
577 out[33][2][0] = 0.0;
│ │ │ │ +
578 out[33][2][1] = 0.0;
│ │ │ │ +
579 out[33][2][2] = 0.0;
│ │ │ │ +
580
│ │ │ │ +
581 out[34][0][0] = 0.0;
│ │ │ │ +
582 out[34][0][1] = 0.0;
│ │ │ │ +
583 out[34][0][2] = 0.0;
│ │ │ │ +
584 out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - 864.0*in[1]*in[1]*in[2];
│ │ │ │ +
585 out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - 432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ +
586 out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - 864.0*in[0]*in[1]*in[1];
│ │ │ │ +
587 out[34][2][0] = 0.0;
│ │ │ │ +
588 out[34][2][1] = 0.0;
│ │ │ │ +
589 out[34][2][2] = 0.0;
│ │ │ │ +
590
│ │ │ │ +
591 out[35][0][0] = 0.0;
│ │ │ │ +
592 out[35][0][1] = 0.0;
│ │ │ │ +
593 out[35][0][2] = 0.0;
│ │ │ │ +
594 out[35][1][0] = 0.0;
│ │ │ │ +
595 out[35][1][1] = 0.0;
│ │ │ │ +
596 out[35][1][2] = 0.0;
│ │ │ │ +
597 out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - 864.0*in[1]*in[2]*in[2];
│ │ │ │ +
598 out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - 864.0*in[0]*in[2]*in[2];
│ │ │ │ +
599 out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - 432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2];
│ │ │ │ +
600 }
│ │ │ │ +
│ │ │ │ +
601
│ │ │ │ +
│ │ │ │ +
603 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
604 const typename Traits::DomainType& in, // position
│ │ │ │ +
605 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
606 {
│ │ │ │ +
607 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
608 if (totalOrder == 0) {
│ │ │ │ +
609 evaluateFunction(in, out);
│ │ │ │ +
610 } else {
│ │ │ │ +
611 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
612 }
│ │ │ │ +
613 }
│ │ │ │ +
│ │ │ │ +
614
│ │ │ │ +
│ │ │ │ +
616 unsigned int order () const
│ │ │ │ +
617 {
│ │ │ │ +
618 return 3;
│ │ │ │ +
619 }
│ │ │ │ +
│ │ │ │ +
620
│ │ │ │ +
621 private:
│ │ │ │ +
622 R sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ +
623 };
│ │ │ │ +
│ │ │ │ +
624}
│ │ │ │ +
625#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on prisms.
Definition raviartthomas0prism.hh:27
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0prism.hh:66
│ │ │ │ -
LocalFiniteElementTraits< RT0PrismLocalBasis< D, R >, RT0PrismLocalCoefficients, RT0PrismLocalInterpolation< RT0PrismLocalBasis< D, R > > > Traits
Definition raviartthomas0prism.hh:33
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0prism.hh:60
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0prism.hh:50
│ │ │ │ -
RT0PrismLocalFiniteElement()
Standard constructor.
Definition raviartthomas0prism.hh:37
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0prism.hh:55
│ │ │ │ -
RT0PrismLocalFiniteElement(int s)
Make set number s, where 0 <= s < 32.
Definition raviartthomas0prism.hh:45
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas0prism.hh:71
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on prisms.
Definition raviartthomas0prismlocalcoefficients.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference prism.
Definition raviartthomas0prismlocalinterpolation.hh:22
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalbasis.hh:28
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:603
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas1cube3dlocalbasis.hh:32
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition raviartthomas1cube3dlocalbasis.hh:69
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:80
│ │ │ │ +
RT1Cube3DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas1cube3dlocalbasis.hh:39
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:236
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas1cube3dlocalbasis.hh:616
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,758 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0prism.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ +raviartthomas1cube3dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include "../../common/localbasis.hh" │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -35 │ │ │ │ │ -_3_7 _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -38 {} │ │ │ │ │ -39 │ │ │ │ │ -_4_5 _R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -46 basis(s), │ │ │ │ │ -47 interpolation(s) │ │ │ │ │ -48 {} │ │ │ │ │ -49 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +28 { │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_9 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ +40 { │ │ │ │ │ +41 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ +42 if (s & 1) │ │ │ │ │ +43 { │ │ │ │ │ +44 sign0 = -1.0; │ │ │ │ │ +45 } │ │ │ │ │ +46 if (s & 2) │ │ │ │ │ +47 { │ │ │ │ │ +48 sign1 = -1.0; │ │ │ │ │ +49 } │ │ │ │ │ +50 if (s & 4) │ │ │ │ │ 51 { │ │ │ │ │ -52 return basis; │ │ │ │ │ +52 sign2 = -1.0; │ │ │ │ │ 53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return coefficients; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return interpolation; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_6 unsigned int _s_i_z_e () const │ │ │ │ │ -67 { │ │ │ │ │ -68 return basis.size(); │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -72 { │ │ │ │ │ -73 return GeometryTypes::prism; │ │ │ │ │ -74 } │ │ │ │ │ -75 │ │ │ │ │ -76 private: │ │ │ │ │ -77 _R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -78 _R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -79 _R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -80 }; │ │ │ │ │ -81} │ │ │ │ │ -82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_PRISM_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +54 if (s & 8) │ │ │ │ │ +55 { │ │ │ │ │ +56 sign3 = -1.0; │ │ │ │ │ +57 } │ │ │ │ │ +58 if (s & 16) │ │ │ │ │ +59 { │ │ │ │ │ +60 sign4 = -1.0; │ │ │ │ │ +61 } │ │ │ │ │ +62 if (s & 32) │ │ │ │ │ +63 { │ │ │ │ │ +64 sign5 = -1.0; │ │ │ │ │ +65 } │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ +70 { │ │ │ │ │ +71 return 36; │ │ │ │ │ +72 } │ │ │ │ │ +73 │ │ │ │ │ +_8_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +81 std::vector& out) const │ │ │ │ │ +82 { │ │ │ │ │ +83 out.resize(36); │ │ │ │ │ +84 │ │ │ │ │ +85 out[0][0] = sign0*(-3.0*in[0]*in[0] + 4.0*in[0] - 1.0); │ │ │ │ │ +86 out[0][1] = 0.0; │ │ │ │ │ +87 out[0][2] = 0.0; │ │ │ │ │ +88 │ │ │ │ │ +89 out[1][0] = sign1*(-2.0*in[0] + 3.0*in[0]*in[0]); │ │ │ │ │ +90 out[1][1] = 0.0; │ │ │ │ │ +91 out[1][2] = 0.0; │ │ │ │ │ +92 │ │ │ │ │ +93 out[2][0] = 0.0; │ │ │ │ │ +94 out[2][1] = sign2*(-3.0*in[1]*in[1] + 4.0*in[1] - 1.0); │ │ │ │ │ +95 out[2][2] = 0.0; │ │ │ │ │ +96 │ │ │ │ │ +97 out[3][0] = 0.0; │ │ │ │ │ +98 out[3][1] = sign3*(3.0*in[1]*in[1] - 2.0*in[1]); │ │ │ │ │ +99 out[3][2] = 0.0; │ │ │ │ │ +100 │ │ │ │ │ +101 out[4][0] = 0.0; │ │ │ │ │ +102 out[4][1] = 0.0; │ │ │ │ │ +103 out[4][2] = sign4*(-3.0*in[2]*in[2] + 4.0*in[2] - 1.0); │ │ │ │ │ +104 │ │ │ │ │ +105 out[5][0] = 0.0; │ │ │ │ │ +106 out[5][1] = 0.0; │ │ │ │ │ +107 out[5][2] = sign5*(3.0*in[2]*in[2] - 2.0*in[2]); │ │ │ │ │ +108 │ │ │ │ │ +109 out[6][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 24.0*in[0]*in[1] - │ │ │ │ │ +6.0*in[1] -12.0*in[0] + 3.0; │ │ │ │ │ +110 out[6][1] = 0.0; │ │ │ │ │ +111 out[6][2] = 0.0; │ │ │ │ │ +112 │ │ │ │ │ +113 out[7][0] = -18.0*in[0]*in[0]*in[1] + 9.0*in[0]*in[0] + 12.0*in[0]*in[1] - │ │ │ │ │ +6.0*in[0]; │ │ │ │ │ +114 out[7][1] = 0.0; │ │ │ │ │ +115 out[7][2] = 0.0; │ │ │ │ │ +116 │ │ │ │ │ +117 out[8][0] = 0.0; │ │ │ │ │ +118 out[8][1] = 18.0*in[0]*in[1]*in[1] - 9.0*in[1]*in[1] - 24.0*in[0]*in[1] + │ │ │ │ │ +12.0*in[1] + 6.0*in[0] - 3.0; │ │ │ │ │ +119 out[8][2] = 0.0; │ │ │ │ │ +120 │ │ │ │ │ +121 out[9][0] = 0.0; │ │ │ │ │ +122 out[9][1] = 6.0*in[1] - 12.0*in[0]*in[1] - 9.0*in[1]*in[1] + 18.0*in[0]*in │ │ │ │ │ +[1]*in[1]; │ │ │ │ │ +123 out[9][2] = 0.0; │ │ │ │ │ +124 │ │ │ │ │ +125 out[10][0] = 0.0; │ │ │ │ │ +126 out[10][1] = 0.0; │ │ │ │ │ +127 out[10][2] = -3.0 + 6.0*in[0] + 12.0*in[2] - 24.0*in[0]*in[2] - 9.0*in │ │ │ │ │ +[2]*in[2] + 18.0*in[0]*in[2]*in[2]; │ │ │ │ │ +128 │ │ │ │ │ +129 out[11][0] = 0.0; │ │ │ │ │ +130 out[11][1] = 0.0; │ │ │ │ │ +131 out[11][2] = 6.0*in[2] - 12.0*in[0]*in[2] - 9.0*in[2]*in[2] + 18.0*in[0]*in │ │ │ │ │ +[2]*in[2]; │ │ │ │ │ +132 │ │ │ │ │ +133 out[12][0] = 3.0 - 12.0*in[0] - 6.0*in[2] + 24.0*in[0]*in[2] + 9.0*in[0]*in │ │ │ │ │ +[0] - 18.0*in[0]*in[0]*in[2]; │ │ │ │ │ +134 out[12][1] = 0.0; │ │ │ │ │ +135 out[12][2] = 0.0; │ │ │ │ │ +136 │ │ │ │ │ +137 out[13][0] = -6.0*in[0] + 12.0*in[0]*in[2] + 9.0*in[0]*in[0] - 18.0*in │ │ │ │ │ +[0]*in[0]*in[2]; │ │ │ │ │ +138 out[13][1] = 0.0; │ │ │ │ │ +139 out[13][2] = 0.0; │ │ │ │ │ +140 │ │ │ │ │ +141 out[14][0] = 0.0; │ │ │ │ │ +142 out[14][1] = 3.0 - 12.0*in[1] - 6.0*in[2] + 24.0*in[1]*in[2] + 9.0*in[1]*in │ │ │ │ │ +[1] - 18.0*in[1]*in[1]*in[2]; │ │ │ │ │ +143 out[14][2] = 0.0; │ │ │ │ │ +144 │ │ │ │ │ +145 out[15][0] = 0.0; │ │ │ │ │ +146 out[15][1] = -6.0*in[1] + 12.0*in[1]*in[2] + 9.0*in[1]*in[1] - 18.0*in │ │ │ │ │ +[1]*in[1]*in[2]; │ │ │ │ │ +147 out[15][2] = 0.0; │ │ │ │ │ +148 │ │ │ │ │ +149 out[16][0] = 0.0; │ │ │ │ │ +150 out[16][1] = 0.0; │ │ │ │ │ +151 out[16][2] = -3.0 + 6.0*in[1] + 12.0*in[2] - 24.0*in[1]*in[2] - 9.0*in │ │ │ │ │ +[2]*in[2] + 18.0*in[1]*in[2]*in[2]; │ │ │ │ │ +152 │ │ │ │ │ +153 out[17][0] = 0.0; │ │ │ │ │ +154 out[17][1] = 0.0; │ │ │ │ │ +155 out[17][2] = 6.0*in[2] - 12.0*in[1]*in[2] - 9.0*in[2]*in[2] + 18.0*in[1]*in │ │ │ │ │ +[2]*in[2]; │ │ │ │ │ +156 │ │ │ │ │ +157 out[18][0] = -9.0 + 36.0*in[0] + 18.0*in[1] + 18.0*in[2] - 72.0*in[0]*in[1] │ │ │ │ │ +- 72.0*in[0]*in[2] - 36.0*in[1]*in[2] + 144.0*in[0]*in[1]*in[2] - 27.0*in[0]*in │ │ │ │ │ +[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in[0]*in[2] - 108.0*in[0]*in[0]*in │ │ │ │ │ +[1]*in[2]; │ │ │ │ │ +158 out[18][1] = 0.0; │ │ │ │ │ +159 out[18][2] = 0.0; │ │ │ │ │ +160 │ │ │ │ │ +161 out[19][0] = 18.0*in[0] - 36.0*in[0]*in[1] - 36.0*in[0]*in[2] + 72.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 27.0*in[0]*in[0] + 54.0*in[0]*in[0]*in[1] + 54.0*in[0]*in │ │ │ │ │ +[0]*in[2] - 108.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ +162 out[19][1] = 0.0; │ │ │ │ │ +163 out[19][2] = 0.0; │ │ │ │ │ +164 │ │ │ │ │ +165 out[20][0] = 0.0; │ │ │ │ │ +166 out[20][1] = 9.0 - 18.0*in[0] - 36.0*in[1] - 18.0*in[2] + 72.0*in[0]*in[1] │ │ │ │ │ ++ 36.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[1]*in │ │ │ │ │ +[1] - 54.0*in[1]*in[1]*in[0] - 54.0*in[1]*in[1]*in[2] + 108.0*in[0]*in[1]*in │ │ │ │ │ +[1]*in[2]; │ │ │ │ │ +167 out[20][2] = 0.0; │ │ │ │ │ +168 │ │ │ │ │ +169 out[21][0] = 0.0; │ │ │ │ │ +170 out[21][1] = -18.0*in[1] + 36.0*in[0]*in[1] + 36.0*in[1]*in[2] - 72.0*in │ │ │ │ │ +[0]*in[1]*in[2] + 27.0*in[1]*in[1] - 54.0*in[0]*in[1]*in[1] - 54.0*in[1]*in │ │ │ │ │ +[1]*in[2] + 108.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ +171 out[21][2] = 0.0; │ │ │ │ │ +172 │ │ │ │ │ +173 out[22][0] = 0.0; │ │ │ │ │ +174 out[22][1] = 0.0; │ │ │ │ │ +175 out[22][2] = 9.0 - 18.0*in[0] - 18.0*in[1] - 36.0*in[2] + 36.0*in[0]*in[1] │ │ │ │ │ ++ 72.0*in[0]*in[2] + 72.0*in[1]*in[2] - 144.0*in[0]*in[1]*in[2] + 27.0*in[2]*in │ │ │ │ │ +[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in[2]*in[2] + 108.0*in[0]*in[1]*in │ │ │ │ │ +[2]*in[2]; │ │ │ │ │ +176 │ │ │ │ │ +177 out[23][0] = 0.0; │ │ │ │ │ +178 out[23][1] = 0.0; │ │ │ │ │ +179 out[23][2] = -18.0*in[2] + 36.0*in[0]*in[2] + 36.0*in[1]*in[2] - 72.0*in │ │ │ │ │ +[0]*in[1]*in[2] + 27.0*in[2]*in[2] - 54.0*in[0]*in[2]*in[2] - 54.0*in[1]*in │ │ │ │ │ +[2]*in[2] + 108.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ +180 │ │ │ │ │ +181 out[24][0] = 96.0*in[0] - 144.0*in[0]*in[1] - 144.0*in[0]*in[2] + 216.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 96.0*in[0]*in[0] + 144.0*in[0]*in[0]*in[1] + 144.0*in[0]*in │ │ │ │ │ +[0]*in[2] - 216.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ +182 out[24][1] = 0.0; │ │ │ │ │ +183 out[24][2] = 0.0; │ │ │ │ │ +184 │ │ │ │ │ +185 out[25][0] = 0.0; │ │ │ │ │ +186 out[25][1] = 96.0*in[1] - 144.0*in[0]*in[1] - 144.0*in[1]*in[2] + 216.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 96.0*in[1]*in[1] + 144.0*in[0]*in[1]*in[1] + 144.0*in[1]*in │ │ │ │ │ +[1]*in[2] - 216.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ +187 out[25][2] = 0.0; │ │ │ │ │ +188 │ │ │ │ │ +189 out[26][0] = 0.0; │ │ │ │ │ +190 out[26][1] = 0.0; │ │ │ │ │ +191 out[26][2] = 96.0*in[2] - 144.0*in[0]*in[2] - 144.0*in[1]*in[2] + 216.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 96.0*in[2]*in[2] + 144.0*in[0]*in[2]*in[2] + 144.0*in[1]*in │ │ │ │ │ +[2]*in[2] - 216.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ +192 │ │ │ │ │ +193 out[27][0] = -144.0*in[0] + 288.0*in[0]*in[1] + 216.0*in[0]*in[2] - │ │ │ │ │ +432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 288.0*in[0]*in[0]*in[1] - │ │ │ │ │ +216.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ +194 out[27][1] = 0.0; │ │ │ │ │ +195 out[27][2] = 0.0; │ │ │ │ │ +196 │ │ │ │ │ +197 out[28][0] = -144.0*in[0] + 216.0*in[0]*in[1] + 288.0*in[0]*in[2] - │ │ │ │ │ +432.0*in[0]*in[1]*in[2] + 144.0*in[0]*in[0] - 216.0*in[0]*in[0]*in[1] - │ │ │ │ │ +288.0*in[0]*in[0]*in[2] + 432.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ +198 out[28][1] = 0.0; │ │ │ │ │ +199 out[28][2] = 0.0; │ │ │ │ │ +200 │ │ │ │ │ +201 out[29][0] = 0.0; │ │ │ │ │ +202 out[29][1] = -144.0*in[1] + 288.0*in[0]*in[1] + 216.0*in[1]*in[2] - │ │ │ │ │ +432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 288.0*in[0]*in[1]*in[1] - │ │ │ │ │ +216.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ +203 out[29][2] = 0.0; │ │ │ │ │ +204 │ │ │ │ │ +205 out[30][0] = 0.0; │ │ │ │ │ +206 out[30][1] = -144.0*in[1] + 216.0*in[0]*in[1] + 288.0*in[1]*in[2] - │ │ │ │ │ +432.0*in[0]*in[1]*in[2] + 144.0*in[1]*in[1] - 216.0*in[0]*in[1]*in[1] - │ │ │ │ │ +288.0*in[1]*in[1]*in[2] + 432.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ +207 out[30][2] = 0.0; │ │ │ │ │ +208 │ │ │ │ │ +209 out[31][0] = 0.0; │ │ │ │ │ +210 out[31][1] = 0.0; │ │ │ │ │ +211 out[31][2] =-144.0*in[2] + 288.0*in[0]*in[2] + 216.0*in[1]*in[2] - 432.0*in │ │ │ │ │ +[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 288.0*in[0]*in[2]*in[2] - 216.0*in[1]*in │ │ │ │ │ +[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ +212 │ │ │ │ │ +213 out[32][0] = 0.0; │ │ │ │ │ +214 out[32][1] = 0.0; │ │ │ │ │ +215 out[32][2] = -144.0*in[2] + 216.0*in[0]*in[2] + 288.0*in[1]*in[2] - │ │ │ │ │ +432.0*in[0]*in[1]*in[2] + 144.0*in[2]*in[2] - 216.0*in[0]*in[2]*in[2] - │ │ │ │ │ +288.0*in[1]*in[2]*in[2] + 432.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ +216 │ │ │ │ │ +217 out[33][0] = 216.0*in[0] - 432.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 216.0*in[0]*in[0] + 432.0*in[0]*in[0]*in[1] + 432.0*in[0]*in │ │ │ │ │ +[0]*in[2] - 864.0*in[0]*in[0]*in[1]*in[2]; │ │ │ │ │ +218 out[33][1] = 0.0; │ │ │ │ │ +219 out[33][2] = 0.0; │ │ │ │ │ +220 │ │ │ │ │ +221 out[34][0] = 0.0; │ │ │ │ │ +222 out[34][1] = 216.0*in[1] - 432.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 216.0*in[1]*in[1] + 432.0*in[0]*in[1]*in[1] + 432.0*in[1]*in │ │ │ │ │ +[1]*in[2] - 864.0*in[0]*in[1]*in[1]*in[2]; │ │ │ │ │ +223 out[34][2] = 0.0; │ │ │ │ │ +224 │ │ │ │ │ +225 out[35][0] = 0.0; │ │ │ │ │ +226 out[35][1] = 0.0; │ │ │ │ │ +227 out[35][2] = 216.0*in[2] - 432.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in │ │ │ │ │ +[0]*in[1]*in[2] - 216.0*in[2]*in[2] + 432.0*in[0]*in[2]*in[2] + 432.0*in[1]*in │ │ │ │ │ +[2]*in[2] - 864.0*in[0]*in[1]*in[2]*in[2]; │ │ │ │ │ +228 } │ │ │ │ │ +229 │ │ │ │ │ +_2_3_6 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +237 std::vector& out) const │ │ │ │ │ +238 { │ │ │ │ │ +239 out.resize(36); │ │ │ │ │ +240 │ │ │ │ │ +241 out[0][0][0] = sign0*(-6.0*in[0] + 4); │ │ │ │ │ +242 out[0][0][1] = 0; │ │ │ │ │ +243 out[0][0][2] = 0; │ │ │ │ │ +244 out[0][1][0] = 0; │ │ │ │ │ +245 out[0][1][1] = 0; │ │ │ │ │ +246 out[0][1][2] = 0; │ │ │ │ │ +247 out[0][2][0] = 0; │ │ │ │ │ +248 out[0][2][1] = 0; │ │ │ │ │ +249 out[0][2][2] = 0; │ │ │ │ │ +250 │ │ │ │ │ +251 out[1][0][0] = sign1*(-2 + 6.0*in[0]); │ │ │ │ │ +252 out[1][0][1] = 0; │ │ │ │ │ +253 out[1][0][2] = 0; │ │ │ │ │ +254 out[1][1][0] = 0; │ │ │ │ │ +255 out[1][1][1] = 0; │ │ │ │ │ +256 out[1][1][2] = 0; │ │ │ │ │ +257 out[1][2][0] = 0; │ │ │ │ │ +258 out[1][2][1] = 0; │ │ │ │ │ +259 out[1][2][2] = 0; │ │ │ │ │ +260 │ │ │ │ │ +261 out[2][0][0] = 0; │ │ │ │ │ +262 out[2][0][1] = 0; │ │ │ │ │ +263 out[2][0][2] = 0; │ │ │ │ │ +264 out[2][1][0] = 0; │ │ │ │ │ +265 out[2][1][1] = sign2*(-6.0*in[1] + 4); │ │ │ │ │ +266 out[2][1][2] = 0; │ │ │ │ │ +267 out[2][2][0] = 0; │ │ │ │ │ +268 out[2][2][1] = 0; │ │ │ │ │ +269 out[2][2][2] = 0; │ │ │ │ │ +270 │ │ │ │ │ +271 out[3][0][0] = 0; │ │ │ │ │ +272 out[3][0][1] = 0; │ │ │ │ │ +273 out[3][0][2] = 0; │ │ │ │ │ +274 out[3][1][0] = 0; │ │ │ │ │ +275 out[3][1][1] = sign3*(6.0*in[1] - 2); │ │ │ │ │ +276 out[3][1][2] = 0; │ │ │ │ │ +277 out[3][2][0] = 0; │ │ │ │ │ +278 out[3][2][1] = 0; │ │ │ │ │ +279 out[3][2][2] = 0; │ │ │ │ │ +280 │ │ │ │ │ +281 out[4][0][0] = 0; │ │ │ │ │ +282 out[4][0][1] = 0; │ │ │ │ │ +283 out[4][0][2] = 0; │ │ │ │ │ +284 out[4][1][0] = 0; │ │ │ │ │ +285 out[4][1][1] = 0; │ │ │ │ │ +286 out[4][1][2] = 0; │ │ │ │ │ +287 out[4][2][0] = 0; │ │ │ │ │ +288 out[4][2][1] = 0; │ │ │ │ │ +289 out[4][2][2] = sign4*(-6.0*in[2] + 4); │ │ │ │ │ +290 │ │ │ │ │ +291 out[5][0][0] = 0; │ │ │ │ │ +292 out[5][0][1] = 0; │ │ │ │ │ +293 out[5][0][2] = 0; │ │ │ │ │ +294 out[5][1][0] = 0; │ │ │ │ │ +295 out[5][1][1] = 0; │ │ │ │ │ +296 out[5][1][2] = 0; │ │ │ │ │ +297 out[5][2][0] = 0; │ │ │ │ │ +298 out[5][2][1] = 0; │ │ │ │ │ +299 out[5][2][2] = sign5*(6.0*in[2] - 2); │ │ │ │ │ +300 │ │ │ │ │ +301 out[6][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 24.0*in[1] - 12.0; │ │ │ │ │ +302 out[6][0][1] = -18.0*in[0]*in[0] + 24.0*in[0] - 6; │ │ │ │ │ +303 out[6][0][2] = 0.0; │ │ │ │ │ +304 out[6][1][0] = 0.0; │ │ │ │ │ +305 out[6][1][1] = 0.0; │ │ │ │ │ +306 out[6][1][2] = 0.0; │ │ │ │ │ +307 out[6][2][0] = 0.0; │ │ │ │ │ +308 out[6][2][1] = 0.0; │ │ │ │ │ +309 out[6][2][2] = 0.0; │ │ │ │ │ +310 │ │ │ │ │ +311 out[7][0][0] = -36.0*in[0]*in[1] + 18.0*in[0] + 12.0*in[1] - 6.0; │ │ │ │ │ +312 out[7][0][1] = -18.0*in[0]*in[0] + 12.0*in[0]; │ │ │ │ │ +313 out[7][0][2] = 0.0; │ │ │ │ │ +314 out[7][1][0] = 0.0; │ │ │ │ │ +315 out[7][1][1] = 0.0; │ │ │ │ │ +316 out[7][1][2] = 0.0; │ │ │ │ │ +317 out[7][2][0] = 0.0; │ │ │ │ │ +318 out[7][2][1] = 0.0; │ │ │ │ │ +319 out[7][2][2] = 0.0; │ │ │ │ │ +320 │ │ │ │ │ +321 out[8][0][0] = 0.0; │ │ │ │ │ +322 out[8][0][1] = 0.0; │ │ │ │ │ +323 out[8][0][2] = 0.0; │ │ │ │ │ +324 out[8][1][0] = 18.0*in[1]*in[1] - 24.0*in[1] + 6.0; │ │ │ │ │ +325 out[8][1][1] = 36.0*in[0]*in[1] - 18.0*in[1] - 24.0*in[0] + 12.0; │ │ │ │ │ +326 out[8][1][2] = 0.0; │ │ │ │ │ +327 out[8][2][0] = 0.0; │ │ │ │ │ +328 out[8][2][1] = 0.0; │ │ │ │ │ +329 out[8][2][2] = 0.0; │ │ │ │ │ +330 │ │ │ │ │ +331 out[9][0][0] = 0.0; │ │ │ │ │ +332 out[9][0][1] = 0.0; │ │ │ │ │ +333 out[9][0][2] = 0.0; │ │ │ │ │ +334 out[9][1][0] = -12.0*in[1] + 18.0*in[1]*in[1]; │ │ │ │ │ +335 out[9][1][1] = 6.0 - 12.0*in[0] - 18.0*in[1] + 36.0*in[0]*in[1];; │ │ │ │ │ +336 out[9][1][2] = 0.0; │ │ │ │ │ +337 out[9][2][0] = 0.0; │ │ │ │ │ +338 out[9][2][1] = 0.0; │ │ │ │ │ +339 out[9][2][2] = 0.0; │ │ │ │ │ +340 │ │ │ │ │ +341 out[10][0][0] = 0.0; │ │ │ │ │ +342 out[10][0][1] = 0.0; │ │ │ │ │ +343 out[10][0][2] = 0.0; │ │ │ │ │ +344 out[10][1][0] = 0.0; │ │ │ │ │ +345 out[10][1][1] = 0.0; │ │ │ │ │ +346 out[10][1][2] = 0.0; │ │ │ │ │ +347 out[10][2][0] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ +348 out[10][2][1] = 0.0; │ │ │ │ │ +349 out[10][2][2] = 12.0 - 24.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2]; │ │ │ │ │ +350 │ │ │ │ │ +351 out[11][0][0] = 0.0; │ │ │ │ │ +352 out[11][0][1] = 0.0; │ │ │ │ │ +353 out[11][0][2] = 0.0; │ │ │ │ │ +354 out[11][1][0] = 0.0; │ │ │ │ │ +355 out[11][1][1] = 0.0; │ │ │ │ │ +356 out[11][1][2] = 0.0; │ │ │ │ │ +357 out[11][2][0] = -12.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ +358 out[11][2][1] = 0.0; │ │ │ │ │ +359 out[11][2][2] = 6.0 - 12.0*in[0] - 18.0*in[2] + 36.0*in[0]*in[2]; │ │ │ │ │ +360 │ │ │ │ │ +361 out[12][0][0] = -12.0 + 24.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2]; │ │ │ │ │ +362 out[12][0][1] = 0.0; │ │ │ │ │ +363 out[12][0][2] = -6.0 + 24.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ +364 out[12][1][0] = 0.0; │ │ │ │ │ +365 out[12][1][1] = 0.0; │ │ │ │ │ +366 out[12][1][2] = 0.0; │ │ │ │ │ +367 out[12][2][0] = 0.0; │ │ │ │ │ +368 out[12][2][1] = 0.0; │ │ │ │ │ +369 out[12][2][2] = 0.0; │ │ │ │ │ +370 │ │ │ │ │ +371 out[13][0][0] = -6.0 + 12.0*in[2] + 18.0*in[0] - 36.0*in[0]*in[2]; │ │ │ │ │ +372 out[13][0][1] = 0.0; │ │ │ │ │ +373 out[13][0][2] = 12.0*in[0] - 18.0*in[0]*in[0]; │ │ │ │ │ +374 out[13][1][0] = 0.0; │ │ │ │ │ +375 out[13][1][1] = 0.0; │ │ │ │ │ +376 out[13][1][2] = 0.0; │ │ │ │ │ +377 out[13][2][0] = 0.0; │ │ │ │ │ +378 out[13][2][1] = 0.0; │ │ │ │ │ +379 out[13][2][2] = 0.0; │ │ │ │ │ +380 │ │ │ │ │ +381 out[14][0][0] = 0.0; │ │ │ │ │ +382 out[14][0][1] = 0.0; │ │ │ │ │ +383 out[14][0][2] = 0.0; │ │ │ │ │ +384 out[14][1][0] = 0.0; │ │ │ │ │ +385 out[14][1][1] = -12.0 + 24.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2]; │ │ │ │ │ +386 out[14][1][2] = -6.0 + 24.0*in[1] - 18.0*in[1]*in[1]; │ │ │ │ │ +387 out[14][2][0] = 0.0; │ │ │ │ │ +388 out[14][2][1] = 0.0; │ │ │ │ │ +389 out[14][2][2] = 0.0; │ │ │ │ │ +390 │ │ │ │ │ +391 out[15][0][0] = 0.0; │ │ │ │ │ +392 out[15][0][1] = 0.0; │ │ │ │ │ +393 out[15][0][2] = 0.0; │ │ │ │ │ +394 out[15][1][0] = 0.0; │ │ │ │ │ +395 out[15][1][1] = -6.0 + 12.0*in[2] + 18.0*in[1] - 36.0*in[1]*in[2]; │ │ │ │ │ +396 out[15][1][2] = 12.0*in[1] - 18.0*in[1]*in[1]; │ │ │ │ │ +397 out[15][2][0] = 0.0; │ │ │ │ │ +398 out[15][2][1] = 0.0; │ │ │ │ │ +399 out[15][2][2] = 0.0; │ │ │ │ │ +400 │ │ │ │ │ +401 out[16][0][0] = 0.0; │ │ │ │ │ +402 out[16][0][1] = 0.0; │ │ │ │ │ +403 out[16][0][2] = 0.0; │ │ │ │ │ +404 out[16][1][0] = 0.0; │ │ │ │ │ +405 out[16][1][1] = 0.0; │ │ │ │ │ +406 out[16][1][2] = 0.0; │ │ │ │ │ +407 out[16][2][0] = 0.0; │ │ │ │ │ +408 out[16][2][1] = 6.0 - 24.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ +409 out[16][2][2] = 12.0 - 24.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2]; │ │ │ │ │ +410 │ │ │ │ │ +411 out[17][0][0] = 0.0; │ │ │ │ │ +412 out[17][0][1] = 0.0; │ │ │ │ │ +413 out[17][0][2] = 0.0; │ │ │ │ │ +414 out[17][1][0] = 0.0; │ │ │ │ │ +415 out[17][1][1] = 0.0; │ │ │ │ │ +416 out[17][1][2] = 0.0; │ │ │ │ │ +417 out[17][2][0] = 0.0; │ │ │ │ │ +418 out[17][2][1] = -12.0*in[2] + 18.0*in[2]*in[2]; │ │ │ │ │ +419 out[17][2][2] = 6.0 - 12.0*in[1] - 18.0*in[2] + 36.0*in[1]*in[2]; │ │ │ │ │ +420 │ │ │ │ │ +421 out[18][0][0] = 36.0 - 72.0*in[1] - 72.0*in[2] + 144.0*in[1]*in[2] - │ │ │ │ │ +54.0*in[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +422 out[18][0][1] = 18.0 - 72.0*in[0] - 36.0*in[2] + 144.0*in[0]*in[2] + │ │ │ │ │ +54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[2]; │ │ │ │ │ +423 out[18][0][2] = 18.0 - 72.0*in[0] - 36.0*in[1] + 144.0*in[0]*in[1] + │ │ │ │ │ +54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1]; │ │ │ │ │ +424 out[18][1][0] = 0.0; │ │ │ │ │ +425 out[18][1][1] = 0.0; │ │ │ │ │ +426 out[18][1][2] = 0.0; │ │ │ │ │ +427 out[18][2][0] = 0.0; │ │ │ │ │ +428 out[18][2][1] = 0.0; │ │ │ │ │ +429 out[18][2][2] = 0.0; │ │ │ │ │ +430 │ │ │ │ │ +431 out[19][0][0] = 18 - 36.0*in[1] - 36.0*in[2] + 72.0*in[1]*in[2] - 54.0*in │ │ │ │ │ +[0] + 108.0*in[0]*in[1] + 108.0*in[0]*in[2] - 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +432 out[19][0][1] = -36.0*in[0] + 72.0*in[0]*in[2] + 54.0*in[0]*in[0] - │ │ │ │ │ +108.0*in[0]*in[0]*in[2]; │ │ │ │ │ +433 out[19][0][2] = -36.0*in[0] + 72.0*in[0]*in[1] + 54.0*in[0]*in[0] - │ │ │ │ │ +108.0*in[0]*in[0]*in[1]; │ │ │ │ │ +434 out[19][1][0] = 0.0; │ │ │ │ │ +435 out[19][1][1] = 0.0; │ │ │ │ │ +436 out[19][1][2] = 0.0; │ │ │ │ │ +437 out[19][2][0] = 0.0; │ │ │ │ │ +438 out[19][2][1] = 0.0; │ │ │ │ │ +439 out[19][2][2] = 0.0; │ │ │ │ │ +440 │ │ │ │ │ +441 out[20][0][0] = 0.0; │ │ │ │ │ +442 out[20][0][1] = 0.0; │ │ │ │ │ +443 out[20][0][2] = 0.0; │ │ │ │ │ +444 out[20][1][0] = -18.0 + 72.0*in[1] + 36.0*in[2] - 144.0*in[1]*in[2] - │ │ │ │ │ +54.0*in[1]*in[1] + 108.0*in[1]*in[1]*in[2]; │ │ │ │ │ +445 out[20][1][1] = -36.0 + 72.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] + │ │ │ │ │ +54.0*in[1] - 108.0*in[1]*in[0] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +446 out[20][1][2] = -18.0 + 36.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - │ │ │ │ │ +54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1]; │ │ │ │ │ +447 out[20][2][0] = 0.0; │ │ │ │ │ +448 out[20][2][1] = 0.0; │ │ │ │ │ +449 out[20][2][2] = 0.0; │ │ │ │ │ +450 │ │ │ │ │ +451 out[21][0][0] = 0.0; │ │ │ │ │ +452 out[21][0][1] = 0.0; │ │ │ │ │ +453 out[21][0][2] = 0.0; │ │ │ │ │ +454 out[21][1][0] = 36.0*in[1] - 72.0*in[1]*in[2] - 54.0*in[1]*in[1] + 108.0*in │ │ │ │ │ +[1]*in[1]*in[2]; │ │ │ │ │ +455 out[21][1][1] = -18.0 + 36.0*in[0] + 36.0*in[2] - 72.0*in[0]*in[2] + │ │ │ │ │ +54.0*in[1] - 108.0*in[0]*in[1] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +456 out[21][1][2] = 36.0*in[1] - 72.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in │ │ │ │ │ +[0]*in[1]*in[1]; │ │ │ │ │ +457 out[21][2][0] = 0.0; │ │ │ │ │ +458 out[21][2][1] = 0.0; │ │ │ │ │ +459 out[21][2][2] = 0.0; │ │ │ │ │ +460 │ │ │ │ │ +461 out[22][0][0] = 0.0; │ │ │ │ │ +462 out[22][0][1] = 0.0; │ │ │ │ │ +463 out[22][0][2] = 0.0; │ │ │ │ │ +464 out[22][1][0] = 0.0; │ │ │ │ │ +465 out[22][1][1] = 0.0; │ │ │ │ │ +466 out[22][1][2] = 0.0; │ │ │ │ │ +467 out[22][2][0] = -18.0 + 36.0*in[1] + 72.0*in[2] - 144.0*in[1]*in[2] - │ │ │ │ │ +54.0*in[2]*in[2] + 108.0*in[1]*in[2]*in[2]; │ │ │ │ │ +468 out[22][2][1] = -18.0 + 36.0*in[0] + 72.0*in[2] - 144.0*in[0]*in[2] - │ │ │ │ │ +54.0*in[2]*in[2] + 108.0*in[0]*in[2]*in[2]; │ │ │ │ │ +469 out[22][2][2] = -36.0 + 72.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] + │ │ │ │ │ +54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +470 │ │ │ │ │ +471 out[23][0][0] = 0.0; │ │ │ │ │ +472 out[23][0][1] = 0.0; │ │ │ │ │ +473 out[23][0][2] = 0.0; │ │ │ │ │ +474 out[23][1][0] = 0.0; │ │ │ │ │ +475 out[23][1][1] = 0.0; │ │ │ │ │ +476 out[23][1][2] = 0.0; │ │ │ │ │ +477 out[23][2][0] = 36.0*in[2] - 72.0*in[1]*in[2] - 54.0*in[2]*in[2] + 108.0*in │ │ │ │ │ +[1]*in[2]*in[2]; │ │ │ │ │ +478 out[23][2][1] = 36.0*in[2] - 72.0*in[0]*in[2] - 54.0*in[2]*in[2] + 108.0*in │ │ │ │ │ +[0]*in[2]*in[2]; │ │ │ │ │ +479 out[23][2][2] = -18.0 + 36.0*in[0] + 36.0*in[1] - 72.0*in[0]*in[1] + │ │ │ │ │ +54.0*in[2] - 108.0*in[0]*in[2] - 108.0*in[1]*in[2] + 216.0*in[0]*in[1]*in[2]; │ │ │ │ │ +480 │ │ │ │ │ +481 out[24][0][0] = 96.0 - 144.0*in[1] - 144.0*in[2] + 216.0*in[1]*in[2] - │ │ │ │ │ +192.0*in[0] + 288.0*in[0]*in[1] + 288.0*in[0]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ +482 out[24][0][1] = -144.0*in[0] + 216.0*in[0]*in[2] + 144.0*in[0]*in[0] - │ │ │ │ │ +216.0*in[0]*in[0]*in[2]; │ │ │ │ │ +483 out[24][0][2] = -144.0*in[0] + 216.0*in[0]*in[1] + 144.0*in[0]*in[0] - │ │ │ │ │ +216.0*in[0]*in[0]*in[1]; │ │ │ │ │ +484 out[24][1][0] = 0.0; │ │ │ │ │ +485 out[24][1][1] = 0.0; │ │ │ │ │ +486 out[24][1][2] = 0.0; │ │ │ │ │ +487 out[24][2][0] = 0.0; │ │ │ │ │ +488 out[24][2][1] = 0.0; │ │ │ │ │ +489 out[24][2][2] = 0.0; │ │ │ │ │ +490 │ │ │ │ │ +491 out[25][0][0] = 0.0; │ │ │ │ │ +492 out[25][0][1] = 0.0; │ │ │ │ │ +493 out[25][0][2] = 0.0; │ │ │ │ │ +494 out[25][1][0] = -144.0*in[1] + 216.0*in[1]*in[2] + 144.0*in[1]*in[1] - │ │ │ │ │ +216.0*in[1]*in[1]*in[2]; │ │ │ │ │ +495 out[25][1][1] = 96.0 - 144.0*in[0] - 144.0*in[2] + 216.0*in[0]*in[2] - │ │ │ │ │ +192.0*in[1] + 288.0*in[0]*in[1] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ +496 out[25][1][2] = -144.0*in[1] + 216.0*in[0]*in[1] + 144.0*in[1]*in[1] - │ │ │ │ │ +216.0*in[0]*in[1]*in[1]; │ │ │ │ │ +497 out[25][2][0] = 0.0; │ │ │ │ │ +498 out[25][2][1] = 0.0; │ │ │ │ │ +499 out[25][2][2] = 0.0; │ │ │ │ │ +500 │ │ │ │ │ +501 out[26][0][0] = 0.0; │ │ │ │ │ +502 out[26][0][1] = 0.0; │ │ │ │ │ +503 out[26][0][2] = 0.0; │ │ │ │ │ +504 out[26][1][0] = 0.0; │ │ │ │ │ +505 out[26][1][1] = 0.0; │ │ │ │ │ +506 out[26][1][2] = 0.0; │ │ │ │ │ +507 out[26][2][0] = -144.0*in[2] + 216.0*in[1]*in[2] + 144.0*in[2]*in[2] - │ │ │ │ │ +216.0*in[1]*in[2]*in[2]; │ │ │ │ │ +508 out[26][2][1] = -144.0*in[2] + 216.0*in[0]*in[2] + 144.0*in[2]*in[2] - │ │ │ │ │ +216.0*in[0]*in[2]*in[2]; │ │ │ │ │ +509 out[26][2][2] = 96.0 - 144.0*in[0] - 144.0*in[1] + 216.0*in[0]*in[1] - │ │ │ │ │ +192.0*in[2] + 288.0*in[0]*in[2] + 288.0*in[1]*in[2] - 432.0*in[0]*in[1]*in[2]; │ │ │ │ │ +510 │ │ │ │ │ +511 out[27][0][0] = -144.0 + 288.0*in[1] + 216.0*in[2] - 432.0*in[1]*in[2] + │ │ │ │ │ +288.0*in[0] - 576.0*in[0]*in[1] - 432.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +512 out[27][0][1] = 288.0*in[0] - 432.0*in[0]*in[2] - 288.0*in[0]*in[0] + │ │ │ │ │ +432.0*in[0]*in[0]*in[2]; │ │ │ │ │ +513 out[27][0][2] = 216.0*in[0] - 432.0*in[0]*in[1] - 216.0*in[0]*in[0] + │ │ │ │ │ +432.0*in[0]*in[0]*in[1]; │ │ │ │ │ +514 out[27][1][0] = 0.0; │ │ │ │ │ +515 out[27][1][1] = 0.0; │ │ │ │ │ +516 out[27][1][2] = 0.0; │ │ │ │ │ +517 out[27][2][0] = 0.0; │ │ │ │ │ +518 out[27][2][1] = 0.0; │ │ │ │ │ +519 out[27][2][2] = 0.0; │ │ │ │ │ +520 │ │ │ │ │ +521 out[28][0][0] = -144.0 + 216.0*in[1] + 288.0*in[2] - 432.0*in[1]*in[2] + │ │ │ │ │ +288.0*in[0] - 432.0*in[0]*in[1] - 576.0*in[0]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +522 out[28][0][1] = 216.0*in[0] - 432.0*in[0]*in[2] - 216.0*in[0]*in[0] + │ │ │ │ │ +432.0*in[0]*in[0]*in[2]; │ │ │ │ │ +523 out[28][0][2] = 288.0*in[0] - 432.0*in[0]*in[1] - 288.0*in[0]*in[0] + │ │ │ │ │ +432.0*in[0]*in[0]*in[1]; │ │ │ │ │ +524 out[28][1][0] = 0.0; │ │ │ │ │ +525 out[28][1][1] = 0.0; │ │ │ │ │ +526 out[28][1][2] = 0.0; │ │ │ │ │ +527 out[28][2][0] = 0.0; │ │ │ │ │ +528 out[28][2][1] = 0.0; │ │ │ │ │ +529 out[28][2][2] = 0.0; │ │ │ │ │ +530 │ │ │ │ │ +531 out[29][0][0] = 0.0; │ │ │ │ │ +532 out[29][0][1] = 0.0; │ │ │ │ │ +533 out[29][0][2] = 0.0; │ │ │ │ │ +534 out[29][1][0] = 288.0*in[1] - 432.0*in[1]*in[2] - 288.0*in[1]*in[1] + │ │ │ │ │ +432.0*in[1]*in[1]*in[2]; │ │ │ │ │ +535 out[29][1][1] = -144.0 + 288.0*in[0] + 216.0*in[2] - 432.0*in[0]*in[2] + │ │ │ │ │ +288.0*in[1] - 576.0*in[0]*in[1] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +536 out[29][1][2] = 216.0*in[1] - 432.0*in[0]*in[1] - 216.0*in[1]*in[1] + │ │ │ │ │ +432.0*in[0]*in[1]*in[1]; │ │ │ │ │ +537 out[29][2][0] = 0.0; │ │ │ │ │ +538 out[29][2][1] = 0.0; │ │ │ │ │ +539 out[29][2][2] = 0.0; │ │ │ │ │ +540 │ │ │ │ │ +541 out[30][0][0] = 0.0; │ │ │ │ │ +542 out[30][0][1] = 0.0; │ │ │ │ │ +543 out[30][0][2] = 0.0; │ │ │ │ │ +544 out[30][1][0] = 216.0*in[1] - 432.0*in[1]*in[2] - 216.0*in[1]*in[1] + │ │ │ │ │ +432.0*in[1]*in[1]*in[2]; │ │ │ │ │ +545 out[30][1][1] = -144.0 + 216.0*in[0] + 288.0*in[2] - 432.0*in[0]*in[2] + │ │ │ │ │ +288.0*in[1] - 432.0*in[0]*in[1] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +546 out[30][1][2] = 288.0*in[1] - 432.0*in[0]*in[1] - 288.0*in[1]*in[1] + │ │ │ │ │ +432.0*in[0]*in[1]*in[1]; │ │ │ │ │ +547 out[30][2][0] = 0.0; │ │ │ │ │ +548 out[30][2][1] = 0.0; │ │ │ │ │ +549 out[30][2][2] = 0.0; │ │ │ │ │ +550 │ │ │ │ │ +551 out[31][0][0] = 0.0; │ │ │ │ │ +552 out[31][0][1] = 0.0; │ │ │ │ │ +553 out[31][0][2] = 0.0; │ │ │ │ │ +554 out[31][1][0] = 0.0; │ │ │ │ │ +555 out[31][1][1] = 0.0; │ │ │ │ │ +556 out[31][1][2] = 0.0; │ │ │ │ │ +557 out[31][2][0] = 288.0*in[2] - 432.0*in[1]*in[2] - 288.0*in[2]*in[2] + │ │ │ │ │ +432.0*in[1]*in[2]*in[2]; │ │ │ │ │ +558 out[31][2][1] = 216.0*in[2] - 432.0*in[0]*in[2] - 216.0*in[2]*in[2] + │ │ │ │ │ +432.0*in[0]*in[2]*in[2]; │ │ │ │ │ +559 out[31][2][2] = -144.0 + 288.0*in[0] + 216.0*in[1] - 432.0*in[0]*in[1] + │ │ │ │ │ +288.0*in[2] - 576.0*in[0]*in[2] - 432.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +560 │ │ │ │ │ +561 out[32][0][0] = 0.0; │ │ │ │ │ +562 out[32][0][1] = 0.0; │ │ │ │ │ +563 out[32][0][2] = 0.0; │ │ │ │ │ +564 out[32][1][0] = 0.0; │ │ │ │ │ +565 out[32][1][1] = 0.0; │ │ │ │ │ +566 out[32][1][2] = 0.0; │ │ │ │ │ +567 out[32][2][0] = 216.0*in[2] - 432.0*in[1]*in[2] - 216.0*in[2]*in[2] + │ │ │ │ │ +432.0*in[1]*in[2]*in[2]; │ │ │ │ │ +568 out[32][2][1] = 288.0*in[2] - 432.0*in[0]*in[2] - 288.0*in[2]*in[2] + │ │ │ │ │ +432.0*in[0]*in[2]*in[2]; │ │ │ │ │ +569 out[32][2][2] = -144.0 + 216.0*in[0] + 288.0*in[1] - 432.0*in[0]*in[1] + │ │ │ │ │ +288.0*in[2] - 432.0*in[0]*in[2] - 576.0*in[1]*in[2] + 864.0*in[0]*in[1]*in[2]; │ │ │ │ │ +570 │ │ │ │ │ +571 out[33][0][0] = 216.0 - 432.0*in[1] - 432.0*in[2] + 864.0*in[1]*in[2] - │ │ │ │ │ +432.0*in[0] + 864.0*in[0]*in[1] + 864.0*in[0]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ +572 out[33][0][1] = -432.0*in[0] + 864.0*in[0]*in[2] + 432.0*in[0]*in[0] - │ │ │ │ │ +864.0*in[0]*in[0]*in[2]; │ │ │ │ │ +573 out[33][0][2] = -432.0*in[0] + 864.0*in[0]*in[1] + 432.0*in[0]*in[0] - │ │ │ │ │ +864.0*in[0]*in[0]*in[1]; │ │ │ │ │ +574 out[33][1][0] = 0.0; │ │ │ │ │ +575 out[33][1][1] = 0.0; │ │ │ │ │ +576 out[33][1][2] = 0.0; │ │ │ │ │ +577 out[33][2][0] = 0.0; │ │ │ │ │ +578 out[33][2][1] = 0.0; │ │ │ │ │ +579 out[33][2][2] = 0.0; │ │ │ │ │ +580 │ │ │ │ │ +581 out[34][0][0] = 0.0; │ │ │ │ │ +582 out[34][0][1] = 0.0; │ │ │ │ │ +583 out[34][0][2] = 0.0; │ │ │ │ │ +584 out[34][1][0] = -432.0*in[1] + 864.0*in[1]*in[2] + 432.0*in[1]*in[1] - │ │ │ │ │ +864.0*in[1]*in[1]*in[2]; │ │ │ │ │ +585 out[34][1][1] = 216.0 - 432.0*in[0] - 432.0*in[2] + 864.0*in[0]*in[2] - │ │ │ │ │ +432.0*in[1] + 864.0*in[0]*in[1] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ +586 out[34][1][2] = -432.0*in[1] + 864.0*in[0]*in[1] + 432.0*in[1]*in[1] - │ │ │ │ │ +864.0*in[0]*in[1]*in[1]; │ │ │ │ │ +587 out[34][2][0] = 0.0; │ │ │ │ │ +588 out[34][2][1] = 0.0; │ │ │ │ │ +589 out[34][2][2] = 0.0; │ │ │ │ │ +590 │ │ │ │ │ +591 out[35][0][0] = 0.0; │ │ │ │ │ +592 out[35][0][1] = 0.0; │ │ │ │ │ +593 out[35][0][2] = 0.0; │ │ │ │ │ +594 out[35][1][0] = 0.0; │ │ │ │ │ +595 out[35][1][1] = 0.0; │ │ │ │ │ +596 out[35][1][2] = 0.0; │ │ │ │ │ +597 out[35][2][0] = -432.0*in[2] + 864.0*in[1]*in[2] + 432.0*in[2]*in[2] - │ │ │ │ │ +864.0*in[1]*in[2]*in[2]; │ │ │ │ │ +598 out[35][2][1] = -432.0*in[2] + 864.0*in[0]*in[2] + 432.0*in[2]*in[2] - │ │ │ │ │ +864.0*in[0]*in[2]*in[2]; │ │ │ │ │ +599 out[35][2][2] = 216.0 - 432.0*in[0] - 432.0*in[1] + 864.0*in[0]*in[1] - │ │ │ │ │ +432.0*in[2] + 864.0*in[0]*in[2] + 864.0*in[1]*in[2] - 1728.0*in[0]*in[1]*in[2]; │ │ │ │ │ +600 } │ │ │ │ │ +601 │ │ │ │ │ +_6_0_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +604 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +605 std::vector& out) const // return value │ │ │ │ │ +606 { │ │ │ │ │ +607 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +608 if (totalOrder == 0) { │ │ │ │ │ +609 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +610 } else { │ │ │ │ │ +611 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +612 } │ │ │ │ │ +613 } │ │ │ │ │ +614 │ │ │ │ │ +_6_1_6 unsigned int _o_r_d_e_r () const │ │ │ │ │ +617 { │ │ │ │ │ +618 return 3; │ │ │ │ │ +619 } │ │ │ │ │ +620 │ │ │ │ │ +621 private: │ │ │ │ │ +622 R sign0, sign1, sign2, sign3, sign4, sign5; │ │ │ │ │ +623 }; │ │ │ │ │ +624} │ │ │ │ │ +625#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on prisms. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:603 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ +3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT0PrismLocalBasis< D, R >, │ │ │ │ │ -RT0PrismLocalCoefficients, RT0PrismLocalInterpolation< RT0PrismLocalBasis< D, R │ │ │ │ │ -> > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0PrismLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0PrismLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 32. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prism.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on prisms. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_P_r_i_s_m_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0prismlocalinterpolation.hh:22 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RT1Cube3DLocalBasis(unsigned int s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:236 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:616 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomaslfecache.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,44 +65,39 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
raviartthomaslfecache.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
raviartthomas1cube3dlocalinterpolation.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <tuple>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/raviartthomas.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RT1Cube3DLocalInterpolation< LB >
 First order Raviart-Thomas shape functions on the reference hexahedron. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Typedefs

template<class D , class R , std::size_t dim, std::size_t order>
using Dune::RaviartThomasLocalFiniteElementCache = LocalFiniteElementVariantCache< Impl::ImplementedRaviartThomasLocalFiniteElements< D, R, dim, order > >
 A cache that stores all available Raviart-Thomas local finite elements for the given dimension and order.
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -raviartthomaslfecache.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +raviartthomas1cube3dlocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -TTyyppeeddeeffss │ │ │ │ │ -template │ │ │ │ │ -using  _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ - _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e< Impl:: │ │ │ │ │ - ImplementedRaviartThomasLocalFiniteElements< D, R, dim, order > > │ │ │ │ │ -  A cache that stores all available Raviart-Thomas local finite elements │ │ │ │ │ - for the given dimension and order. │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00266_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomaslfecache.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas1cube3dlocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,154 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomaslfecache.hh
│ │ │ │ +
raviartthomas1cube3dlocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <tuple>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/geometry/type.hh>
│ │ │ │ -
12#include <dune/geometry/typeindex.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune {
│ │ │ │ -
18
│ │ │ │ -
19namespace Impl {
│ │ │ │ -
20
│ │ │ │ -
21 // Provide implemented Raviart-Thomas local finite elements
│ │ │ │ -
22
│ │ │ │ -
23 template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ -
24 struct ImplementedRaviartThomasLocalFiniteElements
│ │ │ │ -
25 {};
│ │ │ │ -
26
│ │ │ │ -
27 template<class D, class R>
│ │ │ │ -
28 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,0> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ -
29 {
│ │ │ │ -
30 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ -
31 static auto getImplementations()
│ │ │ │ -
32 {
│ │ │ │ -
33 return std::make_tuple(
│ │ │ │ -
34 std::make_pair(index(GeometryTypes::triangle), []() { return RT02DLocalFiniteElement<D,R>(); }),
│ │ │ │ -
35 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT0Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ -
36 );
│ │ │ │ -
37 }
│ │ │ │ -
38 };
│ │ │ │ -
39
│ │ │ │ -
40 template<class D, class R>
│ │ │ │ -
41 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,1> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ -
42 {
│ │ │ │ -
43 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ -
44 static auto getImplementations()
│ │ │ │ -
45 {
│ │ │ │ -
46 return std::make_tuple(
│ │ │ │ -
47 std::make_pair(index(GeometryTypes::triangle), []() { return RT12DLocalFiniteElement<D,R>(); }),
│ │ │ │ -
48 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT1Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ -
49 );
│ │ │ │ -
50 }
│ │ │ │ -
51 };
│ │ │ │ -
52
│ │ │ │ -
53 template<class D, class R>
│ │ │ │ -
54 struct ImplementedRaviartThomasLocalFiniteElements<D,R,2,2> : public FixedDimLocalGeometryTypeIndex<2>
│ │ │ │ -
55 {
│ │ │ │ -
56 using FixedDimLocalGeometryTypeIndex<2>::index;
│ │ │ │ -
57 static auto getImplementations()
│ │ │ │ -
58 {
│ │ │ │ -
59 return std::make_tuple(
│ │ │ │ -
60 std::make_pair(index(GeometryTypes::quadrilateral), []() { return RT2Cube2DLocalFiniteElement<D,R>(); })
│ │ │ │ -
61 );
│ │ │ │ -
62 }
│ │ │ │ -
63 };
│ │ │ │ -
64
│ │ │ │ -
65 template<class D, class R>
│ │ │ │ -
66 struct ImplementedRaviartThomasLocalFiniteElements<D,R,3,0> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ -
67 {
│ │ │ │ -
68 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ -
69 static auto getImplementations()
│ │ │ │ -
70 {
│ │ │ │ -
71 return std::make_tuple(
│ │ │ │ -
72 std::make_pair(index(GeometryTypes::tetrahedron), []() { return RT03DLocalFiniteElement<D,R>(); }),
│ │ │ │ -
73 std::make_pair(index(GeometryTypes::hexahedron), []() { return RT0Cube3DLocalFiniteElement<D,R>(); })
│ │ │ │ -
74 );
│ │ │ │ -
75 }
│ │ │ │ -
76 };
│ │ │ │ -
77
│ │ │ │ -
78 template<class D, class R>
│ │ │ │ -
79 struct ImplementedRaviartThomasLocalFiniteElements<D,R,3,1> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ -
80 {
│ │ │ │ -
81 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ -
82 static auto getImplementations()
│ │ │ │ -
83 {
│ │ │ │ -
84 return std::make_tuple(
│ │ │ │ -
85 std::make_pair(index(GeometryTypes::hexahedron), []() { RT1Cube3DLocalFiniteElement<D,R>(); })
│ │ │ │ -
86 );
│ │ │ │ -
87 }
│ │ │ │ -
88 };
│ │ │ │ -
89
│ │ │ │ -
90} // namespace Impl
│ │ │ │ -
91
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
22 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
27
│ │ │ │ +
│ │ │ │ +
33 RT1Cube3DLocalInterpolation (std::bitset<6> s = 0)
│ │ │ │ +
34 {
│ │ │ │ +
35 for (size_t i=0; i<6; i++)
│ │ │ │ +
36 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
37
│ │ │ │ +
38 n_[0] = {-1.0, 0.0, 0.0};
│ │ │ │ +
39 n_[1] = { 1.0, 0.0, 0.0};
│ │ │ │ +
40 n_[2] = { 0.0, -1.0, 0.0};
│ │ │ │ +
41 n_[3] = { 0.0, 1.0, 0.0};
│ │ │ │ +
42 n_[4] = { 0.0, 0.0, -1.0};
│ │ │ │ +
43 n_[5] = { 0.0, 0.0, 1.0};
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
54 template<class F, class C>
│ │ │ │ +
│ │ │ │ +
55 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
56 {
│ │ │ │ +
57 // f gives v*outer normal at a point on the edge!
│ │ │ │ +
58 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ +
59 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ +
60
│ │ │ │ +
61 out.resize(36);
│ │ │ │ +
62 fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
63
│ │ │ │ +
64 const int qOrder = 3;
│ │ │ │ +
65 const auto& rule1 = QuadratureRules<Scalar,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ +
66
│ │ │ │ +
67 for (auto&& qp : rule1)
│ │ │ │ +
68 {
│ │ │ │ +
69 Dune::FieldVector<Scalar,2> qPos = qp.position();
│ │ │ │ +
70 typename LB::Traits::DomainType localPos;
│ │ │ │ +
71
│ │ │ │ +
72 localPos = {0.0, qPos[0], qPos[1]};
│ │ │ │ +
73 auto y = f(localPos);
│ │ │ │ +
74 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*qp.weight()*sign_[0];
│ │ │ │ +
75 out[6] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ +
76 out[12] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
77 out[18] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
78
│ │ │ │ +
79 localPos = {1.0, qPos[0], qPos[1]};
│ │ │ │ +
80 y = f(localPos);
│ │ │ │ +
81 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*qp.weight()*sign_[1];
│ │ │ │ +
82 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ +
83 out[13] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ +
84 out[19] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
85
│ │ │ │ +
86 localPos = {qPos[0], 0.0, qPos[1]};
│ │ │ │ +
87 y = f(localPos);
│ │ │ │ +
88 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*qp.weight()*sign_[2];
│ │ │ │ +
89 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ +
90 out[14] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
91 out[20] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │
92
│ │ │ │ -
93
│ │ │ │ -
103template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ - │ │ │ │ -
105
│ │ │ │ -
106} // namespace Dune
│ │ │ │ -
107
│ │ │ │ -
108#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
93 localPos = {qPos[0], 1.0, qPos[1]};
│ │ │ │ +
94 y = f(localPos);
│ │ │ │ +
95 out[3] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*qp.weight()*sign_[3];
│ │ │ │ +
96 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ +
97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ +
98 out[21] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
99
│ │ │ │ +
100 localPos = {qPos[0], qPos[1], 0.0};
│ │ │ │ +
101 y = f(localPos);
│ │ │ │ +
102 out[4] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*qp.weight()*sign_[4];
│ │ │ │ +
103 out[10] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[0])*qp.weight();
│ │ │ │ +
104 out[16] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[1])*qp.weight();
│ │ │ │ +
105 out[22] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos[0])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
106
│ │ │ │ +
107 localPos = {qPos[0], qPos[1], 1.0};
│ │ │ │ +
108 y = f(localPos);
│ │ │ │ +
109 out[5] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*qp.weight()*sign_[5];
│ │ │ │ +
110 out[11] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - 1.0)*qp.weight();
│ │ │ │ +
111 out[17] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
112 out[23] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - 1.0)*(2.0*qPos[1] - 1.0)*qp.weight();
│ │ │ │ +
113 }
│ │ │ │ +
114
│ │ │ │ +
115 const auto& rule2 = QuadratureRules<Vector,3>::rule(GeometryTypes::cube(3), qOrder);
│ │ │ │ +
116 for (auto&& qp : rule2)
│ │ │ │ +
117 {
│ │ │ │ +
118 FieldVector<double,3> qPos = qp.position();
│ │ │ │ +
119
│ │ │ │ +
120 auto y = f(qPos);
│ │ │ │ +
121 out[24] += y[0]*qp.weight();
│ │ │ │ +
122 out[25] += y[1]*qp.weight();
│ │ │ │ +
123 out[26] += y[2]*qp.weight();
│ │ │ │ +
124 out[27] += y[0]*qPos[1]*qp.weight();
│ │ │ │ +
125 out[28] += y[0]*qPos[2]*qp.weight();
│ │ │ │ +
126 out[29] += y[1]*qPos[0]*qp.weight();
│ │ │ │ +
127 out[30] += y[1]*qPos[2]*qp.weight();
│ │ │ │ +
128 out[31] += y[2]*qPos[0]*qp.weight();
│ │ │ │ +
129 out[32] += y[2]*qPos[1]*qp.weight();
│ │ │ │ +
130 out[33] += y[0]*qPos[1]*qPos[2]*qp.weight();
│ │ │ │ +
131 out[34] += y[1]*qPos[0]*qPos[2]*qp.weight();
│ │ │ │ +
132 out[35] += y[2]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ +
133 }
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
136 private:
│ │ │ │ +
137 // Facet orientations
│ │ │ │ +
138 std::array<typename LB::Traits::RangeFieldType, 6> sign_;
│ │ │ │ +
139
│ │ │ │ +
140 // Facet normals
│ │ │ │ +
141 std::array<typename LB::Traits::DomainType, 6> n_;
│ │ │ │ +
142 };
│ │ │ │ +
│ │ │ │ +
143}
│ │ │ │ +
144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalinterpolation.hh:24
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas1cube3dlocalinterpolation.hh:55
│ │ │ │ +
RT1Cube3DLocalInterpolation(std::bitset< 6 > s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas1cube3dlocalinterpolation.hh:33
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +1,175 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomaslfecache.hh │ │ │ │ │ + * _r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d │ │ │ │ │ +raviartthomas1cube3dlocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e { │ │ │ │ │ -18 │ │ │ │ │ -19namespace Impl { │ │ │ │ │ -20 │ │ │ │ │ -21 // Provide implemented Raviart-Thomas local finite elements │ │ │ │ │ -22 │ │ │ │ │ -23 template │ │ │ │ │ -24 struct ImplementedRaviartThomasLocalFiniteElements │ │ │ │ │ -25 {}; │ │ │ │ │ -26 │ │ │ │ │ -27 template │ │ │ │ │ -28 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ -29 { │ │ │ │ │ -30 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ -31 static auto getImplementations() │ │ │ │ │ -32 { │ │ │ │ │ -33 return std::make_tuple( │ │ │ │ │ -34 std::make_pair(index(GeometryTypes::triangle), []() { return │ │ │ │ │ -RT02DLocalFiniteElement(); }), │ │ │ │ │ -35 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ -RT0Cube2DLocalFiniteElement(); }) │ │ │ │ │ -36 ); │ │ │ │ │ -37 } │ │ │ │ │ -38 }; │ │ │ │ │ -39 │ │ │ │ │ -40 template │ │ │ │ │ -41 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ -42 { │ │ │ │ │ -43 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ -44 static auto getImplementations() │ │ │ │ │ -45 { │ │ │ │ │ -46 return std::make_tuple( │ │ │ │ │ -47 std::make_pair(index(GeometryTypes::triangle), []() { return │ │ │ │ │ -RT12DLocalFiniteElement(); }), │ │ │ │ │ -48 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ -RT1Cube2DLocalFiniteElement(); }) │ │ │ │ │ -49 ); │ │ │ │ │ -50 } │ │ │ │ │ -51 }; │ │ │ │ │ -52 │ │ │ │ │ -53 template │ │ │ │ │ -54 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<2> │ │ │ │ │ -55 { │ │ │ │ │ -56 using FixedDimLocalGeometryTypeIndex<2>::index; │ │ │ │ │ -57 static auto getImplementations() │ │ │ │ │ -58 { │ │ │ │ │ -59 return std::make_tuple( │ │ │ │ │ -60 std::make_pair(index(GeometryTypes::quadrilateral), []() { return │ │ │ │ │ -RT2Cube2DLocalFiniteElement(); }) │ │ │ │ │ -61 ); │ │ │ │ │ -62 } │ │ │ │ │ -63 }; │ │ │ │ │ -64 │ │ │ │ │ -65 template │ │ │ │ │ -66 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ -67 { │ │ │ │ │ -68 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ -69 static auto getImplementations() │ │ │ │ │ -70 { │ │ │ │ │ -71 return std::make_tuple( │ │ │ │ │ -72 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ -RT03DLocalFiniteElement(); }), │ │ │ │ │ -73 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ -RT0Cube3DLocalFiniteElement(); }) │ │ │ │ │ -74 ); │ │ │ │ │ -75 } │ │ │ │ │ -76 }; │ │ │ │ │ -77 │ │ │ │ │ -78 template │ │ │ │ │ -79 struct ImplementedRaviartThomasLocalFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ -80 { │ │ │ │ │ -81 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ -82 static auto getImplementations() │ │ │ │ │ -83 { │ │ │ │ │ -84 return std::make_tuple( │ │ │ │ │ -85 std::make_pair(index(GeometryTypes::hexahedron), []() │ │ │ │ │ -{ RT1Cube3DLocalFiniteElement(); }) │ │ │ │ │ -86 ); │ │ │ │ │ -87 } │ │ │ │ │ -88 }; │ │ │ │ │ -89 │ │ │ │ │ -90} // namespace Impl │ │ │ │ │ -91 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +27 │ │ │ │ │ +_3_3 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<6> s = 0) │ │ │ │ │ +34 { │ │ │ │ │ +35 for (size_t i=0; i<6; i++) │ │ │ │ │ +36 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +37 │ │ │ │ │ +38 n_[0] = {-1.0, 0.0, 0.0}; │ │ │ │ │ +39 n_[1] = { 1.0, 0.0, 0.0}; │ │ │ │ │ +40 n_[2] = { 0.0, -1.0, 0.0}; │ │ │ │ │ +41 n_[3] = { 0.0, 1.0, 0.0}; │ │ │ │ │ +42 n_[4] = { 0.0, 0.0, -1.0}; │ │ │ │ │ +43 n_[5] = { 0.0, 0.0, 1.0}; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +54 template │ │ │ │ │ +_5_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +56 { │ │ │ │ │ +57 // f gives v*outer normal at a point on the edge! │ │ │ │ │ +58 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ +59 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ +60 │ │ │ │ │ +61 out.resize(36); │ │ │ │ │ +62 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +63 │ │ │ │ │ +64 const int qOrder = 3; │ │ │ │ │ +65 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ +qOrder); │ │ │ │ │ +66 │ │ │ │ │ +67 for (auto&& qp : rule1) │ │ │ │ │ +68 { │ │ │ │ │ +69 Dune::FieldVector qPos = qp.position(); │ │ │ │ │ +70 typename LB::Traits::DomainType localPos; │ │ │ │ │ +71 │ │ │ │ │ +72 localPos = {0.0, qPos[0], qPos[1]}; │ │ │ │ │ +73 auto y = f(localPos); │ │ │ │ │ +74 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*qp.weight()*sign_ │ │ │ │ │ +[0]; │ │ │ │ │ +75 out[6] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +76 out[12] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[1] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +77 out[18] += (y[0]*n_[0][0] + y[1]*n_[0][1] + y[2]*n_[0][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ +78 │ │ │ │ │ +79 localPos = {1.0, qPos[0], qPos[1]}; │ │ │ │ │ +80 y = f(localPos); │ │ │ │ │ +81 out[1] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*qp.weight()*sign_ │ │ │ │ │ +[1]; │ │ │ │ │ +82 out[7] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*qp.weight(); │ │ │ │ │ +83 out[13] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[1])*qp.weight(); │ │ │ │ │ +84 out[19] += (y[0]*n_[1][0] + y[1]*n_[1][1] + y[2]*n_[1][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ +85 │ │ │ │ │ +86 localPos = {qPos[0], 0.0, qPos[1]}; │ │ │ │ │ +87 y = f(localPos); │ │ │ │ │ +88 out[2] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*qp.weight()*sign_ │ │ │ │ │ +[2]; │ │ │ │ │ +89 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*qp.weight(); │ │ │ │ │ +90 out[14] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(2.0*qPos[1] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +91 out[20] += (y[0]*n_[2][0] + y[1]*n_[2][1] + y[2]*n_[2][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ 92 │ │ │ │ │ -93 │ │ │ │ │ -103template │ │ │ │ │ -_1_0_4using _R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_I_m_p_l_:_: │ │ │ │ │ -_I_m_p_l_e_m_e_n_t_e_d_R_a_v_i_a_r_t_T_h_o_m_a_s_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_s_<_D_,_R_,_d_i_m_,_o_r_d_e_r_>>; │ │ │ │ │ -105 │ │ │ │ │ -106} // namespace Dune │ │ │ │ │ -107 │ │ │ │ │ -108#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASLFECACHE_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_._h_h │ │ │ │ │ +93 localPos = {qPos[0], 1.0, qPos[1]}; │ │ │ │ │ +94 y = f(localPos); │ │ │ │ │ +95 out[3] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*qp.weight()*sign_ │ │ │ │ │ +[3]; │ │ │ │ │ +96 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +97 out[15] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[1])*qp.weight(); │ │ │ │ │ +98 out[21] += (y[0]*n_[3][0] + y[1]*n_[3][1] + y[2]*n_[3][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ +99 │ │ │ │ │ +100 localPos = {qPos[0], qPos[1], 0.0}; │ │ │ │ │ +101 y = f(localPos); │ │ │ │ │ +102 out[4] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*qp.weight()*sign_ │ │ │ │ │ +[4]; │ │ │ │ │ +103 out[10] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*qp.weight(); │ │ │ │ │ +104 out[16] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[1])*qp.weight(); │ │ │ │ │ +105 out[22] += (y[0]*n_[4][0] + y[1]*n_[4][1] + y[2]*n_[4][2])*(1.0 - 2.0*qPos │ │ │ │ │ +[0])*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ +106 │ │ │ │ │ +107 localPos = {qPos[0], qPos[1], 1.0}; │ │ │ │ │ +108 y = f(localPos); │ │ │ │ │ +109 out[5] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*qp.weight()*sign_ │ │ │ │ │ +[5]; │ │ │ │ │ +110 out[11] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +111 out[17] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[1] - │ │ │ │ │ +1.0)*qp.weight(); │ │ │ │ │ +112 out[23] += (y[0]*n_[5][0] + y[1]*n_[5][1] + y[2]*n_[5][2])*(2.0*qPos[0] - │ │ │ │ │ +1.0)*(2.0*qPos[1] - 1.0)*qp.weight(); │ │ │ │ │ +113 } │ │ │ │ │ +114 │ │ │ │ │ +115 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(3), │ │ │ │ │ +qOrder); │ │ │ │ │ +116 for (auto&& qp : rule2) │ │ │ │ │ +117 { │ │ │ │ │ +118 FieldVector qPos = qp.position(); │ │ │ │ │ +119 │ │ │ │ │ +120 auto y = f(qPos); │ │ │ │ │ +121 out[24] += y[0]*qp.weight(); │ │ │ │ │ +122 out[25] += y[1]*qp.weight(); │ │ │ │ │ +123 out[26] += y[2]*qp.weight(); │ │ │ │ │ +124 out[27] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ +125 out[28] += y[0]*qPos[2]*qp.weight(); │ │ │ │ │ +126 out[29] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ +127 out[30] += y[1]*qPos[2]*qp.weight(); │ │ │ │ │ +128 out[31] += y[2]*qPos[0]*qp.weight(); │ │ │ │ │ +129 out[32] += y[2]*qPos[1]*qp.weight(); │ │ │ │ │ +130 out[33] += y[0]*qPos[1]*qPos[2]*qp.weight(); │ │ │ │ │ +131 out[34] += y[1]*qPos[0]*qPos[2]*qp.weight(); │ │ │ │ │ +132 out[35] += y[2]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ +133 } │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +136 private: │ │ │ │ │ +137 // Facet orientations │ │ │ │ │ +138 std::array sign_; │ │ │ │ │ +139 │ │ │ │ │ +140 // Facet normals │ │ │ │ │ +141 std::array n_; │ │ │ │ │ +142 }; │ │ │ │ │ +143} │ │ │ │ │ +144#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -A cache storing a compile time selection of local finite element │ │ │ │ │ -implementations. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Interpolate a given function with shape functions. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RT1Cube3DLocalInterpolation(std::bitset< 6 > s=0) │ │ │ │ │ +Make set number s, where 0 <= s < 64. │ │ │ │ │ +DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:33 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: orthonormal.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalinterpolation.hh File Reference
│ │ │ │ +
orthonormal.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT2Cube2DLocalInterpolation< LB >
 Second order Raviart-Thomas shape functions on the reference triangle. More...
class  Dune::OrthonormalLocalFiniteElement< dimDomain, D, R, SF, CF >
 A class providing orthonormal basis functions. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas2cube2dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +orthonormal.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +  A class providing orthonormal basis functions. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00269_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: orthonormal.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,136 +70,71 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalinterpolation.hh
│ │ │ │ +
orthonormal.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
23 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
28
│ │ │ │ -
│ │ │ │ -
34 RT2Cube2DLocalInterpolation (std::bitset<4> s = 0)
│ │ │ │ -
35 {
│ │ │ │ -
36 for (size_t i=0; i<4; i++)
│ │ │ │ -
37 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
38
│ │ │ │ -
39 n_[0] = {-1.0, 0.0};
│ │ │ │ -
40 n_[1] = { 1.0, 0.0};
│ │ │ │ -
41 n_[2] = { 0.0, -1.0};
│ │ │ │ -
42 n_[3] = { 0.0, 1.0};
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
32 template< unsigned int dimDomain, class D, class R,
│ │ │ │ +
33 class SF=R, class CF=SF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 : public GenericLocalFiniteElement< OrthonormalBasisFactory< dimDomain, SF, CF >,
│ │ │ │ +
36 DGLocalCoefficientsFactory< OrthonormalBasisFactory< dimDomain, SF, CF > >,
│ │ │ │ +
37 LocalL2InterpolationFactory< OrthonormalBasisFactory< dimDomain, SF, CF >,true > >
│ │ │ │ +
38 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
42 public:
│ │ │ │ +
43 using typename Base::Traits;
│ │ │ │
44
│ │ │ │ -
53 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
54 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
55 {
│ │ │ │ -
56 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
57 typedef typename LB::Traits::RangeFieldType Scalar;
│ │ │ │ -
58 typedef typename LB::Traits::DomainFieldType Vector;
│ │ │ │ -
59
│ │ │ │ -
60 out.resize(24);
│ │ │ │ -
61 fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
62
│ │ │ │ -
63 const int qOrder = 6;
│ │ │ │ -
64 const auto& rule1 = QuadratureRules<Scalar,1>::rule(GeometryTypes::cube(1), qOrder);
│ │ │ │ -
65
│ │ │ │ -
66 for (auto&& qp : rule1)
│ │ │ │ -
67 {
│ │ │ │ -
68 Scalar qPos = qp.position();
│ │ │ │ -
69 typename LB::Traits::DomainType localPos;
│ │ │ │ -
70
│ │ │ │ -
71 localPos = {0.0, qPos};
│ │ │ │ -
72 auto y = f(localPos);
│ │ │ │ -
73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0];
│ │ │ │ -
74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[0];
│ │ │ │ -
76
│ │ │ │ -
77 localPos = {1.0, qPos};
│ │ │ │ -
78 y = f(localPos);
│ │ │ │ -
79 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1];
│ │ │ │ -
80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[1];
│ │ │ │ -
82
│ │ │ │ -
83 localPos = {qPos, 0.0};
│ │ │ │ -
84 y = f(localPos);
│ │ │ │ -
85 out[6] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2];
│ │ │ │ -
86 out[7] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight();
│ │ │ │ -
87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[2];
│ │ │ │ -
88
│ │ │ │ -
89 localPos = {qPos, 1.0};
│ │ │ │ -
90 y = f(localPos);
│ │ │ │ -
91 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3];
│ │ │ │ -
92 out[10] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight();
│ │ │ │ -
93 out[11] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + 1.0)*qp.weight()*sign_[3];
│ │ │ │ -
94 }
│ │ │ │ -
95
│ │ │ │ -
96 const auto& rule2 = QuadratureRules<Vector,2>::rule(GeometryTypes::cube(2), qOrder);
│ │ │ │ -
97
│ │ │ │ -
98 for (auto&& qp : rule2)
│ │ │ │ -
99 {
│ │ │ │ -
100 FieldVector<double,2> qPos = qp.position();
│ │ │ │ -
101
│ │ │ │ -
102 auto y = f(qPos);
│ │ │ │ -
103 out[12] += y[0]*qp.weight();
│ │ │ │ -
104 out[13] += y[1]*qp.weight();
│ │ │ │ -
105 out[14] += y[0]*qPos[0]*qp.weight();
│ │ │ │ -
106 out[15] += y[1]*qPos[0]*qp.weight();
│ │ │ │ -
107 out[16] += y[0]*qPos[1]*qp.weight();
│ │ │ │ -
108 out[17] += y[1]*qPos[1]*qp.weight();
│ │ │ │ -
109 out[18] += y[0]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ -
110 out[19] += y[1]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ -
111 out[20] += y[0]*qPos[1]*qPos[1]*qp.weight();
│ │ │ │ -
112 out[21] += y[1]*qPos[0]*qPos[0]*qp.weight();
│ │ │ │ -
113 out[22] += y[0]*qPos[0]*qPos[1]*qPos[1]*qp.weight();
│ │ │ │ -
114 out[23] += y[1]*qPos[0]*qPos[0]*qPos[1]*qp.weight();
│ │ │ │ -
115 }
│ │ │ │ -
116 }
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
118 private:
│ │ │ │ -
119 // Edge orientations
│ │ │ │ -
120 std::array<typename LB::Traits::RangeFieldType, 4> sign_;
│ │ │ │ -
121
│ │ │ │ -
122 // Edge normals
│ │ │ │ -
123 std::array<typename LB::Traits::DomainType, 4> n_;
│ │ │ │ -
124 };
│ │ │ │ -
│ │ │ │ -
125}
│ │ │ │ -
126#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH
│ │ │ │ +
│ │ │ │ +
47 OrthonormalLocalFiniteElement ( const GeometryType &gt, unsigned int order )
│ │ │ │ +
48 : Base(gt, order)
│ │ │ │ +
49 {}
│ │ │ │ +
│ │ │ │ +
50 };
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
52}
│ │ │ │ +
53
│ │ │ │ +
54#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas2cube2dlocalinterpolation.hh:25
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolate a given function with shape functions.
Definition raviartthomas2cube2dlocalinterpolation.hh:54
│ │ │ │ -
RT2Cube2DLocalInterpolation(std::bitset< 4 > s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2dlocalinterpolation.hh:34
│ │ │ │ +
A class providing orthonormal basis functions.
Definition orthonormal.hh:38
│ │ │ │ +
OrthonormalLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition orthonormal.hh:47
│ │ │ │ +
A factory class for the dg local coefficients.
Definition dglocalcoefficients.hh:59
│ │ │ │ +
A factory class for the local l2 interpolations taking a basis factory.
Definition l2interpolation.hh:163
│ │ │ │ +
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ +
LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, typename InterpolF::Object > Traits
Definition localfunctions/utility/localfiniteelement.hh:29
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,76 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ -raviartthomas2cube2dlocalinterpolation.hh │ │ │ │ │ +orthonormal.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -14 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -25 { │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -28 │ │ │ │ │ -_3_4 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<4> s = 0) │ │ │ │ │ -35 { │ │ │ │ │ -36 for (size_t i=0; i<4; i++) │ │ │ │ │ -37 sign_[i] = (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -38 │ │ │ │ │ -39 n_[0] = {-1.0, 0.0}; │ │ │ │ │ -40 n_[1] = { 1.0, 0.0}; │ │ │ │ │ -41 n_[2] = { 0.0, -1.0}; │ │ │ │ │ -42 n_[3] = { 0.0, 1.0}; │ │ │ │ │ -43 } │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +32 template< unsigned int dimDomain, class D, class R, │ │ │ │ │ +33 class SF=R, class CF=SF > │ │ │ │ │ +_3_4 class _O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +35 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< OrthonormalBasisFactory< dimDomain, SF, │ │ │ │ │ +CF >, │ │ │ │ │ +36 DGLocalCoefficientsFactory< OrthonormalBasisFactory< dimDomain, SF, CF > >, │ │ │ │ │ +37 LocalL2InterpolationFactory< OrthonormalBasisFactory< dimDomain, SF, CF │ │ │ │ │ +>,true > > │ │ │ │ │ +38 { │ │ │ │ │ +39 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ +_C_F_ _>, │ │ │ │ │ +40 _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_,_ _C_F_ _> >, │ │ │ │ │ +41 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_,_ _C_F │ │ │ │ │ +_>,true > > _B_a_s_e; │ │ │ │ │ +42 public: │ │ │ │ │ +43 using typename _B_a_s_e_:_:_T_r_a_i_t_s; │ │ │ │ │ 44 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -55 { │ │ │ │ │ -56 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -57 typedef typename LB::Traits::RangeFieldType Scalar; │ │ │ │ │ -58 typedef typename LB::Traits::DomainFieldType Vector; │ │ │ │ │ -59 │ │ │ │ │ -60 out.resize(24); │ │ │ │ │ -61 fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -62 │ │ │ │ │ -63 const int qOrder = 6; │ │ │ │ │ -64 const auto& rule1 = QuadratureRules::rule(GeometryTypes::cube(1), │ │ │ │ │ -qOrder); │ │ │ │ │ -65 │ │ │ │ │ -66 for (auto&& qp : rule1) │ │ │ │ │ -67 { │ │ │ │ │ -68 Scalar qPos = qp.position(); │ │ │ │ │ -69 typename LB::Traits::DomainType localPos; │ │ │ │ │ -70 │ │ │ │ │ -71 localPos = {0.0, qPos}; │ │ │ │ │ -72 auto y = f(localPos); │ │ │ │ │ -73 out[0] += (y[0]*n_[0][0] + y[1]*n_[0][1])*qp.weight()*sign_[0]; │ │ │ │ │ -74 out[1] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -75 out[2] += (y[0]*n_[0][0] + y[1]*n_[0][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[0]; │ │ │ │ │ -76 │ │ │ │ │ -77 localPos = {1.0, qPos}; │ │ │ │ │ -78 y = f(localPos); │ │ │ │ │ -79 out[3] += (y[0]*n_[1][0] + y[1]*n_[1][1])*qp.weight()*sign_[1]; │ │ │ │ │ -80 out[4] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -81 out[5] += (y[0]*n_[1][0] + y[1]*n_[1][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[1]; │ │ │ │ │ -82 │ │ │ │ │ -83 localPos = {qPos, 0.0}; │ │ │ │ │ -84 y = f(localPos); │ │ │ │ │ -85 out[6] += (y[0]*n_[2][0] + y[1]*n_[2][1])*qp.weight()*sign_[2]; │ │ │ │ │ -86 out[7] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(1.0 - 2.0*qPos)*qp.weight(); │ │ │ │ │ -87 out[8] += (y[0]*n_[2][0] + y[1]*n_[2][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[2]; │ │ │ │ │ -88 │ │ │ │ │ -89 localPos = {qPos, 1.0}; │ │ │ │ │ -90 y = f(localPos); │ │ │ │ │ -91 out[9] += (y[0]*n_[3][0] + y[1]*n_[3][1])*qp.weight()*sign_[3]; │ │ │ │ │ -92 out[10] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(2.0*qPos - 1.0)*qp.weight(); │ │ │ │ │ -93 out[11] += (y[0]*n_[3][0] + y[1]*n_[3][1])*(6.0*qPos*qPos - 6.0*qPos + │ │ │ │ │ -1.0)*qp.weight()*sign_[3]; │ │ │ │ │ -94 } │ │ │ │ │ -95 │ │ │ │ │ -96 const auto& rule2 = QuadratureRules::rule(GeometryTypes::cube(2), │ │ │ │ │ -qOrder); │ │ │ │ │ -97 │ │ │ │ │ -98 for (auto&& qp : rule2) │ │ │ │ │ -99 { │ │ │ │ │ -100 FieldVector qPos = qp.position(); │ │ │ │ │ -101 │ │ │ │ │ -102 auto y = f(qPos); │ │ │ │ │ -103 out[12] += y[0]*qp.weight(); │ │ │ │ │ -104 out[13] += y[1]*qp.weight(); │ │ │ │ │ -105 out[14] += y[0]*qPos[0]*qp.weight(); │ │ │ │ │ -106 out[15] += y[1]*qPos[0]*qp.weight(); │ │ │ │ │ -107 out[16] += y[0]*qPos[1]*qp.weight(); │ │ │ │ │ -108 out[17] += y[1]*qPos[1]*qp.weight(); │ │ │ │ │ -109 out[18] += y[0]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ -110 out[19] += y[1]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ -111 out[20] += y[0]*qPos[1]*qPos[1]*qp.weight(); │ │ │ │ │ -112 out[21] += y[1]*qPos[0]*qPos[0]*qp.weight(); │ │ │ │ │ -113 out[22] += y[0]*qPos[0]*qPos[1]*qPos[1]*qp.weight(); │ │ │ │ │ -114 out[23] += y[1]*qPos[0]*qPos[0]*qPos[1]*qp.weight(); │ │ │ │ │ -115 } │ │ │ │ │ -116 } │ │ │ │ │ -117 │ │ │ │ │ -118 private: │ │ │ │ │ -119 // Edge orientations │ │ │ │ │ -120 std::array sign_; │ │ │ │ │ -121 │ │ │ │ │ -122 // Edge normals │ │ │ │ │ -123 std::array n_; │ │ │ │ │ -124 }; │ │ │ │ │ -125} │ │ │ │ │ -126#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALINTERPOLATION_HH │ │ │ │ │ +_4_7 _O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, unsigned int order ) │ │ │ │ │ +48 : _B_a_s_e(gt, order) │ │ │ │ │ +49 {} │ │ │ │ │ +50 }; │ │ │ │ │ +51 │ │ │ │ │ +52} │ │ │ │ │ +53 │ │ │ │ │ +54#endif │ │ │ │ │ +_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolate a given function with shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT2Cube2DLocalInterpolation(std::bitset< 4 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +A class providing orthonormal basis functions. │ │ │ │ │ +DDeeffiinniittiioonn orthonormal.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +OrthonormalLocalFiniteElement(const GeometryType >, unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn orthonormal.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +A factory class for the dg local coefficients. │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +A factory class for the local l2 interpolations taking a basis factory. │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +A LocalFiniteElement implementation based on three TopologyFactories providing │ │ │ │ │ +the LocalBasis,... │ │ │ │ │ +DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, │ │ │ │ │ +typename InterpolF::Object > Traits │ │ │ │ │ +DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:29 │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: mimeticall.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalbasis.hh File Reference
│ │ │ │ +
mimeticall.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include "../../common/localbasis.hh"
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include "../common/localbasis.hh"
│ │ │ │ +#include "../common/localkey.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT2Cube2DLocalBasis< D, R >
 Second order Raviart-Thomas shape functions on the reference quadrilateral. More...
class  Dune::MimeticLocalBasis< D, R, dim >
 
class  Dune::MimeticLocalInterpolation< LB >
 
class  Dune::MimeticLocalCoefficients
 ! More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ + * _m_i_m_e_t_i_c │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas2cube2dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +mimeticall.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on the reference │ │ │ │ │ - quadrilateral. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  ! _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00272_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: mimeticall.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,300 +70,173 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalbasis.hh
│ │ │ │ +
mimeticall.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_MIMETIC_ALL_HH
│ │ │ │ +
6#define DUNE_MIMETIC_ALL_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include "../../common/localbasis.hh"
│ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
31 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
32 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
33
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/exceptions.hh>
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/geometry/type.hh>
│ │ │ │ +
15
│ │ │ │ +
16#include "../common/localbasis.hh"
│ │ │ │ +
17#include "../common/localkey.hh"
│ │ │ │ +
18
│ │ │ │ +
19namespace Dune
│ │ │ │ +
20{
│ │ │ │ +
21 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24 public:
│ │ │ │ + │ │ │ │ +
26 R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ +
27
│ │ │ │ +
│ │ │ │ +
28 MimeticLocalBasis (unsigned int variant_)
│ │ │ │ +
29 : variant(variant_)
│ │ │ │ +
30 {}
│ │ │ │ +
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 : variant(0)
│ │ │ │ +
34 {}
│ │ │ │ +
│ │ │ │ +
35
│ │ │ │ +
36 unsigned int size () const { return variant; }
│ │ │ │ +
37
│ │ │ │
│ │ │ │ -
39 RT2Cube2DLocalBasis (unsigned int s = 0)
│ │ │ │ -
40 {
│ │ │ │ -
41 sign0 = sign1 = sign2 = sign3 = 1.0;
│ │ │ │ -
42 if (s & 1)
│ │ │ │ -
43 {
│ │ │ │ -
44 sign0 = -1.0;
│ │ │ │ -
45 }
│ │ │ │ -
46 if (s & 2)
│ │ │ │ -
47 {
│ │ │ │ -
48 sign1 = -1.0;
│ │ │ │ -
49 }
│ │ │ │ -
50 if (s & 4)
│ │ │ │ -
51 {
│ │ │ │ -
52 sign2 = -1.0;
│ │ │ │ -
53 }
│ │ │ │ -
54 if (s & 8)
│ │ │ │ -
55 {
│ │ │ │ -
56 sign3 = -1.0;
│ │ │ │ -
57 }
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
61 unsigned int size () const
│ │ │ │ -
62 {
│ │ │ │ -
63 return 24;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
72 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
73 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
74 {
│ │ │ │ -
75 out.resize(24);
│ │ │ │ +
39 inline void evaluateFunction (
│ │ │ │ +
40 const typename Traits::DomainType& in,
│ │ │ │ +
41 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
42 {
│ │ │ │ +
43 DUNE_THROW(Dune::Exception,"mimetic basis evaluation not available");
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
47 inline void evaluateJacobian (
│ │ │ │ +
48 const typename Traits::DomainType& in,
│ │ │ │ +
49 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
50 {
│ │ │ │ +
51 DUNE_THROW(Dune::Exception,"mimetic basis Jacobian evaluation not available");
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
55 void partial (const std::array<unsigned int, dim>& /*order*/,
│ │ │ │ +
56 const typename Traits::DomainType& /*in*/, // position
│ │ │ │ +
57 std::vector<typename Traits::RangeType>& /*out*/) const // return value
│ │ │ │ +
58 {
│ │ │ │ +
59 DUNE_THROW(Dune::Exception,"mimetic basis partial derivative evaluation not available");
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
63 unsigned int order () const
│ │ │ │ +
64 {
│ │ │ │ +
65 DUNE_THROW(Dune::Exception,"mimetic order evaluation not available");
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
68 private:
│ │ │ │ +
69 unsigned int variant;
│ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
72 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
74 {
│ │ │ │ +
75 public:
│ │ │ │
76
│ │ │ │ -
77 out[0][0] = sign0*(-1.0 + 9.0*in[0] - 18.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]);
│ │ │ │ -
78 out[0][1] = 0.0;
│ │ │ │ -
79 out[1][0] = 3.0 - 27.0*in[0] - 6.0*in[1] + 54.0*in[0]*in[1] + 54.0*in[0]*in[0] - 108.0*in[0]*in[0]*in[1] - 30.0*in[0]*in[0]*in[0] + 60.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
80 out[1][1] = 0.0;
│ │ │ │ -
81 out[2][0] = sign0*(-5.0 + 45.0*in[0] + 30.0*in[1] - 270.0*in[0]*in[1] - 90.0*in[0]*in[0] - 30.0*in[1]*in[1] + 540.0*in[0]*in[0]*in[1] + 270.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ -
82 out[2][1] = 0.0;
│ │ │ │ -
83 out[3][0] = sign1*(3.0*in[0] - 12.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]);
│ │ │ │ -
84 out[3][1] = 0.0;
│ │ │ │ -
85 out[4][0] = 9.0*in[0] - 18.0*in[0]*in[1] - 36.0*in[0]*in[0] + 72.0*in[0]*in[0]*in[1] + 30.0*in[0]*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
86 out[4][1] = 0.0;
│ │ │ │ -
87 out[5][0] = sign1*(15.0*in[0] - 90.0*in[0]*in[1] - 60.0*in[0]*in[0] + 360.0*in[0]*in[0]*in[1] + 90.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ -
88 out[5][1] = 0.0;
│ │ │ │ -
89 out[6][0] = 0.0;
│ │ │ │ -
90 out[6][1] = sign2*(-1.0 + 9.0*in[1] - 18.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]);
│ │ │ │ -
91 out[7][0] = 0.0;
│ │ │ │ -
92 out[7][1] = -3.0 + 6.0*in[0] + 27.0*in[1] - 54.0*in[0]*in[1] - 54.0*in[1]*in[1] + 108.0*in[0]*in[1]*in[1] + 30.0*in[1]*in[1]*in[1] - 60.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
93 out[8][0] = 0.0;
│ │ │ │ -
94 out[8][1] = sign2*(-5.0 + 30.0*in[0] + 45.0*in[1] - 270.0*in[0]*in[1] - 30.0*in[0]*in[0] - 90.0*in[1]*in[1] + 270.0*in[0]*in[0]*in[1] + 540.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ -
95 out[9][0] = 0.0;
│ │ │ │ -
96 out[9][1] = sign3*(3.0*in[1] - 12.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]);
│ │ │ │ -
97 out[10][0] = 0.0;
│ │ │ │ -
98 out[10][1] = -9.0*in[1] + 18.0*in[0]*in[1] + 36.0*in[1]*in[1] - 72.0*in[0]*in[1]*in[1] - 30.0*in[1]*in[1]*in[1] + 60.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
99 out[11][0] = 0.0;
│ │ │ │ -
100 out[11][1] = sign3*(15.0*in[1] - 90.0*in[0]*in[1] - 60.0*in[1]*in[1] + 90.0*in[0]*in[0]*in[1] + 360.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ -
101 out[12][0] = 324.0*in[0] -1296.0*in[0]*in[1] - 864.0*in[0]*in[0] + 3456.0*in[0]*in[0]*in[1] + 1080.0*in[0]*in[1]*in[1] + 540.0*in[0]*in[0]*in[0] - 2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[0]*in[0]*in[1] + 1800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
102 out[12][1] = 0.0;
│ │ │ │ -
103 out[13][0] = 0.0;
│ │ │ │ -
104 out[13][1] = 324.0*in[1] - 1296.0*in[0]*in[1] - 864.0*in[1]*in[1] + 1080.0*in[0]*in[0]*in[1] + 3456.0*in[0]*in[1]*in[1] + 540.0*in[1]*in[1]*in[1] - 2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[1]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1]*in[0]*in[0];
│ │ │ │ -
105 out[14][0] = -540.0*in[0] + 2160.0*in[0]*in[1] + 1620.0*in[0]*in[0] - 6480.0*in[0]*in[0]*in[1] - 1800.0*in[0]*in[1]*in[1] - 1080.0*in[0]*in[0]*in[0] + 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0]*in[1] - 3600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
106 out[14][1] = 0.0;
│ │ │ │ -
107 out[15][0] = 0.0;
│ │ │ │ -
108 out[15][1] = -1296.0*in[1] + 6912.0*in[0]*in[1] + 3456.0*in[1]*in[1] - 6480.0*in[0]*in[0]*in[1] - 18432.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[0]*in[1]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
109 out[16][0] = -1296.0*in[0] + 6912.0*in[0]*in[1] + 3456.0*in[0]*in[0] - 6480.0*in[0]*in[1]*in[1] - 18432.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[1]*in[0]*in[0]*in[0] - 10800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
110 out[16][1] = 0.0;
│ │ │ │ -
111 out[17][0] = 0.0;
│ │ │ │ -
112 out[17][1] = -540.0*in[1] + 2160.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 1800.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] - 1080.0*in[1]*in[1]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[1]*in[1]*in[1] - 3600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
113 out[18][0] = 2160.0*in[0] - 11520.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[0]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
114 out[18][1] = 0.0;
│ │ │ │ -
115 out[19][0] = 0.0;
│ │ │ │ -
116 out[19][1] = 2160.0*in[1] - 11520.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[1]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
117 out[20][0] = 1080.0*in[0] - 6480.0*in[0]*in[1] - 2880.0*in[0]*in[0] + 17280.0*in[0]*in[0]*in[1] + 6480.0*in[0]*in[1]*in[1] + 1800.0*in[0]*in[0]*in[0] - 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[0]*in[1] + 10800.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
118 out[20][1] = 0.0;
│ │ │ │ -
119 out[21][0] = 0.0;
│ │ │ │ -
120 out[21][1] = 1080.0*in[1] - 6480.0*in[0]*in[1] - 2880.0*in[1]*in[1] + 6480.0*in[0]*in[0]*in[1] + 17280.0*in[0]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1] - 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[1]*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
121 out[22][0] = -1800.0*in[0] + 10800.0*in[0]*in[1] + 5400.0*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[1]*in[1] - 3600.0*in[0]*in[0]*in[0] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1] - 21600.0*in[0]*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
122 out[22][1] = 0.0;
│ │ │ │ -
123 out[23][0] = 0.0;
│ │ │ │ -
124 out[23][1] = -1800.0*in[1] + 10800.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] - 3600.0*in[1]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1] - 21600.0*in[0]*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
125 }
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
│ │ │ │ -
133 inline void evaluateJacobian (const typename Traits::DomainType& in,
│ │ │ │ -
134 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
135 {
│ │ │ │ -
136 out.resize(24);
│ │ │ │ -
137
│ │ │ │ -
138 out[0][0][0] = sign0*(9.0 - 36.0*in[0] + 30.0*in[0]*in[0]);
│ │ │ │ -
139 out[0][0][1] = 0.0;
│ │ │ │ -
140 out[0][1][0] = 0.0;
│ │ │ │ -
141 out[0][1][1] = 0.0;
│ │ │ │ -
142
│ │ │ │ -
143 out[1][0][0] = -27.0 + 54.0*in[1] + 108.0*in[0] - 216.0*in[0]*in[1] - 90.0*in[0]*in[0] + 180.0*in[0]*in[0]*in[1];
│ │ │ │ -
144 out[1][0][1] = -6.0 + 54.0*in[0] - 108.0*in[0]*in[0] + 60.0*in[0]*in[0]*in[0];
│ │ │ │ -
145 out[1][1][0] = 0.0;
│ │ │ │ -
146 out[1][1][1] = 0.0;
│ │ │ │ -
147
│ │ │ │ -
148 out[2][0][0] = sign0*(45.0 - 270.0*in[1] - 180.0*in[0] + 1080.0*in[0]*in[1] + 270.0*in[1]*in[1] + 150.0*in[0]*in[0] - 1080.0*in[0]*in[1]*in[1] - 900.0*in[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ -
149 out[2][0][1] = sign0*(30.0 - 270.0*in[0] - 60.0*in[1] + 540.0*in[0]*in[0] + 540.0*in[0]*in[1] - 1080.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in[1]);
│ │ │ │ -
150 out[2][1][0] = 0.0;
│ │ │ │ -
151 out[2][1][1] = 0.0;
│ │ │ │ -
152
│ │ │ │ -
153 out[3][0][0] = sign1*(3.0 - 24.0*in[0] + 30.0*in[0]*in[0]);
│ │ │ │ -
154 out[3][0][1] = 0.0;
│ │ │ │ -
155 out[3][1][0] = 0.0;
│ │ │ │ -
156 out[3][1][1] = 0.0;
│ │ │ │ -
157
│ │ │ │ -
158 out[4][0][0] = 9.0 - 18.0*in[1] - 72.0*in[0] + 144.0*in[0]*in[1] + 90.0*in[0]*in[0] - 180.0*in[0]*in[0]*in[1];
│ │ │ │ -
159 out[4][0][1] = -18.0*in[0] + 72.0*in[0]*in[0] - 60.0*in[0]*in[0]*in[0];
│ │ │ │ -
160 out[4][1][0] = 0.0;
│ │ │ │ -
161 out[4][1][1] = 0.0;
│ │ │ │ -
162
│ │ │ │ -
163 out[5][0][0] = sign1*(15.0 - 90.0*in[1] - 120.0*in[0] + 720.0*in[0]*in[1] + 90.0*in[1]*in[1] + 150.0*in[0]*in[0] - 720.0*in[0]*in[1]*in[1] - 900.0*in[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]);
│ │ │ │ -
164 out[5][0][1] = sign1*(-90.0*in[0] + 360.0*in[0]*in[0] + 180.0*in[0]*in[1] - 720.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in[1]);
│ │ │ │ -
165 out[5][1][0] = 0.0;
│ │ │ │ -
166 out[5][1][1] = 0.0;
│ │ │ │ -
167
│ │ │ │ -
168
│ │ │ │ -
169 out[6][0][0] = 0.0;
│ │ │ │ -
170 out[6][0][1] = 0.0;
│ │ │ │ -
171 out[6][1][0] = 0.0;
│ │ │ │ -
172 out[6][1][1] = sign2*(9.0 - 36.0*in[1] + 30.0*in[1]*in[1]);
│ │ │ │ -
173
│ │ │ │ -
174 out[7][0][0] = 0.0;
│ │ │ │ -
175 out[7][0][1] = 0.0;
│ │ │ │ -
176 out[7][1][0] = 6.0 - 54.0*in[1] + 108.0*in[1]*in[1] - 60.0*in[1]*in[1]*in[1];
│ │ │ │ -
177 out[7][1][1] = 27.0 - 54.0*in[0] - 108.0*in[1] + 216.0*in[0]*in[1] + 90.0*in[1]*in[1] - 180.0*in[0]*in[1]*in[1];
│ │ │ │ -
178
│ │ │ │ -
179 out[8][0][0] = 0.0;
│ │ │ │ -
180 out[8][0][1] = 0.0;
│ │ │ │ -
181 out[8][1][0] = sign2*(30.0 - 270.0*in[1] - 60.0*in[0] + 540.0*in[0]*in[1] + 540.0*in[1]*in[1] - 1080.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in[1]*in[0]);
│ │ │ │ -
182 out[8][1][1] = sign2*(45.0 - 270.0*in[0] - 180.0*in[1] + 270.0*in[0]*in[0] + 1080.0*in[0]*in[1] + 150.0*in[1]*in[1] - 1080.0*in[0]*in[0]*in[1] - 900.0*in[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ -
183
│ │ │ │ -
184 out[9][0][0] = 0.0;
│ │ │ │ -
185 out[9][0][1] = 0.0;
│ │ │ │ -
186 out[9][1][0] = 0.0;
│ │ │ │ -
187 out[9][1][1] = sign3*(3.0 - 24.0*in[1] + 30.0*in[1]*in[1]);
│ │ │ │ -
188
│ │ │ │ -
189 out[10][0][0] = 0.0;
│ │ │ │ -
190 out[10][0][1] = 0.0;
│ │ │ │ -
191 out[10][1][0] = 18.0*in[1] - 72.0*in[1]*in[1] + 60.0*in[1]*in[1]*in[1];
│ │ │ │ -
192 out[10][1][1] = -9.0 + 18.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - 90.0*in[1]*in[1] + 180.0*in[0]*in[1]*in[1];
│ │ │ │ -
193
│ │ │ │ -
194 out[11][0][0] = 0.0;
│ │ │ │ -
195 out[11][0][1] = 0.0;
│ │ │ │ -
196 out[11][1][0] = sign3*(-90.0*in[1] + 180.0*in[0]*in[1] + 360.0*in[1]*in[1] - 720.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in[1]*in[0]);
│ │ │ │ -
197 out[11][1][1] = sign3*(15.0 - 90.0*in[0] - 120.0*in[1] + 90.0*in[0]*in[0] + 720.0*in[0]*in[1] + 150.0*in[1]*in[1] - 720.0*in[0]*in[0]*in[1] - 900.0*in[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]);
│ │ │ │ -
198
│ │ │ │ -
199 out[12][0][0] = 324 -1296.0*in[1] - 1728.0*in[0] + 6912.0*in[0]*in[1] + 1080.0*in[1]*in[1] + 1620.0*in[0]*in[0] - 5760.0*in[0]*in[1]*in[1] - 6480.0*in[0]*in[0]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
200 out[12][0][1] = -1296.0*in[0] + 3456.0*in[0]*in[0] + 2160.0*in[0]*in[1] - 5760.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 3600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
201 out[12][1][0] = 0.0;
│ │ │ │ -
202 out[12][1][1] = 0.0;
│ │ │ │ -
203
│ │ │ │ -
204 out[13][0][0] = 0.0;
│ │ │ │ -
205 out[13][0][1] = 0.0;
│ │ │ │ -
206 out[13][1][0] = -1296.0*in[1] + 2160.0*in[0]*in[1] + 3456.0*in[1]*in[1] - 5760.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 3600.0*in[1]*in[1]*in[1]*in[0];
│ │ │ │ -
207 out[13][1][1] = 324.0 - 1296.0*in[0] - 1728.0*in[1] + 1080.0*in[0]*in[0] + 6912.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 5760.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] + 5400.0*in[1]*in[1]*in[0]*in[0];
│ │ │ │ -
208
│ │ │ │ -
209 out[14][0][0] = -540.0 + 2160.0*in[1] + 3240.0*in[0] - 12960.0*in[0]*in[1] - 1800.0*in[1]*in[1] - 3240.0*in[0]*in[0] + 10800.0*in[0]*in[1]*in[1] + 12960.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
210 out[14][0][1] = 2160.0*in[0] - 6480.0*in[0]*in[0] - 3600.0*in[0]*in[1] + 10800.0*in[0]*in[0]*in[1] + 4320.0*in[0]*in[0]*in[0] - 7200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
211 out[14][1][0] = 0.0;
│ │ │ │ -
212 out[14][1][1] = 0.0;
│ │ │ │ -
213
│ │ │ │ -
214 out[15][0][0] = 0.0;
│ │ │ │ -
215 out[15][0][1] = 0.0;
│ │ │ │ -
216 out[15][1][0] = 6912.0*in[1] - 12960.0*in[0]*in[1] - 18432.0*in[1]*in[1] + 34560.0*in[0]*in[1]*in[1] + 11520.0*in[1]*in[1]*in[1] - 21600.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
217 out[15][1][1] = -1296.0 + 6912.0*in[0] + 6912.0*in[1] - 6480.0*in[0]*in[0] - 36864.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 34560.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
218
│ │ │ │ -
219 out[16][0][0] = -1296.0 + 6912.0*in[1] + 6912.0*in[0] - 6480.0*in[1]*in[1] - 36864.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1]*in[1] + 34560.0*in[1]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
220 out[16][0][1] = 6912.0*in[0] - 12960.0*in[0]*in[1] - 18432.0*in[0]*in[0] + 34560.0*in[0]*in[0]*in[1] + 11520.0*in[0]*in[0]*in[0] - 21600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
221 out[16][1][0] = 0.0;
│ │ │ │ -
222 out[16][1][1] = 0.0;
│ │ │ │ -
223
│ │ │ │ -
224 out[17][0][0] = 0.0;
│ │ │ │ -
225 out[17][0][1] = 0.0;
│ │ │ │ -
226 out[17][1][0] = 2160.0*in[1] - 3600.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 7200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
227 out[17][1][1] = -540.0 + 2160.0*in[0] + 3240.0*in[1] - 1800.0*in[0]*in[0] - 12960.0*in[0]*in[1] - 3240.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + 12960.0*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
228
│ │ │ │ -
229 out[18][0][0] = 2160.0 - 11520.0*in[1] - 12960.0*in[0] + 69120.0*in[0]*in[1] + 10800.0*in[1]*in[1] + 12960.0*in[0]*in[0] - 64800.0*in[0]*in[1]*in[1] - 69120.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
230 out[18][0][1] = -11520.0*in[0] + 34560.0*in[0]*in[0] + 21600.0*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1] - 23040.0*in[0]*in[0]*in[0] + 43200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
231 out[18][1][0] = 0.0;
│ │ │ │ -
232 out[18][1][1] = 0.0;
│ │ │ │ -
233
│ │ │ │ -
234 out[19][0][0] = 0.0;
│ │ │ │ -
235 out[19][0][1] = 0.0;
│ │ │ │ -
236 out[19][1][0] = -11520.0*in[1] + 21600.0*in[0]*in[1] + 34560.0*in[1]*in[1] - 64800.0*in[0]*in[1]*in[1] - 23040.0*in[1]*in[1]*in[1] + 43200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
237 out[19][1][1] = 2160.0 - 11520.0*in[0] - 12960.0*in[1] + 10800.0*in[0]*in[0] + 69120.0*in[0]*in[1] + 12960.0*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1] - 69120.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
238
│ │ │ │ -
239 out[20][0][0] = 1080.0 - 6480.0*in[1] - 5760.0*in[0] + 34560.0*in[0]*in[1] + 6480.0*in[1]*in[1] + 5400.0*in[0]*in[0] - 34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
240 out[20][0][1] = -6480.0*in[0] + 17280.0*in[0]*in[0] + 12960.0*in[0]*in[1] - 34560.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[0] + 21600.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
241 out[20][1][0] = 0.0;
│ │ │ │ -
242 out[20][1][1] = 0.0;
│ │ │ │ -
243
│ │ │ │ -
244 out[21][0][0] = 0.0;
│ │ │ │ -
245 out[21][0][1] = 0.0;
│ │ │ │ -
246 out[21][1][0] = -6480.0*in[1] + 12960.0*in[0]*in[1] + 17280.0*in[1]*in[1] - 34560.0*in[0]*in[1]*in[1] - 10800.0*in[1]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
247 out[21][1][1] = 1080.0 - 6480.0*in[0] - 5760.0*in[1] + 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 34560.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
248
│ │ │ │ -
249 out[22][0][0] = -1800.0 + 10800.0*in[1] + 10800.0*in[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] - 10800.0*in[0]*in[0] + 64800.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
250 out[22][0][1] = 10800.0*in[0] - 32400.0*in[0]*in[0] - 21600.0*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0] - 43200.0*in[0]*in[0]*in[0]*in[1];
│ │ │ │ -
251 out[22][1][0] = 0.0;
│ │ │ │ -
252 out[22][1][1] = 0.0;
│ │ │ │ -
253
│ │ │ │ -
254 out[23][0][0] = 0.0;
│ │ │ │ -
255 out[23][0][1] = 0.0;
│ │ │ │ -
256 out[23][1][0] = 10800.0*in[1] - 21600.0*in[0]*in[1] - 32400.0*in[1]*in[1] + 64800.0*in[0]*in[1]*in[1] + 21600.0*in[1]*in[1]*in[1] - 43200.0*in[0]*in[1]*in[1]*in[1];
│ │ │ │ -
257 out[23][1][1] = -1800.0 + 10800.0*in[0] + 10800.0*in[1] - 10800.0*in[0]*in[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1];
│ │ │ │ -
258 }
│ │ │ │ -
│ │ │ │ -
259
│ │ │ │ -
│ │ │ │ -
261 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
262 const typename Traits::DomainType& in, // position
│ │ │ │ -
263 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
264 {
│ │ │ │ -
265 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
266 if (totalOrder == 0) {
│ │ │ │ -
267 evaluateFunction(in, out);
│ │ │ │ -
268 } else {
│ │ │ │ -
269 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
270 }
│ │ │ │ -
271 }
│ │ │ │ -
│ │ │ │ -
272
│ │ │ │ -
│ │ │ │ -
274 unsigned int order () const
│ │ │ │ -
275 {
│ │ │ │ -
276 return 5;
│ │ │ │ -
277 }
│ │ │ │ -
│ │ │ │ -
278
│ │ │ │ -
279 private:
│ │ │ │ -
280 R sign0, sign1, sign2, sign3;
│ │ │ │ -
281 };
│ │ │ │ -
│ │ │ │ -
282}
│ │ │ │ -
283#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH
│ │ │ │ +
78 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
79 void interpolate (const F& f, std::vector<C>& out) const {
│ │ │ │ +
80 DUNE_THROW(Dune::Exception,"mimetic local interpolation not available");
│ │ │ │ +
81 }
│ │ │ │ +
│ │ │ │ +
82 };
│ │ │ │ +
│ │ │ │ +
83
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
88 {
│ │ │ │ +
89 public:
│ │ │ │ +
│ │ │ │ +
90 MimeticLocalCoefficients (unsigned int variant_)
│ │ │ │ +
91 : variant(variant_), li(variant_)
│ │ │ │ +
92 {
│ │ │ │ +
93 for (unsigned int i=0; i<variant; i++)
│ │ │ │ + │ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
98 : variant(0), li(0)
│ │ │ │ +
99 {}
│ │ │ │ +
│ │ │ │ +
100
│ │ │ │ +
102 std::size_t size () const { return variant; }
│ │ │ │ +
103
│ │ │ │ +
│ │ │ │ +
105 const Dune::LocalKey& localKey (std::size_t i) const {
│ │ │ │ +
106 return li[i];
│ │ │ │ +
107 }
│ │ │ │ +
│ │ │ │ +
108
│ │ │ │ +
109 private:
│ │ │ │ +
110 unsigned int variant;
│ │ │ │ +
111 std::vector<Dune::LocalKey> li;
│ │ │ │ +
112 };
│ │ │ │ +
│ │ │ │ +
113}
│ │ │ │ +
114
│ │ │ │ +
115#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas2cube2dlocalbasis.hh:28
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:261
│ │ │ │ -
RT2Cube2DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2dlocalbasis.hh:39
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:133
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:274
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas2cube2dlocalbasis.hh:32
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas2cube2dlocalbasis.hh:61
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas2cube2dlocalbasis.hh:72
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
@ intersectionCodim
Codimension returned by LocalKey::codim() for degrees of freedom attached to an intersection.
Definition localkey.hh:37
│ │ │ │ +
Definition mimeticall.hh:23
│ │ │ │ +
MimeticLocalBasis(unsigned int variant_)
Definition mimeticall.hh:28
│ │ │ │ +
Dune::LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
Definition mimeticall.hh:26
│ │ │ │ +
MimeticLocalBasis()
Definition mimeticall.hh:32
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition mimeticall.hh:47
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition mimeticall.hh:63
│ │ │ │ +
void partial(const std::array< unsigned int, dim > &, const typename Traits::DomainType &, std::vector< typename Traits::RangeType > &) const
Evaluate partial derivatives of all shape functions.
Definition mimeticall.hh:55
│ │ │ │ +
unsigned int size() const
Definition mimeticall.hh:36
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition mimeticall.hh:39
│ │ │ │ +
Definition mimeticall.hh:74
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition mimeticall.hh:79
│ │ │ │ +
!
Definition mimeticall.hh:88
│ │ │ │ +
const Dune::LocalKey & localKey(std::size_t i) const
map index i to local key
Definition mimeticall.hh:105
│ │ │ │ +
MimeticLocalCoefficients(unsigned int variant_)
Definition mimeticall.hh:90
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition mimeticall.hh:102
│ │ │ │ +
MimeticLocalCoefficients()
Definition mimeticall.hh:97
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,437 +1,193 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ -raviartthomas2cube2dlocalbasis.hh │ │ │ │ │ + * _m_i_m_e_t_i_c │ │ │ │ │ +mimeticall.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_MIMETIC_ALL_HH │ │ │ │ │ +6#define DUNE_MIMETIC_ALL_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include "../../common/localbasis.hh" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -28 { │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_9 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ -40 { │ │ │ │ │ -41 sign0 = sign1 = sign2 = sign3 = 1.0; │ │ │ │ │ -42 if (s & 1) │ │ │ │ │ -43 { │ │ │ │ │ -44 sign0 = -1.0; │ │ │ │ │ -45 } │ │ │ │ │ -46 if (s & 2) │ │ │ │ │ -47 { │ │ │ │ │ -48 sign1 = -1.0; │ │ │ │ │ -49 } │ │ │ │ │ -50 if (s & 4) │ │ │ │ │ -51 { │ │ │ │ │ -52 sign2 = -1.0; │ │ │ │ │ -53 } │ │ │ │ │ -54 if (s & 8) │ │ │ │ │ -55 { │ │ │ │ │ -56 sign3 = -1.0; │ │ │ │ │ -57 } │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_1 unsigned int _s_i_z_e () const │ │ │ │ │ -62 { │ │ │ │ │ -63 return 24; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_7_2 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -73 std::vector& out) const │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include "../common/localbasis.hh" │ │ │ │ │ +17#include "../common/localkey.hh" │ │ │ │ │ +18 │ │ │ │ │ +19namespace _D_u_n_e │ │ │ │ │ +20{ │ │ │ │ │ +21 template │ │ │ │ │ +_2_2 class _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +23 { │ │ │ │ │ +24 public: │ │ │ │ │ +25 typedef _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>, │ │ │ │ │ +_2_6 R,1,Dune::FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +27 │ │ │ │ │ +_2_8 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s (unsigned int variant_) │ │ │ │ │ +29 : variant(variant_) │ │ │ │ │ +30 {} │ │ │ │ │ +31 │ │ │ │ │ +_3_2 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ +33 : variant(0) │ │ │ │ │ +34 {} │ │ │ │ │ +35 │ │ │ │ │ +_3_6 unsigned int _s_i_z_e () const { return variant; } │ │ │ │ │ +37 │ │ │ │ │ +_3_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( │ │ │ │ │ +40 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +41 std::vector& out) const │ │ │ │ │ +42 { │ │ │ │ │ +43 DUNE_THROW(Dune::Exception,"mimetic basis evaluation not available"); │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_7 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( │ │ │ │ │ +48 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +49 std::vector& out) const │ │ │ │ │ +50 { │ │ │ │ │ +51 DUNE_THROW(Dune::Exception,"mimetic basis Jacobian evaluation not │ │ │ │ │ +available"); │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_5 void _p_a_r_t_i_a_l (const std::array& /*order*/, │ │ │ │ │ +56 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& /*in*/, // position │ │ │ │ │ +57 std::vector& /*out*/) const // return value │ │ │ │ │ +58 { │ │ │ │ │ +59 DUNE_THROW(Dune::Exception,"mimetic basis partial derivative evaluation not │ │ │ │ │ +available"); │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +_6_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ +64 { │ │ │ │ │ +65 DUNE_THROW(Dune::Exception,"mimetic order evaluation not available"); │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +68 private: │ │ │ │ │ +69 unsigned int variant; │ │ │ │ │ +70 }; │ │ │ │ │ +71 │ │ │ │ │ +72 template │ │ │ │ │ +_7_3 class _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ 74 { │ │ │ │ │ -75 out.resize(24); │ │ │ │ │ +75 public: │ │ │ │ │ 76 │ │ │ │ │ -77 out[0][0] = sign0*(-1.0 + 9.0*in[0] - 18.0*in[0]*in[0] + 10.0*in[0]*in[0]*in │ │ │ │ │ -[0]); │ │ │ │ │ -78 out[0][1] = 0.0; │ │ │ │ │ -79 out[1][0] = 3.0 - 27.0*in[0] - 6.0*in[1] + 54.0*in[0]*in[1] + 54.0*in[0]*in │ │ │ │ │ -[0] - 108.0*in[0]*in[0]*in[1] - 30.0*in[0]*in[0]*in[0] + 60.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -80 out[1][1] = 0.0; │ │ │ │ │ -81 out[2][0] = sign0*(-5.0 + 45.0*in[0] + 30.0*in[1] - 270.0*in[0]*in[1] - │ │ │ │ │ -90.0*in[0]*in[0] - 30.0*in[1]*in[1] + 540.0*in[0]*in[0]*in[1] + 270.0*in[0]*in │ │ │ │ │ -[1]*in[1] + 50.0*in[0]*in[0]*in[0] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in │ │ │ │ │ -[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ -82 out[2][1] = 0.0; │ │ │ │ │ -83 out[3][0] = sign1*(3.0*in[0] - 12.0*in[0]*in[0] + 10.0*in[0]*in[0]*in[0]); │ │ │ │ │ -84 out[3][1] = 0.0; │ │ │ │ │ -85 out[4][0] = 9.0*in[0] - 18.0*in[0]*in[1] - 36.0*in[0]*in[0] + 72.0*in[0]*in │ │ │ │ │ -[0]*in[1] + 30.0*in[0]*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]*in[1]; │ │ │ │ │ -86 out[4][1] = 0.0; │ │ │ │ │ -87 out[5][0] = sign1*(15.0*in[0] - 90.0*in[0]*in[1] - 60.0*in[0]*in[0] + │ │ │ │ │ -360.0*in[0]*in[0]*in[1] + 90.0*in[0]*in[1]*in[1] + 50.0*in[0]*in[0]*in[0] - │ │ │ │ │ -360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[0]*in[0]*in[1] + 300.0*in[0]*in │ │ │ │ │ -[0]*in[0]*in[1]*in[1]); │ │ │ │ │ -88 out[5][1] = 0.0; │ │ │ │ │ -89 out[6][0] = 0.0; │ │ │ │ │ -90 out[6][1] = sign2*(-1.0 + 9.0*in[1] - 18.0*in[1]*in[1] + 10.0*in[1]*in[1]*in │ │ │ │ │ -[1]); │ │ │ │ │ -91 out[7][0] = 0.0; │ │ │ │ │ -92 out[7][1] = -3.0 + 6.0*in[0] + 27.0*in[1] - 54.0*in[0]*in[1] - 54.0*in[1]*in │ │ │ │ │ -[1] + 108.0*in[0]*in[1]*in[1] + 30.0*in[1]*in[1]*in[1] - 60.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -93 out[8][0] = 0.0; │ │ │ │ │ -94 out[8][1] = sign2*(-5.0 + 30.0*in[0] + 45.0*in[1] - 270.0*in[0]*in[1] - │ │ │ │ │ -30.0*in[0]*in[0] - 90.0*in[1]*in[1] + 270.0*in[0]*in[0]*in[1] + 540.0*in[0]*in │ │ │ │ │ -[1]*in[1] + 50.0*in[1]*in[1]*in[1] - 540.0*in[0]*in[0]*in[1]*in[1] - 300.0*in │ │ │ │ │ -[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ -95 out[9][0] = 0.0; │ │ │ │ │ -96 out[9][1] = sign3*(3.0*in[1] - 12.0*in[1]*in[1] + 10.0*in[1]*in[1]*in[1]); │ │ │ │ │ -97 out[10][0] = 0.0; │ │ │ │ │ -98 out[10][1] = -9.0*in[1] + 18.0*in[0]*in[1] + 36.0*in[1]*in[1] - 72.0*in │ │ │ │ │ -[0]*in[1]*in[1] - 30.0*in[1]*in[1]*in[1] + 60.0*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -99 out[11][0] = 0.0; │ │ │ │ │ -100 out[11][1] = sign3*(15.0*in[1] - 90.0*in[0]*in[1] - 60.0*in[1]*in[1] + │ │ │ │ │ -90.0*in[0]*in[0]*in[1] + 360.0*in[0]*in[1]*in[1] + 50.0*in[1]*in[1]*in[1] - │ │ │ │ │ -360.0*in[0]*in[0]*in[1]*in[1] - 300.0*in[0]*in[1]*in[1]*in[1] + 300.0*in[1]*in │ │ │ │ │ -[1]*in[1]*in[0]*in[0]); │ │ │ │ │ -101 out[12][0] = 324.0*in[0] -1296.0*in[0]*in[1] - 864.0*in[0]*in[0] + │ │ │ │ │ -3456.0*in[0]*in[0]*in[1] + 1080.0*in[0]*in[1]*in[1] + 540.0*in[0]*in[0]*in[0] - │ │ │ │ │ -2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[0]*in[0]*in[1] + 1800.0*in │ │ │ │ │ -[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -102 out[12][1] = 0.0; │ │ │ │ │ -103 out[13][0] = 0.0; │ │ │ │ │ -104 out[13][1] = 324.0*in[1] - 1296.0*in[0]*in[1] - 864.0*in[1]*in[1] + │ │ │ │ │ -1080.0*in[0]*in[0]*in[1] + 3456.0*in[0]*in[1]*in[1] + 540.0*in[1]*in[1]*in[1] - │ │ │ │ │ -2880.0*in[0]*in[0]*in[1]*in[1] - 2160.0*in[0]*in[1]*in[1]*in[1] + 1800.0*in │ │ │ │ │ -[1]*in[1]*in[1]*in[0]*in[0]; │ │ │ │ │ -105 out[14][0] = -540.0*in[0] + 2160.0*in[0]*in[1] + 1620.0*in[0]*in[0] - │ │ │ │ │ -6480.0*in[0]*in[0]*in[1] - 1800.0*in[0]*in[1]*in[1] - 1080.0*in[0]*in[0]*in[0] │ │ │ │ │ -+ 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in[0]*in[1] - 3600.0*in │ │ │ │ │ -[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -106 out[14][1] = 0.0; │ │ │ │ │ -107 out[15][0] = 0.0; │ │ │ │ │ -108 out[15][1] = -1296.0*in[1] + 6912.0*in[0]*in[1] + 3456.0*in[1]*in[1] - │ │ │ │ │ -6480.0*in[0]*in[0]*in[1] - 18432.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] │ │ │ │ │ -+ 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[0]*in[1]*in[1]*in[1] - │ │ │ │ │ -10800.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -109 out[16][0] = -1296.0*in[0] + 6912.0*in[0]*in[1] + 3456.0*in[0]*in[0] - │ │ │ │ │ -6480.0*in[0]*in[1]*in[1] - 18432.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] │ │ │ │ │ -+ 17280.0*in[0]*in[0]*in[1]*in[1] + 11520.0*in[1]*in[0]*in[0]*in[0] - │ │ │ │ │ -10800.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -110 out[16][1] = 0.0; │ │ │ │ │ -111 out[17][0] = 0.0; │ │ │ │ │ -112 out[17][1] = -540.0*in[1] + 2160.0*in[0]*in[1] + 1620.0*in[1]*in[1] - │ │ │ │ │ -1800.0*in[0]*in[0]*in[1] - 6480.0*in[0]*in[1]*in[1] - 1080.0*in[1]*in[1]*in[1] │ │ │ │ │ -+ 5400.0*in[0]*in[0]*in[1]*in[1] + 4320.0*in[0]*in[1]*in[1]*in[1] - 3600.0*in │ │ │ │ │ -[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -113 out[18][0] = 2160.0*in[0] - 11520.0*in[0]*in[1] - 6480.0*in[0]*in[0] + │ │ │ │ │ -34560.0*in[0]*in[0]*in[1] + 10800.0*in[0]*in[1]*in[1] + 4320.0*in[0]*in[0]*in │ │ │ │ │ -[0] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[0]*in[0]*in[1] + │ │ │ │ │ -21600.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -114 out[18][1] = 0.0; │ │ │ │ │ -115 out[19][0] = 0.0; │ │ │ │ │ -116 out[19][1] = 2160.0*in[1] - 11520.0*in[0]*in[1] - 6480.0*in[1]*in[1] + │ │ │ │ │ -10800.0*in[0]*in[0]*in[1] + 34560.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in │ │ │ │ │ -[1] - 32400.0*in[0]*in[0]*in[1]*in[1] - 23040.0*in[0]*in[1]*in[1]*in[1] + │ │ │ │ │ -21600.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -117 out[20][0] = 1080.0*in[0] - 6480.0*in[0]*in[1] - 2880.0*in[0]*in[0] + │ │ │ │ │ -17280.0*in[0]*in[0]*in[1] + 6480.0*in[0]*in[1]*in[1] + 1800.0*in[0]*in[0]*in[0] │ │ │ │ │ -- 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[0]*in[1] + │ │ │ │ │ -10800.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -118 out[20][1] = 0.0; │ │ │ │ │ -119 out[21][0] = 0.0; │ │ │ │ │ -120 out[21][1] = 1080.0*in[1] - 6480.0*in[0]*in[1] - 2880.0*in[1]*in[1] + │ │ │ │ │ -6480.0*in[0]*in[0]*in[1] + 17280.0*in[0]*in[1]*in[1] + 1800.0*in[1]*in[1]*in[1] │ │ │ │ │ -- 17280.0*in[0]*in[0]*in[1]*in[1] - 10800.0*in[0]*in[1]*in[1]*in[1] + │ │ │ │ │ -10800.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -121 out[22][0] = -1800.0*in[0] + 10800.0*in[0]*in[1] + 5400.0*in[0]*in[0] - │ │ │ │ │ -32400.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[1]*in[1] - 3600.0*in[0]*in[0]*in │ │ │ │ │ -[0] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[0]*in[0]*in[1] - │ │ │ │ │ -21600.0*in[0]*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -122 out[22][1] = 0.0; │ │ │ │ │ -123 out[23][0] = 0.0; │ │ │ │ │ -124 out[23][1] = -1800.0*in[1] + 10800.0*in[0]*in[1] + 5400.0*in[1]*in[1] - │ │ │ │ │ -10800.0*in[0]*in[0]*in[1] - 32400.0*in[0]*in[1]*in[1] - 3600.0*in[1]*in[1]*in │ │ │ │ │ -[1] + 32400.0*in[0]*in[0]*in[1]*in[1] + 21600.0*in[0]*in[1]*in[1]*in[1] - │ │ │ │ │ -21600.0*in[0]*in[0]*in[1]*in[1]*in[1]; │ │ │ │ │ -125 } │ │ │ │ │ -126 │ │ │ │ │ -_1_3_3 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -134 std::vector& out) const │ │ │ │ │ -135 { │ │ │ │ │ -136 out.resize(24); │ │ │ │ │ -137 │ │ │ │ │ -138 out[0][0][0] = sign0*(9.0 - 36.0*in[0] + 30.0*in[0]*in[0]); │ │ │ │ │ -139 out[0][0][1] = 0.0; │ │ │ │ │ -140 out[0][1][0] = 0.0; │ │ │ │ │ -141 out[0][1][1] = 0.0; │ │ │ │ │ -142 │ │ │ │ │ -143 out[1][0][0] = -27.0 + 54.0*in[1] + 108.0*in[0] - 216.0*in[0]*in[1] - │ │ │ │ │ -90.0*in[0]*in[0] + 180.0*in[0]*in[0]*in[1]; │ │ │ │ │ -144 out[1][0][1] = -6.0 + 54.0*in[0] - 108.0*in[0]*in[0] + 60.0*in[0]*in[0]*in │ │ │ │ │ -[0]; │ │ │ │ │ -145 out[1][1][0] = 0.0; │ │ │ │ │ -146 out[1][1][1] = 0.0; │ │ │ │ │ -147 │ │ │ │ │ -148 out[2][0][0] = sign0*(45.0 - 270.0*in[1] - 180.0*in[0] + 1080.0*in[0]*in[1] │ │ │ │ │ -+ 270.0*in[1]*in[1] + 150.0*in[0]*in[0] - 1080.0*in[0]*in[1]*in[1] - 900.0*in │ │ │ │ │ -[0]*in[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ -149 out[2][0][1] = sign0*(30.0 - 270.0*in[0] - 60.0*in[1] + 540.0*in[0]*in[0] + │ │ │ │ │ -540.0*in[0]*in[1] - 1080.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + │ │ │ │ │ -600.0*in[0]*in[0]*in[0]*in[1]); │ │ │ │ │ -150 out[2][1][0] = 0.0; │ │ │ │ │ -151 out[2][1][1] = 0.0; │ │ │ │ │ -152 │ │ │ │ │ -153 out[3][0][0] = sign1*(3.0 - 24.0*in[0] + 30.0*in[0]*in[0]); │ │ │ │ │ -154 out[3][0][1] = 0.0; │ │ │ │ │ -155 out[3][1][0] = 0.0; │ │ │ │ │ -156 out[3][1][1] = 0.0; │ │ │ │ │ -157 │ │ │ │ │ -158 out[4][0][0] = 9.0 - 18.0*in[1] - 72.0*in[0] + 144.0*in[0]*in[1] + 90.0*in │ │ │ │ │ -[0]*in[0] - 180.0*in[0]*in[0]*in[1]; │ │ │ │ │ -159 out[4][0][1] = -18.0*in[0] + 72.0*in[0]*in[0] - 60.0*in[0]*in[0]*in[0]; │ │ │ │ │ -160 out[4][1][0] = 0.0; │ │ │ │ │ -161 out[4][1][1] = 0.0; │ │ │ │ │ -162 │ │ │ │ │ -163 out[5][0][0] = sign1*(15.0 - 90.0*in[1] - 120.0*in[0] + 720.0*in[0]*in[1] + │ │ │ │ │ -90.0*in[1]*in[1] + 150.0*in[0]*in[0] - 720.0*in[0]*in[1]*in[1] - 900.0*in[0]*in │ │ │ │ │ -[0]*in[1] + 900.0*in[0]*in[0]*in[1]*in[1]); │ │ │ │ │ -164 out[5][0][1] = sign1*(-90.0*in[0] + 360.0*in[0]*in[0] + 180.0*in[0]*in[1] - │ │ │ │ │ -720.0*in[0]*in[0]*in[1] - 300.0*in[0]*in[0]*in[0] + 600.0*in[0]*in[0]*in[0]*in │ │ │ │ │ -[1]); │ │ │ │ │ -165 out[5][1][0] = 0.0; │ │ │ │ │ -166 out[5][1][1] = 0.0; │ │ │ │ │ -167 │ │ │ │ │ -168 │ │ │ │ │ -169 out[6][0][0] = 0.0; │ │ │ │ │ -170 out[6][0][1] = 0.0; │ │ │ │ │ -171 out[6][1][0] = 0.0; │ │ │ │ │ -172 out[6][1][1] = sign2*(9.0 - 36.0*in[1] + 30.0*in[1]*in[1]); │ │ │ │ │ -173 │ │ │ │ │ -174 out[7][0][0] = 0.0; │ │ │ │ │ -175 out[7][0][1] = 0.0; │ │ │ │ │ -176 out[7][1][0] = 6.0 - 54.0*in[1] + 108.0*in[1]*in[1] - 60.0*in[1]*in[1]*in │ │ │ │ │ -[1]; │ │ │ │ │ -177 out[7][1][1] = 27.0 - 54.0*in[0] - 108.0*in[1] + 216.0*in[0]*in[1] + │ │ │ │ │ -90.0*in[1]*in[1] - 180.0*in[0]*in[1]*in[1]; │ │ │ │ │ -178 │ │ │ │ │ -179 out[8][0][0] = 0.0; │ │ │ │ │ -180 out[8][0][1] = 0.0; │ │ │ │ │ -181 out[8][1][0] = sign2*(30.0 - 270.0*in[1] - 60.0*in[0] + 540.0*in[0]*in[1] + │ │ │ │ │ -540.0*in[1]*in[1] - 1080.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + │ │ │ │ │ -600.0*in[1]*in[1]*in[1]*in[0]); │ │ │ │ │ -182 out[8][1][1] = sign2*(45.0 - 270.0*in[0] - 180.0*in[1] + 270.0*in[0]*in[0] │ │ │ │ │ -+ 1080.0*in[0]*in[1] + 150.0*in[1]*in[1] - 1080.0*in[0]*in[0]*in[1] - 900.0*in │ │ │ │ │ -[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ -183 │ │ │ │ │ -184 out[9][0][0] = 0.0; │ │ │ │ │ -185 out[9][0][1] = 0.0; │ │ │ │ │ -186 out[9][1][0] = 0.0; │ │ │ │ │ -187 out[9][1][1] = sign3*(3.0 - 24.0*in[1] + 30.0*in[1]*in[1]); │ │ │ │ │ -188 │ │ │ │ │ -189 out[10][0][0] = 0.0; │ │ │ │ │ -190 out[10][0][1] = 0.0; │ │ │ │ │ -191 out[10][1][0] = 18.0*in[1] - 72.0*in[1]*in[1] + 60.0*in[1]*in[1]*in[1]; │ │ │ │ │ -192 out[10][1][1] = -9.0 + 18.0*in[0] + 72.0*in[1] - 144.0*in[0]*in[1] - │ │ │ │ │ -90.0*in[1]*in[1] + 180.0*in[0]*in[1]*in[1]; │ │ │ │ │ -193 │ │ │ │ │ -194 out[11][0][0] = 0.0; │ │ │ │ │ -195 out[11][0][1] = 0.0; │ │ │ │ │ -196 out[11][1][0] = sign3*(-90.0*in[1] + 180.0*in[0]*in[1] + 360.0*in[1]*in[1] │ │ │ │ │ -- 720.0*in[0]*in[1]*in[1] - 300.0*in[1]*in[1]*in[1] + 600.0*in[1]*in[1]*in │ │ │ │ │ -[1]*in[0]); │ │ │ │ │ -197 out[11][1][1] = sign3*(15.0 - 90.0*in[0] - 120.0*in[1] + 90.0*in[0]*in[0] + │ │ │ │ │ -720.0*in[0]*in[1] + 150.0*in[1]*in[1] - 720.0*in[0]*in[0]*in[1] - 900.0*in │ │ │ │ │ -[0]*in[1]*in[1] + 900.0*in[1]*in[1]*in[0]*in[0]); │ │ │ │ │ -198 │ │ │ │ │ -199 out[12][0][0] = 324 -1296.0*in[1] - 1728.0*in[0] + 6912.0*in[0]*in[1] + │ │ │ │ │ -1080.0*in[1]*in[1] + 1620.0*in[0]*in[0] - 5760.0*in[0]*in[1]*in[1] - 6480.0*in │ │ │ │ │ -[0]*in[0]*in[1] + 5400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -200 out[12][0][1] = -1296.0*in[0] + 3456.0*in[0]*in[0] + 2160.0*in[0]*in[1] - │ │ │ │ │ -5760.0*in[0]*in[0]*in[1] - 2160.0*in[0]*in[0]*in[0] + 3600.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -201 out[12][1][0] = 0.0; │ │ │ │ │ -202 out[12][1][1] = 0.0; │ │ │ │ │ -203 │ │ │ │ │ -204 out[13][0][0] = 0.0; │ │ │ │ │ -205 out[13][0][1] = 0.0; │ │ │ │ │ -206 out[13][1][0] = -1296.0*in[1] + 2160.0*in[0]*in[1] + 3456.0*in[1]*in[1] - │ │ │ │ │ -5760.0*in[0]*in[1]*in[1] - 2160.0*in[1]*in[1]*in[1] + 3600.0*in[1]*in[1]*in │ │ │ │ │ -[1]*in[0]; │ │ │ │ │ -207 out[13][1][1] = 324.0 - 1296.0*in[0] - 1728.0*in[1] + 1080.0*in[0]*in[0] + │ │ │ │ │ -6912.0*in[0]*in[1] + 1620.0*in[1]*in[1] - 5760.0*in[0]*in[0]*in[1] - 6480.0*in │ │ │ │ │ -[0]*in[1]*in[1] + 5400.0*in[1]*in[1]*in[0]*in[0]; │ │ │ │ │ -208 │ │ │ │ │ -209 out[14][0][0] = -540.0 + 2160.0*in[1] + 3240.0*in[0] - 12960.0*in[0]*in[1] │ │ │ │ │ -- 1800.0*in[1]*in[1] - 3240.0*in[0]*in[0] + 10800.0*in[0]*in[1]*in[1] + │ │ │ │ │ -12960.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -210 out[14][0][1] = 2160.0*in[0] - 6480.0*in[0]*in[0] - 3600.0*in[0]*in[1] + │ │ │ │ │ -10800.0*in[0]*in[0]*in[1] + 4320.0*in[0]*in[0]*in[0] - 7200.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -211 out[14][1][0] = 0.0; │ │ │ │ │ -212 out[14][1][1] = 0.0; │ │ │ │ │ -213 │ │ │ │ │ -214 out[15][0][0] = 0.0; │ │ │ │ │ -215 out[15][0][1] = 0.0; │ │ │ │ │ -216 out[15][1][0] = 6912.0*in[1] - 12960.0*in[0]*in[1] - 18432.0*in[1]*in[1] + │ │ │ │ │ -34560.0*in[0]*in[1]*in[1] + 11520.0*in[1]*in[1]*in[1] - 21600.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -217 out[15][1][1] = -1296.0 + 6912.0*in[0] + 6912.0*in[1] - 6480.0*in[0]*in[0] │ │ │ │ │ -- 36864.0*in[0]*in[1] - 6480.0*in[1]*in[1] + 34560.0*in[0]*in[0]*in[1] + │ │ │ │ │ -34560.0*in[0]*in[1]*in[1] - 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -218 │ │ │ │ │ -219 out[16][0][0] = -1296.0 + 6912.0*in[1] + 6912.0*in[0] - 6480.0*in[1]*in[1] │ │ │ │ │ -- 36864.0*in[0]*in[1] - 6480.0*in[0]*in[0] + 34560.0*in[0]*in[1]*in[1] + │ │ │ │ │ -34560.0*in[1]*in[0]*in[0] - 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -220 out[16][0][1] = 6912.0*in[0] - 12960.0*in[0]*in[1] - 18432.0*in[0]*in[0] + │ │ │ │ │ -34560.0*in[0]*in[0]*in[1] + 11520.0*in[0]*in[0]*in[0] - 21600.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -221 out[16][1][0] = 0.0; │ │ │ │ │ -222 out[16][1][1] = 0.0; │ │ │ │ │ -223 │ │ │ │ │ -224 out[17][0][0] = 0.0; │ │ │ │ │ -225 out[17][0][1] = 0.0; │ │ │ │ │ -226 out[17][1][0] = 2160.0*in[1] - 3600.0*in[0]*in[1] - 6480.0*in[1]*in[1] + │ │ │ │ │ -10800.0*in[0]*in[1]*in[1] + 4320.0*in[1]*in[1]*in[1] - 7200.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -227 out[17][1][1] = -540.0 + 2160.0*in[0] + 3240.0*in[1] - 1800.0*in[0]*in[0] - │ │ │ │ │ -12960.0*in[0]*in[1] - 3240.0*in[1]*in[1] + 10800.0*in[0]*in[0]*in[1] + │ │ │ │ │ -12960.0*in[0]*in[1]*in[1] - 10800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -228 │ │ │ │ │ -229 out[18][0][0] = 2160.0 - 11520.0*in[1] - 12960.0*in[0] + 69120.0*in[0]*in │ │ │ │ │ -[1] + 10800.0*in[1]*in[1] + 12960.0*in[0]*in[0] - 64800.0*in[0]*in[1]*in[1] - │ │ │ │ │ -69120.0*in[0]*in[0]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -230 out[18][0][1] = -11520.0*in[0] + 34560.0*in[0]*in[0] + 21600.0*in[0]*in[1] │ │ │ │ │ -- 64800.0*in[0]*in[0]*in[1] - 23040.0*in[0]*in[0]*in[0] + 43200.0*in[0]*in │ │ │ │ │ -[0]*in[0]*in[1]; │ │ │ │ │ -231 out[18][1][0] = 0.0; │ │ │ │ │ -232 out[18][1][1] = 0.0; │ │ │ │ │ -233 │ │ │ │ │ -234 out[19][0][0] = 0.0; │ │ │ │ │ -235 out[19][0][1] = 0.0; │ │ │ │ │ -236 out[19][1][0] = -11520.0*in[1] + 21600.0*in[0]*in[1] + 34560.0*in[1]*in[1] │ │ │ │ │ -- 64800.0*in[0]*in[1]*in[1] - 23040.0*in[1]*in[1]*in[1] + 43200.0*in[0]*in │ │ │ │ │ -[1]*in[1]*in[1]; │ │ │ │ │ -237 out[19][1][1] = 2160.0 - 11520.0*in[0] - 12960.0*in[1] + 10800.0*in[0]*in │ │ │ │ │ -[0] + 69120.0*in[0]*in[1] + 12960.0*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1] - │ │ │ │ │ -69120.0*in[0]*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -238 │ │ │ │ │ -239 out[20][0][0] = 1080.0 - 6480.0*in[1] - 5760.0*in[0] + 34560.0*in[0]*in[1] │ │ │ │ │ -+ 6480.0*in[1]*in[1] + 5400.0*in[0]*in[0] - 34560.0*in[0]*in[1]*in[1] - │ │ │ │ │ -32400.0*in[0]*in[0]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -240 out[20][0][1] = -6480.0*in[0] + 17280.0*in[0]*in[0] + 12960.0*in[0]*in[1] - │ │ │ │ │ -34560.0*in[0]*in[0]*in[1] - 10800.0*in[0]*in[0]*in[0] + 21600.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -241 out[20][1][0] = 0.0; │ │ │ │ │ -242 out[20][1][1] = 0.0; │ │ │ │ │ -243 │ │ │ │ │ -244 out[21][0][0] = 0.0; │ │ │ │ │ -245 out[21][0][1] = 0.0; │ │ │ │ │ -246 out[21][1][0] = -6480.0*in[1] + 12960.0*in[0]*in[1] + 17280.0*in[1]*in[1] - │ │ │ │ │ -34560.0*in[0]*in[1]*in[1] - 10800.0*in[1]*in[1]*in[1] + 21600.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -247 out[21][1][1] = 1080.0 - 6480.0*in[0] - 5760.0*in[1] + 6480.0*in[0]*in[0] + │ │ │ │ │ -34560.0*in[0]*in[1] + 5400.0*in[1]*in[1] - 34560.0*in[0]*in[0]*in[1] - │ │ │ │ │ -32400.0*in[0]*in[1]*in[1] + 32400.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -248 │ │ │ │ │ -249 out[22][0][0] = -1800.0 + 10800.0*in[1] + 10800.0*in[0] - 64800.0*in[0]*in │ │ │ │ │ -[1] - 10800.0*in[1]*in[1] - 10800.0*in[0]*in[0] + 64800.0*in[0]*in[1]*in[1] + │ │ │ │ │ -64800.0*in[0]*in[0]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -250 out[22][0][1] = 10800.0*in[0] - 32400.0*in[0]*in[0] - 21600.0*in[0]*in[1] + │ │ │ │ │ -64800.0*in[0]*in[0]*in[1] + 21600.0*in[0]*in[0]*in[0] - 43200.0*in[0]*in[0]*in │ │ │ │ │ -[0]*in[1]; │ │ │ │ │ -251 out[22][1][0] = 0.0; │ │ │ │ │ -252 out[22][1][1] = 0.0; │ │ │ │ │ -253 │ │ │ │ │ -254 out[23][0][0] = 0.0; │ │ │ │ │ -255 out[23][0][1] = 0.0; │ │ │ │ │ -256 out[23][1][0] = 10800.0*in[1] - 21600.0*in[0]*in[1] - 32400.0*in[1]*in[1] + │ │ │ │ │ -64800.0*in[0]*in[1]*in[1] + 21600.0*in[1]*in[1]*in[1] - 43200.0*in[0]*in[1]*in │ │ │ │ │ -[1]*in[1]; │ │ │ │ │ -257 out[23][1][1] = -1800.0 + 10800.0*in[0] + 10800.0*in[1] - 10800.0*in[0]*in │ │ │ │ │ -[0] - 64800.0*in[0]*in[1] - 10800.0*in[1]*in[1] + 64800.0*in[0]*in[0]*in[1] + │ │ │ │ │ -64800.0*in[0]*in[1]*in[1] - 64800.0*in[0]*in[0]*in[1]*in[1]; │ │ │ │ │ -258 } │ │ │ │ │ -259 │ │ │ │ │ -_2_6_1 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -262 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -263 std::vector& out) const // return value │ │ │ │ │ -264 { │ │ │ │ │ -265 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -266 if (totalOrder == 0) { │ │ │ │ │ -267 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -268 } else { │ │ │ │ │ -269 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -270 } │ │ │ │ │ -271 } │ │ │ │ │ -272 │ │ │ │ │ -_2_7_4 unsigned int _o_r_d_e_r () const │ │ │ │ │ -275 { │ │ │ │ │ -276 return 5; │ │ │ │ │ -277 } │ │ │ │ │ -278 │ │ │ │ │ -279 private: │ │ │ │ │ -280 R sign0, sign1, sign2, sign3; │ │ │ │ │ -281 }; │ │ │ │ │ -282} │ │ │ │ │ -283#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALBASIS_HH │ │ │ │ │ +78 template │ │ │ │ │ +_7_9 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const { │ │ │ │ │ +80 DUNE_THROW(Dune::Exception,"mimetic local interpolation not available"); │ │ │ │ │ +81 } │ │ │ │ │ +82 }; │ │ │ │ │ +83 │ │ │ │ │ +_8_7 class _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +88 { │ │ │ │ │ +89 public: │ │ │ │ │ +_9_0 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s (unsigned int variant_) │ │ │ │ │ +91 : variant(variant_), li(variant_) │ │ │ │ │ +92 { │ │ │ │ │ +93 for (unsigned int i=0; i li; │ │ │ │ │ +112 }; │ │ │ │ │ +113} │ │ │ │ │ +114 │ │ │ │ │ +115#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:261 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT2Cube2DLocalBasis(unsigned int s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m │ │ │ │ │ +@ intersectionCodim │ │ │ │ │ +Codimension returned by LocalKey::codim() for degrees of freedom attached to an │ │ │ │ │ +intersection. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +MimeticLocalBasis(unsigned int variant_) │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +Dune::LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune:: │ │ │ │ │ +FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +MimeticLocalBasis() │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ unsigned int order() const │ │ │ │ │ Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:274 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dim > &, const typename Traits:: │ │ │ │ │ +DomainType &, std::vector< typename Traits::RangeType > &) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:72 │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Local interpolation of a function. │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +! │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const Dune::LocalKey & localKey(std::size_t i) const │ │ │ │ │ +map index i to local key │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +MimeticLocalCoefficients(unsigned int variant_) │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:102 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +MimeticLocalCoefficients() │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:97 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: lagrange.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2dlocalcoefficients.hh File Reference
│ │ │ │ +
lagrange.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../../common/localkey.hh"
│ │ │ │ + │ │ │ │ +

Convenience header that includes all implementations of Lagrange finite elements. │ │ │ │ +More...

│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT2Cube2DLocalCoefficients
 Layout map for Raviart-Thomas-2 elements on quadrilaterals. More...
class  Dune::LagrangeLocalFiniteElement< LP, dimDomain, D, R, SF, CF >
 Lagrange local finite elements for a given set of interpolation points. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Convenience header that includes all implementations of Lagrange finite elements.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,35 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas2cube2dlocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +lagrange.hh File Reference │ │ │ │ │ +Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ +elements. _M_o_r_e_._._. │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_q_2_2_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Layout map for Raviart-Thomas-2 elements on quadrilaterals. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +  Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ +elements. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00275_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: lagrange.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,83 +70,90 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2dlocalcoefficients.hh
│ │ │ │ +
lagrange.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "../../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24
│ │ │ │ -
25 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29 for (std::size_t i = 0; i < 4; i++)
│ │ │ │ -
30 {
│ │ │ │ -
31 li[3*i] = LocalKey(i,1,0);
│ │ │ │ -
32 li[3*i + 1] = LocalKey(i,1,1);
│ │ │ │ -
33 li[3*i + 2] = LocalKey(i,1,2);
│ │ │ │ -
34 }
│ │ │ │ -
35
│ │ │ │ -
36 for (std::size_t i=0; i<12; i++)
│ │ │ │ -
37 {
│ │ │ │ -
38 li[12 + i] = LocalKey(0,0,i);
│ │ │ │ -
39 }
│ │ │ │ -
40 }
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
│ │ │ │ -
43 std::size_t size () const
│ │ │ │ -
44 {
│ │ │ │ -
45 return 24;
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
50 {
│ │ │ │ -
51 return li[i];
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54 private:
│ │ │ │ -
55 std::vector<LocalKey> li;
│ │ │ │ -
56 };
│ │ │ │ -
│ │ │ │ -
57}
│ │ │ │ -
58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH
│ │ │ │ +
12// Headers for Lagrange elements with run-time order
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
19
│ │ │ │ +
20// Headers for Lagrange elements with compile-time order
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
27
│ │ │ │ +
28namespace Dune
│ │ │ │ +
29{
│ │ │ │ +
59 template< template <class,unsigned int> class LP,
│ │ │ │ +
60 unsigned int dimDomain, class D, class R,
│ │ │ │ +
61 class SF=R, class CF=SF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
63 : public GenericLocalFiniteElement< LagrangeBasisFactory< LP, dimDomain, SF, CF >,
│ │ │ │ +
64 LagrangeCoefficientsFactory<LP, dimDomain, SF >,
│ │ │ │ +
65 LagrangeInterpolationFactory< LP, dimDomain, SF > >
│ │ │ │ +
66 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
70 public:
│ │ │ │ +
71 typedef typename Base::Traits Traits;
│ │ │ │ +
72
│ │ │ │ +
│ │ │ │ +
75 LagrangeLocalFiniteElement ( const GeometryType &gt, unsigned int order )
│ │ │ │ +
76 : Base( gt, order )
│ │ │ │ +
77 {}
│ │ │ │ +
│ │ │ │ +
78 };
│ │ │ │ +
│ │ │ │ +
79}
│ │ │ │ +
80
│ │ │ │ +
81#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for Raviart-Thomas-2 elements on quadrilaterals.
Definition raviartthomas2cube2dlocalcoefficients.hh:23
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas2cube2dlocalcoefficients.hh:43
│ │ │ │ -
RT2Cube2DLocalCoefficients()
Standard constructor.
Definition raviartthomas2cube2dlocalcoefficients.hh:27
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas2cube2dlocalcoefficients.hh:49
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
Lagrange local finite elements for a given set of interpolation points.
Definition lagrange.hh:66
│ │ │ │ +
LagrangeLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition lagrange.hh:75
│ │ │ │ +
Base::Traits Traits
Definition lagrange.hh:71
│ │ │ │ +
Definition lagrange/interpolation.hh:89
│ │ │ │ +
Definition lagrangecoefficients.hh:23
│ │ │ │ +
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,81 +1,92 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d │ │ │ │ │ -raviartthomas2cube2dlocalcoefficients.hh │ │ │ │ │ +lagrange.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "../../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -_2_2 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -23 { │ │ │ │ │ -24 │ │ │ │ │ -25 public: │ │ │ │ │ -_2_7 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(24) │ │ │ │ │ -28 { │ │ │ │ │ -29 for (std::size_t i = 0; i < 4; i++) │ │ │ │ │ -30 { │ │ │ │ │ -31 li[3*i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 li[3*i + 1] = _L_o_c_a_l_K_e_y(i,1,1); │ │ │ │ │ -33 li[3*i + 2] = _L_o_c_a_l_K_e_y(i,1,2); │ │ │ │ │ -34 } │ │ │ │ │ -35 │ │ │ │ │ -36 for (std::size_t i=0; i<12; i++) │ │ │ │ │ -37 { │ │ │ │ │ -38 li[12 + i] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -39 } │ │ │ │ │ -40 } │ │ │ │ │ -41 │ │ │ │ │ -_4_3 std::size_t _s_i_z_e () const │ │ │ │ │ -44 { │ │ │ │ │ -45 return 24; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_4_9 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -50 { │ │ │ │ │ -51 return li[i]; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -54 private: │ │ │ │ │ -55 std::vector li; │ │ │ │ │ -56 }; │ │ │ │ │ -57} │ │ │ │ │ -58#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALCOEFFICIENTS_HH │ │ │ │ │ +12// Headers for Lagrange elements with run-time order │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h> │ │ │ │ │ +19 │ │ │ │ │ +20// Headers for Lagrange elements with compile-time order │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +23#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +24#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +25#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +26#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_q_2_2_d_._h_h> │ │ │ │ │ +27 │ │ │ │ │ +28namespace _D_u_n_e │ │ │ │ │ +29{ │ │ │ │ │ +59 template< template class LP, │ │ │ │ │ +60 unsigned int dimDomain, class D, class R, │ │ │ │ │ +61 class SF=R, class CF=SF > │ │ │ │ │ +_6_2 class _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +63 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< LagrangeBasisFactory< LP, dimDomain, SF, │ │ │ │ │ +CF >, │ │ │ │ │ +64 LagrangeCoefficientsFactory, │ │ │ │ │ +65 LagrangeInterpolationFactory< LP, dimDomain, SF > > │ │ │ │ │ +66 { │ │ │ │ │ +67 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ +_C_F_ _>, │ │ │ │ │ +68 _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_ _>, │ │ │ │ │ +69 _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_ _> > _B_a_s_e; │ │ │ │ │ +70 public: │ │ │ │ │ +_7_1 typedef typename _B_a_s_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ +72 │ │ │ │ │ +_7_5 _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, unsigned int order ) │ │ │ │ │ +76 : _B_a_s_e( gt, order ) │ │ │ │ │ +77 {} │ │ │ │ │ +78 }; │ │ │ │ │ +79} │ │ │ │ │ +80 │ │ │ │ │ +81#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ +_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_p_q_2_2_d_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h │ │ │ │ │ +_p_0_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-2 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT2Cube2DLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ +DDeeffiinniittiioonn lagrange.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +LagrangeLocalFiniteElement(const GeometryType >, unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn lagrange.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +Base::Traits Traits │ │ │ │ │ +DDeeffiinniittiioonn lagrange.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +A LocalFiniteElement implementation based on three TopologyFactories providing │ │ │ │ │ +the LocalBasis,... │ │ │ │ │ +DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:25 │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12d.hh File Reference │ │ │ │ +dune-localfunctions: dualq1localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas12d.hh File Reference
│ │ │ │ +
dualq1localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas12d/raviartthomas12dlocalinterpolation.hh"
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT12DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on triangles. More...
class  Dune::DualQ1LocalBasis< D, R, dim >
 Dual Lagrange shape functions of order 1 on the reference cube. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas12d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +dualq1localbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on triangles. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Dual Lagrange shape functions of order 1 on the reference cube. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00278_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas12d.hh Source File │ │ │ │ +dune-localfunctions: dualq1localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,171 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas12d.hh
│ │ │ │ +
dualq1localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_Q1_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_DUAL_Q1_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ -
27 class
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
28 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │
31 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ +
32 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
33 Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::triangle;
│ │ │ │ +
│ │ │ │ +
35 void setCoefficients(const std::array<Dune::FieldVector<R, (1<<dim)> ,(1<<dim)>& coefficients)
│ │ │ │ +
36 {
│ │ │ │ +
37 coefficients_ = coefficients;
│ │ │ │ +
38 }
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ +
41 unsigned int size () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return 1<<dim;
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
47 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
48 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
49 {
│ │ │ │ +
50 // compute q1 values
│ │ │ │ +
51 std::vector<typename Traits::RangeType> q1Values(size());
│ │ │ │ +
52
│ │ │ │ +
53 for (size_t i=0; i<size(); i++) {
│ │ │ │ +
54
│ │ │ │ +
55 q1Values[i] = 1;
│ │ │ │ +
56
│ │ │ │ +
57 for (int j=0; j<dim; j++)
│ │ │ │ +
58 // if j-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ +
59 q1Values[i] *= (i & (1<<j)) ? in[j] : 1-in[j];
│ │ │ │ +
60
│ │ │ │ +
61 }
│ │ │ │ +
62
│ │ │ │ +
63 // compute the dual values by using that they are linear combinations of q1 functions
│ │ │ │ +
64 out.resize(size());
│ │ │ │ +
65 for (size_t i=0; i<size(); i++)
│ │ │ │ +
66 out[i] = 0;
│ │ │ │ +
67
│ │ │ │ +
68 for (size_t i=0; i<size(); i++)
│ │ │ │ +
69 for (size_t j=0; j<size(); j++)
│ │ │ │ +
70 out[i] += coefficients_[i][j]*q1Values[j];
│ │ │ │ +
71
│ │ │ │ +
72
│ │ │ │
73 }
│ │ │ │
│ │ │ │
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 RT12DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81
│ │ │ │ -
82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
76 inline void
│ │ │ │ +
│ │ │ │ +
77 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
78 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
79 {
│ │ │ │ +
80 // compute q1 jacobians
│ │ │ │ +
81 std::vector<typename Traits::JacobianType> q1Jacs(size());
│ │ │ │ +
82
│ │ │ │ +
83 // Loop over all shape functions
│ │ │ │ +
84 for (size_t i=0; i<size(); i++) {
│ │ │ │ +
85
│ │ │ │ +
86 // Loop over all coordinate directions
│ │ │ │ +
87 for (int j=0; j<dim; j++) {
│ │ │ │ +
88
│ │ │ │ +
89 // Initialize: the overall expression is a product
│ │ │ │ +
90 // if j-th bit of i is set to -1, else 1
│ │ │ │ +
91 q1Jacs[i][0][j] = (i & (1<<j)) ? 1 : -1;
│ │ │ │ +
92
│ │ │ │ +
93 for (int k=0; k<dim; k++) {
│ │ │ │ +
94
│ │ │ │ +
95 if (j!=k)
│ │ │ │ +
96 // if k-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ +
97 q1Jacs[i][0][j] *= (i & (1<<k)) ? in[k] : 1-in[k];
│ │ │ │ +
98
│ │ │ │ +
99 }
│ │ │ │ +
100
│ │ │ │ +
101 }
│ │ │ │ +
102
│ │ │ │ +
103 }
│ │ │ │ +
104
│ │ │ │ +
105 // compute the dual jacobians by using that they are linear combinations of q1 functions
│ │ │ │ +
106 out.resize(size());
│ │ │ │ +
107 for (size_t i=0; i<size(); i++)
│ │ │ │ +
108 out[i] = 0;
│ │ │ │ +
109
│ │ │ │ +
110 for (size_t i=0; i<size(); i++)
│ │ │ │ +
111 for (size_t j=0; j<size(); j++)
│ │ │ │ +
112 out[i].axpy(coefficients_[i][j],q1Jacs[j]);
│ │ │ │ +
113
│ │ │ │ +
114 }
│ │ │ │ +
│ │ │ │ +
115
│ │ │ │ +
│ │ │ │ +
117 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
118 const typename Traits::DomainType& in, // position
│ │ │ │ +
119 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
120 {
│ │ │ │ +
121 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
122 if (totalOrder == 0) {
│ │ │ │ +
123 evaluateFunction(in, out);
│ │ │ │ +
124 } else {
│ │ │ │ +
125 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
126 }
│ │ │ │ +
127 }
│ │ │ │ +
│ │ │ │ +
128
│ │ │ │ +
│ │ │ │ +
130 unsigned int order () const
│ │ │ │ +
131 {
│ │ │ │ +
132 return 1;
│ │ │ │ +
133 }
│ │ │ │ +
│ │ │ │ +
134
│ │ │ │ +
135 private:
│ │ │ │ +
136 std::array<Dune::FieldVector<R, (1<<dim)> ,(1<<dim)> coefficients_;
│ │ │ │ +
137 };
│ │ │ │ +
│ │ │ │ +
138}
│ │ │ │ +
139#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on triangles.
Definition raviartthomas12d.hh:29
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas12d.hh:65
│ │ │ │ -
LocalFiniteElementTraits< RT12DLocalBasis< D, R >, RT12DLocalCoefficients, RT12DLocalInterpolation< RT12DLocalBasis< D, R > > > Traits
Definition raviartthomas12d.hh:33
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas12d.hh:49
│ │ │ │ -
RT12DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 8.
Definition raviartthomas12d.hh:44
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas12d.hh:54
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas12d.hh:70
│ │ │ │ -
RT12DLocalFiniteElement()
Standard constructor.
Definition raviartthomas12d.hh:36
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas12d.hh:59
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas12dlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on the reference triangle.
Definition raviartthomas12dlocalcoefficients.hh:23
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas12dlocalinterpolation.hh:25
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Dual Lagrange shape functions of order 1 on the reference cube.
Definition dualq1localbasis.hh:30
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition dualq1localbasis.hh:41
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition dualq1localbasis.hh:130
│ │ │ │ +
void setCoefficients(const std::array< Dune::FieldVector< R,(1<< dim)>,(1<< dim)> &coefficients)
Definition dualq1localbasis.hh:35
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition dualq1localbasis.hh:47
│ │ │ │ +
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
Definition dualq1localbasis.hh:33
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition dualq1localbasis.hh:77
│ │ │ │ +
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition dualq1localbasis.hh:117
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,185 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas12d.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ +dualq1localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class │ │ │ │ │ -28 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +30 { │ │ │ │ │ 31 public: │ │ │ │ │ -32 typedef │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 34 │ │ │ │ │ -_3_6 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::triangle; │ │ │ │ │ +_3_5 void _s_e_t_C_o_e_f_f_i_c_i_e_n_t_s(const std::array , │ │ │ │ │ +(1<& coefficients) │ │ │ │ │ +36 { │ │ │ │ │ +37 coefficients_ = coefficients; │ │ │ │ │ +38 } │ │ │ │ │ +39 │ │ │ │ │ +_4_1 unsigned int _s_i_z_e () const │ │ │ │ │ +42 { │ │ │ │ │ +43 return 1<& out) const │ │ │ │ │ +49 { │ │ │ │ │ +50 // compute q1 values │ │ │ │ │ +51 std::vector q1Values(_s_i_z_e()); │ │ │ │ │ +52 │ │ │ │ │ +53 for (size_t i=0; i<_s_i_z_e(); i++) { │ │ │ │ │ +54 │ │ │ │ │ +55 q1Values[i] = 1; │ │ │ │ │ +56 │ │ │ │ │ +57 for (int j=0; j basis; │ │ │ │ │ -77 _R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81 │ │ │ │ │ -82#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS12DLOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +76 inline void │ │ │ │ │ +_7_7 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +78 std::vector& out) const // return value │ │ │ │ │ +79 { │ │ │ │ │ +80 // compute q1 jacobians │ │ │ │ │ +81 std::vector q1Jacs(_s_i_z_e()); │ │ │ │ │ +82 │ │ │ │ │ +83 // Loop over all shape functions │ │ │ │ │ +84 for (size_t i=0; i<_s_i_z_e(); i++) { │ │ │ │ │ +85 │ │ │ │ │ +86 // Loop over all coordinate directions │ │ │ │ │ +87 for (int j=0; j& _o_r_d_e_r, │ │ │ │ │ +118 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +119 std::vector& out) const // return value │ │ │ │ │ +120 { │ │ │ │ │ +121 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +122 if (totalOrder == 0) { │ │ │ │ │ +123 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +124 } else { │ │ │ │ │ +125 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +126 } │ │ │ │ │ +127 } │ │ │ │ │ +128 │ │ │ │ │ +_1_3_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ +131 { │ │ │ │ │ +132 return 1; │ │ │ │ │ +133 } │ │ │ │ │ +134 │ │ │ │ │ +135 private: │ │ │ │ │ +136 std::array ,(1< coefficients_; │ │ │ │ │ +137 }; │ │ │ │ │ +138} │ │ │ │ │ +139#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on triangles. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Dual Lagrange shape functions of order 1 on the reference cube. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT12DLocalBasis< D, R >, RT12DLocalCoefficients, │ │ │ │ │ -RT12DLocalInterpolation< RT12DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT12DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT12DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas12dlocalinterpolation.hh:25 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:130 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_s_e_t_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +void setCoefficients(const std::array< Dune::FieldVector< R,(1<< dim)>,(1<< │ │ │ │ │ +dim)> &coefficients) │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ +R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:77 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:117 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2d.hh File Reference │ │ │ │ +dune-localfunctions: dualq1localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas2cube2d.hh File Reference
│ │ │ │ +
dualq1localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas2cube2d/raviartthomas2cube2dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas2cube2d/raviartthomas2cube2dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas2cube2d/raviartthomas2cube2dlocalinterpolation.hh"
│ │ │ │ +
#include <array>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT2Cube2DLocalFiniteElement< D, R >
 Second order Raviart-Thomas shape functions on cubes. More...
class  Dune::DualQ1LocalInterpolation< dim, LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas2cube2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +dualq1localinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  Second order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_,_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00281_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas2cube2d.hh Source File │ │ │ │ +dune-localfunctions: dualq1localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,106 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas2cube2d.hh
│ │ │ │ +
dualq1localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16
│ │ │ │ +
20 template<int dim, class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 {
│ │ │ │ +
23 public:
│ │ │ │ +
24
│ │ │ │ +
│ │ │ │ +
25 void setCoefficients(const std::array<Dune::FieldVector<typename LB::Traits::RangeFieldType, (1<<dim)> ,(1<<dim)>& coefficients)
│ │ │ │ +
26 {
│ │ │ │ +
27 coefficients_ = coefficients;
│ │ │ │ +
28 }
│ │ │ │ +
│ │ │ │ +
29
│ │ │ │ +
30
│ │ │ │ +
32 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
33 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
34 {
│ │ │ │ +
35 typename LB::Traits::DomainType x;
│ │ │ │ +
36
│ │ │ │ +
37 const int size = 1<<dim;
│ │ │ │
38
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ +
39 // compute Q1 interpolation coefficients
│ │ │ │ +
40 Dune::FieldVector<C,size> q1Coefficients;
│ │ │ │ +
41
│ │ │ │ +
42 for (int i=0; i< (1<<dim); i++) {
│ │ │ │ +
43
│ │ │ │ +
44 // Generate coordinate of the i-th corner of the reference cube
│ │ │ │ +
45 // We could use the ReferenceElement for this as well, but it is
│ │ │ │ +
46 // still not clear how dune-localfunctions should have access to them.
│ │ │ │ +
47 for (int j=0; j<dim; j++)
│ │ │ │ +
48 x[j] = (i & (1<<j)) ? 1.0 : 0.0;
│ │ │ │ +
49
│ │ │ │ +
50 q1Coefficients[i] = f(x);
│ │ │ │ +
51
│ │ │ │ +
52 }
│ │ │ │
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ +
54 out.resize(size);
│ │ │ │ +
55
│ │ │ │ +
56 // solve a linear system to compute the dual coefficients
│ │ │ │ +
57 Dune::FieldMatrix<C,size,size> mat;
│ │ │ │
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::quadrilateral;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 RT2Cube2DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
59 for (int i=0; i<size; i++)
│ │ │ │ +
60 for (int j=0; j<size; j++)
│ │ │ │ +
61 mat[i][j] = coefficients_[j][i];
│ │ │ │ +
62
│ │ │ │ +
63 // now solve for the weights
│ │ │ │ +
64 Dune::FieldVector<C,size> sol(0);
│ │ │ │ +
65
│ │ │ │ +
66 mat.solve(sol,q1Coefficients);
│ │ │ │ +
67
│ │ │ │ +
68 // write result in out vector
│ │ │ │ +
69 for (int i=0; i<size; i++)
│ │ │ │ +
70 out[i] = sol[i];
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
73 private:
│ │ │ │ +
74 std::array<Dune::FieldVector<typename LB::Traits::RangeFieldType, (1<<dim)> ,(1<<dim)> coefficients_;
│ │ │ │ +
75 };
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
77}
│ │ │ │ +
78
│ │ │ │ +
79#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas2cube2d.hh:27
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas2cube2d.hh:49
│ │ │ │ -
LocalFiniteElementTraits< RT2Cube2DLocalBasis< D, R >, RT2Cube2DLocalCoefficients, RT2Cube2DLocalInterpolation< RT2Cube2DLocalBasis< D, R > > > Traits
Definition raviartthomas2cube2d.hh:33
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas2cube2d.hh:54
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas2cube2d.hh:65
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas2cube2d.hh:70
│ │ │ │ -
RT2Cube2DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 16.
Definition raviartthomas2cube2d.hh:44
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas2cube2d.hh:59
│ │ │ │ -
RT2Cube2DLocalFiniteElement()
Standard constructor.
Definition raviartthomas2cube2d.hh:36
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference quadrilateral.
Definition raviartthomas2cube2dlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-2 elements on quadrilaterals.
Definition raviartthomas2cube2dlocalcoefficients.hh:23
│ │ │ │ -
Second order Raviart-Thomas shape functions on the reference triangle.
Definition raviartthomas2cube2dlocalinterpolation.hh:25
│ │ │ │ +
Definition dualq1localinterpolation.hh:22
│ │ │ │ +
void setCoefficients(const std::array< Dune::FieldVector< typename LB::Traits::RangeFieldType,(1<< dim)>,(1<< dim)> &coefficients)
Definition dualq1localinterpolation.hh:25
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition dualq1localinterpolation.hh:33
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +1,102 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas2cube2d.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ +dualq1localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 class _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +22 { │ │ │ │ │ +23 public: │ │ │ │ │ +24 │ │ │ │ │ +_2_5 void _s_e_t_C_o_e_f_f_i_c_i_e_n_t_s(const std::array ,(1<& coefficients) │ │ │ │ │ +26 { │ │ │ │ │ +27 coefficients_ = coefficients; │ │ │ │ │ +28 } │ │ │ │ │ +29 │ │ │ │ │ +30 │ │ │ │ │ +32 template │ │ │ │ │ +_3_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +34 { │ │ │ │ │ +35 typename LB::Traits::DomainType x; │ │ │ │ │ +36 │ │ │ │ │ +37 const int size = 1< q1Coefficients; │ │ │ │ │ +41 │ │ │ │ │ +42 for (int i=0; i< (1< mat; │ │ │ │ │ 58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::quadrilateral; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS2_CUBE2D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +59 for (int i=0; i sol(0); │ │ │ │ │ +65 │ │ │ │ │ +66 mat.solve(sol,q1Coefficients); │ │ │ │ │ +67 │ │ │ │ │ +68 // write result in out vector │ │ │ │ │ +69 for (int i=0; i │ │ │ │ │ +,(1< coefficients_; │ │ │ │ │ +75 }; │ │ │ │ │ +76 │ │ │ │ │ +77} │ │ │ │ │ +78 │ │ │ │ │ +79#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT2Cube2DLocalBasis< D, R >, │ │ │ │ │ -RT2Cube2DLocalCoefficients, RT2Cube2DLocalInterpolation< RT2Cube2DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT2Cube2DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT2Cube2DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-2 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2dlocalinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn dualq1localinterpolation.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +void setCoefficients(const std::array< Dune::FieldVector< typename LB::Traits:: │ │ │ │ │ +RangeFieldType,(1<< dim)>,(1<< dim)> &coefficients) │ │ │ │ │ +DDeeffiinniittiioonn dualq1localinterpolation.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Local interpolation of a function. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localinterpolation.hh:33 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: dualq1localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalcoefficients.hh File Reference
│ │ │ │ +
dualq1localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <iostream>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT02DLocalCoefficients
class  Dune::DualQ1LocalCoefficients< dim >
 Layout map for dual Q1 elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas02dlocalcoefficients.hh File Reference │ │ │ │ │ +dualq1localcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ +  Layout map for dual Q1 elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00284_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: dualq1localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,79 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalcoefficients.hh
│ │ │ │ +
dualq1localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │
9#include <iostream>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │ - │ │ │ │ + │ │ │ │
13
│ │ │ │
14namespace Dune
│ │ │ │
15{
│ │ │ │
16
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 for (std::size_t i=0; i<3; i++)
│ │ │ │ -
31 li[i] = LocalKey(i,1,0);
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
35 std::size_t size () const
│ │ │ │ -
36 {
│ │ │ │ -
37 return 3;
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
41 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
42 {
│ │ │ │ -
43 return li[i];
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector<LocalKey> li;
│ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
50}
│ │ │ │ -
51
│ │ │ │ -
52#endif
│ │ │ │ - │ │ │ │ +
24 template <int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 for (std::size_t i=0; i<(1<<dim); i++)
│ │ │ │ +
32 li[i] = LocalKey(i,dim,0);
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
36 std::size_t size () const
│ │ │ │ +
37 {
│ │ │ │ +
38 return 1<<dim;
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
42 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
43 {
│ │ │ │ +
44 return li[i];
│ │ │ │ +
45 }
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47 private:
│ │ │ │ +
48 std::vector<LocalKey> li;
│ │ │ │ +
49 };
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
51}
│ │ │ │ +
52
│ │ │ │ +
53#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition raviartthomas02dlocalcoefficients.hh:25
│ │ │ │ -
RT02DLocalCoefficients()
Standard constructor.
Definition raviartthomas02dlocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas02dlocalcoefficients.hh:41
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas02dlocalcoefficients.hh:35
│ │ │ │ +
Layout map for dual Q1 elements.
Definition dualq1localcoefficients.hh:26
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition dualq1localcoefficients.hh:36
│ │ │ │ +
DualQ1LocalCoefficients()
Standard constructor.
Definition dualq1localcoefficients.hh:29
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition dualq1localcoefficients.hh:42
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,75 +1,77 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ -raviartthomas02dlocalcoefficients.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_q_1 │ │ │ │ │ +dualq1localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_RT0TRIANGLELOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9#include │ │ │ │ │ 10#include │ │ │ │ │ 11 │ │ │ │ │ 12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ 13 │ │ │ │ │ 14namespace _D_u_n_e │ │ │ │ │ 15{ │ │ │ │ │ 16 │ │ │ │ │ -_2_4 class _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(3) │ │ │ │ │ -29 { │ │ │ │ │ -30 for (std::size_t i=0; i<3; i++) │ │ │ │ │ -31 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_5 std::size_t _s_i_z_e () const │ │ │ │ │ -36 { │ │ │ │ │ -37 return 3; │ │ │ │ │ -38 } │ │ │ │ │ -39 │ │ │ │ │ -_4_1 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -42 { │ │ │ │ │ -43 return li[i]; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -46 private: │ │ │ │ │ -47 std::vector li; │ │ │ │ │ -48 }; │ │ │ │ │ -49 │ │ │ │ │ -50} │ │ │ │ │ -51 │ │ │ │ │ -52#endif │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 class _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +26 { │ │ │ │ │ +27 public: │ │ │ │ │ +_2_9 _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(1< li; │ │ │ │ │ +49 }; │ │ │ │ │ +50 │ │ │ │ │ +51} │ │ │ │ │ +52 │ │ │ │ │ +53#endif │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT02DLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for dual Q1 elements. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localcoefficients.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn dualq1localcoefficients.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DualQ1LocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +DDeeffiinniittiioonn dualq1localcoefficients.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ const LocalKey & localKey(std::size_t i) const │ │ │ │ │ get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalcoefficients.hh:35 │ │ │ │ │ +DDeeffiinniittiioonn dualq1localcoefficients.hh:42 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: dualpq1factory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalbasis.hh File Reference
│ │ │ │ +
dualpq1factory.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <map>
│ │ │ │ +#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ +#include <dune/localfunctions/common/virtualwrappers.hh>
│ │ │ │ +#include <dune/localfunctions/dualmortarbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT02DLocalBasis< D, R >
class  Dune::DualPQ1LocalFiniteElementCache< D, R, dim, faceDual >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas02dlocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +dualpq1factory.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00287_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: dualpq1factory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,138 +70,118 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalbasis.hh
│ │ │ │ +
dualpq1factory.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ -
6#define DUNE_RT0TRIANGLELOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ +
8#include <map>
│ │ │ │
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28 public:
│ │ │ │ -
29 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,2,Dune::FieldVector<R,2>,
│ │ │ │ -
30 Dune::FieldMatrix<R,2,2> > Traits;
│ │ │ │ -
31
│ │ │ │ -
│ │ │ │ -
33 RT02DLocalBasis (std::bitset<3> s = 0)
│ │ │ │ -
34 {
│ │ │ │ -
35 for (int i=0; i<3; i++)
│ │ │ │ -
36 sign_[i] = s[i] ? -1.0 : 1.0;
│ │ │ │ -
37 }
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune {
│ │ │ │ +
16
│ │ │ │ +
17template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
19{
│ │ │ │ +
20protected:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
25 typedef std::map<Dune::GeometryType,FE*> FEMap;
│ │ │ │ +
26
│ │ │ │ +
27public:
│ │ │ │ + │ │ │ │ +
30
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
32 {
│ │ │ │ +
33 typename FEMap::iterator it = cache_.begin();
│ │ │ │ +
34 typename FEMap::iterator end = cache_.end();
│ │ │ │ +
35 for(; it!=end; ++it)
│ │ │ │ +
36 delete it->second;
│ │ │ │ +
37 }
│ │ │ │
│ │ │ │
38
│ │ │ │
│ │ │ │ -
40 unsigned int size () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return 3;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
47 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
48 {
│ │ │ │ -
49 out.resize(3);
│ │ │ │ -
50 out[0] = {sign_[0]*in[0], sign_[0]*(in[1]-D(1))};
│ │ │ │ -
51 out[1] = {sign_[1]*(in[0]-D(1)), sign_[1]*in[1]};
│ │ │ │ -
52 out[2] = {sign_[2]*in[0], sign_[2]*in[1]};
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
56 inline void
│ │ │ │ -
│ │ │ │ -
57 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
58 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
59 {
│ │ │ │ -
60 out.resize(3);
│ │ │ │ -
61 for (int i=0; i<3; i++)
│ │ │ │ -
62 {
│ │ │ │ -
63 out[i][0] = {sign_[i], 0};
│ │ │ │ -
64 out[i][1] = { 0, sign_[i]};
│ │ │ │ -
65 }
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
69 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
70 const typename Traits::DomainType& in, // position
│ │ │ │ -
71 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
72 {
│ │ │ │ -
73 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
74 if (totalOrder == 0) {
│ │ │ │ -
75 evaluateFunction(in, out);
│ │ │ │ -
76 } else if (totalOrder == 1) {
│ │ │ │ -
77 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
78 out.resize(size());
│ │ │ │ -
79
│ │ │ │ -
80 for (int i=0; i<3; i++)
│ │ │ │ -
81 {
│ │ │ │ -
82 out[i][direction] = sign_[i];
│ │ │ │ -
83 out[i][1-direction] = 0;
│ │ │ │ -
84 }
│ │ │ │ -
85 } else {
│ │ │ │ -
86 out.resize(size());
│ │ │ │ -
87 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
88 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ -
89 out[i][j] = 0;
│ │ │ │ -
90 }
│ │ │ │ -
91
│ │ │ │ -
92 }
│ │ │ │ -
│ │ │ │ -
93
│ │ │ │ -
│ │ │ │ -
95 unsigned int order () const
│ │ │ │ -
96 {
│ │ │ │ -
97 return 1;
│ │ │ │ -
98 }
│ │ │ │ -
│ │ │ │ -
99
│ │ │ │ -
100 private:
│ │ │ │ -
101
│ │ │ │ -
102 // Signs of the edge normals
│ │ │ │ -
103 std::array<R,3> sign_;
│ │ │ │ -
104 };
│ │ │ │ -
│ │ │ │ -
105}
│ │ │ │ -
106#endif
│ │ │ │ +
40 static FE* create(const Dune::GeometryType& gt)
│ │ │ │ +
41 {
│ │ │ │ +
42 if (gt.isSimplex())
│ │ │ │ + │ │ │ │ +
44 if (gt.isCube())
│ │ │ │ + │ │ │ │ +
46 return 0;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
50 const FiniteElementType& get(const Dune::GeometryType& gt) const
│ │ │ │ +
51 {
│ │ │ │ +
52 typename FEMap::const_iterator it = cache_.find(gt);
│ │ │ │ +
53 if (it==cache_.end())
│ │ │ │ +
54 {
│ │ │ │ +
55 FiniteElementType* fe = create(gt);
│ │ │ │ +
56
│ │ │ │ +
57 if (fe==0)
│ │ │ │ +
58 DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element available for geometry type " << gt);
│ │ │ │ +
59
│ │ │ │ +
60 cache_[gt] = fe;
│ │ │ │ +
61 return *fe;
│ │ │ │ +
62 }
│ │ │ │ +
63 return *(it->second);
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66protected:
│ │ │ │ +
67 mutable FEMap cache_;
│ │ │ │ +
68};
│ │ │ │ +
│ │ │ │ +
69
│ │ │ │ +
70} // namespace Dune
│ │ │ │ +
71
│ │ │ │ +
72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition raviartthomas02dlocalbasis.hh:27
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas02dlocalbasis.hh:95
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas02dlocalbasis.hh:57
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
Definition raviartthomas02dlocalbasis.hh:30
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas02dlocalbasis.hh:46
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas02dlocalbasis.hh:40
│ │ │ │ -
RT02DLocalBasis(std::bitset< 3 > s=0)
Make set number s, where 0 <= s < 8.
Definition raviartthomas02dlocalbasis.hh:33
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas02dlocalbasis.hh:69
│ │ │ │ - │ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ +
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ +
The local dual p1 finite element on simplices.
Definition dualp1.hh:35
│ │ │ │ +
Definition dualpq1factory.hh:19
│ │ │ │ +
Dune::DualP1LocalFiniteElement< D, R, dim, faceDual > DualP1
Definition dualpq1factory.hh:21
│ │ │ │ +
~DualPQ1LocalFiniteElementCache()
Definition dualpq1factory.hh:31
│ │ │ │ +
FEMap cache_
Definition dualpq1factory.hh:67
│ │ │ │ +
DualP1::Traits::LocalBasisType::Traits T
Definition dualpq1factory.hh:23
│ │ │ │ +
static FE * create(const Dune::GeometryType &gt)
create finite element for given GeometryType
Definition dualpq1factory.hh:40
│ │ │ │ +
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition dualpq1factory.hh:29
│ │ │ │ +
const FiniteElementType & get(const Dune::GeometryType &gt) const
Get local finite element for given GeometryType.
Definition dualpq1factory.hh:50
│ │ │ │ +
Dune::LocalFiniteElementVirtualInterface< T > FE
Definition dualpq1factory.hh:24
│ │ │ │ +
std::map< Dune::GeometryType, FE * > FEMap
Definition dualpq1factory.hh:25
│ │ │ │ +
Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual > DualQ1
Definition dualpq1factory.hh:22
│ │ │ │ +
The local dual Q1 finite element on cubes.
Definition dualq1.hh:42
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,149 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ -raviartthomas02dlocalbasis.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ +dualpq1factory.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ -6#define DUNE_RT0TRIANGLELOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -27 { │ │ │ │ │ -28 public: │ │ │ │ │ -29 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,2,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_3 _R_T_0_2_D_L_o_c_a_l_B_a_s_i_s (std::bitset<3> s = 0) │ │ │ │ │ -34 { │ │ │ │ │ -35 for (int i=0; i<3; i++) │ │ │ │ │ -36 sign_[i] = s[i] ? -1.0 : 1.0; │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ │ +16 │ │ │ │ │ +17template │ │ │ │ │ +_1_8class _D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +19{ │ │ │ │ │ +20protected: │ │ │ │ │ +_2_1 typedef _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> _D_u_a_l_P_1; │ │ │ │ │ +_2_2 typedef _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> _D_u_a_l_Q_1; │ │ │ │ │ +_2_3 typedef typename _D_u_a_l_P_1_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s _T; │ │ │ │ │ +_2_4 typedef _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_E; │ │ │ │ │ +_2_5 typedef std::map _F_E_M_a_p; │ │ │ │ │ +26 │ │ │ │ │ +27public: │ │ │ │ │ +_2_9 typedef _F_E _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ +30 │ │ │ │ │ +_3_1 _~_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() │ │ │ │ │ +32 { │ │ │ │ │ +33 typename FEMap::iterator it = _c_a_c_h_e__.begin(); │ │ │ │ │ +34 typename FEMap::iterator end = _c_a_c_h_e__.end(); │ │ │ │ │ +35 for(; it!=end; ++it) │ │ │ │ │ +36 delete it->second; │ │ │ │ │ 37 } │ │ │ │ │ 38 │ │ │ │ │ -_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ +_4_0 static _F_E* _c_r_e_a_t_e(const Dune::GeometryType& gt) │ │ │ │ │ 41 { │ │ │ │ │ -42 return 3; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -47 std::vector& out) const │ │ │ │ │ -48 { │ │ │ │ │ -49 out.resize(3); │ │ │ │ │ -50 out[0] = {sign_[0]*in[0], sign_[0]*(in[1]-D(1))}; │ │ │ │ │ -51 out[1] = {sign_[1]*(in[0]-D(1)), sign_[1]*in[1]}; │ │ │ │ │ -52 out[2] = {sign_[2]*in[0], sign_[2]*in[1]}; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -56 inline void │ │ │ │ │ -_5_7 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -58 std::vector& out) const // return value │ │ │ │ │ -59 { │ │ │ │ │ -60 out.resize(3); │ │ │ │ │ -61 for (int i=0; i<3; i++) │ │ │ │ │ -62 { │ │ │ │ │ -63 out[i][0] = {sign_[i], 0}; │ │ │ │ │ -64 out[i][1] = { 0, sign_[i]}; │ │ │ │ │ -65 } │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_6_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -70 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -71 std::vector& out) const // return value │ │ │ │ │ -72 { │ │ │ │ │ -73 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -74 if (totalOrder == 0) { │ │ │ │ │ -75 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -76 } else if (totalOrder == 1) { │ │ │ │ │ -77 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -78 out.resize(_s_i_z_e()); │ │ │ │ │ -79 │ │ │ │ │ -80 for (int i=0; i<3; i++) │ │ │ │ │ -81 { │ │ │ │ │ -82 out[i][direction] = sign_[i]; │ │ │ │ │ -83 out[i][1-direction] = 0; │ │ │ │ │ -84 } │ │ │ │ │ -85 } else { │ │ │ │ │ -86 out.resize(_s_i_z_e()); │ │ │ │ │ -87 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -88 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ -89 out[i][j] = 0; │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -92 } │ │ │ │ │ -93 │ │ │ │ │ -_9_5 unsigned int _o_r_d_e_r () const │ │ │ │ │ -96 { │ │ │ │ │ -97 return 1; │ │ │ │ │ -98 } │ │ │ │ │ -99 │ │ │ │ │ -100 private: │ │ │ │ │ -101 │ │ │ │ │ -102 // Signs of the edge normals │ │ │ │ │ -103 std::array sign_; │ │ │ │ │ -104 }; │ │ │ │ │ -105} │ │ │ │ │ -106#endif │ │ │ │ │ +42 if (gt.isSimplex()) │ │ │ │ │ +43 return new _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_D_u_a_l_P_1_>(_D_u_a_l_P_1()); │ │ │ │ │ +44 if (gt.isCube()) │ │ │ │ │ +45 return new _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_D_u_a_l_Q_1_>(_D_u_a_l_Q_1()); │ │ │ │ │ +46 return 0; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +_5_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t(const Dune::GeometryType& gt) const │ │ │ │ │ +51 { │ │ │ │ │ +52 typename FEMap::const_iterator it = _c_a_c_h_e__.find(gt); │ │ │ │ │ +53 if (it==_c_a_c_h_e__.end()) │ │ │ │ │ +54 { │ │ │ │ │ +55 _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* fe = _c_r_e_a_t_e(gt); │ │ │ │ │ +56 │ │ │ │ │ +57 if (fe==0) │ │ │ │ │ +58 DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element │ │ │ │ │ +available for geometry type " << gt); │ │ │ │ │ +59 │ │ │ │ │ +60 _c_a_c_h_e__[gt] = fe; │ │ │ │ │ +61 return *fe; │ │ │ │ │ +62 } │ │ │ │ │ +63 return *(it->second); │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +66protected: │ │ │ │ │ +_6_7 mutable _F_E_M_a_p _c_a_c_h_e__; │ │ │ │ │ +68}; │ │ │ │ │ +69 │ │ │ │ │ +70} // namespace Dune │ │ │ │ │ +71 │ │ │ │ │ +72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ +_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, │ │ │ │ │ -2 >, Dune::FieldMatrix< R, 2, 2 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT02DLocalBasis(std::bitset< 3 > s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 8. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalbasis.hh:69 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local finite elements with functions │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping a finite element using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local dual p1 finite element on simplices. │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:19 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_D_u_a_l_P_1 │ │ │ │ │ +Dune::DualP1LocalFiniteElement< D, R, dim, faceDual > DualP1 │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_~_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +~DualPQ1LocalFiniteElementCache() │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_a_c_h_e__ │ │ │ │ │ +FEMap cache_ │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_T │ │ │ │ │ +DualP1::Traits::LocalBasisType::Traits T │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_r_e_a_t_e │ │ │ │ │ +static FE * create(const Dune::GeometryType >) │ │ │ │ │ +create finite element for given GeometryType │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +FE FiniteElementType │ │ │ │ │ +Type of the finite elements stored in this cache. │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ +const FiniteElementType & get(const Dune::GeometryType >) const │ │ │ │ │ +Get local finite element for given GeometryType. │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E │ │ │ │ │ +Dune::LocalFiniteElementVirtualInterface< T > FE │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E_M_a_p │ │ │ │ │ +std::map< Dune::GeometryType, FE * > FEMap │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_D_u_a_l_Q_1 │ │ │ │ │ +Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual > DualQ1 │ │ │ │ │ +DDeeffiinniittiioonn dualpq1factory.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local dual Q1 finite element on cubes. │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:42 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: dualq1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas02dlocalinterpolation.hh File Reference
│ │ │ │ +
dualq1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cmath>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <vector>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +#include "dualq1/dualq1localbasis.hh"
│ │ │ │ +#include "dualq1/dualq1localcoefficients.hh"
│ │ │ │ +#include "dualq1/dualq1localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT02DLocalInterpolation< LB >
class  Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual >
 The local dual Q1 finite element on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas02dlocalinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +dualq1.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │ +  The local dual Q1 finite element on cubes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00290_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas02dlocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: dualq1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,94 +70,264 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas02dlocalinterpolation.hh
│ │ │ │ +
dualq1.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_RT02DLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cmath>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <bitset>
│ │ │ │ -
11#include <vector>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
18 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
20 {
│ │ │ │ -
21 public:
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
15#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
22
│ │ │ │ -
│ │ │ │ -
24 RT02DLocalInterpolation (std::bitset<3> s = 0)
│ │ │ │ -
25 {
│ │ │ │ -
26 using std::sqrt;
│ │ │ │ -
27 for (std::size_t i=0; i<sign_.size(); i++)
│ │ │ │ -
28 sign_[i] = (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
29
│ │ │ │ -
30 m_[0] = {0.5, 0.0};
│ │ │ │ -
31 m_[1] = {0.0, 0.5};
│ │ │ │ -
32 m_[2] = {0.5, 0.5};
│ │ │ │ -
33 n_[0] = {0.0, -1.0};
│ │ │ │ -
34 n_[1] = {-1.0, 0.0};
│ │ │ │ -
35 n_[2] = {1.0/sqrt(2.0), 1.0/sqrt(2.0)};
│ │ │ │ -
36 c_[0] = ( 0.5*n_[0][0] - 1.0*n_[0][1]);
│ │ │ │ -
37 c_[1] = (-1.0*n_[1][0] + 0.5*n_[1][1]);
│ │ │ │ -
38 c_[2] = ( 0.5*n_[2][0] + 0.5*n_[2][1]);
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
41 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
42 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
43 {
│ │ │ │ -
44 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
45
│ │ │ │ -
46 out.resize(3);
│ │ │ │ -
47
│ │ │ │ -
48 for (int i=0; i<3; i++)
│ │ │ │ -
49 {
│ │ │ │ -
50 auto y = f(m_[i]);
│ │ │ │ -
51 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1])*sign_[i]/c_[i];
│ │ │ │ -
52 }
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 private:
│ │ │ │ -
56 // Edge orientations
│ │ │ │ -
57 std::array<typename LB::Traits::RangeFieldType,3> sign_;
│ │ │ │ -
58 // Edge midpoints of the reference triangle
│ │ │ │ -
59 std::array<typename LB::Traits::DomainType,3> m_;
│ │ │ │ -
60 // Unit outer normals of the reference triangle
│ │ │ │ -
61 std::array<typename LB::Traits::DomainType,3> n_;
│ │ │ │ -
62 // Inverse triangle edge length
│ │ │ │ -
63 std::array<typename LB::Traits::RangeFieldType,3> c_;
│ │ │ │ -
64 };
│ │ │ │ -
│ │ │ │ -
65}
│ │ │ │ -
66
│ │ │ │ -
67#endif
│ │ │ │ +
23namespace Dune
│ │ │ │ +
24{
│ │ │ │ +
40 template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
42 {
│ │ │ │ +
43 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
48
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
52 {
│ │ │ │ +
53 if (faceDual)
│ │ │ │ +
54 setupFaceDualCoefficients();
│ │ │ │ +
55 else
│ │ │ │ +
56 setupDualCoefficients();
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ +
61 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
62 {
│ │ │ │ +
63 return basis;
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
69 {
│ │ │ │ +
70 return coefficients;
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
76 {
│ │ │ │ +
77 return interpolation;
│ │ │ │ +
78 }
│ │ │ │ +
│ │ │ │ +
79
│ │ │ │ +
│ │ │ │ +
81 unsigned int size () const
│ │ │ │ +
82 {
│ │ │ │ +
83 return basis.size();
│ │ │ │ +
84 }
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
│ │ │ │ +
88 static constexpr GeometryType type ()
│ │ │ │ +
89 {
│ │ │ │ +
90 return GeometryTypes::cube(dim);
│ │ │ │ +
91 }
│ │ │ │ +
│ │ │ │ +
92
│ │ │ │ +
93 private:
│ │ │ │ +
95 void setupFaceDualCoefficients();
│ │ │ │ +
96
│ │ │ │ +
98 void setupDualCoefficients();
│ │ │ │ +
99
│ │ │ │ + │ │ │ │ +
101 DualQ1LocalCoefficients<dim> coefficients;
│ │ │ │ + │ │ │ │ +
103 };
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
105 template<class D, class R, int dim, bool faceDual>
│ │ │ │ +
106 void DualQ1LocalFiniteElement<D,R,dim,faceDual>::setupDualCoefficients()
│ │ │ │ +
107 {
│ │ │ │ +
108
│ │ │ │ +
109 const int size = 1 <<dim;
│ │ │ │ +
110 std::array<Dune::FieldVector<R, size>, size> coeffs;
│ │ │ │ +
111
│ │ │ │ +
112 // dual basis functions are linear combinations of Lagrange elements
│ │ │ │ +
113 // compute these coefficients here because the basis and the local interpolation needs them
│ │ │ │ +
114 const auto& quad = Dune::QuadratureRules<D,dim>::rule(type(), 2*dim);
│ │ │ │ +
115
│ │ │ │ +
116 // assemble mass matrix on the reference element
│ │ │ │ +
117 Dune::FieldMatrix<R, size, size> massMat;
│ │ │ │ +
118 massMat = 0;
│ │ │ │ +
119
│ │ │ │ +
120 // and the integrals of the lagrange shape functions
│ │ │ │ +
121 std::vector<Dune::FieldVector<R,1> > integral(size);
│ │ │ │ +
122 for (int i=0; i<size; i++)
│ │ │ │ +
123 integral[i] = 0;
│ │ │ │ +
124
│ │ │ │ +
125 Dune::Impl::LagrangeCubeLocalBasis<D,R,dim,1> q1Basis;
│ │ │ │ +
126 for(size_t pt=0; pt<quad.size(); pt++) {
│ │ │ │ +
127
│ │ │ │ +
128 const Dune::FieldVector<D ,dim>& pos = quad[pt].position();
│ │ │ │ +
129 std::vector<Dune::FieldVector<R,1> > q1Values(size);
│ │ │ │ +
130 q1Basis.evaluateFunction(pos,q1Values);
│ │ │ │ +
131
│ │ │ │ +
132 D weight = quad[pt].weight();
│ │ │ │ +
133
│ │ │ │ +
134 for (int k=0; k<size; k++) {
│ │ │ │ +
135 integral[k] += q1Values[k]*weight;
│ │ │ │ +
136
│ │ │ │ +
137 for (int l=0; l<=k; l++)
│ │ │ │ +
138 massMat[k][l] += weight*(q1Values[k]*q1Values[l]);
│ │ │ │ +
139 }
│ │ │ │ +
140 }
│ │ │ │ +
141
│ │ │ │ +
142 // make matrix symmetric
│ │ │ │ +
143 for (int i=0; i<size-1; i++)
│ │ │ │ +
144 for (int j=i+1; j<size; j++)
│ │ │ │ +
145 massMat[i][j] = massMat[j][i];
│ │ │ │ +
146
│ │ │ │ +
147 //solve for the coefficients
│ │ │ │ +
148
│ │ │ │ +
149 for (int i=0; i<size; i++) {
│ │ │ │ +
150
│ │ │ │ +
151 Dune::FieldVector<R, size> rhs(0);
│ │ │ │ +
152 rhs[i] = integral[i];
│ │ │ │ +
153
│ │ │ │ +
154 coeffs[i] = 0;
│ │ │ │ +
155 massMat.solve(coeffs[i] ,rhs);
│ │ │ │ +
156
│ │ │ │ +
157 }
│ │ │ │ +
158
│ │ │ │ +
159 basis.setCoefficients(coeffs);
│ │ │ │ +
160 interpolation.setCoefficients(coeffs);
│ │ │ │ +
161 }
│ │ │ │ +
162
│ │ │ │ +
163 template<class D, class R, int dim, bool faceDual>
│ │ │ │ +
164 void DualQ1LocalFiniteElement<D,R,dim,faceDual>::setupFaceDualCoefficients()
│ │ │ │ +
165 {
│ │ │ │ +
166
│ │ │ │ +
167 const int size = 1 <<dim;
│ │ │ │ +
168 std::array<Dune::FieldVector<R, size>, size> coeffs;
│ │ │ │ +
169
│ │ │ │ +
170 // dual basis functions are linear combinations of Lagrange elements
│ │ │ │ +
171 Dune::Impl::LagrangeCubeLocalBasis<D,R,dim,1> q1Basis;
│ │ │ │ +
172
│ │ │ │ +
173 const auto& refElement = Dune::ReferenceElements<D,dim>::general(type());
│ │ │ │ +
174
│ │ │ │ +
175 // loop over faces
│ │ │ │ +
176 for (int i=0; i<refElement.size(1);i++) {
│ │ │ │ +
177
│ │ │ │ +
178 const auto& quad = Dune::QuadratureRules<D,dim-1>::rule(refElement.type(i,1),2*dim);
│ │ │ │ +
179
│ │ │ │ +
180 // for each face assemble the mass matrix over the face of all
│ │ │ │ +
181 // non-vanishing basis functions,
│ │ │ │ +
182 // for cubes refElement.size(i,1,dim)=size/2
│ │ │ │ +
183 Dune::FieldMatrix<R, size/2, size/2> massMat;
│ │ │ │ +
184 massMat = 0;
│ │ │ │ +
185
│ │ │ │ +
186 // get geometry
│ │ │ │ +
187 const auto& geometry = refElement.template geometry<1>(i);
│ │ │ │ +
188
│ │ │ │ +
189 // and the integrals of the lagrange shape functions
│ │ │ │ +
190 std::vector<Dune::FieldVector<R,1> > integral(size/2);
│ │ │ │ +
191 for (int k=0; k<size/2; k++)
│ │ │ │ +
192 integral[k] = 0;
│ │ │ │ +
193
│ │ │ │ +
194 for(size_t pt=0; pt<quad.size(); pt++) {
│ │ │ │ +
195
│ │ │ │ +
196 const auto& pos = quad[pt].position();
│ │ │ │ +
197 const auto& elementPos = geometry.global(pos);
│ │ │ │ +
198
│ │ │ │ +
199 std::vector<Dune::FieldVector<R,1> > q1Values(size);
│ │ │ │ +
200 q1Basis.evaluateFunction(elementPos,q1Values);
│ │ │ │ +
201
│ │ │ │ +
202 D weight = quad[pt].weight();
│ │ │ │ +
203
│ │ │ │ +
204 for (int k=0; k<refElement.size(i,1,dim); k++) {
│ │ │ │ +
205 int row = refElement.subEntity(i,1,k,dim);
│ │ │ │ +
206 integral[k] += q1Values[row]*weight;
│ │ │ │ +
207
│ │ │ │ +
208 for (int l=0; l<refElement.size(i,1,dim); l++) {
│ │ │ │ +
209 int col = refElement.subEntity(i,1,l,dim);
│ │ │ │ +
210 massMat[k][l] += weight*(q1Values[row]*q1Values[col]);
│ │ │ │ +
211 }
│ │ │ │ +
212 }
│ │ │ │ +
213 }
│ │ │ │ +
214
│ │ │ │ +
215 // solve for the coefficients
│ │ │ │ +
216 // note that we possibly overwrite coefficients for neighbouring faces
│ │ │ │ +
217 // this is okay since the coefficients are symmetric
│ │ │ │ +
218 for (int l=0; l<refElement.size(i,1,dim); l++) {
│ │ │ │ +
219
│ │ │ │ +
220 int row = refElement.subEntity(i,1,l,dim);
│ │ │ │ +
221 Dune::FieldVector<R, size/2> rhs(0);
│ │ │ │ +
222 rhs[l] = integral[l];
│ │ │ │ +
223
│ │ │ │ +
224 Dune::FieldVector<R, size/2> x(0);
│ │ │ │ +
225 massMat.solve(x ,rhs);
│ │ │ │ +
226
│ │ │ │ +
227 for (int k=0; k<refElement.size(i,1,dim); k++) {
│ │ │ │ +
228 int col = refElement.subEntity(i,1,k,dim);
│ │ │ │ +
229 coeffs[row][col]=x[k];
│ │ │ │ +
230 }
│ │ │ │ +
231 }
│ │ │ │ +
232 }
│ │ │ │ +
233
│ │ │ │ +
234 basis.setCoefficients(coeffs);
│ │ │ │ +
235 interpolation.setCoefficients(coeffs);
│ │ │ │ +
236 }
│ │ │ │ +
237}
│ │ │ │ +
238#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition raviartthomas02dlocalinterpolation.hh:20
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas02dlocalinterpolation.hh:42
│ │ │ │ -
RT02DLocalInterpolation(std::bitset< 3 > s=0)
Constructor with given set of edge orientations.
Definition raviartthomas02dlocalinterpolation.hh:24
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
The local dual Q1 finite element on cubes.
Definition dualq1.hh:42
│ │ │ │ +
LocalFiniteElementTraits< DualQ1LocalBasis< D, R, dim >, DualQ1LocalCoefficients< dim >, DualQ1LocalInterpolation< dim, DualQ1LocalBasis< D, R, dim > > > Traits
Definition dualq1.hh:47
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition dualq1.hh:81
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition dualq1.hh:75
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition dualq1.hh:61
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition dualq1.hh:68
│ │ │ │ +
DualQ1LocalFiniteElement()
Definition dualq1.hh:51
│ │ │ │ +
static constexpr GeometryType type()
Definition dualq1.hh:88
│ │ │ │ +
Dual Lagrange shape functions of order 1 on the reference cube.
Definition dualq1localbasis.hh:30
│ │ │ │ +
Layout map for dual Q1 elements.
Definition dualq1localcoefficients.hh:26
│ │ │ │ +
Definition dualq1localinterpolation.hh:22
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,87 +1,278 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d │ │ │ │ │ -raviartthomas02dlocalinterpolation.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ +dualq1.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_RT02DLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -18 template │ │ │ │ │ -_1_9 class _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -20 { │ │ │ │ │ -21 public: │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +19#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +20#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +21#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 22 │ │ │ │ │ -_2_4 _R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (std::bitset<3> s = 0) │ │ │ │ │ -25 { │ │ │ │ │ -26 using std::sqrt; │ │ │ │ │ -27 for (std::size_t i=0; i │ │ │ │ │ -_4_2 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -43 { │ │ │ │ │ -44 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -45 │ │ │ │ │ -46 out.resize(3); │ │ │ │ │ -47 │ │ │ │ │ -48 for (int i=0; i<3; i++) │ │ │ │ │ -49 { │ │ │ │ │ -50 auto y = f(m_[i]); │ │ │ │ │ -51 out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1])*sign_[i]/c_[i]; │ │ │ │ │ -52 } │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -55 private: │ │ │ │ │ -56 // Edge orientations │ │ │ │ │ -57 std::array sign_; │ │ │ │ │ -58 // Edge midpoints of the reference triangle │ │ │ │ │ -59 std::array m_; │ │ │ │ │ -60 // Unit outer normals of the reference triangle │ │ │ │ │ -61 std::array n_; │ │ │ │ │ -62 // Inverse triangle edge length │ │ │ │ │ -63 std::array c_; │ │ │ │ │ -64 }; │ │ │ │ │ -65} │ │ │ │ │ -66 │ │ │ │ │ -67#endif │ │ │ │ │ +23namespace _D_u_n_e │ │ │ │ │ +24{ │ │ │ │ │ +40 template │ │ │ │ │ +_4_1 class _D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +42 { │ │ │ │ │ +43 public: │ │ │ │ │ +46 typedef │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>,_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>, │ │ │ │ │ +_4_7 _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > > _T_r_a_i_t_s; │ │ │ │ │ +48 │ │ │ │ │ +_5_1 _D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +52 { │ │ │ │ │ +53 if (faceDual) │ │ │ │ │ +54 setupFaceDualCoefficients(); │ │ │ │ │ +55 else │ │ │ │ │ +56 setupDualCoefficients(); │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return basis; │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_6_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +69 { │ │ │ │ │ +70 return coefficients; │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +_7_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +76 { │ │ │ │ │ +77 return interpolation; │ │ │ │ │ +78 } │ │ │ │ │ +79 │ │ │ │ │ +_8_1 unsigned int _s_i_z_e () const │ │ │ │ │ +82 { │ │ │ │ │ +83 return basis.size(); │ │ │ │ │ +84 } │ │ │ │ │ +85 │ │ │ │ │ +_8_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +89 { │ │ │ │ │ +90 return GeometryTypes::cube(dim); │ │ │ │ │ +91 } │ │ │ │ │ +92 │ │ │ │ │ +93 private: │ │ │ │ │ +95 void setupFaceDualCoefficients(); │ │ │ │ │ +96 │ │ │ │ │ +98 void setupDualCoefficients(); │ │ │ │ │ +99 │ │ │ │ │ +100 _D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ +101 _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_> coefficients; │ │ │ │ │ +102 _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > interpolation; │ │ │ │ │ +103 }; │ │ │ │ │ +104 │ │ │ │ │ +105 template │ │ │ │ │ +106 void DualQ1LocalFiniteElement::setupDualCoefficients() │ │ │ │ │ +107 { │ │ │ │ │ +108 │ │ │ │ │ +109 const int size = 1 <, size> coeffs; │ │ │ │ │ +111 │ │ │ │ │ +112 // dual basis functions are linear combinations of Lagrange elements │ │ │ │ │ +113 // compute these coefficients here because the basis and the local │ │ │ │ │ +interpolation needs them │ │ │ │ │ +114 const auto& quad = Dune::QuadratureRules::rule(type(), 2*dim); │ │ │ │ │ +115 │ │ │ │ │ +116 // assemble mass matrix on the reference element │ │ │ │ │ +117 Dune::FieldMatrix massMat; │ │ │ │ │ +118 massMat = 0; │ │ │ │ │ +119 │ │ │ │ │ +120 // and the integrals of the lagrange shape functions │ │ │ │ │ +121 std::vector > integral(size); │ │ │ │ │ +122 for (int i=0; i q1Basis; │ │ │ │ │ +126 for(size_t pt=0; pt& pos = quad[pt].position(); │ │ │ │ │ +129 std::vector > q1Values(size); │ │ │ │ │ +130 q1Basis.evaluateFunction(pos,q1Values); │ │ │ │ │ +131 │ │ │ │ │ +132 D weight = quad[pt].weight(); │ │ │ │ │ +133 │ │ │ │ │ +134 for (int k=0; k rhs(0); │ │ │ │ │ +152 rhs[i] = integral[i]; │ │ │ │ │ +153 │ │ │ │ │ +154 coeffs[i] = 0; │ │ │ │ │ +155 massMat.solve(coeffs[i] ,rhs); │ │ │ │ │ +156 │ │ │ │ │ +157 } │ │ │ │ │ +158 │ │ │ │ │ +159 basis.setCoefficients(coeffs); │ │ │ │ │ +160 interpolation.setCoefficients(coeffs); │ │ │ │ │ +161 } │ │ │ │ │ +162 │ │ │ │ │ +163 template │ │ │ │ │ +164 void DualQ1LocalFiniteElement::setupFaceDualCoefficients │ │ │ │ │ +() │ │ │ │ │ +165 { │ │ │ │ │ +166 │ │ │ │ │ +167 const int size = 1 <, size> coeffs; │ │ │ │ │ +169 │ │ │ │ │ +170 // dual basis functions are linear combinations of Lagrange elements │ │ │ │ │ +171 Dune::Impl::LagrangeCubeLocalBasis q1Basis; │ │ │ │ │ +172 │ │ │ │ │ +173 const auto& refElement = Dune::ReferenceElements::general(type()); │ │ │ │ │ +174 │ │ │ │ │ +175 // loop over faces │ │ │ │ │ +176 for (int i=0; i::rule(refElement.type │ │ │ │ │ +(i,1),2*dim); │ │ │ │ │ +179 │ │ │ │ │ +180 // for each face assemble the mass matrix over the face of all │ │ │ │ │ +181 // non-vanishing basis functions, │ │ │ │ │ +182 // for cubes refElement.size(i,1,dim)=size/2 │ │ │ │ │ +183 Dune::FieldMatrix massMat; │ │ │ │ │ +184 massMat = 0; │ │ │ │ │ +185 │ │ │ │ │ +186 // get geometry │ │ │ │ │ +187 const auto& geometry = refElement.template geometry<1>(i); │ │ │ │ │ +188 │ │ │ │ │ +189 // and the integrals of the lagrange shape functions │ │ │ │ │ +190 std::vector > integral(size/2); │ │ │ │ │ +191 for (int k=0; k > q1Values(size); │ │ │ │ │ +200 q1Basis.evaluateFunction(elementPos,q1Values); │ │ │ │ │ +201 │ │ │ │ │ +202 D weight = quad[pt].weight(); │ │ │ │ │ +203 │ │ │ │ │ +204 for (int k=0; k rhs(0); │ │ │ │ │ +222 rhs[l] = integral[l]; │ │ │ │ │ +223 │ │ │ │ │ +224 Dune::FieldVector x(0); │ │ │ │ │ +225 massMat.solve(x ,rhs); │ │ │ │ │ +226 │ │ │ │ │ +227 for (int k=0; k &out) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_2_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT02DLocalInterpolation(std::bitset< 3 > s=0) │ │ │ │ │ -Constructor with given set of edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas02dlocalinterpolation.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local dual Q1 finite element on cubes. │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< DualQ1LocalBasis< D, R, dim >, │ │ │ │ │ +DualQ1LocalCoefficients< dim >, DualQ1LocalInterpolation< dim, │ │ │ │ │ +DualQ1LocalBasis< D, R, dim > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:81 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DualQ1LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn dualq1.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Dual Lagrange shape functions of order 1 on the reference cube. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for dual Q1 elements. │ │ │ │ │ +DDeeffiinniittiioonn dualq1localcoefficients.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn dualq1localinterpolation.hh:22 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3d.hh File Reference │ │ │ │ +dune-localfunctions: dualp1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas1cube3d.hh File Reference
│ │ │ │ +
dualp1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ -#include "../common/localfiniteelementtraits.hh"
│ │ │ │ -#include "raviartthomas1cube3d/raviartthomas1cube3dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas1cube3d/raviartthomas1cube3dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas1cube3d/raviartthomas1cube3dlocalinterpolation.hh"
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "dualp1/dualp1localbasis.hh"
│ │ │ │ +#include "dualp1/dualp1localcoefficients.hh"
│ │ │ │ +#include "dualp1/dualp1localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT1Cube3DLocalFiniteElement< D, R >
 First order Raviart-Thomas shape functions on cubes. More...
class  Dune::DualP1LocalFiniteElement< D, R, dim, faceDual >
 The local dual p1 finite element on simplices. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas1cube3d.hh File Reference │ │ │ │ │ +dualp1.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  First order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │ +  The local dual p1 finite element on simplices. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00293_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas1cube3d.hh Source File │ │ │ │ +dune-localfunctions: dualp1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,123 +70,118 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas1cube3d.hh
│ │ │ │ +
dualp1.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │
7
│ │ │ │
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10#include "../common/localfiniteelementtraits.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │ -
25 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ +
17
│ │ │ │ +
33 template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
41
│ │ │ │
│ │ │ │ - │ │ │ │ -
45 basis(s),
│ │ │ │ -
46 interpolation(s)
│ │ │ │ -
47 {}
│ │ │ │ + │ │ │ │ +
45 {}
│ │ │ │
│ │ │ │ -
48
│ │ │ │ +
46
│ │ │ │
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │
50 {
│ │ │ │
51 return basis;
│ │ │ │
52 }
│ │ │ │
│ │ │ │
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return coefficients;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
60 {
│ │ │ │ -
61 return interpolation;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
65 unsigned int size () const
│ │ │ │ -
66 {
│ │ │ │ -
67 return basis.size();
│ │ │ │ -
68 }
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::hexahedron;
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77 RT1Cube3DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
79 };
│ │ │ │ -
│ │ │ │ -
80}
│ │ │ │ -
81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 return coefficients;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
64 {
│ │ │ │ +
65 return interpolation;
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
69 unsigned int size () const
│ │ │ │ +
70 {
│ │ │ │ +
71 return basis.size();
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
73
│ │ │ │ +
│ │ │ │ +
76 static constexpr GeometryType type ()
│ │ │ │ +
77 {
│ │ │ │ +
78 return GeometryTypes::simplex(dim);
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
81 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
85 };
│ │ │ │ +
│ │ │ │ +
86
│ │ │ │ +
87
│ │ │ │ +
88
│ │ │ │ +
89}
│ │ │ │ +
90
│ │ │ │ +
91#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on cubes.
Definition raviartthomas1cube3d.hh:27
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas1cube3d.hh:59
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas1cube3d.hh:54
│ │ │ │ -
RT1Cube3DLocalFiniteElement()
Standard constructor.
Definition raviartthomas1cube3d.hh:36
│ │ │ │ -
RT1Cube3DLocalFiniteElement(int s)
Make set number s, where 0 <= s < 64.
Definition raviartthomas1cube3d.hh:44
│ │ │ │ -
LocalFiniteElementTraits< RT1Cube3DLocalBasis< D, R >, RT1Cube3DLocalCoefficients, RT1Cube3DLocalInterpolation< RT1Cube3DLocalBasis< D, R > > > Traits
Definition raviartthomas1cube3d.hh:33
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas1cube3d.hh:65
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas1cube3d.hh:70
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas1cube3d.hh:49
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalbasis.hh:28
│ │ │ │ -
Layout map for Raviart-Thomas-1 elements on quadrilaterals.
Definition raviartthomas1cube3dlocalcoefficients.hh:24
│ │ │ │ -
First order Raviart-Thomas shape functions on the reference hexahedron.
Definition raviartthomas1cube3dlocalinterpolation.hh:24
│ │ │ │ +
The local dual p1 finite element on simplices.
Definition dualp1.hh:35
│ │ │ │ +
DualP1LocalFiniteElement()
Definition dualp1.hh:44
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition dualp1.hh:69
│ │ │ │ +
LocalFiniteElementTraits< DualP1LocalBasis< D, R, dim, faceDual >, DualP1LocalCoefficients< dim >, DualP1LocalInterpolation< dim, DualP1LocalBasis< D, R, dim, faceDual > > > Traits
Definition dualp1.hh:40
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition dualp1.hh:63
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition dualp1.hh:49
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition dualp1.hh:56
│ │ │ │ +
static constexpr GeometryType type()
Definition dualp1.hh:76
│ │ │ │ +
Dual Lagrange shape functions on the simplex.
Definition dualp1localbasis.hh:35
│ │ │ │ +
Local coefficients for dual simplex P1 elements.
Definition dualp1localcoefficients.hh:24
│ │ │ │ +
Definition dualp1localinterpolation.hh:17
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,136 +1,130 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas1cube3d.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ +dualp1.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include "../common/localfiniteelementtraits.hh" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -27 { │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -31 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -32 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ -38 │ │ │ │ │ -_4_4 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -45 basis(s), │ │ │ │ │ -46 interpolation(s) │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ +17 │ │ │ │ │ +33 template │ │ │ │ │ +_3_4 class _D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +35 { │ │ │ │ │ +36 public: │ │ │ │ │ +39 typedef │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_>,_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>, │ │ │ │ │ +_4_0 _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> > > _T_r_a_i_t_s; │ │ │ │ │ +41 │ │ │ │ │ +_4_4 _D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +45 {} │ │ │ │ │ +46 │ │ │ │ │ _4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ 50 { │ │ │ │ │ 51 return basis; │ │ │ │ │ 52 } │ │ │ │ │ 53 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return coefficients; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -60 { │ │ │ │ │ -61 return interpolation; │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_6_5 unsigned int _s_i_z_e () const │ │ │ │ │ -66 { │ │ │ │ │ -67 return basis.size(); │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::hexahedron; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -77 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -78 _R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -79 }; │ │ │ │ │ -80} │ │ │ │ │ -81#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS1_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return coefficients; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +64 { │ │ │ │ │ +65 return interpolation; │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ +70 { │ │ │ │ │ +71 return basis.size(); │ │ │ │ │ +72 } │ │ │ │ │ +73 │ │ │ │ │ +_7_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +77 { │ │ │ │ │ +78 return GeometryTypes::simplex(dim); │ │ │ │ │ +79 } │ │ │ │ │ +80 │ │ │ │ │ +81 private: │ │ │ │ │ +82 _D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> basis; │ │ │ │ │ +83 _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_> coefficients; │ │ │ │ │ +84 _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> > │ │ │ │ │ +interpolation; │ │ │ │ │ +85 }; │ │ │ │ │ +86 │ │ │ │ │ +87 │ │ │ │ │ +88 │ │ │ │ │ +89} │ │ │ │ │ +90 │ │ │ │ │ +91#endif │ │ │ │ │ +_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ LB LocalBasisType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ LC LocalCoefficientsType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ LI LocalInterpolationType │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT1Cube3DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT1Cube3DLocalFiniteElement(int s) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT1Cube3DLocalBasis< D, R >, │ │ │ │ │ -RT1Cube3DLocalCoefficients, RT1Cube3DLocalInterpolation< RT1Cube3DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local dual p1 finite element on simplices. │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DualP1LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< DualP1LocalBasis< D, R, dim, faceDual >, │ │ │ │ │ +DualP1LocalCoefficients< dim >, DualP1LocalInterpolation< dim, │ │ │ │ │ +DualP1LocalBasis< D, R, dim, faceDual > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalbasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3dlocalinterpolation.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn dualp1.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Dual Lagrange shape functions on the simplex. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Local coefficients for dual simplex P1 elements. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn dualp1localinterpolation.hh:17 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube3dall.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas0cube3dall.hh File Reference
│ │ │ │ +
dualp1localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ -#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT0Cube3DLocalBasis< D, R >
 
class  Dune::RT0Cube3DLocalInterpolation< LB >
 
class  Dune::RT0Cube3DLocalCoefficients
class  Dune::DualP1LocalCoefficients< dim >
 Local coefficients for dual simplex P1 elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0cube3dall.hh File Reference │ │ │ │ │ +dualp1localcoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ +  Local coefficients for dual simplex P1 elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00296_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube3dall.hh Source File │ │ │ │ +dune-localfunctions: dualp1localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,278 +70,78 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube3dall.hh
│ │ │ │ +
dualp1localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
28 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,3,Dune::FieldVector<R,3>,
│ │ │ │ -
33 Dune::FieldMatrix<R,3,3> > Traits;
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
36 RT0Cube3DLocalBasis (unsigned int s = 0)
│ │ │ │ -
37 {
│ │ │ │ -
38 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
39 if (s&1) sign0 = -1.0;
│ │ │ │ -
40 if (s&2) sign1 = -1.0;
│ │ │ │ -
41 if (s&4) sign2 = -1.0;
│ │ │ │ -
42 if (s&8) sign3 = -1.0;
│ │ │ │ -
43 if (s&16) sign4 = -1.0;
│ │ │ │ -
44 if (s&32) sign5 = -1.0;
│ │ │ │ -
45 }
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
│ │ │ │ -
48 unsigned int size () const
│ │ │ │ -
49 {
│ │ │ │ -
50 return 6;
│ │ │ │ -
51 }
│ │ │ │ -
│ │ │ │ -
52
│ │ │ │ -
│ │ │ │ -
54 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
55 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
56 {
│ │ │ │ -
57 out.resize(6);
│ │ │ │ -
58 out[0][0] = sign0*(in[0]-1.0); out[0][1]=0.0; out[0][2]=0.0;
│ │ │ │ -
59 out[1][0] = sign1*(in[0]); out[1][1]=0.0; out[1][2]=0.0;
│ │ │ │ -
60 out[2][0] = 0.0; out[2][1]=sign2*(in[1]-1.0); out[2][2]=0.0;
│ │ │ │ -
61 out[3][0] = 0.0; out[3][1]=sign3*(in[1]); out[3][2]=0.0;
│ │ │ │ -
62 out[4][0] = 0.0; out[4][1]=0.0; out[4][2]=sign4*(in[2]-1.0);
│ │ │ │ -
63 out[5][0] = 0.0; out[5][1]=0.0; out[5][2]=sign5*(in[2]);
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
67 inline void
│ │ │ │ -
│ │ │ │ -
68 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
69 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
70 {
│ │ │ │ -
71 out.resize(6);
│ │ │ │ -
72 out[0][0][0] = sign0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
73 out[0][1][0] = 0; out[0][1][1] = 0; out[0][1][2] = 0;
│ │ │ │ -
74 out[0][2][0] = 0; out[0][2][1] = 0; out[0][2][2] = 0;
│ │ │ │ -
75
│ │ │ │ -
76 out[1][0][0] = sign1; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
77 out[1][1][0] = 0; out[1][1][1] = 0; out[1][1][2] = 0;
│ │ │ │ -
78 out[1][2][0] = 0; out[1][2][1] = 0; out[1][2][2] = 0;
│ │ │ │ -
79
│ │ │ │ -
80 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
81 out[2][1][0] = 0; out[2][1][1] = sign2; out[2][1][2] = 0;
│ │ │ │ -
82 out[2][2][0] = 0; out[2][2][1] = 0; out[2][2][2] = 0;
│ │ │ │ -
83
│ │ │ │ -
84 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ -
85 out[3][1][0] = 0; out[3][1][1] = sign3; out[3][1][2] = 0;
│ │ │ │ -
86 out[3][2][0] = 0; out[3][2][1] = 0; out[3][2][2] = 0;
│ │ │ │ -
87
│ │ │ │ -
88 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
89 out[4][1][0] = 0; out[4][1][1] = 0; out[4][1][2] = 0;
│ │ │ │ -
90 out[4][2][0] = 0; out[4][2][1] = 0; out[4][2][2] = sign4;
│ │ │ │ -
91
│ │ │ │ -
92 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
93 out[5][1][0] = 0; out[5][1][1] = 0; out[5][1][2] = 0;
│ │ │ │ -
94 out[5][2][0] = 0; out[5][2][1] = 0; out[5][2][2] = sign5;
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
│ │ │ │ -
98 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
99 const typename Traits::DomainType& in, // position
│ │ │ │ -
100 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
101 {
│ │ │ │ -
102 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
103 if (totalOrder == 0) {
│ │ │ │ -
104 evaluateFunction(in, out);
│ │ │ │ -
105 } else if (totalOrder == 1) {
│ │ │ │ -
106 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
107 out.resize(size());
│ │ │ │ -
108
│ │ │ │ -
109 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
110 out[i][0] = out[i][1] = out[i][2] = 0;
│ │ │ │ -
111
│ │ │ │ -
112 switch (direction) {
│ │ │ │ -
113 case 0:
│ │ │ │ -
114 out[0][0] = sign0;
│ │ │ │ -
115 out[1][0] = sign1;
│ │ │ │ -
116 break;
│ │ │ │ -
117 case 1:
│ │ │ │ -
118 out[2][1] = sign2;
│ │ │ │ -
119 out[3][1] = sign3;
│ │ │ │ -
120 break;
│ │ │ │ -
121 case 2:
│ │ │ │ -
122 out[4][2] = sign4;
│ │ │ │ -
123 out[5][2] = sign5;
│ │ │ │ -
124 break;
│ │ │ │ -
125 default:
│ │ │ │ -
126 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
127 }
│ │ │ │ -
128 } else {
│ │ │ │ -
129 out.resize(size());
│ │ │ │ -
130 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
131 for (std::size_t j = 0; j < 2; ++j)
│ │ │ │ -
132 out[i][j] = 0;
│ │ │ │ -
133 }
│ │ │ │ -
134
│ │ │ │ -
135 }
│ │ │ │ -
│ │ │ │ -
136
│ │ │ │ -
│ │ │ │ -
138 unsigned int order () const
│ │ │ │ -
139 {
│ │ │ │ -
140 return 1;
│ │ │ │ -
141 }
│ │ │ │ -
│ │ │ │ -
142
│ │ │ │ -
143 private:
│ │ │ │ -
144 R sign0, sign1, sign2, sign3, sign4, sign5;
│ │ │ │ -
145 };
│ │ │ │ -
│ │ │ │ -
146
│ │ │ │ -
147
│ │ │ │ -
156 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
158 {
│ │ │ │ -
159 public:
│ │ │ │ -
160
│ │ │ │ -
│ │ │ │ -
162 RT0Cube3DLocalInterpolation (unsigned int s = 0)
│ │ │ │ -
163 {
│ │ │ │ -
164 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0;
│ │ │ │ -
165 if (s&1) sign0 *= -1.0;
│ │ │ │ -
166 if (s&2) sign1 *= -1.0;
│ │ │ │ -
167 if (s&4) sign2 *= -1.0;
│ │ │ │ -
168 if (s&8) sign3 *= -1.0;
│ │ │ │ -
169 if (s&16) sign4 *= -1.0;
│ │ │ │ -
170 if (s&32) sign5 *= -1.0;
│ │ │ │ -
171
│ │ │ │ -
172 m0[0] = 0.0; m0[1] = 0.5; m0[2] = 0.5;
│ │ │ │ -
173 m1[0] = 1.0; m1[1] = 0.5; m1[2] = 0.5;
│ │ │ │ -
174 m2[0] = 0.5; m2[1] = 0.0; m2[2] = 0.5;
│ │ │ │ -
175 m3[0] = 0.5; m3[1] = 1.0; m3[2] = 0.5;
│ │ │ │ -
176 m4[0] = 0.5; m4[1] = 0.5; m4[2] = 0.0;
│ │ │ │ -
177 m5[0] = 0.5; m5[1] = 0.5; m5[2] = 1.0;
│ │ │ │ -
178
│ │ │ │ -
179 n0[0] = -1.0; n0[1] = 0.0; n0[2] = 0.0;
│ │ │ │ -
180 n1[0] = 1.0; n1[1] = 0.0; n1[2] = 0.0;
│ │ │ │ -
181 n2[0] = 0.0; n2[1] = -1.0; n2[2] = 0.0;
│ │ │ │ -
182 n3[0] = 0.0; n3[1] = 1.0; n3[2] = 0.0;
│ │ │ │ -
183 n4[0] = 0.0; n4[1] = 0.0; n4[2] =-1.0;
│ │ │ │ -
184 n5[0] = 0.0; n5[1] = 0.0; n5[2] = 1.0;
│ │ │ │ -
185 }
│ │ │ │ -
│ │ │ │ -
186
│ │ │ │ -
187 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
188 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
189 {
│ │ │ │ -
190 // f gives v*outer normal at a point on the edge!
│ │ │ │ -
191
│ │ │ │ -
192 out.resize(6);
│ │ │ │ -
193
│ │ │ │ -
194 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1]+y[2]*n0[2])*sign0;
│ │ │ │ -
195 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1]+y[2]*n1[2])*sign1;
│ │ │ │ -
196 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1]+y[2]*n2[2])*sign2;
│ │ │ │ -
197 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1]+y[2]*n3[2])*sign3;
│ │ │ │ -
198 y = f(m4); out[4] = (y[0]*n4[0]+y[1]*n4[1]+y[2]*n4[2])*sign4;
│ │ │ │ -
199 y = f(m5); out[5] = (y[0]*n5[0]+y[1]*n5[1]+y[2]*n5[2])*sign5;
│ │ │ │ -
200 }
│ │ │ │ -
│ │ │ │ -
201
│ │ │ │ -
202 private:
│ │ │ │ -
203 typename LB::Traits::RangeFieldType sign0,sign1,sign2,sign3,sign4,sign5;
│ │ │ │ -
204 typename LB::Traits::DomainType m0,m1,m2,m3,m4,m5;
│ │ │ │ -
205 typename LB::Traits::DomainType n0,n1,n2,n3,n4,n5;
│ │ │ │ -
206 };
│ │ │ │ -
│ │ │ │ -
207
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
216 {
│ │ │ │ -
217 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
220 {
│ │ │ │ -
221 for (std::size_t i=0; i<6; i++)
│ │ │ │ -
222 li[i] = LocalKey(i,1,0);
│ │ │ │ -
223 }
│ │ │ │ -
│ │ │ │ -
224
│ │ │ │ -
│ │ │ │ -
226 std::size_t size () const
│ │ │ │ -
227 {
│ │ │ │ -
228 return 6;
│ │ │ │ -
229 }
│ │ │ │ -
│ │ │ │ -
230
│ │ │ │ -
│ │ │ │ -
232 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
233 {
│ │ │ │ -
234 return li[i];
│ │ │ │ -
235 }
│ │ │ │ -
│ │ │ │ -
236
│ │ │ │ -
237 private:
│ │ │ │ -
238 std::vector<LocalKey> li;
│ │ │ │ -
239 };
│ │ │ │ -
│ │ │ │ -
240
│ │ │ │ -
241}
│ │ │ │ -
242#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH
│ │ │ │ - │ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
22 template <int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ +
29 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
30 li[i] = LocalKey(i,dim,0);
│ │ │ │ +
31 }
│ │ │ │ +
│ │ │ │ +
32
│ │ │ │ +
│ │ │ │ +
34 std::size_t size () const
│ │ │ │ +
35 {
│ │ │ │ +
36 return dim+1;
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ +
40 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
41 {
│ │ │ │ +
42 return li[i];
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
45 private:
│ │ │ │ +
46 std::vector<LocalKey> li;
│ │ │ │ +
47 };
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
49}
│ │ │ │ +
50
│ │ │ │ +
51#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:30
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition raviartthomas0cube3dall.hh:48
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition raviartthomas0cube3dall.hh:68
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition raviartthomas0cube3dall.hh:138
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition raviartthomas0cube3dall.hh:98
│ │ │ │ -
RT0Cube3DLocalBasis(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas0cube3dall.hh:36
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
Definition raviartthomas0cube3dall.hh:33
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition raviartthomas0cube3dall.hh:54
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:158
│ │ │ │ -
RT0Cube3DLocalInterpolation(unsigned int s=0)
Make set number s, where 0 <= s < 64.
Definition raviartthomas0cube3dall.hh:162
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition raviartthomas0cube3dall.hh:188
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:216
│ │ │ │ -
RT0Cube3DLocalCoefficients()
Standard constructor.
Definition raviartthomas0cube3dall.hh:219
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition raviartthomas0cube3dall.hh:226
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition raviartthomas0cube3dall.hh:232
│ │ │ │ - │ │ │ │ +
Local coefficients for dual simplex P1 elements.
Definition dualp1localcoefficients.hh:24
│ │ │ │ +
DualP1LocalCoefficients()
Standard constructor.
Definition dualp1localcoefficients.hh:27
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition dualp1localcoefficients.hh:40
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition dualp1localcoefficients.hh:34
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,293 +1,76 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d │ │ │ │ │ -raviartthomas0cube3dall.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ +dualp1localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,3,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_6 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s (unsigned int s = 0) │ │ │ │ │ -37 { │ │ │ │ │ -38 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ -39 if (s&1) sign0 = -1.0; │ │ │ │ │ -40 if (s&2) sign1 = -1.0; │ │ │ │ │ -41 if (s&4) sign2 = -1.0; │ │ │ │ │ -42 if (s&8) sign3 = -1.0; │ │ │ │ │ -43 if (s&16) sign4 = -1.0; │ │ │ │ │ -44 if (s&32) sign5 = -1.0; │ │ │ │ │ -45 } │ │ │ │ │ -46 │ │ │ │ │ -_4_8 unsigned int _s_i_z_e () const │ │ │ │ │ -49 { │ │ │ │ │ -50 return 6; │ │ │ │ │ -51 } │ │ │ │ │ -52 │ │ │ │ │ -_5_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -55 std::vector& out) const │ │ │ │ │ -56 { │ │ │ │ │ -57 out.resize(6); │ │ │ │ │ -58 out[0][0] = sign0*(in[0]-1.0); out[0][1]=0.0; out[0][2]=0.0; │ │ │ │ │ -59 out[1][0] = sign1*(in[0]); out[1][1]=0.0; out[1][2]=0.0; │ │ │ │ │ -60 out[2][0] = 0.0; out[2][1]=sign2*(in[1]-1.0); out[2][2]=0.0; │ │ │ │ │ -61 out[3][0] = 0.0; out[3][1]=sign3*(in[1]); out[3][2]=0.0; │ │ │ │ │ -62 out[4][0] = 0.0; out[4][1]=0.0; out[4][2]=sign4*(in[2]-1.0); │ │ │ │ │ -63 out[5][0] = 0.0; out[5][1]=0.0; out[5][2]=sign5*(in[2]); │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -67 inline void │ │ │ │ │ -_6_8 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -69 std::vector& out) const // return value │ │ │ │ │ -70 { │ │ │ │ │ -71 out.resize(6); │ │ │ │ │ -72 out[0][0][0] = sign0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -73 out[0][1][0] = 0; out[0][1][1] = 0; out[0][1][2] = 0; │ │ │ │ │ -74 out[0][2][0] = 0; out[0][2][1] = 0; out[0][2][2] = 0; │ │ │ │ │ -75 │ │ │ │ │ -76 out[1][0][0] = sign1; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -77 out[1][1][0] = 0; out[1][1][1] = 0; out[1][1][2] = 0; │ │ │ │ │ -78 out[1][2][0] = 0; out[1][2][1] = 0; out[1][2][2] = 0; │ │ │ │ │ -79 │ │ │ │ │ -80 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -81 out[2][1][0] = 0; out[2][1][1] = sign2; out[2][1][2] = 0; │ │ │ │ │ -82 out[2][2][0] = 0; out[2][2][1] = 0; out[2][2][2] = 0; │ │ │ │ │ -83 │ │ │ │ │ -84 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ -85 out[3][1][0] = 0; out[3][1][1] = sign3; out[3][1][2] = 0; │ │ │ │ │ -86 out[3][2][0] = 0; out[3][2][1] = 0; out[3][2][2] = 0; │ │ │ │ │ -87 │ │ │ │ │ -88 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -89 out[4][1][0] = 0; out[4][1][1] = 0; out[4][1][2] = 0; │ │ │ │ │ -90 out[4][2][0] = 0; out[4][2][1] = 0; out[4][2][2] = sign4; │ │ │ │ │ -91 │ │ │ │ │ -92 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -93 out[5][1][0] = 0; out[5][1][1] = 0; out[5][1][2] = 0; │ │ │ │ │ -94 out[5][2][0] = 0; out[5][2][1] = 0; out[5][2][2] = sign5; │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -_9_8 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -99 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -100 std::vector& out) const // return value │ │ │ │ │ -101 { │ │ │ │ │ -102 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -103 if (totalOrder == 0) { │ │ │ │ │ -104 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -105 } else if (totalOrder == 1) { │ │ │ │ │ -106 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -107 out.resize(_s_i_z_e()); │ │ │ │ │ -108 │ │ │ │ │ -109 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -110 out[i][0] = out[i][1] = out[i][2] = 0; │ │ │ │ │ -111 │ │ │ │ │ -112 switch (direction) { │ │ │ │ │ -113 case 0: │ │ │ │ │ -114 out[0][0] = sign0; │ │ │ │ │ -115 out[1][0] = sign1; │ │ │ │ │ -116 break; │ │ │ │ │ -117 case 1: │ │ │ │ │ -118 out[2][1] = sign2; │ │ │ │ │ -119 out[3][1] = sign3; │ │ │ │ │ -120 break; │ │ │ │ │ -121 case 2: │ │ │ │ │ -122 out[4][2] = sign4; │ │ │ │ │ -123 out[5][2] = sign5; │ │ │ │ │ -124 break; │ │ │ │ │ -125 default: │ │ │ │ │ -126 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -127 } │ │ │ │ │ -128 } else { │ │ │ │ │ -129 out.resize(_s_i_z_e()); │ │ │ │ │ -130 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -131 for (std::size_t j = 0; j < 2; ++j) │ │ │ │ │ -132 out[i][j] = 0; │ │ │ │ │ -133 } │ │ │ │ │ -134 │ │ │ │ │ -135 } │ │ │ │ │ -136 │ │ │ │ │ -_1_3_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ -139 { │ │ │ │ │ -140 return 1; │ │ │ │ │ -141 } │ │ │ │ │ -142 │ │ │ │ │ -143 private: │ │ │ │ │ -144 R sign0, sign1, sign2, sign3, sign4, sign5; │ │ │ │ │ -145 }; │ │ │ │ │ -146 │ │ │ │ │ -147 │ │ │ │ │ -156 template │ │ │ │ │ -_1_5_7 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -158 { │ │ │ │ │ -159 public: │ │ │ │ │ -160 │ │ │ │ │ -_1_6_2 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (unsigned int s = 0) │ │ │ │ │ -163 { │ │ │ │ │ -164 sign0 = sign1 = sign2 = sign3 = sign4 = sign5 = 1.0; │ │ │ │ │ -165 if (s&1) sign0 *= -1.0; │ │ │ │ │ -166 if (s&2) sign1 *= -1.0; │ │ │ │ │ -167 if (s&4) sign2 *= -1.0; │ │ │ │ │ -168 if (s&8) sign3 *= -1.0; │ │ │ │ │ -169 if (s&16) sign4 *= -1.0; │ │ │ │ │ -170 if (s&32) sign5 *= -1.0; │ │ │ │ │ -171 │ │ │ │ │ -172 m0[0] = 0.0; m0[1] = 0.5; m0[2] = 0.5; │ │ │ │ │ -173 m1[0] = 1.0; m1[1] = 0.5; m1[2] = 0.5; │ │ │ │ │ -174 m2[0] = 0.5; m2[1] = 0.0; m2[2] = 0.5; │ │ │ │ │ -175 m3[0] = 0.5; m3[1] = 1.0; m3[2] = 0.5; │ │ │ │ │ -176 m4[0] = 0.5; m4[1] = 0.5; m4[2] = 0.0; │ │ │ │ │ -177 m5[0] = 0.5; m5[1] = 0.5; m5[2] = 1.0; │ │ │ │ │ -178 │ │ │ │ │ -179 n0[0] = -1.0; n0[1] = 0.0; n0[2] = 0.0; │ │ │ │ │ -180 n1[0] = 1.0; n1[1] = 0.0; n1[2] = 0.0; │ │ │ │ │ -181 n2[0] = 0.0; n2[1] = -1.0; n2[2] = 0.0; │ │ │ │ │ -182 n3[0] = 0.0; n3[1] = 1.0; n3[2] = 0.0; │ │ │ │ │ -183 n4[0] = 0.0; n4[1] = 0.0; n4[2] =-1.0; │ │ │ │ │ -184 n5[0] = 0.0; n5[1] = 0.0; n5[2] = 1.0; │ │ │ │ │ -185 } │ │ │ │ │ -186 │ │ │ │ │ -187 template │ │ │ │ │ -_1_8_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -189 { │ │ │ │ │ -190 // f gives v*outer normal at a point on the edge! │ │ │ │ │ -191 │ │ │ │ │ -192 out.resize(6); │ │ │ │ │ -193 │ │ │ │ │ -194 auto y = f(m0); out[0] = (y[0]*n0[0]+y[1]*n0[1]+y[2]*n0[2])*sign0; │ │ │ │ │ -195 y = f(m1); out[1] = (y[0]*n1[0]+y[1]*n1[1]+y[2]*n1[2])*sign1; │ │ │ │ │ -196 y = f(m2); out[2] = (y[0]*n2[0]+y[1]*n2[1]+y[2]*n2[2])*sign2; │ │ │ │ │ -197 y = f(m3); out[3] = (y[0]*n3[0]+y[1]*n3[1]+y[2]*n3[2])*sign3; │ │ │ │ │ -198 y = f(m4); out[4] = (y[0]*n4[0]+y[1]*n4[1]+y[2]*n4[2])*sign4; │ │ │ │ │ -199 y = f(m5); out[5] = (y[0]*n5[0]+y[1]*n5[1]+y[2]*n5[2])*sign5; │ │ │ │ │ -200 } │ │ │ │ │ -201 │ │ │ │ │ -202 private: │ │ │ │ │ -203 typename LB::Traits::RangeFieldType sign0,sign1,sign2,sign3,sign4,sign5; │ │ │ │ │ -204 typename LB::Traits::DomainType m0,m1,m2,m3,m4,m5; │ │ │ │ │ -205 typename LB::Traits::DomainType n0,n1,n2,n3,n4,n5; │ │ │ │ │ -206 }; │ │ │ │ │ -207 │ │ │ │ │ -_2_1_5 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -216 { │ │ │ │ │ -217 public: │ │ │ │ │ -_2_1_9 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(6) │ │ │ │ │ -220 { │ │ │ │ │ -221 for (std::size_t i=0; i<6; i++) │ │ │ │ │ -222 li[i] = _L_o_c_a_l_K_e_y(i,1,0); │ │ │ │ │ -223 } │ │ │ │ │ -224 │ │ │ │ │ -_2_2_6 std::size_t _s_i_z_e () const │ │ │ │ │ -227 { │ │ │ │ │ -228 return 6; │ │ │ │ │ -229 } │ │ │ │ │ -230 │ │ │ │ │ -_2_3_2 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -233 { │ │ │ │ │ -234 return li[i]; │ │ │ │ │ -235 } │ │ │ │ │ -236 │ │ │ │ │ -237 private: │ │ │ │ │ -238 std::vector li; │ │ │ │ │ -239 }; │ │ │ │ │ -240 │ │ │ │ │ -241} │ │ │ │ │ -242#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_ALL_HH │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 public: │ │ │ │ │ +_2_7 _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ +28 { │ │ │ │ │ +29 for (std::size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ +30 li[i] = _L_o_c_a_l_K_e_y(i,dim,0); │ │ │ │ │ +31 } │ │ │ │ │ +32 │ │ │ │ │ +_3_4 std::size_t _s_i_z_e () const │ │ │ │ │ +35 { │ │ │ │ │ +36 return dim+1; │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +_4_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +41 { │ │ │ │ │ +42 return li[i]; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +45 private: │ │ │ │ │ +46 std::vector li; │ │ │ │ │ +47 }; │ │ │ │ │ +48 │ │ │ │ │ +49} │ │ │ │ │ +50 │ │ │ │ │ +51#endif │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:138 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:98 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RT0Cube3DLocalBasis(unsigned int s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, │ │ │ │ │ -3 >, Dune::FieldMatrix< R, 3, 3 > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:158 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RT0Cube3DLocalInterpolation(unsigned int s=0) │ │ │ │ │ -Make set number s, where 0 <= s < 64. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:162 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:188 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:216 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RT0Cube3DLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Local coefficients for dual simplex P1 elements. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DualP1LocalCoefficients() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:219 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:226 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +DDeeffiinniittiioonn dualp1localcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ const LocalKey & localKey(std::size_t i) const │ │ │ │ │ get i'th index │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:232 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +DDeeffiinniittiioonn dualp1localcoefficients.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn dualp1localcoefficients.hh:34 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03d.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomas03d.hh File Reference
│ │ │ │ +
dualp1localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas03d/raviartthomas03dlocalbasis.hh"
│ │ │ │ -#include "raviartthomas03d/raviartthomas03dlocalcoefficients.hh"
│ │ │ │ -#include "raviartthomas03d/raviartthomas03dlocalinterpolation.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RT03DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on tetrahedra. More...
class  Dune::DualP1LocalInterpolation< dim, LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,20 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas03d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +dualp1localinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  _Z_e_r_o order Raviart-Thomas shape functions on tetrahedra. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_,_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00299_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas03d.hh Source File │ │ │ │ +dune-localfunctions: dualp1localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,125 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas03d.hh
│ │ │ │ +
dualp1localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
26 template<class D, class R>
│ │ │ │ -
│ │ │ │ -
27 class
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 {}
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
43 RT03DLocalFiniteElement (std::bitset<4> s) :
│ │ │ │ -
44 basis(s),
│ │ │ │ -
45 interpolation(s)
│ │ │ │ -
46 {}
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
48 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
49 {
│ │ │ │ -
50 return basis;
│ │ │ │ -
51 }
│ │ │ │ -
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<int dim, class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │ +
20 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
22 {
│ │ │ │ +
23 typename LB::Traits::DomainType x;
│ │ │ │ +
24 // If the dual functions are dual on the faces,
│ │ │ │ +
25 // then adjust the interpolation weights
│ │ │ │ +
26 const int faceDual(LB::faceDual);
│ │ │ │ +
27
│ │ │ │ +
28 // compute P1 interpolation coefficients
│ │ │ │ +
29 std::vector<C> p1Interpolation(dim+1);
│ │ │ │ +
30
│ │ │ │ +
31 // vertex 0
│ │ │ │ +
32 for (int i=0; i<dim; i++)
│ │ │ │ +
33 x[i] = 0;
│ │ │ │ +
34 p1Interpolation[0] = f(x);
│ │ │ │ +
35
│ │ │ │ +
36 // remaining vertices
│ │ │ │ +
37 for (int i=0; i<dim; i++) {
│ │ │ │ +
38 for (int j=0; j<dim; j++)
│ │ │ │ +
39 x[j] = (i==j);
│ │ │ │ +
40
│ │ │ │ +
41 p1Interpolation[i+1] = f(x);
│ │ │ │ +
42
│ │ │ │ +
43 }
│ │ │ │ +
44
│ │ │ │ +
45 // compute dual coefficients from the Lagrange ones
│ │ │ │ +
46 out.resize(dim+1);
│ │ │ │ +
47 for (int i=0; i<dim+1; i++) {
│ │ │ │ +
48 out[i] = 2*p1Interpolation[i]/(dim+2-faceDual);
│ │ │ │ +
49
│ │ │ │ +
50 for (int j=0; j<i; j++)
│ │ │ │ +
51 out[i] += p1Interpolation[j]/(dim+2-faceDual);
│ │ │ │
52
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
54 {
│ │ │ │ -
55 return coefficients;
│ │ │ │ +
53 for (int j=i+1; j<=dim; j++)
│ │ │ │ +
54 out[i] += p1Interpolation[j]/(dim+2-faceDual);
│ │ │ │ +
55 }
│ │ │ │
56 }
│ │ │ │
│ │ │ │
57
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
59 {
│ │ │ │ -
60 return interpolation;
│ │ │ │ -
61 }
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
│ │ │ │ -
63 unsigned int size () const
│ │ │ │ -
64 {
│ │ │ │ -
65 return 4;
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
68 static constexpr GeometryType type ()
│ │ │ │ -
69 {
│ │ │ │ -
70 return GeometryTypes::tetrahedron;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73 private:
│ │ │ │ - │ │ │ │ -
75 RT03DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
77 };
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
58 };
│ │ │ │ +
│ │ │ │ +
59}
│ │ │ │ +
60
│ │ │ │ +
61#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Zero order Raviart-Thomas shape functions on tetrahedra.
Definition raviartthomas03d.hh:29
│ │ │ │ -
LocalFiniteElementTraits< RT03DLocalBasis< D, R >, RT03DLocalCoefficients, RT03DLocalInterpolation< RT03DLocalBasis< D, R > > > Traits
Definition raviartthomas03d.hh:32
│ │ │ │ -
unsigned int size() const
Definition raviartthomas03d.hh:63
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas03d.hh:68
│ │ │ │ -
RT03DLocalFiniteElement(std::bitset< 4 > s)
Constructor with explicitly given face orientations.
Definition raviartthomas03d.hh:43
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas03d.hh:53
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas03d.hh:48
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas03d.hh:58
│ │ │ │ -
RT03DLocalFiniteElement()
Standard constructor.
Definition raviartthomas03d.hh:35
│ │ │ │ -
Definition raviartthomas03dlocalbasis.hh:27
│ │ │ │ -
Definition raviartthomas03dlocalcoefficients.hh:25
│ │ │ │ -
Definition raviartthomas03dlocalinterpolation.hh:17
│ │ │ │ +
Definition dualp1localinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition dualp1localinterpolation.hh:21
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,134 +1,78 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas03d.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ +dualp1localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMAS03D_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 class │ │ │ │ │ -28 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>,_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_2 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_5 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -36 {} │ │ │ │ │ -37 │ │ │ │ │ -_4_3 _R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset<4> s) : │ │ │ │ │ -44 basis(s), │ │ │ │ │ -45 interpolation(s) │ │ │ │ │ -46 {} │ │ │ │ │ -47 │ │ │ │ │ -_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -49 { │ │ │ │ │ -50 return basis; │ │ │ │ │ -51 } │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +15 template │ │ │ │ │ +_1_6 class _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +17 { │ │ │ │ │ +18 public: │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +22 { │ │ │ │ │ +23 typename LB::Traits::DomainType x; │ │ │ │ │ +24 // If the dual functions are dual on the faces, │ │ │ │ │ +25 // then adjust the interpolation weights │ │ │ │ │ +26 const int faceDual(LB::faceDual); │ │ │ │ │ +27 │ │ │ │ │ +28 // compute P1 interpolation coefficients │ │ │ │ │ +29 std::vector p1Interpolation(dim+1); │ │ │ │ │ +30 │ │ │ │ │ +31 // vertex 0 │ │ │ │ │ +32 for (int i=0; i basis; │ │ │ │ │ -75 _R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -76 _R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -77 }; │ │ │ │ │ -78 │ │ │ │ │ -79} │ │ │ │ │ -80 │ │ │ │ │ -81#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +58 }; │ │ │ │ │ +59} │ │ │ │ │ +60 │ │ │ │ │ +61#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Zero order Raviart-Thomas shape functions on tetrahedra. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT03DLocalBasis< D, R >, RT03DLocalCoefficients, │ │ │ │ │ -RT03DLocalInterpolation< RT03DLocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT03DLocalFiniteElement(std::bitset< 4 > s) │ │ │ │ │ -Constructor with explicitly given face orientations. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:58 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT03DLocalFiniteElement() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas03dlocalinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn dualp1localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Local interpolation of a function. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localinterpolation.hh:21 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexprebasis.hh File Reference │ │ │ │ +dune-localfunctions: dualp1localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexprebasis.hh File Reference
│ │ │ │ +
dualp1localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RTPreBasisFactory< dim, Field >
 
struct  Dune::RTPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::RTVecMatrix< geometryId, Field >
class  Dune::DualP1LocalBasis< D, R, dim, faceDualT >
 Dual Lagrange shape functions on the simplex. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomassimplexprebasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +dualp1localbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F │ │ │ │ │ - _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_i_e_l_d_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_T_ _> │ │ │ │ │ +  Dual Lagrange shape functions on the simplex. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00302_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexprebasis.hh Source File │ │ │ │ +dune-localfunctions: dualp1localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,283 +70,147 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexprebasis.hh
│ │ │ │ +
dualp1localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ +
5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/geometry/type.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17 template < GeometryType::Id geometryId, class Field >
│ │ │ │ -
18 struct RTVecMatrix;
│ │ │ │ -
19
│ │ │ │ -
20 template <unsigned int dim, class Field>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 {
│ │ │ │ - │ │ │ │ -
24 typedef typename MBasisFactory::Object MBasis;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
27
│ │ │ │ -
28 typedef const Basis Object;
│ │ │ │ -
29 typedef std::size_t Key;
│ │ │ │ -
30
│ │ │ │ -
31 template <unsigned int dd, class FF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 {
│ │ │ │ - │ │ │ │ -
35 };
│ │ │ │ -
│ │ │ │ -
36 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
37 static Object *create ( const Key &order )
│ │ │ │ -
38 {
│ │ │ │ -
39 RTVecMatrix<geometryId,Field> vecMatrix(order);
│ │ │ │ -
40 MBasis *mbasis = MBasisFactory::template create<geometryId>(order+1);
│ │ │ │ -
41 typename std::remove_const<Object>::type *tmBasis = new typename std::remove_const<Object>::type(*mbasis);
│ │ │ │ -
42 tmBasis->fill(vecMatrix);
│ │ │ │ -
43 return tmBasis;
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45 static void release( Object *object ) { delete object; }
│ │ │ │ -
46 };
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
48 template <GeometryType::Id geometryId, class Field>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
50 {
│ │ │ │ -
51 static constexpr GeometryType geometry = geometryId;
│ │ │ │ -
52 static const unsigned int dim = geometry.dim();
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
55 RTVecMatrix(std::size_t order)
│ │ │ │ -
56 {
│ │ │ │ -
57 /*
│ │ │ │ -
58 * Construction of Raviart-Thomas elements in high dimensions see "Mixed Finite Elements in \R^3" by Nedelec, 1980.
│ │ │ │ -
59 *
│ │ │ │ -
60 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree $\leq k$.
│ │ │ │ -
61 * The space of Raviart-Thomas functions in $n$ dimensions with index $k$ is defined as
│ │ │ │ -
62 *
│ │ │ │ -
63 * \begin{equation*}
│ │ │ │ -
64 * RT_k := (\P_{k-1})^n \oplus \widetilde \P_k x
│ │ │ │ -
65 * \end{equation*}
│ │ │ │ -
66 * with $x=(x_1,x_2,\dots, x_n)$ in $n$ dimensions and $\widetilde \P_k$ the homogeneous polynomials of degree $k$.
│ │ │ │ -
67 *
│ │ │ │ -
68 * For $RT_k$ holds
│ │ │ │ -
69 * \begin{equation*}
│ │ │ │ -
70 * (\P_{k-1})^n \subset RT_k \subset (\P_k)^n.
│ │ │ │ -
71 * \end{equation*}
│ │ │ │ -
72 *
│ │ │ │ -
73 * We construct $(\P_k)^n$ and and only use the monomials contained in $RT_k$.
│ │ │ │ -
74 *
│ │ │ │ -
75 */
│ │ │ │ -
76
│ │ │ │ -
77 MIBasis basis(order+1);
│ │ │ │ -
78 FieldVector< MI, dim > x;
│ │ │ │ -
79 /*
│ │ │ │ -
80 * Init MultiIndices
│ │ │ │ -
81 * x[0]=(1,0,0) x
│ │ │ │ -
82 * x[1]=(0,1,0) y
│ │ │ │ -
83 * x[2]=(0,0,1) z
│ │ │ │ -
84 */
│ │ │ │ -
85 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ -
86 x[ i ].set( i, 1 );
│ │ │ │ -
87 std::vector< MI > val( basis.size() );
│ │ │ │ -
88
│ │ │ │ -
89 // val now contains all monomials in $n$ dimensions with degree $\leq order+1$
│ │ │ │ -
90 basis.evaluate( x, val );
│ │ │ │ -
91
│ │ │ │ -
92 col_ = basis.size();
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
33 template<class D, class R, int dim, bool faceDualT=false>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 public:
│ │ │ │ +
38 static const bool faceDual = faceDualT;
│ │ │ │ +
40 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
41 Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ +
42
│ │ │ │ +
│ │ │ │ +
44 unsigned int size () const
│ │ │ │ +
45 {
│ │ │ │ +
46 return dim+1;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
50 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
51 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
52 {
│ │ │ │ +
53 // evaluate P1 basis functions
│ │ │ │ +
54 std::vector<typename Traits::RangeType> p1Values(size());
│ │ │ │ +
55
│ │ │ │ +
56 p1Values[0] = 1.0;
│ │ │ │ +
57
│ │ │ │ +
58 for (int i=0; i<dim; i++) {
│ │ │ │ +
59 p1Values[0] -= in[i];
│ │ │ │ +
60 p1Values[i+1] = in[i];
│ │ │ │ +
61 }
│ │ │ │ +
62
│ │ │ │ +
63 // compute dual basis function values as a linear combination of the Lagrange values
│ │ │ │ +
64 out.resize(size());
│ │ │ │ +
65
│ │ │ │ +
66 for (int i=0; i<=dim; i++) {
│ │ │ │ +
67 out[i] = (dim+!faceDual)*p1Values[i];
│ │ │ │ +
68 for (int j=0; j<i; j++)
│ │ │ │ +
69 out[i] -= p1Values[j];
│ │ │ │ +
70
│ │ │ │ +
71 for (int j=i+1; j<=dim; j++)
│ │ │ │ +
72 out[i] -= p1Values[j];
│ │ │ │ +
73 }
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
77 inline void
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
79 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
80 {
│ │ │ │ +
81 // evaluate P1 jacobians
│ │ │ │ +
82 std::vector<typename Traits::JacobianType> p1Jacs(size());
│ │ │ │ +
83
│ │ │ │ +
84 for (int i=0; i<dim; i++)
│ │ │ │ +
85 p1Jacs[0][0][i] = -1;
│ │ │ │ +
86
│ │ │ │ +
87 for (int i=0; i<dim; i++)
│ │ │ │ +
88 for (int j=0; j<dim; j++)
│ │ │ │ +
89 p1Jacs[i+1][0][j] = (i==j);
│ │ │ │ +
90
│ │ │ │ +
91 // compute dual basis jacobians as linear combination of the Lagrange jacobians
│ │ │ │ +
92 out.resize(size());
│ │ │ │
93
│ │ │ │ -
94 // get $\dim (\P_{order-1})$
│ │ │ │ -
95 unsigned int notHomogen = 0;
│ │ │ │ -
96 if (order>0)
│ │ │ │ -
97 notHomogen = basis.sizes()[order-1];
│ │ │ │ -
98
│ │ │ │ -
99 // get $\dim \widetilde (\P_order)$
│ │ │ │ -
100 unsigned int homogen = basis.sizes()[order]-notHomogen;
│ │ │ │ -
101
│ │ │ │ -
102 /*
│ │ │ │ -
103 *
│ │ │ │ -
104 * The set $RT_k$ is defined as
│ │ │ │ -
105 *
│ │ │ │ -
106 * \begin{equation}
│ │ │ │ -
107 * RT_k := (\P_k)^dim + \widetilde \P_k x with x\in \R^n.
│ │ │ │ -
108 * \end{equation}
│ │ │ │ -
109 *
│ │ │ │ -
110 * The space $\P_k$ is split in $\P_k = \P_{k-1} + \widetilde \P_k$.
│ │ │ │ -
111 *
│ │ │ │ -
112 * \begin{align}
│ │ │ │ -
113 * RT_k &= (\P_{k-1} + \widetilde \P_k)^dim + \widetilde \P_k x with x\in \R^n
│ │ │ │ -
114 * &= (\P_{k-1})^n + (\widetilde \P_k)^n + \widetilde \P_k x with x\in \R^n
│ │ │ │ -
115 * \end{align}
│ │ │ │ -
116 *
│ │ │ │ -
117 * Thus $\dim RT_k = n * \dim \P_{k-1} + (n+1)*\dim (\widetilde \P_k)$
│ │ │ │ -
118 */
│ │ │ │ -
119
│ │ │ │ -
120 // row_ = \dim RT_k *dim
│ │ │ │ -
121 row_ = (notHomogen*dim+homogen*(dim+1))*dim;
│ │ │ │ -
122 mat_ = new Field*[row_];
│ │ │ │ -
123 int row = 0;
│ │ │ │ -
124
│ │ │ │ -
125 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_{oder-1})^dim$
│ │ │ │ -
126 * A basis function is represented by $dim$ rows.
│ │ │ │ -
127 */
│ │ │ │ -
128 for (unsigned int i=0; i<notHomogen+homogen; ++i)
│ │ │ │ -
129 {
│ │ │ │ -
130 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ -
131 {
│ │ │ │ -
132 for (unsigned int rr=0; rr<dim; ++rr)
│ │ │ │ -
133 {
│ │ │ │ -
134 // init row to zero
│ │ │ │ -
135 mat_[row] = new Field[col_];
│ │ │ │ -
136 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ -
137 {
│ │ │ │ -
138 mat_[row][j] = 0.;
│ │ │ │ -
139 }
│ │ │ │ -
140 if (r==rr)
│ │ │ │ -
141 mat_[row][i] = 1.;
│ │ │ │ -
142 ++row;
│ │ │ │ -
143 }
│ │ │ │ -
144 }
│ │ │ │ -
145 }
│ │ │ │ -
146
│ │ │ │ -
147 /* Assign the correct values for the homogeneous polymonials $p\in RT_k \backslash (\P_{oder-1})^dim$
│ │ │ │ -
148 * A basis function is represented by $dim$ rows.
│ │ │ │ -
149 */
│ │ │ │ -
150 for (unsigned int i=0; i<homogen; ++i)
│ │ │ │ -
151 {
│ │ │ │ -
152 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ -
153 {
│ │ │ │ -
154 // init rows to zero
│ │ │ │ -
155 mat_[row] = new Field[col_];
│ │ │ │ -
156 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ -
157 {
│ │ │ │ -
158 mat_[row][j] = 0.;
│ │ │ │ -
159 }
│ │ │ │ -
160
│ │ │ │ -
161 unsigned int w;
│ │ │ │ -
162 // get a monomial $ p \in \widetilde \P_{order}$
│ │ │ │ -
163 MI xval = val[notHomogen+i];
│ │ │ │ -
164 xval *= x[r];
│ │ │ │ -
165 for (w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ -
166 {
│ │ │ │ -
167 if (val[w] == xval)
│ │ │ │ -
168 {
│ │ │ │ -
169 mat_[row][w] = 1.;
│ │ │ │ -
170 break;
│ │ │ │ -
171 }
│ │ │ │ -
172 }
│ │ │ │ -
173 assert(w<val.size());
│ │ │ │ -
174 ++row;
│ │ │ │ -
175 }
│ │ │ │ -
176 }
│ │ │ │ -
177 }
│ │ │ │ -
│ │ │ │ -
178
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
180 {
│ │ │ │ -
181 for (unsigned int i=0; i<rows(); ++i) {
│ │ │ │ -
182 delete [] mat_[i];
│ │ │ │ -
183 }
│ │ │ │ -
184 delete [] mat_;
│ │ │ │ -
185 }
│ │ │ │ -
│ │ │ │ -
186
│ │ │ │ -
│ │ │ │ -
187 unsigned int cols() const {
│ │ │ │ -
188 return col_;
│ │ │ │ -
189 }
│ │ │ │ -
│ │ │ │ -
190
│ │ │ │ -
│ │ │ │ -
191 unsigned int rows() const {
│ │ │ │ -
192 return row_;
│ │ │ │ -
193 }
│ │ │ │ -
│ │ │ │ -
194
│ │ │ │ -
195 template <class Vector>
│ │ │ │ -
│ │ │ │ -
196 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
197 {
│ │ │ │ -
198 const unsigned int N = cols();
│ │ │ │ -
199 assert( vec.size() == N );
│ │ │ │ -
200 for (unsigned int i=0; i<N; ++i)
│ │ │ │ -
201 field_cast(mat_[row][i],vec[i]);
│ │ │ │ -
202 }
│ │ │ │ -
│ │ │ │ -
203 unsigned int row_,col_;
│ │ │ │ -
204 Field **mat_;
│ │ │ │ -
205 };
│ │ │ │ -
│ │ │ │ -
206
│ │ │ │ -
207
│ │ │ │ -
208}
│ │ │ │ -
209#endif // DUNE_RAVIARTTHOMASPREBASIS_HH
│ │ │ │ - │ │ │ │ +
94 for (size_t i=0; i<=dim; i++) {
│ │ │ │ +
95 out[i][0] = 0;
│ │ │ │ +
96 out[i][0].axpy(dim+!faceDual,p1Jacs[i][0]);
│ │ │ │ +
97
│ │ │ │ +
98 for (size_t j=0; j<i; j++)
│ │ │ │ +
99 out[i][0] -= p1Jacs[j][0];
│ │ │ │ +
100
│ │ │ │ +
101 for (int j=i+1; j<=dim; j++)
│ │ │ │ +
102 out[i][0] -= p1Jacs[j][0];
│ │ │ │ +
103 }
│ │ │ │ +
104 }
│ │ │ │ +
│ │ │ │ +
105
│ │ │ │ +
│ │ │ │ +
107 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
108 const typename Traits::DomainType& in, // position
│ │ │ │ +
109 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
110 {
│ │ │ │ +
111 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
112 if (totalOrder == 0) {
│ │ │ │ +
113 evaluateFunction(in, out);
│ │ │ │ +
114 } else {
│ │ │ │ +
115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
116 }
│ │ │ │ +
117 }
│ │ │ │ +
│ │ │ │ +
118
│ │ │ │ +
│ │ │ │ +
120 unsigned int order () const
│ │ │ │ +
121 {
│ │ │ │ +
122 return 1;
│ │ │ │ +
123 }
│ │ │ │ +
│ │ │ │ +
124 };
│ │ │ │ +
│ │ │ │ +
125}
│ │ │ │ +
126#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition raviartthomassimplexprebasis.hh:50
│ │ │ │ -
static const unsigned int dim
Definition raviartthomassimplexprebasis.hh:52
│ │ │ │ -
~RTVecMatrix()
Definition raviartthomassimplexprebasis.hh:179
│ │ │ │ -
Field ** mat_
Definition raviartthomassimplexprebasis.hh:204
│ │ │ │ -
RTVecMatrix(std::size_t order)
Definition raviartthomassimplexprebasis.hh:55
│ │ │ │ -
unsigned int cols() const
Definition raviartthomassimplexprebasis.hh:187
│ │ │ │ -
unsigned int row_
Definition raviartthomassimplexprebasis.hh:203
│ │ │ │ -
MultiIndex< dim, Field > MI
Definition raviartthomassimplexprebasis.hh:53
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition raviartthomassimplexprebasis.hh:196
│ │ │ │ -
MonomialBasis< geometryId, MI > MIBasis
Definition raviartthomassimplexprebasis.hh:54
│ │ │ │ -
static constexpr GeometryType geometry
Definition raviartthomassimplexprebasis.hh:51
│ │ │ │ -
unsigned int rows() const
Definition raviartthomassimplexprebasis.hh:191
│ │ │ │ -
unsigned int col_
Definition raviartthomassimplexprebasis.hh:203
│ │ │ │ -
Definition raviartthomassimplexprebasis.hh:22
│ │ │ │ -
const Basis Object
Definition raviartthomassimplexprebasis.hh:28
│ │ │ │ -
MonomialBasisProvider< dim, Field > MBasisFactory
Definition raviartthomassimplexprebasis.hh:23
│ │ │ │ -
PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis
Definition raviartthomassimplexprebasis.hh:26
│ │ │ │ -
MBasisFactory::Object MBasis
Definition raviartthomassimplexprebasis.hh:24
│ │ │ │ -
std::size_t Key
Definition raviartthomassimplexprebasis.hh:29
│ │ │ │ -
static void release(Object *object)
Definition raviartthomassimplexprebasis.hh:45
│ │ │ │ -
StandardEvaluator< MBasis > EvalMBasis
Definition raviartthomassimplexprebasis.hh:25
│ │ │ │ -
static Object * create(const Key &order)
Definition raviartthomassimplexprebasis.hh:37
│ │ │ │ -
Definition raviartthomassimplexprebasis.hh:33
│ │ │ │ -
MonomialBasisProvider< dd, FF > Type
Definition raviartthomassimplexprebasis.hh:34
│ │ │ │ -
Definition basisevaluator.hh:131
│ │ │ │ -
Definition monomialbasis.hh:440
│ │ │ │ -
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ -
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ -
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ -
Definition monomialbasis.hh:780
│ │ │ │ -
Definition multiindex.hh:38
│ │ │ │ -
Definition polynomialbasis.hh:348
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Dual Lagrange shape functions on the simplex.
Definition dualp1localbasis.hh:35
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition dualp1localbasis.hh:120
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition dualp1localbasis.hh:50
│ │ │ │ +
static const bool faceDual
Determines if the basis is only biorthogonal on adjacent faces.
Definition dualp1localbasis.hh:38
│ │ │ │ +
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition dualp1localbasis.hh:107
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition dualp1localbasis.hh:44
│ │ │ │ +
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
export type traits for function signature
Definition dualp1localbasis.hh:41
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition dualp1localbasis.hh:78
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,329 +1,163 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ -raviartthomassimplexprebasis.hh │ │ │ │ │ + * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _d_u_a_l_p_1 │ │ │ │ │ +dualp1localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASPREBASIS_HH │ │ │ │ │ +5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 template < GeometryType::Id geometryId, class Field > │ │ │ │ │ -18 struct RTVecMatrix; │ │ │ │ │ -19 │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 struct _R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -22 { │ │ │ │ │ -_2_3 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_i_m_,_F_i_e_l_d_> _M_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_2_4 typedef typename MBasisFactory::Object _M_B_a_s_i_s; │ │ │ │ │ -_2_5 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_B_a_s_i_s_> _E_v_a_l_M_B_a_s_i_s; │ │ │ │ │ -_2_6 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_M_B_a_s_i_s_,_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_d_i_m_> > │ │ │ │ │ -_B_a_s_i_s; │ │ │ │ │ -27 │ │ │ │ │ -_2_8 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ -_2_9 typedef std::size_t _K_e_y; │ │ │ │ │ -30 │ │ │ │ │ -31 template │ │ │ │ │ -_3_2 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -33 { │ │ │ │ │ -_3_4 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ -35 }; │ │ │ │ │ -36 template< GeometryType::Id geometryId > │ │ │ │ │ -_3_7 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ -38 { │ │ │ │ │ -39 _R_T_V_e_c_M_a_t_r_i_x_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> vecMatrix(order); │ │ │ │ │ -40 _M_B_a_s_i_s *mbasis = MBasisFactory::template create(order+1); │ │ │ │ │ -41 typename std::remove_const::type *tmBasis = new typename std:: │ │ │ │ │ -remove_const::type(*mbasis); │ │ │ │ │ -42 tmBasis->fill(vecMatrix); │ │ │ │ │ -43 return tmBasis; │ │ │ │ │ -44 } │ │ │ │ │ -_4_5 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -46 }; │ │ │ │ │ -47 │ │ │ │ │ -48 template │ │ │ │ │ -_4_9 struct _R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ -50 { │ │ │ │ │ -_5_1 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ -_5_2 static const unsigned int _d_i_m = _g_e_o_m_e_t_r_y._d_i_m(); │ │ │ │ │ -_5_3 typedef _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _M_I; │ │ │ │ │ -_5_4 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_M_I_> _M_I_B_a_s_i_s; │ │ │ │ │ -_5_5 _R_T_V_e_c_M_a_t_r_i_x(std::size_t order) │ │ │ │ │ -56 { │ │ │ │ │ -57 /* │ │ │ │ │ -58 * Construction of Raviart-Thomas elements in high dimensions see "Mixed │ │ │ │ │ -Finite Elements in \R^3" by Nedelec, 1980. │ │ │ │ │ -59 * │ │ │ │ │ -60 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree │ │ │ │ │ -$\leq k$. │ │ │ │ │ -61 * The space of Raviart-Thomas functions in $n$ dimensions with index $k$ is │ │ │ │ │ -defined as │ │ │ │ │ -62 * │ │ │ │ │ -63 * \begin{equation*} │ │ │ │ │ -64 * RT_k := (\P_{k-1})^n \oplus \widetilde \P_k x │ │ │ │ │ -65 * \end{equation*} │ │ │ │ │ -66 * with $x=(x_1,x_2,\dots, x_n)$ in $n$ dimensions and $\widetilde \P_k$ the │ │ │ │ │ -homogeneous polynomials of degree $k$. │ │ │ │ │ -67 * │ │ │ │ │ -68 * For $RT_k$ holds │ │ │ │ │ -69 * \begin{equation*} │ │ │ │ │ -70 * (\P_{k-1})^n \subset RT_k \subset (\P_k)^n. │ │ │ │ │ -71 * \end{equation*} │ │ │ │ │ -72 * │ │ │ │ │ -73 * We construct $(\P_k)^n$ and and only use the monomials contained in │ │ │ │ │ -$RT_k$. │ │ │ │ │ -74 * │ │ │ │ │ -75 */ │ │ │ │ │ -76 │ │ │ │ │ -77 _M_I_B_a_s_i_s basis(order+1); │ │ │ │ │ -78 FieldVector< MI, dim > x; │ │ │ │ │ -79 /* │ │ │ │ │ -80 * Init MultiIndices │ │ │ │ │ -81 * x[0]=(1,0,0) x │ │ │ │ │ -82 * x[1]=(0,1,0) y │ │ │ │ │ -83 * x[2]=(0,0,1) z │ │ │ │ │ -84 */ │ │ │ │ │ -85 for( unsigned int i = 0; i < _d_i_m; ++i ) │ │ │ │ │ -86 x[ i ].set( i, 1 ); │ │ │ │ │ -87 std::vector< MI > val( basis._s_i_z_e() ); │ │ │ │ │ -88 │ │ │ │ │ -89 // val now contains all monomials in $n$ dimensions with degree $\leq │ │ │ │ │ -order+1$ │ │ │ │ │ -90 basis._e_v_a_l_u_a_t_e( x, val ); │ │ │ │ │ -91 │ │ │ │ │ -92 _c_o_l__ = basis._s_i_z_e(); │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +33 template │ │ │ │ │ +_3_4 class _D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +35 { │ │ │ │ │ +36 public: │ │ │ │ │ +_3_8 static const bool _f_a_c_e_D_u_a_l = faceDualT; │ │ │ │ │ +40 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_4_1 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +42 │ │ │ │ │ +_4_4 unsigned int _s_i_z_e () const │ │ │ │ │ +45 { │ │ │ │ │ +46 return dim+1; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +_5_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +51 std::vector& out) const │ │ │ │ │ +52 { │ │ │ │ │ +53 // evaluate P1 basis functions │ │ │ │ │ +54 std::vector p1Values(_s_i_z_e()); │ │ │ │ │ +55 │ │ │ │ │ +56 p1Values[0] = 1.0; │ │ │ │ │ +57 │ │ │ │ │ +58 for (int i=0; i& out) const │ │ │ │ │ +80 { │ │ │ │ │ +81 // evaluate P1 jacobians │ │ │ │ │ +82 std::vector p1Jacs(_s_i_z_e()); │ │ │ │ │ +83 │ │ │ │ │ +84 for (int i=0; i0) │ │ │ │ │ -97 notHomogen = basis._s_i_z_e_s()[order-1]; │ │ │ │ │ -98 │ │ │ │ │ -99 // get $\dim \widetilde (\P_order)$ │ │ │ │ │ -100 unsigned int homogen = basis._s_i_z_e_s()[order]-notHomogen; │ │ │ │ │ -101 │ │ │ │ │ -102 /* │ │ │ │ │ -103 * │ │ │ │ │ -104 * The set $RT_k$ is defined as │ │ │ │ │ -105 * │ │ │ │ │ -106 * \begin{equation} │ │ │ │ │ -107 * RT_k := (\P_k)^dim + \widetilde \P_k x with x\in \R^n. │ │ │ │ │ -108 * \end{equation} │ │ │ │ │ -109 * │ │ │ │ │ -110 * The space $\P_k$ is split in $\P_k = \P_{k-1} + \widetilde \P_k$. │ │ │ │ │ -111 * │ │ │ │ │ -112 * \begin{align} │ │ │ │ │ -113 * RT_k &= (\P_{k-1} + \widetilde \P_k)^dim + \widetilde \P_k x with x\in │ │ │ │ │ -\R^n │ │ │ │ │ -114 * &= (\P_{k-1})^n + (\widetilde \P_k)^n + \widetilde \P_k x with x\in \R^n │ │ │ │ │ -115 * \end{align} │ │ │ │ │ -116 * │ │ │ │ │ -117 * Thus $\dim RT_k = n * \dim \P_{k-1} + (n+1)*\dim (\widetilde \P_k)$ │ │ │ │ │ -118 */ │ │ │ │ │ -119 │ │ │ │ │ -120 // row_ = \dim RT_k *dim │ │ │ │ │ -121 _r_o_w__ = (notHomogen*_d_i_m+homogen*(_d_i_m+1))*_d_i_m; │ │ │ │ │ -122 _m_a_t__ = new Field*[_r_o_w__]; │ │ │ │ │ -123 int _r_o_w = 0; │ │ │ │ │ -124 │ │ │ │ │ -125 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_ │ │ │ │ │ -{oder-1})^dim$ │ │ │ │ │ -126 * A basis function is represented by $dim$ rows. │ │ │ │ │ -127 */ │ │ │ │ │ -128 for (unsigned int i=0; i │ │ │ │ │ -_1_9_6 void _r_o_w( const unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ -197 { │ │ │ │ │ -198 const unsigned int N = _c_o_l_s(); │ │ │ │ │ -199 assert( vec.size() == N ); │ │ │ │ │ -200 for (unsigned int i=0; i& _o_r_d_e_r, │ │ │ │ │ +108 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +109 std::vector& out) const // return value │ │ │ │ │ +110 { │ │ │ │ │ +111 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +112 if (totalOrder == 0) { │ │ │ │ │ +113 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +114 } else { │ │ │ │ │ +115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +116 } │ │ │ │ │ +117 } │ │ │ │ │ +118 │ │ │ │ │ +_1_2_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ +121 { │ │ │ │ │ +122 return 1; │ │ │ │ │ +123 } │ │ │ │ │ +124 }; │ │ │ │ │ +125} │ │ │ │ │ +126#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_d_i_m │ │ │ │ │ -static const unsigned int dim │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_~_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ -~RTVecMatrix() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:179 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_m_a_t__ │ │ │ │ │ -Field ** mat_ │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:204 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_R_T_V_e_c_M_a_t_r_i_x │ │ │ │ │ -RTVecMatrix(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w__ │ │ │ │ │ -unsigned int row_ │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:203 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_M_I │ │ │ │ │ -MultiIndex< dim, Field > MI │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:196 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_M_I_B_a_s_i_s │ │ │ │ │ -MonomialBasis< geometryId, MI > MIBasis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ -unsigned int rows() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:191 │ │ │ │ │ -_D_u_n_e_:_:_R_T_V_e_c_M_a_t_r_i_x_:_:_c_o_l__ │ │ │ │ │ -unsigned int col_ │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:203 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const Basis Object │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -MonomialBasisProvider< dim, Field > MBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ -PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s │ │ │ │ │ -MBasisFactory::Object MBasis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_M_B_a_s_i_s │ │ │ │ │ -StandardEvaluator< MBasis > EvalMBasis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &order) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_R_T_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -MonomialBasisProvider< dd, FF > Type │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexprebasis.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Dual Lagrange shape functions on the simplex. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:120 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_f_a_c_e_D_u_a_l │ │ │ │ │ +static const bool faceDual │ │ │ │ │ +Determines if the basis is only biorthogonal on adjacent faces. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ -const unsigned int * sizes(unsigned int order) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ +R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn dualp1localbasis.hh:78 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexbasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,59 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexbasis.hh File Reference
│ │ │ │ +
hierarchicalsimplexp2withelementbubble.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ -#include "raviartthomassimplexinterpolation.hh"
│ │ │ │ -#include "raviartthomassimplexprebasis.hh"
│ │ │ │ + │ │ │ │ +

Hierarchical p2 shape functions for the simplex. │ │ │ │ +More...

│ │ │ │ +
#include <array>
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <stdexcept>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelement.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RaviartThomasBasisFactory< dim, SF, CF >
class  Dune::HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim >
 P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order dim+1. More...
 
class  Dune::HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim >
 The local keys of the hierarchical basis functions with element bubble. More...
 
class  Dune::HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LB, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Hierarchical p2 shape functions for the simplex.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,42 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomassimplexbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ +hierarchicalsimplexp2withelementbubble.hh File Reference │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  P1 basis in dim-d enriched by quadratic edge bubble functions and an │ │ │ │ │ + element bubble function of order dim+1. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ +  The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_,_ _d_i_m │ │ │ │ │ + _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00305_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexbasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,72 +70,340 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexbasis.hh
│ │ │ │ +
hierarchicalsimplexp2withelementbubble.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17 /*
│ │ │ │ -
18 * `RTPreBasisFactory` provides a basis for the Raviart-Thomas function space.
│ │ │ │ -
19 * `RaviartThomasL2InterpolationFactory` provides the linear functionals.
│ │ │ │ -
20 *
│ │ │ │ -
21 * `Defaultbasisfactory::create` first builds the function space and the linear functionals.
│ │ │ │ -
22 * Then the constructor of `BasisMatrix` gets called. There the matrix
│ │ │ │ -
23 *
│ │ │ │ -
24 * \begin{equation}
│ │ │ │ -
25 * A_{i,j} := N_j(\phi_i)
│ │ │ │ -
26 * \end{equation}
│ │ │ │ -
27 *
│ │ │ │ -
28 * with linear functionals $N_j$ and basisfunctions $\phi_i$ gets assembled.
│ │ │ │ -
29 * Then the matrix gets inverted and is then used as a coefficient matrix for the standard monomial basis.
│ │ │ │ -
30 *
│ │ │ │ -
31 * For more details on the theory see the first chapter "Construction of Local Finite Element Spaces Using the Generic Reference Elements"
│ │ │ │ -
32 * of the book "Advances in Dune" by Dedner, Flemisch and Klöfkorn published in 2012.
│ │ │ │ -
33 */
│ │ │ │ -
34
│ │ │ │ -
35 template< unsigned int dim, class SF, class CF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 : public DefaultBasisFactory< RTPreBasisFactory<dim,CF>,
│ │ │ │ -
38 RaviartThomasL2InterpolationFactory<dim,CF>,
│ │ │ │ -
39 dim,dim,SF,CF >
│ │ │ │ -
40 {};
│ │ │ │ -
│ │ │ │ -
41}
│ │ │ │ -
42
│ │ │ │ -
43#endif // #ifndef DUNE_RAVIARTTHOMASBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
12#include <array>
│ │ │ │ +
13#include <cassert>
│ │ │ │ +
14#include <numeric>
│ │ │ │ +
15#include <stdexcept>
│ │ │ │ +
16#include <vector>
│ │ │ │ +
17
│ │ │ │ +
18#include <dune/common/fvector.hh>
│ │ │ │ +
19#include <dune/common/fmatrix.hh>
│ │ │ │ +
20#include <dune/common/math.hh>
│ │ │ │ +
21
│ │ │ │ +
22#include <dune/geometry/referenceelement.hh>
│ │ │ │ +
23
│ │ │ │ + │ │ │ │ + │ │ │ │ +
26
│ │ │ │ +
27namespace Dune
│ │ │ │ +
28{
│ │ │ │ +
44 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 {
│ │ │ │ + │ │ │ │ +
48
│ │ │ │ +
50 using DomainType = FieldVector<D,dim>;
│ │ │ │ +
51
│ │ │ │ +
53 using RangeType = FieldVector<R,1>;
│ │ │ │ +
54
│ │ │ │ +
56 using JacobianType = FieldMatrix<R,1,dim>;
│ │ │ │ +
57
│ │ │ │ +
58 // Number of vertices
│ │ │ │ +
59 static constexpr int numVertices = dim+1;
│ │ │ │ +
60
│ │ │ │ +
61 // Number of edges (or zero for dim==1)
│ │ │ │ +
62 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ +
63
│ │ │ │ +
64 // helper function to evaluate the vertex basis functions
│ │ │ │ +
65 template <class It>
│ │ │ │ +
66 static constexpr It evaluateVertexFunctions (const DomainType& in, It outIt)
│ │ │ │ +
67 {
│ │ │ │ +
68 *outIt = 1;
│ │ │ │ +
69 for (int i = 0; i < dim; ++i)
│ │ │ │ +
70 *outIt -= in[i];
│ │ │ │ +
71 ++outIt;
│ │ │ │ +
72 for (int i = 0; i < dim; ++i)
│ │ │ │ +
73 *outIt++ = in[i];
│ │ │ │ +
74 return outIt;
│ │ │ │ +
75 }
│ │ │ │ +
76
│ │ │ │ +
77 // helper function to evaluate the basis functions
│ │ │ │ +
78 template <class It>
│ │ │ │ +
79 static constexpr It evaluateAllFunctions (const DomainType& in, It outIt)
│ │ │ │ +
80 {
│ │ │ │ +
81 It vertexValues = outIt;
│ │ │ │ +
82 outIt = evaluateVertexFunctions(in, outIt);
│ │ │ │ +
83
│ │ │ │ +
84 if constexpr(dim > 1) {
│ │ │ │ +
85 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ +
86 for (int i = 0; i < numEdges; ++i) {
│ │ │ │ +
87 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
88 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
89 *outIt++ = 4 * vertexValues[v0] * vertexValues[v1];
│ │ │ │ +
90 }
│ │ │ │ +
91 }
│ │ │ │ +
92
│ │ │ │ +
93 // element bubble function
│ │ │ │ +
94 *outIt = power(dim+1, dim+1);
│ │ │ │ +
95 for (int i = 0; i < numVertices; ++i)
│ │ │ │ +
96 *outIt *= vertexValues[i];
│ │ │ │ +
97 return outIt;
│ │ │ │ +
98 }
│ │ │ │ +
99
│ │ │ │ +
100 public:
│ │ │ │ + │ │ │ │ +
103
│ │ │ │ +
│ │ │ │ +
105 static constexpr std::size_t size () noexcept
│ │ │ │ +
106 {
│ │ │ │ +
107 return numVertices + numEdges + 1;
│ │ │ │ +
108 }
│ │ │ │ +
│ │ │ │ +
109
│ │ │ │ +
│ │ │ │ +
111 static constexpr void evaluateFunction (const DomainType& in,
│ │ │ │ +
112 std::vector<RangeType>& out)
│ │ │ │ +
113 {
│ │ │ │ +
114 out.resize(size());
│ │ │ │ +
115 evaluateAllFunctions(in,out.begin());
│ │ │ │ +
116 }
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
│ │ │ │ +
119 static constexpr void evaluateJacobian (const DomainType& in,
│ │ │ │ +
120 std::vector<JacobianType>& out)
│ │ │ │ +
121 {
│ │ │ │ +
122 out.resize(size());
│ │ │ │ +
123
│ │ │ │ +
124 // vertex basis functions
│ │ │ │ +
125 RangeType tmp = 1;
│ │ │ │ +
126 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
127 out[0][0][i] = -1;
│ │ │ │ +
128 for (int j = 0; j < dim; ++j)
│ │ │ │ +
129 out[j+1][0][i] = (i == j);
│ │ │ │ +
130 tmp -= in[i];
│ │ │ │ +
131 }
│ │ │ │ +
132
│ │ │ │ +
133 int n = numVertices;
│ │ │ │ +
134 std::array<RangeType,numVertices> shapeValues;
│ │ │ │ +
135 evaluateVertexFunctions(in, shapeValues.begin());
│ │ │ │ +
136
│ │ │ │ +
137 // edge basis functions
│ │ │ │ +
138 if constexpr(dim > 1) {
│ │ │ │ +
139 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ +
140 for (int i = 0; i < numEdges; ++i,++n) {
│ │ │ │ +
141 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
142 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
143 for (int j = 0; j < dim; ++j)
│ │ │ │ +
144 out[n][0][j] = 4 * (out[v0][0][j] * shapeValues[v1] + shapeValues[v0] * out[v1][0][j]);
│ │ │ │ +
145 }
│ │ │ │ +
146 }
│ │ │ │ +
147
│ │ │ │ +
148 // element bubble function
│ │ │ │ +
149 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
150 out[n][0][i] = power(dim+1, dim+1) * (tmp - in[i]);
│ │ │ │ +
151 for (int j = i+1; j < dim+i; ++j)
│ │ │ │ +
152 out[n][0][i] *= in[j % dim];
│ │ │ │ +
153 }
│ │ │ │ +
154 }
│ │ │ │ +
│ │ │ │ +
155
│ │ │ │ +
│ │ │ │ +
157 static constexpr void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
158 const DomainType& in,
│ │ │ │ +
159 std::vector<RangeType>& out)
│ │ │ │ +
160 {
│ │ │ │ +
161 unsigned int totalOrder = 0;
│ │ │ │ +
162 for (int i = 0; i < dim; ++i)
│ │ │ │ +
163 totalOrder += order[i];
│ │ │ │ +
164
│ │ │ │ +
165 switch (totalOrder) {
│ │ │ │ +
166 case 0:
│ │ │ │ +
167 evaluateFunction(in,out);
│ │ │ │ +
168 break;
│ │ │ │ +
169 case 1: {
│ │ │ │ +
170 out.resize(size());
│ │ │ │ +
171 int d = 0; // the direction of differentiation
│ │ │ │ +
172 for (int i = 0; i < dim; ++i)
│ │ │ │ +
173 d += i * order[i];
│ │ │ │ +
174
│ │ │ │ +
175 // vertex basis functions
│ │ │ │ +
176 RangeType tmp = 1;
│ │ │ │ +
177 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
178 out[0] = -1;
│ │ │ │ +
179 for (int j = 0; j < dim; ++j)
│ │ │ │ +
180 out[j+1] = (dim == j);
│ │ │ │ +
181 tmp -= in[i];
│ │ │ │ +
182 }
│ │ │ │ +
183
│ │ │ │ +
184 int n = numVertices;
│ │ │ │ +
185 std::array<RangeType,numVertices> shapeValues;
│ │ │ │ +
186 evaluateVertexFunctions(in, shapeValues.begin());
│ │ │ │ +
187
│ │ │ │ +
188 // edge basis functions
│ │ │ │ +
189 if constexpr(dim > 1) {
│ │ │ │ +
190 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ +
191 for (int i = 0; i < numEdges; ++i,++n) {
│ │ │ │ +
192 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
193 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
194 out[n] = 4 * (out[v0] * shapeValues[v1] + shapeValues[v0] * out[v1]);
│ │ │ │ +
195 }
│ │ │ │ +
196 }
│ │ │ │ +
197
│ │ │ │ +
198 // element bubble function
│ │ │ │ +
199 out[n] = power(dim+1, dim+1) * (tmp - in[d]);
│ │ │ │ +
200 for (int j = d+1; j < dim+d; ++j)
│ │ │ │ +
201 out[n] *= in[j % dim];
│ │ │ │ +
202 } break;
│ │ │ │ +
203 default:
│ │ │ │ +
204 throw std::runtime_error("Desired derivative order is not implemented");
│ │ │ │ +
205 }
│ │ │ │ +
206 }
│ │ │ │ +
│ │ │ │ +
207
│ │ │ │ +
│ │ │ │ +
209 static constexpr unsigned int order () noexcept
│ │ │ │ +
210 {
│ │ │ │ +
211 return dim+1;
│ │ │ │ +
212 }
│ │ │ │ +
│ │ │ │ +
213 };
│ │ │ │ +
│ │ │ │ +
214
│ │ │ │ +
215
│ │ │ │ +
227 template <int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
229 {
│ │ │ │ +
230 // Number of vertices
│ │ │ │ +
231 static constexpr int numVertices = dim+1;
│ │ │ │ +
232
│ │ │ │ +
233 // Number of edges (or zero for dim==1)
│ │ │ │ +
234 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ +
235
│ │ │ │ +
236 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
239 {
│ │ │ │ +
240 int n = 0;
│ │ │ │ +
241 for (int i = 0; i < numVertices; ++i)
│ │ │ │ +
242 li_[n++] = LocalKey(i,dim,0); // Vertex
│ │ │ │ +
243 if constexpr(dim > 1) {
│ │ │ │ +
244 for (int i = 0; i < numEdges; ++i)
│ │ │ │ +
245 li_[n++] = LocalKey(i,dim-1,0); // Edges
│ │ │ │ +
246 }
│ │ │ │ +
247 li_[n++] = LocalKey(0,0,0); // Element
│ │ │ │ +
248 }
│ │ │ │ +
│ │ │ │ +
249
│ │ │ │ +
│ │ │ │ +
251 static constexpr std::size_t size () noexcept
│ │ │ │ +
252 {
│ │ │ │ +
253 return numVertices + numEdges + 1;
│ │ │ │ +
254 }
│ │ │ │ +
│ │ │ │ +
255
│ │ │ │ +
│ │ │ │ +
257 const LocalKey& localKey (std::size_t i) const noexcept
│ │ │ │ +
258 {
│ │ │ │ +
259 return li_[i];
│ │ │ │ +
260 }
│ │ │ │ +
│ │ │ │ +
261
│ │ │ │ +
262 private:
│ │ │ │ +
263 std::array<LocalKey, numVertices+numEdges+1> li_;
│ │ │ │ +
264 };
│ │ │ │ +
│ │ │ │ +
265
│ │ │ │ +
269 template<class LB, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
271 {
│ │ │ │ +
272 using LocalBasis = LB;
│ │ │ │ +
273 using DomainType = typename LB::Traits::DomainType;
│ │ │ │ +
274 using RangeType = typename LB::Traits::RangeType;
│ │ │ │ +
275
│ │ │ │ +
276 // Number of vertices
│ │ │ │ +
277 static constexpr int numVertices = dim+1;
│ │ │ │ +
278
│ │ │ │ +
279 // Number of edges (or zero for dim==1)
│ │ │ │ +
280 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ +
281
│ │ │ │ +
282 public:
│ │ │ │ +
290 template<class F, class C,
│ │ │ │ +
291 class R = std::invoke_result_t<F, DomainType>,
│ │ │ │ +
292 std::enable_if_t<std::is_convertible_v<R, C>, int> = 0>
│ │ │ │ +
│ │ │ │ +
293 static constexpr void interpolate (const F& f, std::vector<C>& out)
│ │ │ │ +
294 {
│ │ │ │ +
295 auto refElem = referenceElement<typename LB::Traits::DomainFieldType,dim>(GeometryTypes::simplex(dim));
│ │ │ │ +
296
│ │ │ │ +
297 out.resize(LB::size());
│ │ │ │ +
298 int n = 0;
│ │ │ │ +
299
│ │ │ │ +
300 // vertices
│ │ │ │ +
301 assert(numVertices == refElem.size(dim));
│ │ │ │ +
302 for (int i = 0; i < numVertices; ++i)
│ │ │ │ +
303 out[n++] = f(refElem.position(i,dim));
│ │ │ │ +
304
│ │ │ │ +
305 std::array<RangeType,LB::size()> shapeValues;
│ │ │ │ +
306
│ │ │ │ +
307 // edge bubbles
│ │ │ │ +
308 if constexpr(dim > 1) {
│ │ │ │ +
309 assert(numEdges == refElem.size(dim-1));
│ │ │ │ +
310 for (int i = 0; i < numEdges; ++i) {
│ │ │ │ +
311 R y = f(refElem.position(i,dim-1));
│ │ │ │ +
312 LB::evaluateVertexFunctions(refElem.position(i,dim-1), shapeValues.begin());
│ │ │ │ +
313 for (int j = 0; j < numVertices; ++j)
│ │ │ │ +
314 y -= out[j]*shapeValues[j];
│ │ │ │ +
315 out[n++] = y;
│ │ │ │ +
316 }
│ │ │ │ +
317 }
│ │ │ │ +
318
│ │ │ │ +
319 // element bubble
│ │ │ │ +
320 R y = f(refElem.position(0,0));
│ │ │ │ +
321 LB::evaluateAllFunctions(refElem.position(0,0), shapeValues.begin());
│ │ │ │ +
322 for (int j = 0; j < numVertices+numEdges; ++j)
│ │ │ │ +
323 y -= out[j]*shapeValues[j];
│ │ │ │ +
324 out[n++] = y;
│ │ │ │ +
325 }
│ │ │ │ +
│ │ │ │ +
326 };
│ │ │ │ +
│ │ │ │ +
327
│ │ │ │ +
328} // end namespace Dune
│ │ │ │ +
329
│ │ │ │ +
330#endif // DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition raviartthomassimplexbasis.hh:40
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order...
Definition hierarchicalsimplexp2withelementbubble.hh:46
│ │ │ │ +
static constexpr void evaluateFunction(const DomainType &in, std::vector< RangeType > &out)
Evaluate all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:111
│ │ │ │ +
static constexpr void partial(const std::array< unsigned int, dim > &order, const DomainType &in, std::vector< RangeType > &out)
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:157
│ │ │ │ +
static constexpr unsigned int order() noexcept
Polynomial order of the shape functions (4 in this case)
Definition hierarchicalsimplexp2withelementbubble.hh:209
│ │ │ │ +
static constexpr void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out)
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:119
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:105
│ │ │ │ +
The local keys of the hierarchical basis functions with element bubble.
Definition hierarchicalsimplexp2withelementbubble.hh:229
│ │ │ │ +
HierarchicalSimplexP2WithElementBubbleLocalCoefficients() noexcept
Default constructor, initializes the local keys.
Definition hierarchicalsimplexp2withelementbubble.hh:238
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of coefficients.
Definition hierarchicalsimplexp2withelementbubble.hh:251
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const noexcept
Returns the i'th local key.
Definition hierarchicalsimplexp2withelementbubble.hh:257
│ │ │ │ +
Definition hierarchicalsimplexp2withelementbubble.hh:271
│ │ │ │ +
static constexpr void interpolate(const F &f, std::vector< C > &out)
Local interpolation of the function f.
Definition hierarchicalsimplexp2withelementbubble.hh:293
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,70 +1,355 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ -raviartthomassimplexbasis.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e │ │ │ │ │ +hierarchicalsimplexp2withelementbubble.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 /* │ │ │ │ │ -18 * `RTPreBasisFactory` provides a basis for the Raviart-Thomas function │ │ │ │ │ -space. │ │ │ │ │ -19 * `RaviartThomasL2InterpolationFactory` provides the linear functionals. │ │ │ │ │ -20 * │ │ │ │ │ -21 * `Defaultbasisfactory::create` first builds the function space and the │ │ │ │ │ -linear functionals. │ │ │ │ │ -22 * Then the constructor of `BasisMatrix` gets called. There the matrix │ │ │ │ │ -23 * │ │ │ │ │ -24 * \begin{equation} │ │ │ │ │ -25 * A_{i,j} := N_j(\phi_i) │ │ │ │ │ -26 * \end{equation} │ │ │ │ │ -27 * │ │ │ │ │ -28 * with linear functionals $N_j$ and basisfunctions $\phi_i$ gets assembled. │ │ │ │ │ -29 * Then the matrix gets inverted and is then used as a coefficient matrix for │ │ │ │ │ -the standard monomial basis. │ │ │ │ │ -30 * │ │ │ │ │ -31 * For more details on the theory see the first chapter "Construction of │ │ │ │ │ -Local Finite Element Spaces Using the Generic Reference Elements" │ │ │ │ │ -32 * of the book "Advances in Dune" by Dedner, Flemisch and Klöfkorn published │ │ │ │ │ -in 2012. │ │ │ │ │ -33 */ │ │ │ │ │ -34 │ │ │ │ │ -35 template< unsigned int dim, class SF, class CF > │ │ │ │ │ -_3_6 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -37 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< RTPreBasisFactory, │ │ │ │ │ -38 RaviartThomasL2InterpolationFactory, │ │ │ │ │ -39 dim,dim,SF,CF > │ │ │ │ │ -40 {}; │ │ │ │ │ -41} │ │ │ │ │ -42 │ │ │ │ │ -43#endif // #ifndef DUNE_RAVIARTTHOMASBASIS_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include │ │ │ │ │ +19#include │ │ │ │ │ +20#include │ │ │ │ │ +21 │ │ │ │ │ +22#include │ │ │ │ │ +23 │ │ │ │ │ +24#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +25#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +26 │ │ │ │ │ +27namespace _D_u_n_e │ │ │ │ │ +28{ │ │ │ │ │ +44 template │ │ │ │ │ +_4_5 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +46 { │ │ │ │ │ +_4_7 template friend class │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +48 │ │ │ │ │ +50 using DomainType = FieldVector; │ │ │ │ │ +51 │ │ │ │ │ +53 using RangeType = FieldVector; │ │ │ │ │ +54 │ │ │ │ │ +56 using JacobianType = FieldMatrix; │ │ │ │ │ +57 │ │ │ │ │ +58 // Number of vertices │ │ │ │ │ +59 static constexpr int numVertices = dim+1; │ │ │ │ │ +60 │ │ │ │ │ +61 // Number of edges (or zero for dim==1) │ │ │ │ │ +62 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ +63 │ │ │ │ │ +64 // helper function to evaluate the vertex basis functions │ │ │ │ │ +65 template │ │ │ │ │ +66 static constexpr It evaluateVertexFunctions (const DomainType& in, It outIt) │ │ │ │ │ +67 { │ │ │ │ │ +68 *outIt = 1; │ │ │ │ │ +69 for (int i = 0; i < dim; ++i) │ │ │ │ │ +70 *outIt -= in[i]; │ │ │ │ │ +71 ++outIt; │ │ │ │ │ +72 for (int i = 0; i < dim; ++i) │ │ │ │ │ +73 *outIt++ = in[i]; │ │ │ │ │ +74 return outIt; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +77 // helper function to evaluate the basis functions │ │ │ │ │ +78 template │ │ │ │ │ +79 static constexpr It evaluateAllFunctions (const DomainType& in, It outIt) │ │ │ │ │ +80 { │ │ │ │ │ +81 It vertexValues = outIt; │ │ │ │ │ +82 outIt = evaluateVertexFunctions(in, outIt); │ │ │ │ │ +83 │ │ │ │ │ +84 if constexpr(dim > 1) { │ │ │ │ │ +85 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ +86 for (int i = 0; i < numEdges; ++i) { │ │ │ │ │ +87 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +88 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +89 *outIt++ = 4 * vertexValues[v0] * vertexValues[v1]; │ │ │ │ │ +90 } │ │ │ │ │ +91 } │ │ │ │ │ +92 │ │ │ │ │ +93 // element bubble function │ │ │ │ │ +94 *outIt = power(dim+1, dim+1); │ │ │ │ │ +95 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ +96 *outIt *= vertexValues[i]; │ │ │ │ │ +97 return outIt; │ │ │ │ │ +98 } │ │ │ │ │ +99 │ │ │ │ │ +100 public: │ │ │ │ │ +_1_0_2 using _T_r_a_i_t_s = │ │ │ │ │ +_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_o_m_a_i_n_T_y_p_e_,_R_,_1_,_R_a_n_g_e_T_y_p_e_,_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ +103 │ │ │ │ │ +_1_0_5 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +106 { │ │ │ │ │ +107 return numVertices + numEdges + 1; │ │ │ │ │ +108 } │ │ │ │ │ +109 │ │ │ │ │ +_1_1_1 static constexpr void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, │ │ │ │ │ +112 std::vector& out) │ │ │ │ │ +113 { │ │ │ │ │ +114 out.resize(_s_i_z_e()); │ │ │ │ │ +115 evaluateAllFunctions(in,out.begin()); │ │ │ │ │ +116 } │ │ │ │ │ +117 │ │ │ │ │ +_1_1_9 static constexpr void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, │ │ │ │ │ +120 std::vector& out) │ │ │ │ │ +121 { │ │ │ │ │ +122 out.resize(_s_i_z_e()); │ │ │ │ │ +123 │ │ │ │ │ +124 // vertex basis functions │ │ │ │ │ +125 RangeType tmp = 1; │ │ │ │ │ +126 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +127 out[0][0][i] = -1; │ │ │ │ │ +128 for (int j = 0; j < dim; ++j) │ │ │ │ │ +129 out[j+1][0][i] = (i == j); │ │ │ │ │ +130 tmp -= in[i]; │ │ │ │ │ +131 } │ │ │ │ │ +132 │ │ │ │ │ +133 int n = numVertices; │ │ │ │ │ +134 std::array shapeValues; │ │ │ │ │ +135 evaluateVertexFunctions(in, shapeValues.begin()); │ │ │ │ │ +136 │ │ │ │ │ +137 // edge basis functions │ │ │ │ │ +138 if constexpr(dim > 1) { │ │ │ │ │ +139 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ +140 for (int i = 0; i < numEdges; ++i,++n) { │ │ │ │ │ +141 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +142 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +143 for (int j = 0; j < dim; ++j) │ │ │ │ │ +144 out[n][0][j] = 4 * (out[v0][0][j] * shapeValues[v1] + shapeValues[v0] * out │ │ │ │ │ +[v1][0][j]); │ │ │ │ │ +145 } │ │ │ │ │ +146 } │ │ │ │ │ +147 │ │ │ │ │ +148 // element bubble function │ │ │ │ │ +149 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +150 out[n][0][i] = power(dim+1, dim+1) * (tmp - in[i]); │ │ │ │ │ +151 for (int j = i+1; j < dim+i; ++j) │ │ │ │ │ +152 out[n][0][i] *= in[j % dim]; │ │ │ │ │ +153 } │ │ │ │ │ +154 } │ │ │ │ │ +155 │ │ │ │ │ +_1_5_7 static constexpr void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +158 const DomainType& in, │ │ │ │ │ +159 std::vector& out) │ │ │ │ │ +160 { │ │ │ │ │ +161 unsigned int totalOrder = 0; │ │ │ │ │ +162 for (int i = 0; i < dim; ++i) │ │ │ │ │ +163 totalOrder += _o_r_d_e_r[i]; │ │ │ │ │ +164 │ │ │ │ │ +165 switch (totalOrder) { │ │ │ │ │ +166 case 0: │ │ │ │ │ +167 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in,out); │ │ │ │ │ +168 break; │ │ │ │ │ +169 case 1: { │ │ │ │ │ +170 out.resize(_s_i_z_e()); │ │ │ │ │ +171 int d = 0; // the direction of differentiation │ │ │ │ │ +172 for (int i = 0; i < dim; ++i) │ │ │ │ │ +173 d += i * _o_r_d_e_r[i]; │ │ │ │ │ +174 │ │ │ │ │ +175 // vertex basis functions │ │ │ │ │ +176 RangeType tmp = 1; │ │ │ │ │ +177 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +178 out[0] = -1; │ │ │ │ │ +179 for (int j = 0; j < dim; ++j) │ │ │ │ │ +180 out[j+1] = (dim == j); │ │ │ │ │ +181 tmp -= in[i]; │ │ │ │ │ +182 } │ │ │ │ │ +183 │ │ │ │ │ +184 int n = numVertices; │ │ │ │ │ +185 std::array shapeValues; │ │ │ │ │ +186 evaluateVertexFunctions(in, shapeValues.begin()); │ │ │ │ │ +187 │ │ │ │ │ +188 // edge basis functions │ │ │ │ │ +189 if constexpr(dim > 1) { │ │ │ │ │ +190 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ +191 for (int i = 0; i < numEdges; ++i,++n) { │ │ │ │ │ +192 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +193 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +194 out[n] = 4 * (out[v0] * shapeValues[v1] + shapeValues[v0] * out[v1]); │ │ │ │ │ +195 } │ │ │ │ │ +196 } │ │ │ │ │ +197 │ │ │ │ │ +198 // element bubble function │ │ │ │ │ +199 out[n] = power(dim+1, dim+1) * (tmp - in[d]); │ │ │ │ │ +200 for (int j = d+1; j < dim+d; ++j) │ │ │ │ │ +201 out[n] *= in[j % dim]; │ │ │ │ │ +202 } break; │ │ │ │ │ +203 default: │ │ │ │ │ +204 throw std::runtime_error("Desired derivative order is not implemented"); │ │ │ │ │ +205 } │ │ │ │ │ +206 } │ │ │ │ │ +207 │ │ │ │ │ +_2_0_9 static constexpr unsigned int _o_r_d_e_r () noexcept │ │ │ │ │ +210 { │ │ │ │ │ +211 return dim+1; │ │ │ │ │ +212 } │ │ │ │ │ +213 }; │ │ │ │ │ +214 │ │ │ │ │ +215 │ │ │ │ │ +227 template │ │ │ │ │ +_2_2_8 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +229 { │ │ │ │ │ +230 // Number of vertices │ │ │ │ │ +231 static constexpr int numVertices = dim+1; │ │ │ │ │ +232 │ │ │ │ │ +233 // Number of edges (or zero for dim==1) │ │ │ │ │ +234 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ +235 │ │ │ │ │ +236 public: │ │ │ │ │ +_2_3_8 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () noexcept │ │ │ │ │ +239 { │ │ │ │ │ +240 int n = 0; │ │ │ │ │ +241 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ +242 li_[n++] = _L_o_c_a_l_K_e_y(i,dim,0); // Vertex │ │ │ │ │ +243 if constexpr(dim > 1) { │ │ │ │ │ +244 for (int i = 0; i < numEdges; ++i) │ │ │ │ │ +245 li_[n++] = _L_o_c_a_l_K_e_y(i,dim-1,0); // Edges │ │ │ │ │ +246 } │ │ │ │ │ +247 li_[n++] = _L_o_c_a_l_K_e_y(0,0,0); // Element │ │ │ │ │ +248 } │ │ │ │ │ +249 │ │ │ │ │ +_2_5_1 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +252 { │ │ │ │ │ +253 return numVertices + numEdges + 1; │ │ │ │ │ +254 } │ │ │ │ │ +255 │ │ │ │ │ +_2_5_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const noexcept │ │ │ │ │ +258 { │ │ │ │ │ +259 return li_[i]; │ │ │ │ │ +260 } │ │ │ │ │ +261 │ │ │ │ │ +262 private: │ │ │ │ │ +263 std::array li_; │ │ │ │ │ +264 }; │ │ │ │ │ +265 │ │ │ │ │ +269 template │ │ │ │ │ +_2_7_0 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +271 { │ │ │ │ │ +272 using LocalBasis = LB; │ │ │ │ │ +273 using DomainType = typename LB::Traits::DomainType; │ │ │ │ │ +274 using RangeType = typename LB::Traits::RangeType; │ │ │ │ │ +275 │ │ │ │ │ +276 // Number of vertices │ │ │ │ │ +277 static constexpr int numVertices = dim+1; │ │ │ │ │ +278 │ │ │ │ │ +279 // Number of edges (or zero for dim==1) │ │ │ │ │ +280 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ +281 │ │ │ │ │ +282 public: │ │ │ │ │ +290 template, │ │ │ │ │ +292 std::enable_if_t, int> = 0> │ │ │ │ │ +_2_9_3 static constexpr void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) │ │ │ │ │ +294 { │ │ │ │ │ +295 auto refElem = referenceElement │ │ │ │ │ +(GeometryTypes::simplex(dim)); │ │ │ │ │ +296 │ │ │ │ │ +297 out.resize(LB::size()); │ │ │ │ │ +298 int n = 0; │ │ │ │ │ +299 │ │ │ │ │ +300 // vertices │ │ │ │ │ +301 assert(numVertices == refElem.size(dim)); │ │ │ │ │ +302 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ +303 out[n++] = f(refElem.position(i,dim)); │ │ │ │ │ +304 │ │ │ │ │ +305 std::array shapeValues; │ │ │ │ │ +306 │ │ │ │ │ +307 // edge bubbles │ │ │ │ │ +308 if constexpr(dim > 1) { │ │ │ │ │ +309 assert(numEdges == refElem.size(dim-1)); │ │ │ │ │ +310 for (int i = 0; i < numEdges; ++i) { │ │ │ │ │ +311 R y = f(refElem.position(i,dim-1)); │ │ │ │ │ +312 LB::evaluateVertexFunctions(refElem.position(i,dim-1), shapeValues.begin │ │ │ │ │ +()); │ │ │ │ │ +313 for (int j = 0; j < numVertices; ++j) │ │ │ │ │ +314 y -= out[j]*shapeValues[j]; │ │ │ │ │ +315 out[n++] = y; │ │ │ │ │ +316 } │ │ │ │ │ +317 } │ │ │ │ │ +318 │ │ │ │ │ +319 // element bubble │ │ │ │ │ +320 R y = f(refElem.position(0,0)); │ │ │ │ │ +321 LB::evaluateAllFunctions(refElem.position(0,0), shapeValues.begin()); │ │ │ │ │ +322 for (int j = 0; j < numVertices+numEdges; ++j) │ │ │ │ │ +323 y -= out[j]*shapeValues[j]; │ │ │ │ │ +324 out[n++] = y; │ │ │ │ │ +325 } │ │ │ │ │ +326 }; │ │ │ │ │ +327 │ │ │ │ │ +328} // end namespace Dune │ │ │ │ │ +329 │ │ │ │ │ +330#endif // DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +P1 basis in dim-d enriched by quadratic edge bubble functions and an element │ │ │ │ │ +bubble function of order... │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +static constexpr void evaluateFunction(const DomainType &in, std::vector< │ │ │ │ │ +RangeType > &out) │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +static constexpr void partial(const std::array< unsigned int, dim > &order, │ │ │ │ │ +const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:157 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +static constexpr unsigned int order() noexcept │ │ │ │ │ +Polynomial order of the shape functions (4 in this case) │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:209 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +static constexpr void evaluateJacobian(const DomainType &in, std::vector< │ │ │ │ │ +JacobianType > &out) │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:229 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_: │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +HierarchicalSimplexP2WithElementBubbleLocalCoefficients() noexcept │ │ │ │ │ +Default constructor, initializes the local keys. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:238 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns number of coefficients. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:251 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const noexcept │ │ │ │ │ +Returns the i'th local key. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:257 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:271 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +static constexpr void interpolate(const F &f, std::vector< C > &out) │ │ │ │ │ +Local interpolation of the function f. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:293 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp2withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplexinterpolation.hh File Reference
│ │ │ │ +
hierarchicalp2withelementbubble.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/utility/interpolationhelper.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalCoefficientsContainer
 
struct  Dune::RaviartThomasCoefficientsFactory< dim >
 
struct  Dune::RTL2InterpolationBuilder< dim, Field >
 
class  Dune::RaviartThomasL2Interpolation< dimension, F >
 An L2-based interpolation for Raviart Thomas. More...
 
struct  Dune::RaviartThomasL2InterpolationFactory< dim, Field >
class  Dune::HierarchicalP2WithElementBubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble function. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,39 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomassimplexinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +hierarchicalp2withelementbubble.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_/ │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> │ │ │ │ │ -  An L2-based interpolation for Raviart Thomas. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Linear Lagrange functions enriched with quadratic edge bubble functions │ │ │ │ │ + and an element bubble function. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00308_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplexinterpolation.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp2withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,547 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplexinterpolation.hh
│ │ │ │ +
hierarchicalp2withelementbubble.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/exceptions.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │
12
│ │ │ │ -
13#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
15#include <dune/geometry/type.hh>
│ │ │ │ -
16#include <dune/geometry/typeindex.hh>
│ │ │ │ -
17
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23namespace Dune
│ │ │ │ -
24{
│ │ │ │ -
25
│ │ │ │ -
26 // Internal Forward Declarations
│ │ │ │ -
27 // -----------------------------
│ │ │ │ -
28
│ │ │ │ -
29 template < unsigned int dim, class Field >
│ │ │ │ -
30 struct RaviartThomasL2InterpolationFactory;
│ │ │ │ -
31
│ │ │ │ -
32
│ │ │ │ -
33
│ │ │ │ -
34 // LocalCoefficientsContainer
│ │ │ │ -
35 // --------------------------
│ │ │ │ -
36
│ │ │ │ -
37 class LocalCoefficientsContainer
│ │ │ │ -
38 {
│ │ │ │ -
39 typedef LocalCoefficientsContainer This;
│ │ │ │ -
40
│ │ │ │ -
41 public:
│ │ │ │ -
42 template <class Setter>
│ │ │ │ -
│ │ │ │ -
43 LocalCoefficientsContainer ( const Setter &setter )
│ │ │ │ -
44 {
│ │ │ │ -
45 setter.setLocalKeys(localKey_);
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
32 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
34 {
│ │ │ │ +
35 public:
│ │ │ │ + │ │ │ │ +
38
│ │ │ │ + │ │ │ │ +
41
│ │ │ │ + │ │ │ │ +
44
│ │ │ │ + │ │ │ │
47
│ │ │ │ -
│ │ │ │ -
48 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ -
49 {
│ │ │ │ -
50 assert( i < size() );
│ │ │ │ -
51 return localKey_[ i ];
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
54 std::size_t size () const
│ │ │ │ -
55 {
│ │ │ │ -
56 return localKey_.size();
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
59 private:
│ │ │ │ -
60 std::vector< LocalKey > localKey_;
│ │ │ │ -
61 };
│ │ │ │ -
62
│ │ │ │ -
63
│ │ │ │ -
64
│ │ │ │ -
65 // RaviartThomasCoefficientsFactory
│ │ │ │ -
66 // --------------------------------
│ │ │ │ -
67
│ │ │ │ -
68 template < unsigned int dim >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
70 {
│ │ │ │ -
71 typedef std::size_t Key;
│ │ │ │ - │ │ │ │ -
73
│ │ │ │ -
74 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
75 static Object *create( const Key &key )
│ │ │ │ -
76 {
│ │ │ │ -
77 typedef RaviartThomasL2InterpolationFactory< dim, double > InterpolationFactory;
│ │ │ │ -
78 if( !supports< geometryId >( key ) )
│ │ │ │ -
79 return nullptr;
│ │ │ │ -
80 typename InterpolationFactory::Object *interpolation = InterpolationFactory::template create< geometryId >( key );
│ │ │ │ -
81 Object *localKeys = new Object( *interpolation );
│ │ │ │ -
82 InterpolationFactory::release( interpolation );
│ │ │ │ -
83 return localKeys;
│ │ │ │ -
84 }
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
87 static bool supports ( const Key &key )
│ │ │ │ -
88 {
│ │ │ │ -
89 return GeometryType(geometryId).isSimplex();
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ -
91 static void release( Object *object ) { delete object; }
│ │ │ │ -
92 };
│ │ │ │ -
│ │ │ │ -
93
│ │ │ │ -
94
│ │ │ │ -
95
│ │ │ │ -
96 // RTL2InterpolationBuilder
│ │ │ │ -
97 // ------------------------
│ │ │ │ -
98
│ │ │ │ -
99 // L2 Interpolation requires:
│ │ │ │ -
100 // - for element
│ │ │ │ -
101 // - test basis
│ │ │ │ -
102 // - for each face (dynamic)
│ │ │ │ -
103 // - test basis
│ │ │ │ -
104 // - normal
│ │ │ │ -
105 template< unsigned int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
107 {
│ │ │ │ -
108 static const unsigned int dimension = dim;
│ │ │ │ -
109
│ │ │ │ -
110 // for the dofs associated to the element
│ │ │ │ - │ │ │ │ - │ │ │ │ -
113
│ │ │ │ -
114 // for the dofs associated to the faces
│ │ │ │ - │ │ │ │ - │ │ │ │ -
117
│ │ │ │ -
118 // the normals of the faces
│ │ │ │ -
119 typedef FieldVector< Field, dimension > Normal;
│ │ │ │ -
120
│ │ │ │ - │ │ │ │ -
122
│ │ │ │ - │ │ │ │ - │ │ │ │ -
125
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
127 {
│ │ │ │ -
128 TestBasisFactory::release( testBasis_ );
│ │ │ │ -
129 for( FaceStructure &f : faceStructure_ )
│ │ │ │ - │ │ │ │ -
131 }
│ │ │ │ -
│ │ │ │ -
132
│ │ │ │ -
133 GeometryType type () const { return geometry_; }
│ │ │ │ -
134
│ │ │ │ -
135 std::size_t order () const { return order_; }
│ │ │ │ -
136
│ │ │ │ -
137 // number of faces
│ │ │ │ -
138 unsigned int faceSize () const { return faceSize_; }
│ │ │ │ -
139
│ │ │ │ -
140 // basis associated to the element
│ │ │ │ -
141 TestBasis *testBasis () const { return testBasis_; }
│ │ │ │ -
142
│ │ │ │ -
143 // basis associated to face f
│ │ │ │ -
144 TestFaceBasis *testFaceBasis ( unsigned int f ) const { assert( f < faceSize() ); return faceStructure_[ f ].basis_; }
│ │ │ │ -
145
│ │ │ │ -
146 // normal of face f
│ │ │ │ -
147 const Normal normal ( unsigned int f ) const { assert( f < faceSize() ); return faceStructure_[ f ].normal_; }
│ │ │ │ -
148
│ │ │ │ -
149 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
150 void build ( std::size_t order )
│ │ │ │ -
151 {
│ │ │ │ -
152 constexpr GeometryType geometry = geometryId;
│ │ │ │ -
153 geometry_ = geometry;
│ │ │ │ -
154 order_ = order;
│ │ │ │ -
155
│ │ │ │ -
156 testBasis_ = (order > 0 ? TestBasisFactory::template create< geometry >( order-1 ) : nullptr);
│ │ │ │ -
157
│ │ │ │ -
158 const auto &refElement = ReferenceElements< Field, dimension >::general( type() );
│ │ │ │ -
159 faceSize_ = refElement.size( 1 );
│ │ │ │ -
160 faceStructure_.reserve( faceSize_ );
│ │ │ │ -
161 for( unsigned int face = 0; face < faceSize_; ++face )
│ │ │ │ -
162 {
│ │ │ │ -
163 /* For simplices or cubes of arbitrary dimension you could just use
│ │ │ │ -
164 *
│ │ │ │ -
165 * ```
│ │ │ │ -
166 * GeometryType faceGeometry = Impl::getBase(geometry_);
│ │ │ │ -
167 * TestFaceBasis *faceBasis = TestFaceBasisFactory::template create< faceGeometry >( order );
│ │ │ │ -
168 * ```
│ │ │ │ -
169 *
│ │ │ │ -
170 * For i.e. Prisms and Pyramids in 3d this does not work because they contain squares and triangles as faces.
│ │ │ │ -
171 * And depending on the dynamic face index a different face geometry is needed.
│ │ │ │ -
172 *
│ │ │ │ -
173 */
│ │ │ │ -
174 TestFaceBasis *faceBasis = Impl::toGeometryTypeIdConstant<dimension-1>(refElement.type( face, 1 ), [&](auto faceGeometryTypeId) {
│ │ │ │ -
175 return TestFaceBasisFactory::template create< decltype(faceGeometryTypeId)::value >( order );
│ │ │ │ -
176 });
│ │ │ │ -
177 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal( face ) );
│ │ │ │ -
178 }
│ │ │ │ -
179 assert( faceStructure_.size() == faceSize_ );
│ │ │ │ -
180 }
│ │ │ │ -
│ │ │ │ -
181
│ │ │ │ -
182 private:
│ │ │ │ -
183 struct FaceStructure
│ │ │ │ -
184 {
│ │ │ │ -
185 FaceStructure( TestFaceBasis *tfb, const Normal n )
│ │ │ │ -
186 : basis_( tfb ), normal_( n )
│ │ │ │ -
187 {}
│ │ │ │ -
188
│ │ │ │ -
189 TestFaceBasis *basis_;
│ │ │ │ -
190 const Dune::FieldVector< Field, dimension > normal_;
│ │ │ │ -
191 };
│ │ │ │ -
192
│ │ │ │ -
193 std::vector< FaceStructure > faceStructure_;
│ │ │ │ -
194 TestBasis *testBasis_ = nullptr;
│ │ │ │ -
195 GeometryType geometry_;
│ │ │ │ -
196 unsigned int faceSize_;
│ │ │ │ -
197 std::size_t order_;
│ │ │ │ -
198 };
│ │ │ │ -
│ │ │ │ -
199
│ │ │ │ -
200
│ │ │ │ -
201
│ │ │ │ -
202 // RaviartThomasL2Interpolation
│ │ │ │ -
203 // ----------------------------
│ │ │ │ -
204
│ │ │ │ -
210 template< unsigned int dimension, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
212 : public InterpolationHelper< F ,dimension >
│ │ │ │ -
213 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
216
│ │ │ │ -
217 public:
│ │ │ │ -
218 typedef F Field;
│ │ │ │ - │ │ │ │ -
│ │ │ │ - │ │ │ │ -
221 : order_(0),
│ │ │ │ -
222 size_(0)
│ │ │ │ -
223 {}
│ │ │ │ -
│ │ │ │ -
224
│ │ │ │ -
225 template< class Function, class Vector,
│ │ │ │ -
226 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ -
227 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
228 void interpolate ( const Function &function, Vector &coefficients ) const
│ │ │ │ -
229 {
│ │ │ │ -
230 coefficients.resize(size());
│ │ │ │ -
231 typename Base::template Helper<Function,Vector,true> func( function,coefficients );
│ │ │ │ -
232 interpolate(func);
│ │ │ │ -
233 }
│ │ │ │ -
│ │ │ │ -
234
│ │ │ │ -
235 template< class Basis, class Matrix,
│ │ │ │ -
236 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ -
237 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ -
238 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
239 void interpolate ( const Basis &basis, Matrix &matrix ) const
│ │ │ │ -
240 {
│ │ │ │ -
241 matrix.resize( size(), basis.size() );
│ │ │ │ -
242 typename Base::template Helper<Basis,Matrix,false> func( basis,matrix );
│ │ │ │ -
243 interpolate(func);
│ │ │ │ -
244 }
│ │ │ │ -
│ │ │ │ -
245
│ │ │ │ -
│ │ │ │ -
246 std::size_t order() const
│ │ │ │ -
247 {
│ │ │ │ -
248 return order_;
│ │ │ │ -
249 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
250 std::size_t size() const
│ │ │ │ -
251 {
│ │ │ │ -
252 return size_;
│ │ │ │ -
253 }
│ │ │ │ -
│ │ │ │ -
254 template <GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
255 void build( std::size_t order )
│ │ │ │ -
256 {
│ │ │ │ -
257 size_ = 0;
│ │ │ │ -
258 order_ = order;
│ │ │ │ -
259 builder_.template build<geometryId>(order_);
│ │ │ │ -
260 if (builder_.testBasis())
│ │ │ │ -
261 size_ += dimension*builder_.testBasis()->size();
│ │ │ │ -
262 for ( unsigned int f=0; f<builder_.faceSize(); ++f )
│ │ │ │ -
263 if (builder_.testFaceBasis(f))
│ │ │ │ -
264 size_ += builder_.testFaceBasis(f)->size();
│ │ │ │ -
265 }
│ │ │ │ -
│ │ │ │ -
266
│ │ │ │ -
│ │ │ │ -
267 void setLocalKeys(std::vector< LocalKey > &keys) const
│ │ │ │ -
268 {
│ │ │ │ -
269 keys.resize(size());
│ │ │ │ -
270 unsigned int row = 0;
│ │ │ │ -
271 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ -
272 {
│ │ │ │ -
273 if (builder_.faceSize())
│ │ │ │ -
274 for (unsigned int i=0; i<builder_.testFaceBasis(f)->size(); ++i,++row)
│ │ │ │ -
275 keys[row] = LocalKey(f,1,i);
│ │ │ │ -
276 }
│ │ │ │ -
277 if (builder_.testBasis())
│ │ │ │ -
278 for (unsigned int i=0; i<builder_.testBasis()->size()*dimension; ++i,++row)
│ │ │ │ -
279 keys[row] = LocalKey(0,0,i);
│ │ │ │ -
280 assert( row == size() );
│ │ │ │ -
281 }
│ │ │ │ -
│ │ │ │ -
282
│ │ │ │ -
283 protected:
│ │ │ │ -
284 template< class Func, class Container, bool type >
│ │ │ │ -
│ │ │ │ -
285 void interpolate ( typename Base::template Helper<Func,Container,type> &func ) const
│ │ │ │ -
286 {
│ │ │ │ -
287 const Dune::GeometryType geoType = builder_.type();
│ │ │ │ -
288
│ │ │ │ -
289 std::vector< Field > testBasisVal;
│ │ │ │ -
290
│ │ │ │ -
291 for (unsigned int i=0; i<size(); ++i)
│ │ │ │ -
292 for (unsigned int j=0; j<func.size(); ++j)
│ │ │ │ -
293 func.set(i,j,0);
│ │ │ │ -
294
│ │ │ │ -
295 unsigned int row = 0;
│ │ │ │ -
296
│ │ │ │ -
297 // boundary dofs:
│ │ │ │ -
298 typedef Dune::QuadratureRule<Field, dimension-1> FaceQuadrature;
│ │ │ │ -
299 typedef Dune::QuadratureRules<Field, dimension-1> FaceQuadratureRules;
│ │ │ │ -
300
│ │ │ │ -
301 const auto &refElement = Dune::ReferenceElements< Field, dimension >::general( geoType );
│ │ │ │ -
302
│ │ │ │ -
303 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ -
304 {
│ │ │ │ -
305 if (!builder_.testFaceBasis(f))
│ │ │ │ -
306 continue;
│ │ │ │ -
307 testBasisVal.resize(builder_.testFaceBasis(f)->size());
│ │ │ │ -
308
│ │ │ │ -
309 const auto &geometry = refElement.template geometry< 1 >( f );
│ │ │ │ -
310 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 );
│ │ │ │ -
311 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ -
312
│ │ │ │ -
313 const unsigned int quadratureSize = faceQuad.size();
│ │ │ │ -
314 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ -
315 {
│ │ │ │ -
316 if (dimension>1)
│ │ │ │ -
317 builder_.testFaceBasis(f)->template evaluate<0>(faceQuad[qi].position(),testBasisVal);
│ │ │ │ -
318 else
│ │ │ │ -
319 testBasisVal[0] = 1.;
│ │ │ │ -
320 fillBnd( row, testBasisVal,
│ │ │ │ -
321 func.evaluate( geometry.global( faceQuad[qi].position() ) ),
│ │ │ │ -
322 builder_.normal(f), faceQuad[qi].weight(),
│ │ │ │ -
323 func);
│ │ │ │ -
324 }
│ │ │ │ -
325
│ │ │ │ -
326 row += builder_.testFaceBasis(f)->size();
│ │ │ │ -
327 }
│ │ │ │ -
328 // element dofs
│ │ │ │ -
329 if (builder_.testBasis())
│ │ │ │ -
330 {
│ │ │ │ -
331 testBasisVal.resize(builder_.testBasis()->size());
│ │ │ │ -
332
│ │ │ │ -
333 typedef Dune::QuadratureRule<Field, dimension> Quadrature;
│ │ │ │ -
334 typedef Dune::QuadratureRules<Field, dimension> QuadratureRules;
│ │ │ │ -
335 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 );
│ │ │ │ -
336
│ │ │ │ -
337 const unsigned int quadratureSize = elemQuad.size();
│ │ │ │ -
338 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ -
339 {
│ │ │ │ -
340 builder_.testBasis()->template evaluate<0>(elemQuad[qi].position(),testBasisVal);
│ │ │ │ -
341 fillInterior( row, testBasisVal,
│ │ │ │ -
342 func.evaluate(elemQuad[qi].position()),
│ │ │ │ -
343 elemQuad[qi].weight(),
│ │ │ │ -
344 func );
│ │ │ │ -
345 }
│ │ │ │ -
346
│ │ │ │ -
347 row += builder_.testBasis()->size()*dimension;
│ │ │ │ -
348 }
│ │ │ │ -
349 assert(row==size());
│ │ │ │ -
350 }
│ │ │ │ -
│ │ │ │ -
351
│ │ │ │ -
352 private:
│ │ │ │ -
362 template <class MVal, class RTVal,class Matrix>
│ │ │ │ -
363 void fillBnd (unsigned int startRow,
│ │ │ │ -
364 const MVal &mVal,
│ │ │ │ -
365 const RTVal &rtVal,
│ │ │ │ -
366 const FieldVector<Field,dimension> &normal,
│ │ │ │ -
367 const Field &weight,
│ │ │ │ -
368 Matrix &matrix) const
│ │ │ │ -
369 {
│ │ │ │ -
370 const unsigned int endRow = startRow+mVal.size();
│ │ │ │ -
371 typename RTVal::const_iterator rtiter = rtVal.begin();
│ │ │ │ -
372 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col)
│ │ │ │ -
373 {
│ │ │ │ -
374 Field cFactor = (*rtiter)*normal;
│ │ │ │ -
375 typename MVal::const_iterator miter = mVal.begin();
│ │ │ │ -
376 for (unsigned int row = startRow;
│ │ │ │ -
377 row!=endRow; ++miter, ++row )
│ │ │ │ -
378 {
│ │ │ │ -
379 matrix.add(row,col, (weight*cFactor)*(*miter) );
│ │ │ │ -
380 }
│ │ │ │ -
381 assert( miter == mVal.end() );
│ │ │ │ -
382 }
│ │ │ │ -
383 }
│ │ │ │ -
392 template <class MVal, class RTVal,class Matrix>
│ │ │ │ -
393 void fillInterior (unsigned int startRow,
│ │ │ │ -
394 const MVal &mVal,
│ │ │ │ -
395 const RTVal &rtVal,
│ │ │ │ -
396 Field weight,
│ │ │ │ -
397 Matrix &matrix) const
│ │ │ │ -
398 {
│ │ │ │ -
399 const unsigned int endRow = startRow+mVal.size()*dimension;
│ │ │ │ -
400 typename RTVal::const_iterator rtiter = rtVal.begin();
│ │ │ │ -
401 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col)
│ │ │ │ -
402 {
│ │ │ │ -
403 typename MVal::const_iterator miter = mVal.begin();
│ │ │ │ -
404 for (unsigned int row = startRow;
│ │ │ │ -
405 row!=endRow; ++miter,row+=dimension )
│ │ │ │ -
406 {
│ │ │ │ -
407 for (unsigned int i=0; i<dimension; ++i)
│ │ │ │ -
408 {
│ │ │ │ -
409 matrix.add(row+i,col, (weight*(*miter))*(*rtiter)[i] );
│ │ │ │ -
410 }
│ │ │ │ -
411 }
│ │ │ │ -
412 assert( miter == mVal.end() );
│ │ │ │ -
413 }
│ │ │ │ -
414 }
│ │ │ │ -
415
│ │ │ │ -
416 Builder builder_;
│ │ │ │ -
417 std::size_t order_;
│ │ │ │ -
418 std::size_t size_;
│ │ │ │ -
419 };
│ │ │ │ -
│ │ │ │ -
420
│ │ │ │ -
421 template < unsigned int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
423 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
426 typedef std::size_t Key;
│ │ │ │ -
427 typedef typename std::remove_const<Object>::type NonConstObject;
│ │ │ │ -
428
│ │ │ │ -
429 template <GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
430 static Object *create( const Key &key )
│ │ │ │ -
431 {
│ │ │ │ -
432 if ( !supports<geometryId>(key) )
│ │ │ │ -
433 return 0;
│ │ │ │ -
434 NonConstObject *interpol = new NonConstObject();
│ │ │ │ -
435 interpol->template build<geometryId>(key);
│ │ │ │ -
436 return interpol;
│ │ │ │ -
437 }
│ │ │ │ -
│ │ │ │ -
438 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
439 static bool supports ( const Key &key )
│ │ │ │ -
440 {
│ │ │ │ -
441 return GeometryType(geometryId).isSimplex();
│ │ │ │ -
442 }
│ │ │ │ -
│ │ │ │ -
443 static void release( Object *object ) { delete object; }
│ │ │ │ -
444 };
│ │ │ │ -
│ │ │ │ -
445
│ │ │ │ -
446} // namespace Dune
│ │ │ │ -
447
│ │ │ │ -
448#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
50 const LocalBasisType& localBasis () const
│ │ │ │ +
51 {
│ │ │ │ +
52 return basis_;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 return coefficients_;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
63 {
│ │ │ │ +
64 return interpolation_;
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
│ │ │ │ +
68 static constexpr std::size_t size () noexcept
│ │ │ │ +
69 {
│ │ │ │ +
70 return LocalBasisType::size();
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
│ │ │ │ +
74 static constexpr GeometryType type () noexcept
│ │ │ │ +
75 {
│ │ │ │ +
76 return GeometryTypes::simplex(dim);
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79 private:
│ │ │ │ +
80 LocalCoefficientsType coefficients_{};
│ │ │ │ +
81 [[no_unique_address]] LocalBasisType basis_{};
│ │ │ │ +
82 [[no_unique_address]] LocalInterpolationType interpolation_{};
│ │ │ │ +
83 };
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
85}
│ │ │ │ +
86
│ │ │ │ +
87#endif
│ │ │ │ +
Hierarchical p2 shape functions for the simplex.
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition nedelecsimplexinterpolation.hh:41
│ │ │ │ -
LocalCoefficientsContainer(const Setter &setter)
Definition nedelecsimplexinterpolation.hh:46
│ │ │ │ -
const LocalKey & localKey(const unsigned int i) const
Definition raviartthomassimplexinterpolation.hh:48
│ │ │ │ -
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:57
│ │ │ │ -
Definition orthonormalbasis.hh:20
│ │ │ │ -
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │ -
Definition raviartthomassimplexinterpolation.hh:423
│ │ │ │ -
std::remove_const< Object >::type NonConstObject
Definition raviartthomassimplexinterpolation.hh:427
│ │ │ │ -
static void release(Object *object)
Definition raviartthomassimplexinterpolation.hh:443
│ │ │ │ -
static bool supports(const Key &key)
Definition raviartthomassimplexinterpolation.hh:439
│ │ │ │ -
static Object * create(const Key &key)
Definition raviartthomassimplexinterpolation.hh:430
│ │ │ │ -
RTL2InterpolationBuilder< dim, Field > Builder
Definition raviartthomassimplexinterpolation.hh:424
│ │ │ │ -
const RaviartThomasL2Interpolation< dim, Field > Object
Definition raviartthomassimplexinterpolation.hh:425
│ │ │ │ -
std::size_t Key
Definition raviartthomassimplexinterpolation.hh:426
│ │ │ │ -
Definition raviartthomassimplexinterpolation.hh:70
│ │ │ │ -
std::size_t Key
Definition raviartthomassimplexinterpolation.hh:71
│ │ │ │ -
static void release(Object *object)
Definition raviartthomassimplexinterpolation.hh:91
│ │ │ │ -
static bool supports(const Key &key)
Definition raviartthomassimplexinterpolation.hh:87
│ │ │ │ -
const LocalCoefficientsContainer Object
Definition raviartthomassimplexinterpolation.hh:72
│ │ │ │ -
static Object * create(const Key &key)
Definition raviartthomassimplexinterpolation.hh:75
│ │ │ │ -
Definition raviartthomassimplexinterpolation.hh:107
│ │ │ │ -
TestBasis * testBasis() const
Definition raviartthomassimplexinterpolation.hh:141
│ │ │ │ -
FieldVector< Field, dimension > Normal
Definition raviartthomassimplexinterpolation.hh:119
│ │ │ │ -
TestBasisFactory::Object TestBasis
Definition raviartthomassimplexinterpolation.hh:112
│ │ │ │ -
TestFaceBasisFactory::Object TestFaceBasis
Definition raviartthomassimplexinterpolation.hh:116
│ │ │ │ -
const Normal normal(unsigned int f) const
Definition raviartthomassimplexinterpolation.hh:147
│ │ │ │ -
unsigned int faceSize() const
Definition raviartthomassimplexinterpolation.hh:138
│ │ │ │ -
void build(std::size_t order)
Definition raviartthomassimplexinterpolation.hh:150
│ │ │ │ - │ │ │ │ -
TestFaceBasis * testFaceBasis(unsigned int f) const
Definition raviartthomassimplexinterpolation.hh:144
│ │ │ │ -
GeometryType type() const
Definition raviartthomassimplexinterpolation.hh:133
│ │ │ │ -
RTL2InterpolationBuilder(const RTL2InterpolationBuilder &)=delete
│ │ │ │ -
OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory
Definition raviartthomassimplexinterpolation.hh:115
│ │ │ │ -
RTL2InterpolationBuilder(RTL2InterpolationBuilder &&)=delete
│ │ │ │ -
OrthonormalBasisFactory< dimension, Field > TestBasisFactory
Definition raviartthomassimplexinterpolation.hh:111
│ │ │ │ -
std::size_t order() const
Definition raviartthomassimplexinterpolation.hh:135
│ │ │ │ -
static const unsigned int dimension
Definition raviartthomassimplexinterpolation.hh:108
│ │ │ │ -
~RTL2InterpolationBuilder()
Definition raviartthomassimplexinterpolation.hh:126
│ │ │ │ -
An L2-based interpolation for Raviart Thomas.
Definition raviartthomassimplexinterpolation.hh:213
│ │ │ │ -
std::size_t order() const
Definition raviartthomassimplexinterpolation.hh:246
│ │ │ │ -
void interpolate(const Function &function, Vector &coefficients) const
Definition raviartthomassimplexinterpolation.hh:228
│ │ │ │ -
RaviartThomasL2Interpolation()
Definition raviartthomassimplexinterpolation.hh:220
│ │ │ │ -
void interpolate(typename Base::template Helper< Func, Container, type > &func) const
Definition raviartthomassimplexinterpolation.hh:285
│ │ │ │ -
RTL2InterpolationBuilder< dimension, Field > Builder
Definition raviartthomassimplexinterpolation.hh:219
│ │ │ │ -
F Field
Definition raviartthomassimplexinterpolation.hh:218
│ │ │ │ -
void build(std::size_t order)
Definition raviartthomassimplexinterpolation.hh:255
│ │ │ │ -
std::size_t size() const
Definition raviartthomassimplexinterpolation.hh:250
│ │ │ │ -
void setLocalKeys(std::vector< LocalKey > &keys) const
Definition raviartthomassimplexinterpolation.hh:267
│ │ │ │ -
Definition interpolationhelper.hh:21
│ │ │ │ -
Definition interpolationhelper.hh:23
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ -
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble functio...
Definition hierarchicalp2withelementbubble.hh:34
│ │ │ │ +
HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim > LocalBasisType
Type of the local basis.
Definition hierarchicalp2withelementbubble.hh:37
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns the number of shape functions in this finite-element.
Definition hierarchicalp2withelementbubble.hh:68
│ │ │ │ +
static constexpr GeometryType type() noexcept
Returns the type of the geometry the finite-element is attached to.
Definition hierarchicalp2withelementbubble.hh:74
│ │ │ │ +
const LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition hierarchicalp2withelementbubble.hh:50
│ │ │ │ +
const LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition hierarchicalp2withelementbubble.hh:62
│ │ │ │ +
HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim > LocalCoefficientsType
Type of the local coefficients.
Definition hierarchicalp2withelementbubble.hh:40
│ │ │ │ +
const LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition hierarchicalp2withelementbubble.hh:56
│ │ │ │ +
HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LocalBasisType, dim > LocalInterpolationType
Type of the local interpolation.
Definition hierarchicalp2withelementbubble.hh:43
│ │ │ │ +
P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order...
Definition hierarchicalsimplexp2withelementbubble.hh:46
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:105
│ │ │ │ +
The local keys of the hierarchical basis functions with element bubble.
Definition hierarchicalsimplexp2withelementbubble.hh:229
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,615 +1,138 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x │ │ │ │ │ -raviartthomassimplexinterpolation.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ +hierarchicalp2withelementbubble.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_/ │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ 12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -22 │ │ │ │ │ -23namespace _D_u_n_e │ │ │ │ │ -24{ │ │ │ │ │ -25 │ │ │ │ │ -26 // Internal Forward Declarations │ │ │ │ │ -27 // ----------------------------- │ │ │ │ │ -28 │ │ │ │ │ -29 template < unsigned int dim, class Field > │ │ │ │ │ -30 struct RaviartThomasL2InterpolationFactory; │ │ │ │ │ -31 │ │ │ │ │ -32 │ │ │ │ │ -33 │ │ │ │ │ -34 // LocalCoefficientsContainer │ │ │ │ │ -35 // -------------------------- │ │ │ │ │ -36 │ │ │ │ │ -37 class LocalCoefficientsContainer │ │ │ │ │ -38 { │ │ │ │ │ -39 typedef _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r This; │ │ │ │ │ -40 │ │ │ │ │ -41 public: │ │ │ │ │ -42 template │ │ │ │ │ -_4_3 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r ( const Setter &setter ) │ │ │ │ │ -44 { │ │ │ │ │ -45 setter.setLocalKeys(localKey_); │ │ │ │ │ -46 } │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +32 template │ │ │ │ │ +_3_3 class _H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +34 { │ │ │ │ │ +35 public: │ │ │ │ │ +_3_7 using _L_o_c_a_l_B_a_s_i_s_T_y_p_e = │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>; │ │ │ │ │ +38 │ │ │ │ │ +_4_0 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e = │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>; │ │ │ │ │ +41 │ │ │ │ │ +_4_3 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e = │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_d_i_m_>; │ │ │ │ │ +44 │ │ │ │ │ +_4_6 using _T_r_a_i_t_s = │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_,_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e_>; │ │ │ │ │ 47 │ │ │ │ │ -_4_8 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ -49 { │ │ │ │ │ -50 assert( i < _s_i_z_e() ); │ │ │ │ │ -51 return localKey_[ i ]; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_4 std::size_t _s_i_z_e () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return localKey_.size(); │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -59 private: │ │ │ │ │ -60 std::vector< LocalKey > localKey_; │ │ │ │ │ -61 }; │ │ │ │ │ -62 │ │ │ │ │ -63 │ │ │ │ │ -64 │ │ │ │ │ -65 // RaviartThomasCoefficientsFactory │ │ │ │ │ -66 // -------------------------------- │ │ │ │ │ -67 │ │ │ │ │ -68 template < unsigned int dim > │ │ │ │ │ -_6_9 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -70 { │ │ │ │ │ -_7_1 typedef std::size_t _K_e_y; │ │ │ │ │ -_7_2 typedef const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _O_b_j_e_c_t; │ │ │ │ │ -73 │ │ │ │ │ -74 template< GeometryType::Id geometryId > │ │ │ │ │ -_7_5 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ -76 { │ │ │ │ │ -77 typedef _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _d_o_u_b_l_e_ _> │ │ │ │ │ -InterpolationFactory; │ │ │ │ │ -78 if( !supports< geometryId >( key ) ) │ │ │ │ │ -79 return nullptr; │ │ │ │ │ -80 typename InterpolationFactory::Object *interpolation = │ │ │ │ │ -InterpolationFactory::template create< geometryId >( key ); │ │ │ │ │ -81 _O_b_j_e_c_t *localKeys = new _O_b_j_e_c_t( *interpolation ); │ │ │ │ │ -82 InterpolationFactory::release( interpolation ); │ │ │ │ │ -83 return localKeys; │ │ │ │ │ -84 } │ │ │ │ │ -85 │ │ │ │ │ -86 template< GeometryType::Id geometryId > │ │ │ │ │ -_8_7 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ -88 { │ │ │ │ │ -89 return GeometryType(geometryId).isSimplex(); │ │ │ │ │ -90 } │ │ │ │ │ -_9_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -92 }; │ │ │ │ │ -93 │ │ │ │ │ -94 │ │ │ │ │ -95 │ │ │ │ │ -96 // RTL2InterpolationBuilder │ │ │ │ │ -97 // ------------------------ │ │ │ │ │ -98 │ │ │ │ │ -99 // L2 Interpolation requires: │ │ │ │ │ -100 // - for element │ │ │ │ │ -101 // - test basis │ │ │ │ │ -102 // - for each face (dynamic) │ │ │ │ │ -103 // - test basis │ │ │ │ │ -104 // - normal │ │ │ │ │ -105 template< unsigned int dim, class Field > │ │ │ │ │ -_1_0_6 struct _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -107 { │ │ │ │ │ -_1_0_8 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -109 │ │ │ │ │ -110 // for the dofs associated to the element │ │ │ │ │ -_1_1_1 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _F_i_e_l_d_ _> _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_1_1_2 typedef typename _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_B_a_s_i_s; │ │ │ │ │ -113 │ │ │ │ │ -114 // for the dofs associated to the faces │ │ │ │ │ -_1_1_5 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y< _d_i_m_e_n_s_i_o_n-1, Field > _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_1_1_6 typedef typename _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_F_a_c_e_B_a_s_i_s; │ │ │ │ │ -117 │ │ │ │ │ -118 // the normals of the faces │ │ │ │ │ -_1_1_9 typedef FieldVector< Field, dimension > _N_o_r_m_a_l; │ │ │ │ │ -120 │ │ │ │ │ -_1_2_1 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () = default; │ │ │ │ │ -122 │ │ │ │ │ -_1_2_3 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( const _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r & ) = delete; │ │ │ │ │ -_1_2_4 _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r && ) = delete; │ │ │ │ │ -125 │ │ │ │ │ -_1_2_6 _~_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () │ │ │ │ │ -127 { │ │ │ │ │ -128 _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( testBasis_ ); │ │ │ │ │ -129 for( FaceStructure &f : faceStructure_ ) │ │ │ │ │ -130 _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( f.basis_ ); │ │ │ │ │ -131 } │ │ │ │ │ -132 │ │ │ │ │ -_1_3_3 GeometryType _t_y_p_e () const { return geometry_; } │ │ │ │ │ -134 │ │ │ │ │ -_1_3_5 std::size_t _o_r_d_e_r () const { return order_; } │ │ │ │ │ -136 │ │ │ │ │ -137 // number of faces │ │ │ │ │ -_1_3_8 unsigned int _f_a_c_e_S_i_z_e () const { return faceSize_; } │ │ │ │ │ -139 │ │ │ │ │ -140 // basis associated to the element │ │ │ │ │ -_1_4_1 _T_e_s_t_B_a_s_i_s *_t_e_s_t_B_a_s_i_s () const { return testBasis_; } │ │ │ │ │ -142 │ │ │ │ │ -143 // basis associated to face f │ │ │ │ │ -_1_4_4 _T_e_s_t_F_a_c_e_B_a_s_i_s *_t_e_s_t_F_a_c_e_B_a_s_i_s ( unsigned int f ) const { assert( f < │ │ │ │ │ -_f_a_c_e_S_i_z_e() ); return faceStructure_[ f ].basis_; } │ │ │ │ │ -145 │ │ │ │ │ -146 // normal of face f │ │ │ │ │ -_1_4_7 const _N_o_r_m_a_l _n_o_r_m_a_l ( unsigned int f ) const { assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ -return faceStructure_[ f ].normal_; } │ │ │ │ │ -148 │ │ │ │ │ -149 template< GeometryType::Id geometryId > │ │ │ │ │ -_1_5_0 void _b_u_i_l_d ( std::size_t _o_r_d_e_r ) │ │ │ │ │ -151 { │ │ │ │ │ -152 constexpr GeometryType geometry = geometryId; │ │ │ │ │ -153 geometry_ = geometry; │ │ │ │ │ -154 order_ = _o_r_d_e_r; │ │ │ │ │ -155 │ │ │ │ │ -156 testBasis_ = (_o_r_d_e_r > 0 ? TestBasisFactory::template create< geometry > │ │ │ │ │ -( _o_r_d_e_r-1 ) : nullptr); │ │ │ │ │ -157 │ │ │ │ │ -158 const auto &refElement = ReferenceElements< Field, dimension >::general │ │ │ │ │ -( _t_y_p_e() ); │ │ │ │ │ -159 faceSize_ = refElement.size( 1 ); │ │ │ │ │ -160 faceStructure_.reserve( faceSize_ ); │ │ │ │ │ -161 for( unsigned int face = 0; face < faceSize_; ++face ) │ │ │ │ │ -162 { │ │ │ │ │ -163 /* For simplices or cubes of arbitrary dimension you could just use │ │ │ │ │ -164 * │ │ │ │ │ -165 * ``` │ │ │ │ │ -166 * GeometryType faceGeometry = Impl::getBase(geometry_); │ │ │ │ │ -167 * TestFaceBasis *faceBasis = TestFaceBasisFactory::template create< │ │ │ │ │ -faceGeometry >( order ); │ │ │ │ │ -168 * ``` │ │ │ │ │ -169 * │ │ │ │ │ -170 * For i.e. Prisms and Pyramids in 3d this does not work because they │ │ │ │ │ -contain squares and triangles as faces. │ │ │ │ │ -171 * And depending on the dynamic face index a different face geometry is │ │ │ │ │ -needed. │ │ │ │ │ -172 * │ │ │ │ │ -173 */ │ │ │ │ │ -174 _T_e_s_t_F_a_c_e_B_a_s_i_s *faceBasis = Impl::toGeometryTypeIdConstant<_d_i_m_e_n_s_i_o_n-1> │ │ │ │ │ -(refElement.type( face, 1 ), [&](auto faceGeometryTypeId) { │ │ │ │ │ -175 return TestFaceBasisFactory::template create< decltype │ │ │ │ │ -(faceGeometryTypeId)::value >( _o_r_d_e_r ); │ │ │ │ │ -176 }); │ │ │ │ │ -177 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal │ │ │ │ │ -( face ) ); │ │ │ │ │ -178 } │ │ │ │ │ -179 assert( faceStructure_.size() == faceSize_ ); │ │ │ │ │ -180 } │ │ │ │ │ -181 │ │ │ │ │ -182 private: │ │ │ │ │ -183 struct FaceStructure │ │ │ │ │ -184 { │ │ │ │ │ -185 FaceStructure( _T_e_s_t_F_a_c_e_B_a_s_i_s *tfb, const _N_o_r_m_a_l n ) │ │ │ │ │ -186 : basis_( tfb ), normal_( n ) │ │ │ │ │ -187 {} │ │ │ │ │ -188 │ │ │ │ │ -189 _T_e_s_t_F_a_c_e_B_a_s_i_s *basis_; │ │ │ │ │ -190 const Dune::FieldVector< Field, dimension > normal_; │ │ │ │ │ -191 }; │ │ │ │ │ -192 │ │ │ │ │ -193 std::vector< FaceStructure > faceStructure_; │ │ │ │ │ -194 _T_e_s_t_B_a_s_i_s *testBasis_ = nullptr; │ │ │ │ │ -195 GeometryType geometry_; │ │ │ │ │ -196 unsigned int faceSize_; │ │ │ │ │ -197 std::size_t order_; │ │ │ │ │ -198 }; │ │ │ │ │ -199 │ │ │ │ │ -200 │ │ │ │ │ -201 │ │ │ │ │ -202 // RaviartThomasL2Interpolation │ │ │ │ │ -203 // ---------------------------- │ │ │ │ │ -204 │ │ │ │ │ -210 template< unsigned int dimension, class F> │ │ │ │ │ -_2_1_1 class _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -212 : public _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r< F ,dimension > │ │ │ │ │ -213 { │ │ │ │ │ -214 typedef _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -215 typedef _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_F_,_d_i_m_e_n_s_i_o_n_> _B_a_s_e; │ │ │ │ │ -216 │ │ │ │ │ -217 public: │ │ │ │ │ -_2_1_8 typedef F _F_i_e_l_d; │ │ │ │ │ -_2_1_9 typedef _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ -_2_2_0 _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ -221 : order_(0), │ │ │ │ │ -222 size_(0) │ │ │ │ │ -223 {} │ │ │ │ │ -224 │ │ │ │ │ -225 template< class Function, class Vector, │ │ │ │ │ -226 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ -227 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ -_2_2_8 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, Vector &coefficients ) const │ │ │ │ │ -229 { │ │ │ │ │ -230 coefficients.resize(_s_i_z_e()); │ │ │ │ │ -231 typename Base::template _H_e_l_p_e_r_<_F_u_n_c_t_i_o_n_,_V_e_c_t_o_r_,_t_r_u_e_> func │ │ │ │ │ -( function,coefficients ); │ │ │ │ │ -232 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ -233 } │ │ │ │ │ -234 │ │ │ │ │ -235 template< class Basis, class Matrix, │ │ │ │ │ -236 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ -237 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ -238 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ -_2_3_9 void _i_n_t_e_r_p_o_l_a_t_e ( const Basis &basis, Matrix &matrix ) const │ │ │ │ │ -240 { │ │ │ │ │ -241 matrix.resize( _s_i_z_e(), basis.size() ); │ │ │ │ │ -242 typename Base::template _H_e_l_p_e_r_<_B_a_s_i_s_,_M_a_t_r_i_x_,_f_a_l_s_e_> func( basis,matrix ); │ │ │ │ │ -243 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ -244 } │ │ │ │ │ -245 │ │ │ │ │ -_2_4_6 std::size_t _o_r_d_e_r() const │ │ │ │ │ -247 { │ │ │ │ │ -248 return order_; │ │ │ │ │ -249 } │ │ │ │ │ -_2_5_0 std::size_t _s_i_z_e() const │ │ │ │ │ -251 { │ │ │ │ │ -252 return size_; │ │ │ │ │ -253 } │ │ │ │ │ -254 template │ │ │ │ │ -_2_5_5 void _b_u_i_l_d( std::size_t _o_r_d_e_r ) │ │ │ │ │ -256 { │ │ │ │ │ -257 size_ = 0; │ │ │ │ │ -258 order_ = _o_r_d_e_r; │ │ │ │ │ -259 builder_.template build(order_); │ │ │ │ │ -260 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -261 size_ += dimension*builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e(); │ │ │ │ │ -262 for ( unsigned int f=0; f_s_i_z_e(); │ │ │ │ │ -265 } │ │ │ │ │ -266 │ │ │ │ │ -_2_6_7 void _s_e_t_L_o_c_a_l_K_e_y_s(std::vector< LocalKey > &keys) const │ │ │ │ │ -268 { │ │ │ │ │ -269 keys.resize(_s_i_z_e()); │ │ │ │ │ -270 unsigned int row = 0; │ │ │ │ │ -271 for (unsigned int f=0; f_s_i_z_e(); ++i,++row) │ │ │ │ │ -275 keys[row] = _L_o_c_a_l_K_e_y(f,1,i); │ │ │ │ │ -276 } │ │ │ │ │ -277 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -278 for (unsigned int i=0; i_s_i_z_e()*dimension; ++i,++row) │ │ │ │ │ -279 keys[row] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -280 assert( row == _s_i_z_e() ); │ │ │ │ │ -281 } │ │ │ │ │ -282 │ │ │ │ │ -283 protected: │ │ │ │ │ -284 template< class Func, class Container, bool type > │ │ │ │ │ -_2_8_5 void _i_n_t_e_r_p_o_l_a_t_e ( typename Base::template _H_e_l_p_e_r_<_F_u_n_c_,_C_o_n_t_a_i_n_e_r_,_t_y_p_e_> │ │ │ │ │ -&func ) const │ │ │ │ │ -286 { │ │ │ │ │ -287 const Dune::GeometryType geoType = builder_._t_y_p_e(); │ │ │ │ │ -288 │ │ │ │ │ -289 std::vector< Field > testBasisVal; │ │ │ │ │ -290 │ │ │ │ │ -291 for (unsigned int i=0; i<_s_i_z_e(); ++i) │ │ │ │ │ -292 for (unsigned int j=0; j FaceQuadrature; │ │ │ │ │ -299 typedef Dune::QuadratureRules<_F_i_e_l_d, dimension-1> FaceQuadratureRules; │ │ │ │ │ -300 │ │ │ │ │ -301 const auto &refElement = Dune::ReferenceElements< Field, dimension >:: │ │ │ │ │ -general( geoType ); │ │ │ │ │ -302 │ │ │ │ │ -303 for (unsigned int f=0; f_s_i_z_e()); │ │ │ │ │ -308 │ │ │ │ │ -309 const auto &geometry = refElement.template geometry< 1 >( f ); │ │ │ │ │ -310 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 ); │ │ │ │ │ -311 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, │ │ │ │ │ -2*order_+2 ); │ │ │ │ │ -312 │ │ │ │ │ -313 const unsigned int quadratureSize = faceQuad.size(); │ │ │ │ │ -314 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ -315 { │ │ │ │ │ -316 if (dimension>1) │ │ │ │ │ -317 builder_._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->template evaluate<0>(faceQuad[qi].position │ │ │ │ │ -(),testBasisVal); │ │ │ │ │ -318 else │ │ │ │ │ -319 testBasisVal[0] = 1.; │ │ │ │ │ -320 fillBnd( row, testBasisVal, │ │ │ │ │ -321 func.evaluate( geometry.global( faceQuad[qi].position() ) ), │ │ │ │ │ -322 builder_._n_o_r_m_a_l(f), faceQuad[qi].weight(), │ │ │ │ │ -323 func); │ │ │ │ │ -324 } │ │ │ │ │ -325 │ │ │ │ │ -326 row += builder_._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e(); │ │ │ │ │ -327 } │ │ │ │ │ -328 // element dofs │ │ │ │ │ -329 if (builder_._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -330 { │ │ │ │ │ -331 testBasisVal.resize(builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e()); │ │ │ │ │ -332 │ │ │ │ │ -333 typedef Dune::QuadratureRule Quadrature; │ │ │ │ │ -334 typedef Dune::QuadratureRules QuadratureRules; │ │ │ │ │ -335 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 ); │ │ │ │ │ -336 │ │ │ │ │ -337 const unsigned int quadratureSize = elemQuad.size(); │ │ │ │ │ -338 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ -339 { │ │ │ │ │ -340 builder_._t_e_s_t_B_a_s_i_s()->template evaluate<0>(elemQuad[qi].position │ │ │ │ │ -(),testBasisVal); │ │ │ │ │ -341 fillInterior( row, testBasisVal, │ │ │ │ │ -342 func.evaluate(elemQuad[qi].position()), │ │ │ │ │ -343 elemQuad[qi].weight(), │ │ │ │ │ -344 func ); │ │ │ │ │ -345 } │ │ │ │ │ -346 │ │ │ │ │ -347 row += builder_._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; │ │ │ │ │ -348 } │ │ │ │ │ -349 assert(row==_s_i_z_e()); │ │ │ │ │ -350 } │ │ │ │ │ -351 │ │ │ │ │ -352 private: │ │ │ │ │ -362 template │ │ │ │ │ -363 void fillBnd (unsigned int startRow, │ │ │ │ │ -364 const MVal &mVal, │ │ │ │ │ -365 const RTVal &rtVal, │ │ │ │ │ -366 const FieldVector &normal, │ │ │ │ │ -367 const _F_i_e_l_d &weight, │ │ │ │ │ -368 Matrix &matrix) const │ │ │ │ │ -369 { │ │ │ │ │ -370 const unsigned int endRow = startRow+mVal.size(); │ │ │ │ │ -371 typename RTVal::const_iterator rtiter = rtVal.begin(); │ │ │ │ │ -372 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col) │ │ │ │ │ -373 { │ │ │ │ │ -374 _F_i_e_l_d cFactor = (*rtiter)*normal; │ │ │ │ │ -375 typename MVal::const_iterator miter = mVal.begin(); │ │ │ │ │ -376 for (unsigned int row = startRow; │ │ │ │ │ -377 row!=endRow; ++miter, ++row ) │ │ │ │ │ -378 { │ │ │ │ │ -379 matrix.add(row,col, (weight*cFactor)*(*miter) ); │ │ │ │ │ -380 } │ │ │ │ │ -381 assert( miter == mVal.end() ); │ │ │ │ │ -382 } │ │ │ │ │ -383 } │ │ │ │ │ -392 template │ │ │ │ │ -393 void fillInterior (unsigned int startRow, │ │ │ │ │ -394 const MVal &mVal, │ │ │ │ │ -395 const RTVal &rtVal, │ │ │ │ │ -396 _F_i_e_l_d weight, │ │ │ │ │ -397 Matrix &matrix) const │ │ │ │ │ -398 { │ │ │ │ │ -399 const unsigned int endRow = startRow+mVal.size()*dimension; │ │ │ │ │ -400 typename RTVal::const_iterator rtiter = rtVal.begin(); │ │ │ │ │ -401 for ( unsigned int col = 0; col < rtVal.size() ; ++rtiter,++col) │ │ │ │ │ -402 { │ │ │ │ │ -403 typename MVal::const_iterator miter = mVal.begin(); │ │ │ │ │ -404 for (unsigned int row = startRow; │ │ │ │ │ -405 row!=endRow; ++miter,row+=dimension ) │ │ │ │ │ -406 { │ │ │ │ │ -407 for (unsigned int i=0; i │ │ │ │ │ -_4_2_2 struct _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -423 { │ │ │ │ │ -_4_2_4 typedef _R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ -_4_2_5 typedef const _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_F_i_e_l_d_> _O_b_j_e_c_t; │ │ │ │ │ -_4_2_6 typedef std::size_t _K_e_y; │ │ │ │ │ -_4_2_7 typedef typename std::remove_const::type _N_o_n_C_o_n_s_t_O_b_j_e_c_t; │ │ │ │ │ -428 │ │ │ │ │ -429 template │ │ │ │ │ -_4_3_0 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ -431 { │ │ │ │ │ -432 if ( !supports(key) ) │ │ │ │ │ -433 return 0; │ │ │ │ │ -434 _N_o_n_C_o_n_s_t_O_b_j_e_c_t *interpol = new _N_o_n_C_o_n_s_t_O_b_j_e_c_t(); │ │ │ │ │ -435 interpol->template build(key); │ │ │ │ │ -436 return interpol; │ │ │ │ │ -437 } │ │ │ │ │ -438 template< GeometryType::Id geometryId > │ │ │ │ │ -_4_3_9 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ -440 { │ │ │ │ │ -441 return GeometryType(geometryId).isSimplex(); │ │ │ │ │ -442 } │ │ │ │ │ -_4_4_3 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -444 }; │ │ │ │ │ -445 │ │ │ │ │ -446} // namespace Dune │ │ │ │ │ -447 │ │ │ │ │ -448#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_RAVIARTTHOMASSIMPLEX_RAVIARTTHOMASSIMPLEXINTERPOLATION_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h │ │ │ │ │ -_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +48 │ │ │ │ │ +_5_0 const _L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return basis_; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_6 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return coefficients_; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_2 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +63 { │ │ │ │ │ +64 return interpolation_; │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +_6_8 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +69 { │ │ │ │ │ +70 return _L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_s_i_z_e(); │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +_7_4 static constexpr GeometryType _t_y_p_e () noexcept │ │ │ │ │ +75 { │ │ │ │ │ +76 return GeometryTypes::simplex(dim); │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +79 private: │ │ │ │ │ +80 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_{}; │ │ │ │ │ +81 [[no_unique_address]] _L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_{}; │ │ │ │ │ +82 [[no_unique_address]] _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_{}; │ │ │ │ │ +83 }; │ │ │ │ │ +84 │ │ │ │ │ +85} │ │ │ │ │ +86 │ │ │ │ │ +87#endif │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -LocalCoefficientsContainer(const Setter &setter) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:423 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_N_o_n_C_o_n_s_t_O_b_j_e_c_t │ │ │ │ │ -std::remove_const< Object >::type NonConstObject │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:427 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:443 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:439 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:430 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_u_i_l_d_e_r │ │ │ │ │ -RTL2InterpolationBuilder< dim, Field > Builder │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:424 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const RaviartThomasL2Interpolation< dim, Field > Object │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:425 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:426 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:91 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const LocalCoefficientsContainer Object │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_B_a_s_i_s │ │ │ │ │ -TestBasis * testBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:141 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_o_r_m_a_l │ │ │ │ │ -FieldVector< Field, dimension > Normal │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s │ │ │ │ │ -TestBasisFactory::Object TestBasis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:112 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ -TestFaceBasisFactory::Object TestFaceBasis │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:116 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_n_o_r_m_a_l │ │ │ │ │ -const Normal normal(unsigned int f) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:147 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_S_i_z_e │ │ │ │ │ -unsigned int faceSize() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:138 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_b_u_i_l_d │ │ │ │ │ -void build(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:150 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -RTL2InterpolationBuilder()=default │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ -TestFaceBasis * testFaceBasis(unsigned int f) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:144 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -RTL2InterpolationBuilder(const RTL2InterpolationBuilder &)=delete │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -RTL2InterpolationBuilder(RTL2InterpolationBuilder &&)=delete │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -OrthonormalBasisFactory< dimension, Field > TestBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:108 │ │ │ │ │ -_D_u_n_e_:_:_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_~_R_T_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -~RTL2InterpolationBuilder() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:126 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -An L2-based interpolation for Raviart Thomas. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:213 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:246 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const Function &function, Vector &coefficients) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:228 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RaviartThomasL2Interpolation() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:220 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(typename Base::template Helper< Func, Container, type > &func) │ │ │ │ │ -const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:285 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_u_i_l_d_e_r │ │ │ │ │ -RTL2InterpolationBuilder< dimension, Field > Builder │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:219 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:218 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d │ │ │ │ │ -void build(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:255 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:250 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_L_o_c_a_l_K_e_y_s │ │ │ │ │ -void setLocalKeys(std::vector< LocalKey > &keys) const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:267 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:21 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Linear Lagrange functions enriched with quadratic edge bubble functions and an │ │ │ │ │ +element bubble functio... │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim > LocalBasisType │ │ │ │ │ +Type of the local basis. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns the number of shape functions in this finite-element. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() noexcept │ │ │ │ │ +Returns the type of the geometry the finite-element is attached to. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim > │ │ │ │ │ +LocalCoefficientsType │ │ │ │ │ +Type of the local coefficients. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LocalBasisType, dim > │ │ │ │ │ +LocalInterpolationType │ │ │ │ │ +Type of the local interpolation. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +P1 basis in dim-d enriched by quadratic edge bubble functions and an element │ │ │ │ │ +bubble function of order... │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:229 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_o_c_a_l_B_a_s_i_s_T_y_p_e_, │ │ │ │ │ +_d_i_m_ _> │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube3d.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp1withelementbubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,39 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
raviartthomas0cube3d.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
hierarchicalp1withelementbubble.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "raviartthomas0cube3d/raviartthomas0cube3dall.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::RT0Cube3DLocalFiniteElement< D, R >
 Zero order Raviart-Thomas shape functions on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Typedefs

template<class D , class R , int dim>
using Dune::HierarchicalP1WithElementBubbleLocalFiniteElement = SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function.
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomas0cube3d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h" │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ +hierarchicalp1withelementbubble.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ -  _Z_e_r_o order Raviart-Thomas shape functions on cubes. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +TTyyppeeddeeffss │ │ │ │ │ +template │ │ │ │ │ +using  _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_1_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t = │ │ │ │ │ + _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< D, R, dim > │ │ │ │ │ +  Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00311_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas0cube3d.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp1withelementbubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,119 +70,41 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas0cube3d.hh
│ │ │ │ +
hierarchicalp1withelementbubble.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ + │ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
23 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
31
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 {}
│ │ │ │ -
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 basis(s),
│ │ │ │ -
37 interpolation(s)
│ │ │ │ -
38 {}
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ -
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return basis;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 {
│ │ │ │ -
47 return coefficients;
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
51 {
│ │ │ │ -
52 return interpolation;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
56 unsigned int size () const
│ │ │ │ -
57 {
│ │ │ │ -
58 return basis.size();
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
61 static constexpr GeometryType type ()
│ │ │ │ -
62 {
│ │ │ │ -
63 return GeometryTypes::hexahedron;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
66 private:
│ │ │ │ - │ │ │ │ -
68 RT0Cube3DLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
70 };
│ │ │ │ -
│ │ │ │ -
71}
│ │ │ │ -
72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
16 template<class D, class R, int dim>
│ │ │ │ + │ │ │ │ + │ │ │ │ +
19}
│ │ │ │ +
20
│ │ │ │ +
21#endif // DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Zero order Raviart-Thomas shape functions on cubes.
Definition raviartthomas0cube3d.hh:25
│ │ │ │ -
static constexpr GeometryType type()
Definition raviartthomas0cube3d.hh:61
│ │ │ │ -
RT0Cube3DLocalFiniteElement(int s)
Definition raviartthomas0cube3d.hh:35
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition raviartthomas0cube3d.hh:56
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition raviartthomas0cube3d.hh:40
│ │ │ │ -
RT0Cube3DLocalFiniteElement()
Definition raviartthomas0cube3d.hh:32
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition raviartthomas0cube3d.hh:50
│ │ │ │ -
LocalFiniteElementTraits< RT0Cube3DLocalBasis< D, R >, RT0Cube3DLocalCoefficients, RT0Cube3DLocalInterpolation< RT0Cube3DLocalBasis< D, R > > > Traits
Definition raviartthomas0cube3d.hh:30
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition raviartthomas0cube3d.hh:45
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:30
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:158
│ │ │ │ -
Definition raviartthomas0cube3dall.hh:216
│ │ │ │ +
Linear Lagrange functions enriched with an element bubble function.
Definition simplexp1bubble.hh:45
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,127 +1,35 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomas0cube3d.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ +hierarchicalp1withelementbubble.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -27 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -28 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -29 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_0 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_2 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -33 {} │ │ │ │ │ -34 │ │ │ │ │ -_3_5 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (int s) : │ │ │ │ │ -36 basis(s), │ │ │ │ │ -37 interpolation(s) │ │ │ │ │ -38 {} │ │ │ │ │ -39 │ │ │ │ │ -_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -41 { │ │ │ │ │ -42 return basis; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -46 { │ │ │ │ │ -47 return coefficients; │ │ │ │ │ -48 } │ │ │ │ │ -49 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return interpolation; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return basis.size(); │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -62 { │ │ │ │ │ -63 return GeometryTypes::hexahedron; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -66 private: │ │ │ │ │ -67 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ -68 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -69 _R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > interpolation; │ │ │ │ │ -70 }; │ │ │ │ │ -71} │ │ │ │ │ -72#endif // DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS0_CUBE3D_LOCALFINITEELEMENT_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_a_l_l_._h_h │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +16 template │ │ │ │ │ +_1_7 using _H_i_e_r_a_r_c_h_i_c_a_l_P_1_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +18 = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>; │ │ │ │ │ +19} │ │ │ │ │ +20 │ │ │ │ │ +21#endif // DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Zero order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0Cube3DLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RT0Cube3DLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RT0Cube3DLocalBasis< D, R >, │ │ │ │ │ -RT0Cube3DLocalCoefficients, RT0Cube3DLocalInterpolation< RT0Cube3DLocalBasis< │ │ │ │ │ -D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:158 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3dall.hh:216 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:45 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomascube.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,68 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomascube.hh File Reference
│ │ │ │ +
hierarchicalprismp2.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Convenience header that includes all available Raviart-Thomas local finite elements for cubes. │ │ │ │ -More...

│ │ │ │ -
#include "raviartthomas0cube2d.hh"
│ │ │ │ -#include "raviartthomas0cube3d.hh"
│ │ │ │ -#include "raviartthomas1cube2d.hh"
│ │ │ │ -#include "raviartthomas1cube3d.hh"
│ │ │ │ -#include "raviartthomas2cube2d.hh"
│ │ │ │ -#include "raviartthomas3cube2d.hh"
│ │ │ │ -#include "raviartthomas4cube2d.hh"
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ +#include "hierarchicalprismp2/hierarchicalprismp2localbasis.hh"
│ │ │ │ +#include "hierarchicalprismp2/hierarchicalprismp2localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 0 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 0. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 1 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 1. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 2 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 2. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 3 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 3. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 4 >
 Raviart-Thomas local finite elements for cubes with dimension 2 and order 4. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 0 >
 Raviart-Thomas local finite elements for cubes with dimension 3 and order 0. More...
 
class  Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 1 >
 Raviart-Thomas local finite elements for cubes with dimension 3 and order 1. More...
class  Dune::HierarchicalPrismP2LocalFiniteElement< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available Raviart-Thomas local finite elements for cubes.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,56 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomascube.hh File Reference │ │ │ │ │ -Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ -elements for cubes. _M_o_r_e_._._. │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h" │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h" │ │ │ │ │ +hierarchicalprismp2.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ - order 0. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ - order 1. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ - order 2. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ - order 3. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 2 and │ │ │ │ │ - order 4. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 3 and │ │ │ │ │ - order 0. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements for cubes with dimension 3 and │ │ │ │ │ - order 1. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ -elements for cubes. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00314_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomascube.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,213 +70,122 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomascube.hh
│ │ │ │ +
hierarchicalprismp2.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │
15
│ │ │ │ -
22namespace Dune
│ │ │ │ -
23{
│ │ │ │ -
39 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ - │ │ │ │ -
41
│ │ │ │ -
45 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
47 : public RT0Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
48 {
│ │ │ │ -
49 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
52 {}
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
56 {}
│ │ │ │ -
│ │ │ │ -
57 };
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
62 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
64 : public RT1Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
65 {
│ │ │ │ -
66 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
69 {}
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
73 {}
│ │ │ │ -
│ │ │ │ -
74 };
│ │ │ │ -
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
19
│ │ │ │ +
22 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ + │ │ │ │ +
31 Impl::LagrangePrismLocalCoefficients<2>,
│ │ │ │ + │ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {}
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ +
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return basis;
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
49 {
│ │ │ │ +
50 return coefficients;
│ │ │ │ +
51 }
│ │ │ │ +
│ │ │ │ +
52
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ +
57 return interpolation;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
61 unsigned int size () const
│ │ │ │ +
62 {
│ │ │ │ +
63 return basis.size();
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
68 static constexpr GeometryType type ()
│ │ │ │ +
69 {
│ │ │ │ +
70 return GeometryTypes::prism;
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
73 private:
│ │ │ │ + │ │ │ │
75
│ │ │ │ -
79 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
81 : public RT2Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
82 {
│ │ │ │ -
83 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
86 {}
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
90 {}
│ │ │ │ -
│ │ │ │ -
91 };
│ │ │ │ -
│ │ │ │ -
92
│ │ │ │ -
96 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
98 : public RT3Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
99 {
│ │ │ │ -
100 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
103 {}
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
107 {}
│ │ │ │ -
│ │ │ │ -
108 };
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ -
113 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
115 : public RT4Cube2DLocalFiniteElement<D, R>
│ │ │ │ -
116 {
│ │ │ │ -
117 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
120 {}
│ │ │ │ -
│ │ │ │ -
121
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
124 {}
│ │ │ │ -
│ │ │ │ -
125 };
│ │ │ │ -
│ │ │ │ -
126
│ │ │ │ -
130 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
132 : public RT0Cube3DLocalFiniteElement<D, R>
│ │ │ │ -
133 {
│ │ │ │ -
134 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
137 {}
│ │ │ │ -
│ │ │ │ -
138
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
141 {}
│ │ │ │ -
│ │ │ │ -
142 };
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
147 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
149 : public RT1Cube3DLocalFiniteElement<D, R>
│ │ │ │ -
150 {
│ │ │ │ -
151 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
154 {}
│ │ │ │ -
│ │ │ │ -
155
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
158 {}
│ │ │ │ -
│ │ │ │ -
159 };
│ │ │ │ -
│ │ │ │ -
160} // namespace Dune
│ │ │ │ -
161
│ │ │ │ -
162#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
77 Impl::LagrangePrismLocalCoefficients<2> coefficients;
│ │ │ │ +
78
│ │ │ │ + │ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
82}
│ │ │ │ +
83
│ │ │ │ +
84#endif
│ │ │ │ + │ │ │ │ +
Hierarchical prism p2 shape functions for the simplex.
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Zero order Raviart-Thomas shape functions on rectangles.
Definition raviartthomas0cube2d.hh:25
│ │ │ │ -
Zero order Raviart-Thomas shape functions on cubes.
Definition raviartthomas0cube3d.hh:25
│ │ │ │ -
First order Raviart-Thomas shape functions on quadrilaterals.
Definition raviartthomas1cube2d.hh:28
│ │ │ │ -
First order Raviart-Thomas shape functions on cubes.
Definition raviartthomas1cube3d.hh:27
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas2cube2d.hh:27
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas3cube2d.hh:29
│ │ │ │ -
Second order Raviart-Thomas shape functions on cubes.
Definition raviartthomas4cube2d.hh:29
│ │ │ │ -
Raviart-Thomas local finite elements for cubes.
Definition raviartthomascube.hh:40
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:54
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:50
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:67
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:71
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:84
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:88
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:105
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:101
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:122
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:118
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:135
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:139
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement()
Definition raviartthomascube.hh:152
│ │ │ │ -
RaviartThomasCubeLocalFiniteElement(int s)
Definition raviartthomascube.hh:156
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Definition hierarchicalprismp2.hh:24
│ │ │ │ +
static constexpr GeometryType type()
Definition hierarchicalprismp2.hh:68
│ │ │ │ +
HierarchicalPrismP2LocalFiniteElement()
Definition hierarchicalprismp2.hh:36
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition hierarchicalprismp2.hh:55
│ │ │ │ +
LocalFiniteElementTraits< HierarchicalPrismP2LocalBasis< D, R >, Impl::LagrangePrismLocalCoefficients< 2 >, HierarchicalPrismP2LocalInterpolation< HierarchicalPrismP2LocalBasis< D, R > > > Traits
Definition hierarchicalprismp2.hh:32
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition hierarchicalprismp2.hh:41
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition hierarchicalprismp2.hh:61
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition hierarchicalprismp2.hh:48
│ │ │ │ +
Definition hierarchicalprismp2localbasis.hh:23
│ │ │ │ +
Definition hierarchicalprismp2localinterpolation.hh:17
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,221 +1,132 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomascube.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ +hierarchicalprismp2.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h" │ │ │ │ │ -9#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h" │ │ │ │ │ -10#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h" │ │ │ │ │ -11#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h" │ │ │ │ │ -12#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h" │ │ │ │ │ -13#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h" │ │ │ │ │ -14#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h" │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +14#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 15 │ │ │ │ │ -22namespace _D_u_n_e │ │ │ │ │ -23{ │ │ │ │ │ -39 template │ │ │ │ │ -_4_0 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -41 │ │ │ │ │ -45 template │ │ │ │ │ -_4_6 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -47 : public _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -48 { │ │ │ │ │ -49 public: │ │ │ │ │ -_5_0 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -51 : _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -52 {} │ │ │ │ │ -53 │ │ │ │ │ -_5_4 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -55 : _R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -56 {} │ │ │ │ │ -57 }; │ │ │ │ │ -58 │ │ │ │ │ -62 template │ │ │ │ │ -_6_3 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -64 : public _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -65 { │ │ │ │ │ -66 public: │ │ │ │ │ -_6_7 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -68 : _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -69 {} │ │ │ │ │ -70 │ │ │ │ │ -_7_1 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -72 : _R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -73 {} │ │ │ │ │ -74 }; │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +19 │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +24 { │ │ │ │ │ +25 │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ +31 Impl::LagrangePrismLocalCoefficients<2>, │ │ │ │ │ +_3_2 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > │ │ │ │ │ +_T_r_a_i_t_s; │ │ │ │ │ +33 │ │ │ │ │ +_3_6 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +37 {} │ │ │ │ │ +38 │ │ │ │ │ +_4_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +42 { │ │ │ │ │ +43 return basis; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +49 { │ │ │ │ │ +50 return coefficients; │ │ │ │ │ +51 } │ │ │ │ │ +52 │ │ │ │ │ +_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return interpolation; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_1 unsigned int _s_i_z_e () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return basis.size(); │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +_6_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +69 { │ │ │ │ │ +70 return GeometryTypes::prism; │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +73 private: │ │ │ │ │ +74 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ 75 │ │ │ │ │ -79 template │ │ │ │ │ -_8_0 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -81 : public _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -82 { │ │ │ │ │ -83 public: │ │ │ │ │ -_8_4 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -85 : _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -86 {} │ │ │ │ │ -87 │ │ │ │ │ -_8_8 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -89 : _R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -90 {} │ │ │ │ │ -91 }; │ │ │ │ │ -92 │ │ │ │ │ -96 template │ │ │ │ │ -_9_7 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -98 : public _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -99 { │ │ │ │ │ -100 public: │ │ │ │ │ -_1_0_1 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -102 : _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -103 {} │ │ │ │ │ -104 │ │ │ │ │ -_1_0_5 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -106 : _R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -107 {} │ │ │ │ │ -108 }; │ │ │ │ │ -109 │ │ │ │ │ -113 template │ │ │ │ │ -_1_1_4 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -115 : public _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -116 { │ │ │ │ │ -117 public: │ │ │ │ │ -_1_1_8 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -119 : _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -120 {} │ │ │ │ │ -121 │ │ │ │ │ -_1_2_2 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -123 : _R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -124 {} │ │ │ │ │ -125 }; │ │ │ │ │ -126 │ │ │ │ │ -130 template │ │ │ │ │ -_1_3_1 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -132 : public _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -133 { │ │ │ │ │ -134 public: │ │ │ │ │ -_1_3_5 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -136 : _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -137 {} │ │ │ │ │ -138 │ │ │ │ │ -_1_3_9 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -140 : _R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -141 {} │ │ │ │ │ -142 }; │ │ │ │ │ -143 │ │ │ │ │ -147 template │ │ │ │ │ -_1_4_8 class _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -149 : public _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -150 { │ │ │ │ │ -151 public: │ │ │ │ │ -_1_5_2 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -153 : _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() │ │ │ │ │ -154 {} │ │ │ │ │ -155 │ │ │ │ │ -_1_5_6 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(int s) │ │ │ │ │ -157 : _R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t::_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(s) │ │ │ │ │ -158 {} │ │ │ │ │ -159 }; │ │ │ │ │ -160} // namespace Dune │ │ │ │ │ -161 │ │ │ │ │ -162#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_CUBE_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_4_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h │ │ │ │ │ +77 Impl::LagrangePrismLocalCoefficients<2> coefficients; │ │ │ │ │ +78 │ │ │ │ │ +79 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ +interpolation; │ │ │ │ │ +80 }; │ │ │ │ │ +81 │ │ │ │ │ +82} │ │ │ │ │ +83 │ │ │ │ │ +84#endif │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Hierarchical prism p2 shape functions for the simplex. │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Zero order Raviart-Thomas shape functions on rectangles. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube2d.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_0_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Zero order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas0cube3d.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on quadrilaterals. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube2d.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_R_T_1_C_u_b_e_3_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -First order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas1cube3d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_2_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas2cube2d.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_T_3_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas3cube2d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_T_4_C_u_b_e_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Second order Raviart-Thomas shape functions on cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomas4cube2d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Raviart-Thomas local finite elements for cubes. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _0_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:101 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:122 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _4_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:118 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _0_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:139 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:152 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_,_ _1_ _>_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasCubeLocalFiniteElement(int s) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomascube.hh:156 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +HierarchicalPrismP2LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< HierarchicalPrismP2LocalBasis< D, R >, Impl:: │ │ │ │ │ +LagrangePrismLocalCoefficients< 2 >, HierarchicalPrismP2LocalInterpolation< │ │ │ │ │ +HierarchicalPrismP2LocalBasis< D, R > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:17 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplex.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,45 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
raviartthomassimplex.hh File Reference
│ │ │ │ +
hierarchicalprismp2localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. │ │ │ │ -More...

│ │ │ │ -
#include <dune/localfunctions/utility/localfiniteelement.hh>
│ │ │ │ -#include "raviartthomassimplex/raviartthomassimplexbasis.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RaviartThomasSimplexLocalFiniteElement< dimDomain, D, R, SF, CF >
 Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. More...
class  Dune::HierarchicalPrismP2LocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,20 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -raviartthomassimplex.hh File Reference │ │ │ │ │ -Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ -arbitrary dimension. _M_o_r_e_._._. │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h" │ │ │ │ │ +hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ -  Raviart-Thomas local finite elements of arbitrary order for simplices │ │ │ │ │ - of arbitrary dimension. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ -arbitrary dimension. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00317_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomassimplex.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,66 +70,104 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomassimplex.hh
│ │ │ │ +
hierarchicalprismp2localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ -
10
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
35 template<unsigned int dimDomain, class D, class R,
│ │ │ │ -
36 class SF=R, class CF=SF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 : public GenericLocalFiniteElement<RaviartThomasBasisFactory<dimDomain, SF, CF>,
│ │ │ │ -
39 RaviartThomasCoefficientsFactory<dimDomain>,
│ │ │ │ -
40 RaviartThomasL2InterpolationFactory<dimDomain, SF> >
│ │ │ │ -
41 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
45 public:
│ │ │ │ -
46 using typename Base::Traits;
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 RaviartThomasSimplexLocalFiniteElement(const GeometryType &gt, unsigned int order)
│ │ │ │ -
50 : Base(gt, order)
│ │ │ │ -
51 {}
│ │ │ │ -
│ │ │ │ -
52 };
│ │ │ │ -
│ │ │ │ -
53} // namespace Dune
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │ +
19
│ │ │ │ +
20 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
22 {
│ │ │ │ +
23 typename LB::Traits::DomainType x;
│ │ │ │ +
24 typename LB::Traits::RangeType y;
│ │ │ │ +
25 out.resize(18);
│ │ │ │ +
26
│ │ │ │ +
27 //First the vertex dofs
│ │ │ │ +
28 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x);
│ │ │ │ +
29 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[1] = f(x);
│ │ │ │ +
30 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[2] = f(x);
│ │ │ │ +
31 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[3] = f(x);
│ │ │ │ +
32 x[0] = 1.0; x[1] = 0.0; x[2] = 1.0; out[4] = f(x);
│ │ │ │ +
33 x[0] = 0.0; x[1] = 1.0; x[2] = 1.0; out[5] = f(x);
│ │ │ │ +
34
│ │ │ │ +
35
│ │ │ │ +
36 // Then: the 9 edge dofs and the 3 face dofs
│ │ │ │ +
37 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
38 out[6] = y - 0.5*(out[0] + out[3]);
│ │ │ │ +
39
│ │ │ │ +
40 x[0] = 1.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
41 out[7] = y - 0.5*(out[1] + out[4]);
│ │ │ │ +
42
│ │ │ │ +
43 x[0] = 0.0; x[1] = 1.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
44 out[8] = y - 0.5*(out[2] + out[5]);
│ │ │ │ +
45
│ │ │ │ +
46 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x);
│ │ │ │ +
47 out[9] = y - 0.5*(out[0] + out[1]);
│ │ │ │ +
48
│ │ │ │ +
49 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ +
50 out[10] = y - 0.5*(out[2] + out[0]);
│ │ │ │ +
51
│ │ │ │ +
52 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ +
53 out[11] = y - 0.5*(out[2] + out[1]);
│ │ │ │
54
│ │ │ │ -
55#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH
│ │ │ │ - │ │ │ │ +
55 x[0] = 0.5; x[1] = 0.0; x[2] = 1.0; y = f(x);
│ │ │ │ +
56 out[12] = y - 0.5*(out[3] + out[4]);
│ │ │ │ +
57
│ │ │ │ +
58 x[0] = 0.0; x[1] = 0.5; x[2] = 1.0; y = f(x);
│ │ │ │ +
59 out[13] = y - 0.5*(out[3] + out[5]);
│ │ │ │ +
60
│ │ │ │ +
61 x[0] = 0.5; x[1] = 0.5; x[2] = 1.0; y = f(x);
│ │ │ │ +
62 out[14] = y - 0.5*(out[4] + out[5]);
│ │ │ │ +
63
│ │ │ │ +
64
│ │ │ │ +
65 //faces
│ │ │ │ +
66 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
67 out[15] = y - 0.25*(out[4] + out[1] + out[0] + out[3] );
│ │ │ │ +
68
│ │ │ │ +
69 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ +
70 out[16] = y - 0.25*(out[2] + out[0] + out[3] + out[5] );
│ │ │ │ +
71
│ │ │ │ +
72 x[0] = 0.5; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ +
73 out[17] = y - 0.25*(out[2] + out[1] + out[4] + out[5] );
│ │ │ │ +
74
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76 };
│ │ │ │ +
│ │ │ │ +
77}
│ │ │ │ +
78
│ │ │ │ +
79#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.
Definition raviartthomassimplex.hh:41
│ │ │ │ -
RaviartThomasSimplexLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition raviartthomassimplex.hh:49
│ │ │ │ -
Definition raviartthomassimplexinterpolation.hh:423
│ │ │ │ -
Definition raviartthomassimplexinterpolation.hh:70
│ │ │ │ -
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ -
LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, typename InterpolF::Object > Traits
Definition localfunctions/utility/localfiniteelement.hh:29
│ │ │ │ - │ │ │ │ +
Definition hierarchicalprismp2localinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalprismp2localinterpolation.hh:21
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,72 +1,96 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_v_i_a_r_t_t_h_o_m_a_s │ │ │ │ │ -raviartthomassimplex.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ +hierarchicalprismp2localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -9#include "_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h" │ │ │ │ │ -10 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -35 template │ │ │ │ │ -_3_7 class _R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -38 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t, │ │ │ │ │ -39 RaviartThomasCoefficientsFactory, │ │ │ │ │ -40 RaviartThomasL2InterpolationFactory > │ │ │ │ │ -41 { │ │ │ │ │ -42 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_R_a_v_i_a_r_t_T_h_o_m_a_s_B_a_s_i_s_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ -_C_F_>, │ │ │ │ │ -43 _R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_>, │ │ │ │ │ -44 _R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_d_i_m_D_o_m_a_i_n_,_ _S_F_> > _B_a_s_e; │ │ │ │ │ -45 public: │ │ │ │ │ -46 using typename _B_a_s_e_:_:_T_r_a_i_t_s; │ │ │ │ │ -47 │ │ │ │ │ -_4_9 _R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(const GeometryType >, unsigned int │ │ │ │ │ -order) │ │ │ │ │ -50 : _B_a_s_e(gt, order) │ │ │ │ │ -51 {} │ │ │ │ │ -52 }; │ │ │ │ │ -53} // namespace Dune │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +15 template │ │ │ │ │ +_1_6 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +17 { │ │ │ │ │ +18 public: │ │ │ │ │ +19 │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +22 { │ │ │ │ │ +23 typename LB::Traits::DomainType x; │ │ │ │ │ +24 typename LB::Traits::RangeType y; │ │ │ │ │ +25 out.resize(18); │ │ │ │ │ +26 │ │ │ │ │ +27 //First the vertex dofs │ │ │ │ │ +28 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x); │ │ │ │ │ +29 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[1] = f(x); │ │ │ │ │ +30 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[2] = f(x); │ │ │ │ │ +31 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[3] = f(x); │ │ │ │ │ +32 x[0] = 1.0; x[1] = 0.0; x[2] = 1.0; out[4] = f(x); │ │ │ │ │ +33 x[0] = 0.0; x[1] = 1.0; x[2] = 1.0; out[5] = f(x); │ │ │ │ │ +34 │ │ │ │ │ +35 │ │ │ │ │ +36 // Then: the 9 edge dofs and the 3 face dofs │ │ │ │ │ +37 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +38 out[6] = y - 0.5*(out[0] + out[3]); │ │ │ │ │ +39 │ │ │ │ │ +40 x[0] = 1.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +41 out[7] = y - 0.5*(out[1] + out[4]); │ │ │ │ │ +42 │ │ │ │ │ +43 x[0] = 0.0; x[1] = 1.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +44 out[8] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ +45 │ │ │ │ │ +46 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x); │ │ │ │ │ +47 out[9] = y - 0.5*(out[0] + out[1]); │ │ │ │ │ +48 │ │ │ │ │ +49 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ +50 out[10] = y - 0.5*(out[2] + out[0]); │ │ │ │ │ +51 │ │ │ │ │ +52 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ +53 out[11] = y - 0.5*(out[2] + out[1]); │ │ │ │ │ 54 │ │ │ │ │ -55#endif // #ifndef DUNE_LOCALFUNCTIONS_RAVIARTTHOMAS_SIMPLEX_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_b_a_s_i_s_._h_h │ │ │ │ │ +55 x[0] = 0.5; x[1] = 0.0; x[2] = 1.0; y = f(x); │ │ │ │ │ +56 out[12] = y - 0.5*(out[3] + out[4]); │ │ │ │ │ +57 │ │ │ │ │ +58 x[0] = 0.0; x[1] = 0.5; x[2] = 1.0; y = f(x); │ │ │ │ │ +59 out[13] = y - 0.5*(out[3] + out[5]); │ │ │ │ │ +60 │ │ │ │ │ +61 x[0] = 0.5; x[1] = 0.5; x[2] = 1.0; y = f(x); │ │ │ │ │ +62 out[14] = y - 0.5*(out[4] + out[5]); │ │ │ │ │ +63 │ │ │ │ │ +64 │ │ │ │ │ +65 //faces │ │ │ │ │ +66 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +67 out[15] = y - 0.25*(out[4] + out[1] + out[0] + out[3] ); │ │ │ │ │ +68 │ │ │ │ │ +69 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ +70 out[16] = y - 0.25*(out[2] + out[0] + out[3] + out[5] ); │ │ │ │ │ +71 │ │ │ │ │ +72 x[0] = 0.5; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ +73 out[17] = y - 0.25*(out[2] + out[1] + out[4] + out[5] ); │ │ │ │ │ +74 │ │ │ │ │ +75 } │ │ │ │ │ +76 }; │ │ │ │ │ +77} │ │ │ │ │ +78 │ │ │ │ │ +79#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ -arbitrary dimension. │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplex.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_R_a_v_i_a_r_t_T_h_o_m_a_s_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RaviartThomasSimplexLocalFiniteElement(const GeometryType >, unsigned int │ │ │ │ │ -order) │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplex.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:423 │ │ │ │ │ -_D_u_n_e_:_:_R_a_v_i_a_r_t_T_h_o_m_a_s_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn raviartthomassimplexinterpolation.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -A LocalFiniteElement implementation based on three TopologyFactories providing │ │ │ │ │ -the LocalBasis,... │ │ │ │ │ -DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, │ │ │ │ │ -typename InterpolF::Object > Traits │ │ │ │ │ -DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:29 │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:21 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: power.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalprismp2localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
power.hh File Reference
│ │ │ │ +
hierarchicalprismp2localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <memory>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/meta/power/basis.hh>
│ │ │ │ -#include <dune/localfunctions/meta/power/coefficients.hh>
│ │ │ │ -#include <dune/localfunctions/meta/power/interpolation.hh>
│ │ │ │ + │ │ │ │ +

Hierarchical prism p2 shape functions for the simplex. │ │ │ │ +More...

│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PowerFiniteElement< Backend, dimR >
 Meta-finite element turning a scalar finite element into vector-valued one. More...
 
struct  Dune::PowerFiniteElement< Backend, dimR >::Traits
 types of component objects More...
 
class  Dune::PowerFiniteElementFactory< BackendFiniteElement, dimR >
 Factory for meta-finite elements turning scalar finite elements into vector-valued ones. More...
class  Dune::HierarchicalPrismP2LocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Hierarchical prism p2 shape functions for the simplex.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,33 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -power.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +hierarchicalprismp2localbasis.hh File Reference │ │ │ │ │ +Hierarchical prism p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _> │ │ │ │ │ -  Meta-finite element turning a scalar finite element into vector-valued │ │ │ │ │ - one. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -  types of component objects _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _B_a_c_k_e_n_d_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _d_i_m_R_ _> │ │ │ │ │ -  Factory for meta-finite elements turning scalar finite elements into │ │ │ │ │ - vector-valued ones. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Hierarchical prism p2 shape functions for the simplex. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00320_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: power.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalprismp2localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,271 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
power.hh
│ │ │ │ +
hierarchicalprismp2localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <memory>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/geometry/type.hh>
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
12#include <numeric>
│ │ │ │
13
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
17
│ │ │ │ -
18namespace Dune {
│ │ │ │ -
19
│ │ │ │ -
22
│ │ │ │ -
28 template<class Backend, std::size_t dimR>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 public:
│ │ │ │ -
│ │ │ │ -
32 struct Traits {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
38 typedef PowerInterpolation<typename Backend::Traits::Interpolation,
│ │ │ │ -
39 typename Basis::Traits> Interpolation;
│ │ │ │ -
40 };
│ │ │ │ -
│ │ │ │ -
41 private:
│ │ │ │ -
42 std::shared_ptr<const Backend> backend;
│ │ │ │ -
43 typename Traits::Basis basis_;
│ │ │ │ -
44 typename Traits::Coefficients coefficients_;
│ │ │ │ -
45 typename Traits::Interpolation interpolation_;
│ │ │ │ +
14#include <dune/common/fvector.hh>
│ │ │ │ +
15#include <dune/common/fmatrix.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ +
18
│ │ │ │ +
19namespace Dune
│ │ │ │ +
20{
│ │ │ │ +
21 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24 public:
│ │ │ │ +
26 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │ +
27
│ │ │ │ +
│ │ │ │ +
29 unsigned int size () const
│ │ │ │ +
30 {
│ │ │ │ +
31 return 18;
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ +
35 void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
36 std::vector<typename Traits::RangeType> & out) const
│ │ │ │ +
37 {
│ │ │ │ +
38 out.resize(18);
│ │ │ │ +
39
│ │ │ │ +
40 out[0]=(1.0-in[0]-in[1])*(1.0-in[2]);
│ │ │ │ +
41 out[1]= in[0]*(1-in[2]);
│ │ │ │ +
42 out[2]=in[1]*(1-in[2]);
│ │ │ │ +
43 out[3]=in[2]*(1.0-in[0]-in[1]);
│ │ │ │ +
44 out[4]=in[0]*in[2];
│ │ │ │ +
45 out[5]=in[1]*in[2];
│ │ │ │
46
│ │ │ │ -
47 public:
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
53 PowerFiniteElement(const Backend &backend_) :
│ │ │ │ -
54 backend(new Backend(backend_)),
│ │ │ │ -
55 basis_(backend->basis()),
│ │ │ │ -
56 coefficients_(backend->coefficients(), dimR),
│ │ │ │ -
57 interpolation_(backend->interpolation())
│ │ │ │ -
58 { }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
65 PowerFiniteElement(const std::shared_ptr<const Backend> &backendSPtr) :
│ │ │ │ -
66 backend(backendSPtr),
│ │ │ │ -
67 basis_(backend->basis()),
│ │ │ │ -
68 coefficients_(backend->coefficients(), dimR),
│ │ │ │ -
69 interpolation_(backend->interpolation())
│ │ │ │ -
70 { }
│ │ │ │ -
│ │ │ │ +
47 //edges
│ │ │ │ +
48 out[6]=2*(1.0-in[0]-in[1])*(0.5-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
49 out[7]=2*in[0]*(-0.5+in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
50 out[8]=2*in[1]*(-0.5+in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
51 out[9]=4*in[0]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
52 out[10]=4*in[1]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
53 out[11]=4*in[0]*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
54 out[12]=4*in[0]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
55 out[13]=4*in[1]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
56 out[14]=4*in[0]*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
57
│ │ │ │ +
58 //faces
│ │ │ │ +
59 out[15]=4*in[0]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
60 out[16]=4*in[1]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
61 out[17]=4*in[0]*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
64
│ │ │ │ +
65
│ │ │ │ +
│ │ │ │ +
67 void evaluateJacobian (const typename Traits::DomainType& in, //position
│ │ │ │ +
68 std::vector<typename Traits::JacobianType>& out) const //return value
│ │ │ │ +
69 {
│ │ │ │ +
70 out.resize(18);
│ │ │ │
71
│ │ │ │ -
73
│ │ │ │ -
77 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
83 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
84 { return coefficients_; }
│ │ │ │ -
│ │ │ │ -
86
│ │ │ │ -
│ │ │ │ -
90 const typename Traits::Interpolation& interpolation() const
│ │ │ │ -
91 { return interpolation_; }
│ │ │ │ -
│ │ │ │ -
93 GeometryType type() const { return backend->type(); }
│ │ │ │ -
94 };
│ │ │ │ -
│ │ │ │ -
95
│ │ │ │ -
98
│ │ │ │ -
105 template<class BackendFiniteElement, std::size_t dimR>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
107 {
│ │ │ │ -
108 public:
│ │ │ │ - │ │ │ │ -
111
│ │ │ │ +
72 //vertices
│ │ │ │ +
73 out[0][0][0] = in[2]-1;
│ │ │ │ +
74 out[0][0][1] = in[2]-1;
│ │ │ │ +
75 out[0][0][2] = in[0]+in[1]-1;
│ │ │ │ +
76
│ │ │ │ +
77 out[1][0][0] = 1-in[2];
│ │ │ │ +
78 out[1][0][1] = 0;
│ │ │ │ +
79 out[1][0][2] =-in[0];
│ │ │ │ +
80
│ │ │ │ +
81 out[2][0][0] = 0;
│ │ │ │ +
82 out[2][0][1] = 1-in[2];
│ │ │ │ +
83 out[2][0][2] = -in[1];
│ │ │ │ +
84
│ │ │ │ +
85 out[3][0][0] = -in[2];
│ │ │ │ +
86 out[3][0][1] = -in[2];
│ │ │ │ +
87 out[3][0][2] = 1-in[0]-in[1];
│ │ │ │ +
88
│ │ │ │ +
89 out[4][0][0] = in[2];
│ │ │ │ +
90 out[4][0][1] = 0;
│ │ │ │ +
91 out[4][0][2] = in[0];
│ │ │ │ +
92
│ │ │ │ +
93 out[5][0][0] = 0;
│ │ │ │ +
94 out[5][0][1] = in[2];
│ │ │ │ +
95 out[5][0][2] = in[1];
│ │ │ │ +
96
│ │ │ │ +
97 //edges
│ │ │ │ +
98 out[6][0][0] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
99 out[6][0][1] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
100 out[6][0][2] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
101
│ │ │ │ +
102 out[7][0][0] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
103 out[7][0][1] = 0;
│ │ │ │ +
104 out[7][0][2] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]);
│ │ │ │ +
105
│ │ │ │ +
106 out[8][0][0] = 0;
│ │ │ │ +
107 out[8][0][1] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
108 out[8][0][2] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]);
│ │ │ │ +
109
│ │ │ │ +
110 out[9][0][0] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
111 out[9][0][1] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
112 out[9][0][2] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │
113
│ │ │ │ -
│ │ │ │ -
117 const FiniteElement make(const BackendFiniteElement &backend) const
│ │ │ │ -
118 { return FiniteElement(backend); }
│ │ │ │ -
│ │ │ │ -
120
│ │ │ │ -
124 const FiniteElement
│ │ │ │ -
│ │ │ │ -
125 make(const std::shared_ptr<const BackendFiniteElement> &backendSPtr) const
│ │ │ │ -
126 { return FiniteElement(backendSPtr); }
│ │ │ │ +
114 out[10][0][0] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
115 out[10][0][1] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
116 out[10][0][2] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ +
117
│ │ │ │ +
118 out[11][0][0] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
119 out[11][0][1] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
120 out[11][0][2] = 4*in[0]*in[1]*(-3+4*in[2]);
│ │ │ │ +
121
│ │ │ │ +
122 out[12][0][0] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
123 out[12][0][1] = (-4*in[0])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
124 out[12][0][2] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ +
125
│ │ │ │ +
126 out[13][0][0] = -4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
127 out[13][0][1] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
128 out[13][0][2] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ +
129
│ │ │ │ +
130 out[14][0][0] = 4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
131 out[14][0][1] = 4*in[0]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
132 out[14][0][2] = 4*in[0]*in[1]*(-1+4*in[2]);
│ │ │ │ +
133
│ │ │ │ +
134 //faces
│ │ │ │ +
135 out[15][0][0] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
136 out[15][0][1] = -4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
137 out[15][0][2] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
138
│ │ │ │ +
139 out[16][0][0] = -4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
140 out[16][0][1] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
141 out[16][0][2] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
142
│ │ │ │ +
143 out[17][0][0] = 4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
144 out[17][0][1] = 4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
145 out[17][0][2] = 4*in[0]*in[1]*(4-8*in[2]);
│ │ │ │ +
146 }
│ │ │ │ +
│ │ │ │ +
147
│ │ │ │ +
│ │ │ │ +
149 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
150 const typename Traits::DomainType& in, // position
│ │ │ │ +
151 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
152 {
│ │ │ │ +
153 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
154 if (totalOrder == 0) {
│ │ │ │ +
155 evaluateFunction(in, out);
│ │ │ │ +
156 } else if (totalOrder == 1) {
│ │ │ │ +
157 out.resize(size());
│ │ │ │ +
158 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
159
│ │ │ │ +
160 switch (direction) {
│ │ │ │ +
161 case 0:
│ │ │ │ +
162 out[0] = in[2]-1;
│ │ │ │ +
163 out[1] = 1-in[2];
│ │ │ │ +
164 out[2] = 0;
│ │ │ │ +
165 out[3] = -in[2];
│ │ │ │ +
166 out[4] = in[2];
│ │ │ │ +
167 out[5] = 0;
│ │ │ │ +
168 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
169 out[7] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
170 out[8] = 0;
│ │ │ │ +
171 out[9] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
172 out[10] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
173 out[11] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
174 out[12] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
175 out[13] = -4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
176 out[14] = 4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
177 out[15] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
178 out[16] = -4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
179 out[17] = 4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
180 break;
│ │ │ │ +
181 case 1:
│ │ │ │ +
182 out[0] = in[2]-1;
│ │ │ │ +
183 out[1] = 0;
│ │ │ │ +
184 out[2] = 1-in[2];
│ │ │ │ +
185 out[3] = -in[2];
│ │ │ │ +
186 out[4] = 0;
│ │ │ │ +
187 out[5] = in[2];
│ │ │ │ +
188 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
189 out[7] = 0;
│ │ │ │ +
190 out[8] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
191 out[9] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
192 out[10] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
193 out[11] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ +
194 out[12] = (-4*in[0])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
195 out[13] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
196 out[14] = 4*in[0]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ +
197 out[15] = -4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
198 out[16] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
199 out[17] = 4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ +
200 break;
│ │ │ │ +
201 case 2:
│ │ │ │ +
202 out[0] = in[0]+in[1]-1;
│ │ │ │ +
203 out[1] =-in[0];
│ │ │ │ +
204 out[2] = -in[1];
│ │ │ │ +
205 out[3] = 1-in[0]-in[1];
│ │ │ │ +
206 out[4] = in[0];
│ │ │ │ +
207 out[5] = in[1];
│ │ │ │ +
208 out[6] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
209 out[7] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]);
│ │ │ │ +
210 out[8] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]);
│ │ │ │ +
211 out[9] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ +
212 out[10] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ +
213 out[11] = 4*in[0]*in[1]*(-3+4*in[2]);
│ │ │ │ +
214 out[12] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ +
215 out[13] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ +
216 out[14] = 4*in[0]*in[1]*(-1+4*in[2]);
│ │ │ │ +
217 out[15] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
218 out[16] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ +
219 out[17] = 4*in[0]*in[1]*(4-8*in[2]);
│ │ │ │ +
220 break;
│ │ │ │ +
221 default:
│ │ │ │ +
222 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
223 }
│ │ │ │ +
224 } else {
│ │ │ │ +
225 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
226 }
│ │ │ │ +
227 }
│ │ │ │ +
│ │ │ │ +
228
│ │ │ │ +
│ │ │ │ +
231 unsigned int order() const
│ │ │ │ +
232 {
│ │ │ │ +
233 return 2;
│ │ │ │ +
234 }
│ │ │ │
│ │ │ │ -
127
│ │ │ │ -
128 };
│ │ │ │ +
235
│ │ │ │ +
236 };
│ │ │ │
│ │ │ │ -
129
│ │ │ │ -
130} // namespace Dune
│ │ │ │ -
131
│ │ │ │ -
132#endif // DUNE_LOCALFUNCTIONS_META_POWER_HH
│ │ │ │ +
237}
│ │ │ │ +
238#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Meta-finite element turning a scalar finite element into vector-valued one.
Definition power.hh:29
│ │ │ │ -
const Traits::Basis & basis() const
Extract basis of this finite element.
Definition power.hh:77
│ │ │ │ -
GeometryType type() const
Extract geometry type of this finite element.
Definition power.hh:93
│ │ │ │ -
const Traits::Interpolation & interpolation() const
Extract interpolation of this finite element.
Definition power.hh:90
│ │ │ │ -
PowerFiniteElement(const Backend &backend_)
Construct a finite element.
Definition power.hh:53
│ │ │ │ -
PowerFiniteElement(const std::shared_ptr< const Backend > &backendSPtr)
Construct a finite element.
Definition power.hh:65
│ │ │ │ -
const Traits::Coefficients & coefficients() const
Extract coefficients of this finite element.
Definition power.hh:83
│ │ │ │ -
types of component objects
Definition power.hh:32
│ │ │ │ -
PowerBasis< typename Backend::Traits::Basis, dimR > Basis
type of the Basis
Definition power.hh:34
│ │ │ │ -
PowerCoefficients Coefficients
type of the Coefficients
Definition power.hh:36
│ │ │ │ -
PowerInterpolation< typename Backend::Traits::Interpolation, typename Basis::Traits > Interpolation
type of the Interpolation
Definition power.hh:39
│ │ │ │ -
Factory for meta-finite elements turning scalar finite elements into vector-valued ones.
Definition power.hh:107
│ │ │ │ -
const FiniteElement make(const std::shared_ptr< const BackendFiniteElement > &backendSPtr) const
create a finite element
Definition power.hh:125
│ │ │ │ -
const FiniteElement make(const BackendFiniteElement &backend) const
create a finite element
Definition power.hh:117
│ │ │ │ -
PowerFiniteElement< BackendFiniteElement, dimR > FiniteElement
Type of the finite element.
Definition power.hh:110
│ │ │ │ -
Meta-basis turning a scalar basis into vector-valued basis.
Definition meta/power/basis.hh:26
│ │ │ │ -
Meta-coefficients turning a scalar coefficients into vector-valued coefficients.
Definition meta/power/coefficients.hh:23
│ │ │ │ -
Meta-interpolation turning a scalar interpolation into vector-valued interpolation.
Definition meta/power/interpolation.hh:26
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition hierarchicalprismp2localbasis.hh:23
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition hierarchicalprismp2localbasis.hh:26
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition hierarchicalprismp2localbasis.hh:29
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition hierarchicalprismp2localbasis.hh:231
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalprismp2localbasis.hh:149
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalprismp2localbasis.hh:35
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalprismp2localbasis.hh:67
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,171 +1,282 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ -power.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ +hierarchicalprismp2localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ +7 │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_b_a_s_i_s_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_m_e_t_a_/_p_o_w_e_r_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -17 │ │ │ │ │ -18namespace _D_u_n_e { │ │ │ │ │ -19 │ │ │ │ │ -22 │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ -30 public: │ │ │ │ │ -_3_2 struct _T_r_a_i_t_s { │ │ │ │ │ -_3_4 typedef _P_o_w_e_r_B_a_s_i_s_<_t_y_p_e_n_a_m_e_ _B_a_c_k_e_n_d_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s_,_ _d_i_m_R_> _B_a_s_i_s; │ │ │ │ │ -_3_6 typedef _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -38 typedef _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -40 }; │ │ │ │ │ -41 private: │ │ │ │ │ -42 std::shared_ptr backend; │ │ │ │ │ -43 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ -44 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ -45 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18 │ │ │ │ │ +19namespace _D_u_n_e │ │ │ │ │ +20{ │ │ │ │ │ +21 template │ │ │ │ │ +_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +23 { │ │ │ │ │ +24 public: │ │ │ │ │ +_2_6 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ +FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +27 │ │ │ │ │ +_2_9 unsigned int _s_i_z_e () const │ │ │ │ │ +30 { │ │ │ │ │ +31 return 18; │ │ │ │ │ +32 } │ │ │ │ │ +33 │ │ │ │ │ +_3_5 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +36 std::vector & out) const │ │ │ │ │ +37 { │ │ │ │ │ +38 out.resize(18); │ │ │ │ │ +39 │ │ │ │ │ +40 out[0]=(1.0-in[0]-in[1])*(1.0-in[2]); │ │ │ │ │ +41 out[1]= in[0]*(1-in[2]); │ │ │ │ │ +42 out[2]=in[1]*(1-in[2]); │ │ │ │ │ +43 out[3]=in[2]*(1.0-in[0]-in[1]); │ │ │ │ │ +44 out[4]=in[0]*in[2]; │ │ │ │ │ +45 out[5]=in[1]*in[2]; │ │ │ │ │ 46 │ │ │ │ │ -47 public: │ │ │ │ │ -49 │ │ │ │ │ -_5_3 _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t(const Backend &backend_) : │ │ │ │ │ -54 backend(new Backend(backend_)), │ │ │ │ │ -55 basis_(backend->_b_a_s_i_s()), │ │ │ │ │ -56 coefficients_(backend->_c_o_e_f_f_i_c_i_e_n_t_s(), dimR), │ │ │ │ │ -57 interpolation_(backend->_i_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ -58 { } │ │ │ │ │ -59 │ │ │ │ │ -61 │ │ │ │ │ -_6_5 _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t(const std::shared_ptr &backendSPtr) : │ │ │ │ │ -66 backend(backendSPtr), │ │ │ │ │ -67 basis_(backend->_b_a_s_i_s()), │ │ │ │ │ -68 coefficients_(backend->_c_o_e_f_f_i_c_i_e_n_t_s(), dimR), │ │ │ │ │ -69 interpolation_(backend->_i_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ -70 { } │ │ │ │ │ +47 //edges │ │ │ │ │ +48 out[6]=2*(1.0-in[0]-in[1])*(0.5-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +49 out[7]=2*in[0]*(-0.5+in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +50 out[8]=2*in[1]*(-0.5+in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +51 out[9]=4*in[0]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +52 out[10]=4*in[1]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +53 out[11]=4*in[0]*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +54 out[12]=4*in[0]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +55 out[13]=4*in[1]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +56 out[14]=4*in[0]*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +57 │ │ │ │ │ +58 //faces │ │ │ │ │ +59 out[15]=4*in[0]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +60 out[16]=4*in[1]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +61 out[17]=4*in[0]*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +64 │ │ │ │ │ +65 │ │ │ │ │ +_6_7 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, //position │ │ │ │ │ +68 std::vector& out) const //return value │ │ │ │ │ +69 { │ │ │ │ │ +70 out.resize(18); │ │ │ │ │ 71 │ │ │ │ │ -73 │ │ │ │ │ -_7_7 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ -79 │ │ │ │ │ -_8_3 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -84 { return coefficients_; } │ │ │ │ │ -86 │ │ │ │ │ -_9_0 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -91 { return interpolation_; } │ │ │ │ │ -_9_3 GeometryType _t_y_p_e() const { return backend->type(); } │ │ │ │ │ -94 }; │ │ │ │ │ -95 │ │ │ │ │ -98 │ │ │ │ │ -105 template │ │ │ │ │ -_1_0_6 class _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -107 { │ │ │ │ │ -108 public: │ │ │ │ │ -_1_1_0 typedef _P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_<_B_a_c_k_e_n_d_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _d_i_m_R_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -111 │ │ │ │ │ +72 //vertices │ │ │ │ │ +73 out[0][0][0] = in[2]-1; │ │ │ │ │ +74 out[0][0][1] = in[2]-1; │ │ │ │ │ +75 out[0][0][2] = in[0]+in[1]-1; │ │ │ │ │ +76 │ │ │ │ │ +77 out[1][0][0] = 1-in[2]; │ │ │ │ │ +78 out[1][0][1] = 0; │ │ │ │ │ +79 out[1][0][2] =-in[0]; │ │ │ │ │ +80 │ │ │ │ │ +81 out[2][0][0] = 0; │ │ │ │ │ +82 out[2][0][1] = 1-in[2]; │ │ │ │ │ +83 out[2][0][2] = -in[1]; │ │ │ │ │ +84 │ │ │ │ │ +85 out[3][0][0] = -in[2]; │ │ │ │ │ +86 out[3][0][1] = -in[2]; │ │ │ │ │ +87 out[3][0][2] = 1-in[0]-in[1]; │ │ │ │ │ +88 │ │ │ │ │ +89 out[4][0][0] = in[2]; │ │ │ │ │ +90 out[4][0][1] = 0; │ │ │ │ │ +91 out[4][0][2] = in[0]; │ │ │ │ │ +92 │ │ │ │ │ +93 out[5][0][0] = 0; │ │ │ │ │ +94 out[5][0][1] = in[2]; │ │ │ │ │ +95 out[5][0][2] = in[1]; │ │ │ │ │ +96 │ │ │ │ │ +97 //edges │ │ │ │ │ +98 out[6][0][0] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +99 out[6][0][1] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +100 out[6][0][2] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +101 │ │ │ │ │ +102 out[7][0][0] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +103 out[7][0][1] = 0; │ │ │ │ │ +104 out[7][0][2] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]); │ │ │ │ │ +105 │ │ │ │ │ +106 out[8][0][0] = 0; │ │ │ │ │ +107 out[8][0][1] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +108 out[8][0][2] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]); │ │ │ │ │ +109 │ │ │ │ │ +110 out[9][0][0] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +111 out[9][0][1] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +112 out[9][0][2] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ 113 │ │ │ │ │ -_1_1_7 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const BackendFiniteElement &backend) const │ │ │ │ │ -118 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(backend); } │ │ │ │ │ -120 │ │ │ │ │ -124 const _F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -_1_2_5 _m_a_k_e(const std::shared_ptr &backendSPtr) const │ │ │ │ │ -126 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(backendSPtr); } │ │ │ │ │ -127 │ │ │ │ │ -128 }; │ │ │ │ │ +114 out[10][0][0] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +115 out[10][0][1] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +116 out[10][0][2] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ +117 │ │ │ │ │ +118 out[11][0][0] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +119 out[11][0][1] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +120 out[11][0][2] = 4*in[0]*in[1]*(-3+4*in[2]); │ │ │ │ │ +121 │ │ │ │ │ +122 out[12][0][0] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +123 out[12][0][1] = (-4*in[0])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +124 out[12][0][2] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ +125 │ │ │ │ │ +126 out[13][0][0] = -4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +127 out[13][0][1] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +128 out[13][0][2] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ 129 │ │ │ │ │ -130} // namespace Dune │ │ │ │ │ -131 │ │ │ │ │ -132#endif // DUNE_LOCALFUNCTIONS_META_POWER_HH │ │ │ │ │ +130 out[14][0][0] = 4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +131 out[14][0][1] = 4*in[0]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +132 out[14][0][2] = 4*in[0]*in[1]*(-1+4*in[2]); │ │ │ │ │ +133 │ │ │ │ │ +134 //faces │ │ │ │ │ +135 out[15][0][0] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +136 out[15][0][1] = -4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +137 out[15][0][2] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +138 │ │ │ │ │ +139 out[16][0][0] = -4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +140 out[16][0][1] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +141 out[16][0][2] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +142 │ │ │ │ │ +143 out[17][0][0] = 4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +144 out[17][0][1] = 4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +145 out[17][0][2] = 4*in[0]*in[1]*(4-8*in[2]); │ │ │ │ │ +146 } │ │ │ │ │ +147 │ │ │ │ │ +_1_4_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +150 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +151 std::vector& out) const // return value │ │ │ │ │ +152 { │ │ │ │ │ +153 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +154 if (totalOrder == 0) { │ │ │ │ │ +155 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +156 } else if (totalOrder == 1) { │ │ │ │ │ +157 out.resize(_s_i_z_e()); │ │ │ │ │ +158 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ +(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ +159 │ │ │ │ │ +160 switch (direction) { │ │ │ │ │ +161 case 0: │ │ │ │ │ +162 out[0] = in[2]-1; │ │ │ │ │ +163 out[1] = 1-in[2]; │ │ │ │ │ +164 out[2] = 0; │ │ │ │ │ +165 out[3] = -in[2]; │ │ │ │ │ +166 out[4] = in[2]; │ │ │ │ │ +167 out[5] = 0; │ │ │ │ │ +168 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +169 out[7] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +170 out[8] = 0; │ │ │ │ │ +171 out[9] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +172 out[10] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +173 out[11] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +174 out[12] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +175 out[13] = -4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +176 out[14] = 4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +177 out[15] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +178 out[16] = -4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +179 out[17] = 4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +180 break; │ │ │ │ │ +181 case 1: │ │ │ │ │ +182 out[0] = in[2]-1; │ │ │ │ │ +183 out[1] = 0; │ │ │ │ │ +184 out[2] = 1-in[2]; │ │ │ │ │ +185 out[3] = -in[2]; │ │ │ │ │ +186 out[4] = 0; │ │ │ │ │ +187 out[5] = in[2]; │ │ │ │ │ +188 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +189 out[7] = 0; │ │ │ │ │ +190 out[8] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +191 out[9] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +192 out[10] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +193 out[11] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ +194 out[12] = (-4*in[0])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +195 out[13] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +196 out[14] = 4*in[0]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ +197 out[15] = -4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +198 out[16] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +199 out[17] = 4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ +200 break; │ │ │ │ │ +201 case 2: │ │ │ │ │ +202 out[0] = in[0]+in[1]-1; │ │ │ │ │ +203 out[1] =-in[0]; │ │ │ │ │ +204 out[2] = -in[1]; │ │ │ │ │ +205 out[3] = 1-in[0]-in[1]; │ │ │ │ │ +206 out[4] = in[0]; │ │ │ │ │ +207 out[5] = in[1]; │ │ │ │ │ +208 out[6] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +209 out[7] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]); │ │ │ │ │ +210 out[8] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]); │ │ │ │ │ +211 out[9] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ +212 out[10] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ +213 out[11] = 4*in[0]*in[1]*(-3+4*in[2]); │ │ │ │ │ +214 out[12] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ +215 out[13] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ +216 out[14] = 4*in[0]*in[1]*(-1+4*in[2]); │ │ │ │ │ +217 out[15] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +218 out[16] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ +219 out[17] = 4*in[0]*in[1]*(4-8*in[2]); │ │ │ │ │ +220 break; │ │ │ │ │ +221 default: │ │ │ │ │ +222 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +223 } │ │ │ │ │ +224 } else { │ │ │ │ │ +225 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +226 } │ │ │ │ │ +227 } │ │ │ │ │ +228 │ │ │ │ │ +_2_3_1 unsigned int _o_r_d_e_r() const │ │ │ │ │ +232 { │ │ │ │ │ +233 return 2; │ │ │ │ │ +234 } │ │ │ │ │ +235 │ │ │ │ │ +236 }; │ │ │ │ │ +237} │ │ │ │ │ +238#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Meta-finite element turning a scalar finite element into vector-valued one. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ -const Traits::Basis & basis() const │ │ │ │ │ -Extract basis of this finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:77 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -Extract geometry type of this finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:93 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::Interpolation & interpolation() const │ │ │ │ │ -Extract interpolation of this finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -PowerFiniteElement(const Backend &backend_) │ │ │ │ │ -Construct a finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -PowerFiniteElement(const std::shared_ptr< const Backend > &backendSPtr) │ │ │ │ │ -Construct a finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::Coefficients & coefficients() const │ │ │ │ │ -Extract coefficients of this finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -types of component objects │ │ │ │ │ -DDeeffiinniittiioonn power.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -PowerBasis< typename Backend::Traits::Basis, dimR > Basis │ │ │ │ │ -type of the Basis │ │ │ │ │ -DDeeffiinniittiioonn power.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -PowerCoefficients Coefficients │ │ │ │ │ -type of the Coefficients │ │ │ │ │ -DDeeffiinniittiioonn power.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -PowerInterpolation< typename Backend::Traits::Interpolation, typename Basis:: │ │ │ │ │ -Traits > Interpolation │ │ │ │ │ -type of the Interpolation │ │ │ │ │ -DDeeffiinniittiioonn power.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory for meta-finite elements turning scalar finite elements into vector- │ │ │ │ │ -valued ones. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const std::shared_ptr< const BackendFiniteElement > │ │ │ │ │ -&backendSPtr) const │ │ │ │ │ -create a finite element │ │ │ │ │ -DDeeffiinniittiioonn power.hh:125 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const BackendFiniteElement &backend) const │ │ │ │ │ -create a finite element │ │ │ │ │ -DDeeffiinniittiioonn power.hh:117 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -PowerFiniteElement< BackendFiniteElement, dimR > FiniteElement │ │ │ │ │ -Type of the finite element. │ │ │ │ │ -DDeeffiinniittiioonn power.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ -Meta-basis turning a scalar basis into vector-valued basis. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ -coefficients. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/coefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ -interpolation. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/interpolation.hh:26 │ │ │ │ │ -_b_a_s_i_s_._h_h │ │ │ │ │ -_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:231 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:67 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexprebasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,45 +65,55 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexprebasis.hh File Reference
│ │ │ │ +
hierarchicalsimplexp2localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ + │ │ │ │ +

Hierarchical p2 shape functions for the simplex. │ │ │ │ +More...

│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::NedelecPreBasisFactory< dim, Field >
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, dim >
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 1 >
 Hierarchical P2 basis in 1d. More...
 
struct  Dune::NedelecPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 2 >
 Hierarchical P2 basis in 2d. More...
 
struct  Dune::NedelecVecMatrix< geometryId, Field >
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 3 >
 Hierarchical P2 basis in 3d. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Hierarchical p2 shape functions for the simplex.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,35 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -nedelecsimplexprebasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_< │ │ │ │ │ - _d_d_,_ _F_F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ +  Hierarchical P2 basis in 1d. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_i_e_l_d_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ +  Hierarchical P2 basis in 2d. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ +  Hierarchical P2 basis in 3d. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00323_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexprebasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,353 +70,367 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexprebasis.hh
│ │ │ │ +
hierarchicalsimplexp2localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/geometry/type.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17 template < GeometryType::Id geometryId, class Field >
│ │ │ │ -
18 struct NedelecVecMatrix;
│ │ │ │ -
19
│ │ │ │ -
23 template <unsigned int dim, class Field>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ - │ │ │ │ -
27 typedef typename MBasisFactory::Object MBasis;
│ │ │ │ - │ │ │ │ - │ │ │ │ +
12#include <numeric>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/common/fvector.hh>
│ │ │ │ +
15#include <dune/common/fmatrix.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ +
18
│ │ │ │ +
19namespace Dune
│ │ │ │ +
20{
│ │ │ │ +
21 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 DUNE_THROW(Dune::NotImplemented,"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
│ │ │ │ +
28 }
│ │ │ │ +
│ │ │ │ +
29 };
│ │ │ │ +
│ │ │ │
30
│ │ │ │ -
31 typedef const Basis Object;
│ │ │ │ -
32 typedef std::size_t Key;
│ │ │ │ -
33
│ │ │ │ -
34 template <unsigned int dd, class FF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 {
│ │ │ │ - │ │ │ │ -
38 };
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
40 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
41 static Object *create ( Key order )
│ │ │ │ -
42 {
│ │ │ │ -
43 /*
│ │ │ │ -
44 * The nedelec parameter begins at 1.
│ │ │ │ -
45 * This is the numbering used by J.C. Nedelec himself.
│ │ │ │ -
46 * See "Mixed Finite Elements in \R^3" published in 1980.
│ │ │ │ -
47 *
│ │ │ │ -
48 * This construction is based on the construction of Raviart-Thomas elements.
│ │ │ │ -
49 * There the numbering starts at 0.
│ │ │ │ -
50 * Because of this we reduce the order internally by 1.
│ │ │ │ -
51 */
│ │ │ │ -
52 order--;
│ │ │ │ - │ │ │ │ -
54 MBasis *mbasis = MBasisFactory::template create<geometryId>(order+1);
│ │ │ │ -
55 std::remove_const_t<Object>* tmBasis = new std::remove_const_t<Object>(*mbasis);
│ │ │ │ -
56 tmBasis->fill(vecMatrix);
│ │ │ │ -
57 return tmBasis;
│ │ │ │ +
46 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
48 {
│ │ │ │ +
49 public:
│ │ │ │ +
51 typedef LocalBasisTraits<D,1,Dune::FieldVector<D,1>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
52 Dune::FieldMatrix<R,1,1> > Traits;
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
55 unsigned int size () const
│ │ │ │ +
56 {
│ │ │ │ +
57 return 3;
│ │ │ │
58 }
│ │ │ │
│ │ │ │ -
59 static void release( Object *object ) { delete object; }
│ │ │ │ -
60 };
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
62 template <GeometryType::Id geometryId, class Field>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
64 {
│ │ │ │ -
65 static constexpr GeometryType geometry = geometryId;
│ │ │ │ -
66 static const unsigned int dim = geometry.dim();
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
69 NedelecVecMatrix(std::size_t order)
│ │ │ │ -
70 {
│ │ │ │ -
71 /*
│ │ │ │ -
72 * Construction of Nedelec elements see "Mixed Finite Elements in \R^3" by Nedelec, 1980.
│ │ │ │ -
73 *
│ │ │ │ -
74 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree $\leq k$.
│ │ │ │ -
75 * The space of Nedelec functions in $n$ dimensions with index $k$ is defined as
│ │ │ │ -
76 *
│ │ │ │ -
77 * \begin{equation*}
│ │ │ │ -
78 * Ned_k := (\P_{n,k-1})^n \oplus \{p \in (\P_{n,k})^n: <p,x>=0 \}
│ │ │ │ -
79 * \end{equation*}
│ │ │ │ -
80 * with $x=(x,y)$ in two dimensions and $x=(x,y,z)$ in three dimensions.
│ │ │ │ -
81 *
│ │ │ │ -
82 * For $Ned_k$ holds
│ │ │ │ -
83 * \begin{equation*}
│ │ │ │ -
84 * (\P_{n,k-1})^n \subset Ned_k \subset (\P_{n,k})^n.
│ │ │ │ -
85 * \end{equation*}
│ │ │ │ -
86 *
│ │ │ │ -
87 * We construct $(\P_{n,k})^n$ and and only use the monomials contained in $Ned$.
│ │ │ │ -
88 *
│ │ │ │ -
89 */
│ │ │ │ -
90 if( (dim!=2 && dim!=3) || !geometry.isSimplex())
│ │ │ │ -
91 DUNE_THROW(Dune::NotImplemented,"High order nedelec elements are only supported by simplices in 2d and 3d");
│ │ │ │ -
92
│ │ │ │ -
93 MIBasis basis(order+1);
│ │ │ │ -
94 FieldVector< MI, dim > x;
│ │ │ │ -
95 /*
│ │ │ │ -
96 * Init MultiIndices
│ │ │ │ -
97 * x[0]=(1,0,0) x
│ │ │ │ -
98 * x[1]=(0,1,0) y
│ │ │ │ -
99 * x[2]=(0,0,1) z
│ │ │ │ -
100 */
│ │ │ │ -
101 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ -
102 x[i].set(i,1);
│ │ │ │ -
103 std::vector< MI > val( basis.size() );
│ │ │ │ -
104
│ │ │ │ -
105 // val now contains all monomials in $n$ dimensions with degree $\leq order+1$
│ │ │ │ -
106 basis.evaluate( x, val );
│ │ │ │ -
107
│ │ │ │ -
108 col_ = basis.size();
│ │ │ │ -
109
│ │ │ │ -
110 // get $\dim (\P_{n,order-1})$
│ │ │ │ -
111 unsigned int notHomogen = 0;
│ │ │ │ -
112 if (order>0)
│ │ │ │ -
113 notHomogen = basis.sizes()[order-1];
│ │ │ │ -
114
│ │ │ │ -
115 // the number of basis functions for the set of homogeneous polynomials with degree $order$
│ │ │ │ -
116 unsigned int homogen = basis.sizes()[order]-notHomogen;
│ │ │ │ -
117
│ │ │ │ -
118 /*
│ │ │ │ -
119 * 2D:
│ │ │ │ -
120 * \begin{equation*}
│ │ │ │ -
121 * Ned_{order} = (\P_{order-1})^2 \oplus (-y,x)^T \widetilde \P_{order-1}
│ │ │ │ -
122 * \end{equation*}
│ │ │ │ -
123 *
│ │ │ │ -
124 * It gets more complicated in higher dimensions.
│ │ │ │ -
125 *
│ │ │ │ -
126 * 3D:
│ │ │ │ -
127 * \begin{equation*}
│ │ │ │ -
128 * Ned_{order} = (\P_{n,order-1})^3 \oplus (z,0,-x)^T \widetilde \P_{n,order-1} \oplus (-y,x,0)^T \widetilde \P_{n,order-1} \oplus (0,-z,y)^T \widetilde \P_{n-1,order-1}
│ │ │ │ -
129 * \end{equation*}
│ │ │ │ -
130 *
│ │ │ │ -
131 * Note the last term. The index $n-1$ is on purpose.
│ │ │ │ -
132 * Else i.e. k=2
│ │ │ │ -
133 *
│ │ │ │ -
134 * (0,z,-y)^T x = (z,0,-x)^T y - (y,-x,0)^T z.
│ │ │ │ -
135 *
│ │ │ │ -
136 */
│ │ │ │ -
137
│ │ │ │ -
138 /*
│ │ │ │ -
139 * compute the number of rows for the coefficient matrix
│ │ │ │ -
140 *
│ │ │ │ -
141 * row_ = dim* \dim Ned_{order}
│ │ │ │ -
142 */
│ │ │ │ -
143 if (dim == 2)
│ │ │ │ -
144 row_ = (notHomogen*dim+homogen*(dim+1))*dim;
│ │ │ │ -
145 else if (dim==3)
│ │ │ │ -
146 {
│ │ │ │ -
147 // get dim \P_{n-1,order-1}
│ │ │ │ -
148 int homogenTwoVariables = 0;
│ │ │ │ -
149 for( int w = notHomogen; w<notHomogen + homogen; w++)
│ │ │ │ -
150 if (val[w].z(0)==0)
│ │ │ │ -
151 homogenTwoVariables++;
│ │ │ │ -
152 row_ = (notHomogen*dim+homogen*(dim+2) + homogenTwoVariables)*dim;
│ │ │ │ -
153 }
│ │ │ │ -
154
│ │ │ │ -
155 mat_ = new Field*[row_];
│ │ │ │ -
156 int row = 0;
│ │ │ │ -
157
│ │ │ │ -
158 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_{n,order-1})^dim$
│ │ │ │ -
159 * A basis function is represented by $dim$ rows.
│ │ │ │ -
160 */
│ │ │ │ -
161 for (unsigned int i=0; i<notHomogen+homogen; ++i)
│ │ │ │ -
162 {
│ │ │ │ -
163 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ -
164 {
│ │ │ │ -
165 for (unsigned int rr=0; rr<dim; ++rr)
│ │ │ │ -
166 {
│ │ │ │ -
167 // init row to zero
│ │ │ │ -
168 mat_[row] = new Field[col_];
│ │ │ │ -
169 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ -
170 mat_[row][j] = 0.;
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
61 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
62 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
63 {
│ │ │ │ +
64 out.resize(3);
│ │ │ │ +
65
│ │ │ │ +
66 out[0] = 1-in[0];
│ │ │ │ +
67 out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5);
│ │ │ │ +
68 out[2] = in[0];
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
72 inline void
│ │ │ │ +
│ │ │ │ +
73 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
74 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
75 {
│ │ │ │ +
76 out.resize(3);
│ │ │ │ +
77
│ │ │ │ +
78 out[0][0][0] = -1;
│ │ │ │ +
79 out[1][0][0] = 4-8*in[0];
│ │ │ │ +
80 out[2][0][0] = 1;
│ │ │ │ +
81 }
│ │ │ │ +
│ │ │ │ +
82
│ │ │ │ +
│ │ │ │ +
84 void partial (const std::array<unsigned int, 1>& order,
│ │ │ │ +
85 const typename Traits::DomainType& in, // position
│ │ │ │ +
86 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
87 {
│ │ │ │ +
88 auto totalOrder = order[0];
│ │ │ │ +
89 if (totalOrder == 0) {
│ │ │ │ +
90 evaluateFunction(in, out);
│ │ │ │ +
91 } else if (totalOrder == 1) {
│ │ │ │ +
92 out.resize(size());
│ │ │ │ +
93 out[0] = -1;
│ │ │ │ +
94 out[1] = 4-8*in[0];
│ │ │ │ +
95 out[2] = 1;
│ │ │ │ +
96 } else if (totalOrder == 2) {
│ │ │ │ +
97 out.resize(size());
│ │ │ │ +
98 out[0] = 0;
│ │ │ │ +
99 out[1] = -8;
│ │ │ │ +
100 out[2] = 0;
│ │ │ │ +
101 } else {
│ │ │ │ +
102 out.resize(size());
│ │ │ │ +
103 out[0] = out[1] = out[2] = 0;
│ │ │ │ +
104 }
│ │ │ │ +
105 }
│ │ │ │ +
│ │ │ │ +
106
│ │ │ │ +
│ │ │ │ +
109 unsigned int order () const
│ │ │ │ +
110 {
│ │ │ │ +
111 return 2;
│ │ │ │ +
112 }
│ │ │ │ +
│ │ │ │ +
113
│ │ │ │ +
114 };
│ │ │ │ +
│ │ │ │ +
115
│ │ │ │ +
136 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
138 {
│ │ │ │ +
139 public:
│ │ │ │ +
141 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
142 Dune::FieldMatrix<R,1,2> > Traits;
│ │ │ │ +
143
│ │ │ │ +
│ │ │ │ +
145 unsigned int size () const
│ │ │ │ +
146 {
│ │ │ │ +
147 return 6;
│ │ │ │ +
148 }
│ │ │ │ +
│ │ │ │ +
149
│ │ │ │ +
│ │ │ │ +
151 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
152 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
153 {
│ │ │ │ +
154 out.resize(6);
│ │ │ │ +
155
│ │ │ │ +
156 out[0] = 1 - in[0] - in[1];
│ │ │ │ +
157 out[1] = 4*in[0]*(1-in[0]-in[1]);
│ │ │ │ +
158 out[2] = in[0];
│ │ │ │ +
159 out[3] = 4*in[1]*(1-in[0]-in[1]);
│ │ │ │ +
160 out[4] = 4*in[0]*in[1];
│ │ │ │ +
161 out[5] = in[1];
│ │ │ │ +
162
│ │ │ │ +
163 }
│ │ │ │ +
│ │ │ │ +
164
│ │ │ │ +
166 inline void
│ │ │ │ +
│ │ │ │ +
167 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
168 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
169 {
│ │ │ │ +
170 out.resize(6);
│ │ │ │
171
│ │ │ │ -
172 if (r==rr)
│ │ │ │ -
173 mat_[row][i] = 1.;
│ │ │ │ -
174 ++row;
│ │ │ │ -
175 }
│ │ │ │ -
176 }
│ │ │ │ -
177 }
│ │ │ │ -
178
│ │ │ │ -
179 /* Assign the correct values for the homogeneous polymonials $p\in Ned_{order} \backslash (\P_{n,order-1})^dim$
│ │ │ │ -
180 * A basis function is represented by $dim$ rows.
│ │ │ │ -
181 */
│ │ │ │ -
182 for (unsigned int i=0; i<homogen; ++i)
│ │ │ │ -
183 {
│ │ │ │ -
184 // get a monomial $ p \in \P_{n,order}\backslash \P_{n,order-1}$
│ │ │ │ -
185 MI xval = val[notHomogen+i];
│ │ │ │ -
186 if(dim==2)
│ │ │ │ -
187 {
│ │ │ │ -
188 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ -
189 {
│ │ │ │ -
190 // init rows to zero
│ │ │ │ -
191 mat_[row+r] = new Field[col_];
│ │ │ │ -
192 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ -
193 mat_[row+r][j] = 0.;
│ │ │ │ -
194 }
│ │ │ │ -
195
│ │ │ │ -
196 /* set $(-y,x)^T p$ with a homogeneous monomial $p$
│ │ │ │ -
197 *
│ │ │ │ -
198 * The loop over the monomials is needed to obtain the corresponding column index.
│ │ │ │ -
199 */
│ │ │ │ -
200 for (int w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ -
201 {
│ │ │ │ -
202 if (val[w] == xval*x[0])
│ │ │ │ -
203 mat_[row+1][w] = 1.;
│ │ │ │ -
204 if (val[w] == xval*x[1])
│ │ │ │ -
205 mat_[row][w] = -1.;
│ │ │ │ -
206 }
│ │ │ │ -
207 row +=dim;
│ │ │ │ -
208 }
│ │ │ │ -
209 else if(dim==3)
│ │ │ │ -
210 {
│ │ │ │ -
211 int skipLastDim = xval.z(0)>0;
│ │ │ │ -
212 /*
│ │ │ │ -
213 * Init 9 rows to zero.
│ │ │ │ -
214 * If the homogeneous monomial has a positive x-exponent (0,-z,y) gets skipped ( see example for the Nedelec space in 3D )
│ │ │ │ -
215 * In this case only 6 rows get initialised.
│ │ │ │ -
216 */
│ │ │ │ -
217 for (unsigned int r=0; r<dim*(dim-skipLastDim); ++r)
│ │ │ │ -
218 {
│ │ │ │ -
219 // init rows to zero
│ │ │ │ -
220 mat_[row+r] = new Field[col_];
│ │ │ │ -
221 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ -
222 mat_[row+r][j] = 0.;
│ │ │ │ -
223 }
│ │ │ │ -
224
│ │ │ │ -
225 /*
│ │ │ │ -
226 * first $dim$ rows are for (z,0,-x)
│ │ │ │ -
227 *
│ │ │ │ -
228 * second $dim$ rows are for (-y,x,0)
│ │ │ │ -
229 *
│ │ │ │ -
230 * third $dim$ rows are for (0,-z,y)
│ │ │ │ -
231 *
│ │ │ │ -
232 */
│ │ │ │ -
233 for (unsigned int r=0; r<dim - skipLastDim; ++r)
│ │ │ │ -
234 {
│ │ │ │ -
235 int index = (r+dim-1)%dim;
│ │ │ │ -
236 for (int w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ -
237 {
│ │ │ │ -
238 if (val[w] == xval*x[index])
│ │ │ │ -
239 mat_[row+r][w] = 1.;
│ │ │ │ -
240 if (val[w] == xval*x[r])
│ │ │ │ -
241 mat_[row+index][w] = -1.;
│ │ │ │ -
242 }
│ │ │ │ -
243 row +=dim;
│ │ │ │ -
244 }
│ │ │ │ -
245
│ │ │ │ -
246 }
│ │ │ │ -
247 }
│ │ │ │ -
248 }
│ │ │ │ -
│ │ │ │ -
249
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
251 {
│ │ │ │ -
252 for (unsigned int i=0; i<rows(); ++i) {
│ │ │ │ -
253 delete [] mat_[i];
│ │ │ │ -
254 }
│ │ │ │ -
255 delete [] mat_;
│ │ │ │ -
256 }
│ │ │ │ -
│ │ │ │ +
172 out[0][0][0] = -1; out[0][0][1] = -1;
│ │ │ │ +
173 out[1][0][0] = 4-8*in[0]-4*in[1]; out[1][0][1] = -4*in[0];
│ │ │ │ +
174 out[2][0][0] = 1; out[2][0][1] = 0;
│ │ │ │ +
175 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1];
│ │ │ │ +
176 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0];
│ │ │ │ +
177 out[5][0][0] = 0; out[5][0][1] = 1;
│ │ │ │ +
178 }
│ │ │ │ +
│ │ │ │ +
179
│ │ │ │ +
│ │ │ │ +
181 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
182 const typename Traits::DomainType& in, // position
│ │ │ │ +
183 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
184 {
│ │ │ │ +
185 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
186 if (totalOrder == 0) {
│ │ │ │ +
187 evaluateFunction(in, out);
│ │ │ │ +
188 } else if (totalOrder == 1) {
│ │ │ │ +
189 out.resize(size());
│ │ │ │ +
190 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
191
│ │ │ │ +
192 switch (direction) {
│ │ │ │ +
193 case 0:
│ │ │ │ +
194 out[0] = -1;
│ │ │ │ +
195 out[1] = 4-8*in[0]-4*in[1];
│ │ │ │ +
196 out[2] = 1;
│ │ │ │ +
197 out[3] = -4*in[1];
│ │ │ │ +
198 out[4] = 4*in[1];
│ │ │ │ +
199 out[5] = 0;
│ │ │ │ +
200 break;
│ │ │ │ +
201 case 1:
│ │ │ │ +
202 out[0] = -1;
│ │ │ │ +
203 out[1] = -4*in[0];
│ │ │ │ +
204 out[2] = 0;
│ │ │ │ +
205 out[3] = 4-4*in[0]-8*in[1];
│ │ │ │ +
206 out[4] = 4*in[0];
│ │ │ │ +
207 out[5] = 1;
│ │ │ │ +
208 break;
│ │ │ │ +
209 default:
│ │ │ │ +
210 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
211 }
│ │ │ │ +
212 } else {
│ │ │ │ +
213 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
214 }
│ │ │ │ +
215 }
│ │ │ │ +
│ │ │ │ +
216
│ │ │ │ +
│ │ │ │ +
219 unsigned int order () const
│ │ │ │ +
220 {
│ │ │ │ +
221 return 2;
│ │ │ │ +
222 }
│ │ │ │ +
│ │ │ │ +
223
│ │ │ │ +
224 };
│ │ │ │ +
│ │ │ │ +
225
│ │ │ │ +
250 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
252 {
│ │ │ │ +
253 public:
│ │ │ │ +
255 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
256 Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │
257
│ │ │ │ -
│ │ │ │ -
258 unsigned int cols() const {
│ │ │ │ -
259 return col_;
│ │ │ │ -
260 }
│ │ │ │ -
│ │ │ │ -
261
│ │ │ │ -
│ │ │ │ -
262 unsigned int rows() const {
│ │ │ │ -
263 return row_;
│ │ │ │ -
264 }
│ │ │ │ -
│ │ │ │ -
265
│ │ │ │ -
266 template <class Vector>
│ │ │ │ -
│ │ │ │ -
267 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
268 {
│ │ │ │ -
269 const unsigned int N = cols();
│ │ │ │ -
270 assert( vec.size() == N );
│ │ │ │ -
271 for (unsigned int i=0; i<N; ++i)
│ │ │ │ -
272 field_cast(mat_[row][i],vec[i]);
│ │ │ │ -
273 }
│ │ │ │ -
│ │ │ │ -
274
│ │ │ │ -
275 unsigned int row_,col_;
│ │ │ │ -
276 Field **mat_;
│ │ │ │ -
277 };
│ │ │ │ -
│ │ │ │ -
278
│ │ │ │ -
279
│ │ │ │ -
280}
│ │ │ │ -
281#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
259 unsigned int size () const
│ │ │ │ +
260 {
│ │ │ │ +
261 return 10;
│ │ │ │ +
262 }
│ │ │ │ +
│ │ │ │ +
263
│ │ │ │ +
│ │ │ │ +
265 void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
266 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
267 {
│ │ │ │ +
268 out.resize(10);
│ │ │ │ +
269
│ │ │ │ +
270 out[0] = 1 - in[0] - in[1] - in[2];
│ │ │ │ +
271 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ +
272 out[2] = in[0];
│ │ │ │ +
273 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ +
274 out[4] = 4 * in[0] * in[1];
│ │ │ │ +
275 out[5] = in[1];
│ │ │ │ +
276 out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ +
277 out[7] = 4 * in[0] * in[2];
│ │ │ │ +
278 out[8] = 4 * in[1] * in[2];
│ │ │ │ +
279 out[9] = in[2];
│ │ │ │ +
280 }
│ │ │ │ +
│ │ │ │ +
281
│ │ │ │ +
│ │ │ │ +
283 void evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
284 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
285 {
│ │ │ │ +
286 out.resize(10);
│ │ │ │ +
287
│ │ │ │ +
288 out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1;
│ │ │ │ +
289 out[1][0][0] = 4-8*in[0]-4*in[1]-4*in[2]; out[1][0][1] = -4*in[0]; out[1][0][2] = -4*in[0];
│ │ │ │ +
290 out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
291 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]-4*in[2]; out[3][0][2] = -4*in[1];
│ │ │ │ +
292 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0;
│ │ │ │ +
293 out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0;
│ │ │ │ +
294 out[6][0][0] = -4*in[2]; out[6][0][1] = -4*in[2]; out[6][0][2] = 4-4*in[0]-4*in[1]-8*in[2];
│ │ │ │ +
295 out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0];
│ │ │ │ +
296 out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1];
│ │ │ │ +
297 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1;
│ │ │ │ +
298 }
│ │ │ │ +
│ │ │ │ +
299
│ │ │ │ +
│ │ │ │ +
301 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
302 const typename Traits::DomainType& in, // position
│ │ │ │ +
303 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
304 {
│ │ │ │ +
305 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
306 if (totalOrder == 0) {
│ │ │ │ +
307 evaluateFunction(in, out);
│ │ │ │ +
308 } else if (totalOrder == 1) {
│ │ │ │ +
309 out.resize(size());
│ │ │ │ +
310 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
311
│ │ │ │ +
312 switch (direction) {
│ │ │ │ +
313 case 0:
│ │ │ │ +
314 out[0] = -1;
│ │ │ │ +
315 out[1] = 4-8*in[0]-4*in[1]-4*in[2];
│ │ │ │ +
316 out[2] = 1;
│ │ │ │ +
317 out[3] = -4*in[1];
│ │ │ │ +
318 out[4] = 4*in[1];
│ │ │ │ +
319 out[5] = 0;
│ │ │ │ +
320 out[6] = -4*in[2];
│ │ │ │ +
321 out[7] = 4*in[2];
│ │ │ │ +
322 out[8] = 0;
│ │ │ │ +
323 out[9] = 0;
│ │ │ │ +
324 break;
│ │ │ │ +
325 case 1:
│ │ │ │ +
326 out[0] = -1;
│ │ │ │ +
327 out[1] = -4*in[0];
│ │ │ │ +
328 out[2] = 0;
│ │ │ │ +
329 out[3] = 4-4*in[0]-8*in[1]-4*in[2];
│ │ │ │ +
330 out[4] = 4*in[0];
│ │ │ │ +
331 out[5] = 1;
│ │ │ │ +
332 out[6] = -4*in[2];
│ │ │ │ +
333 out[7] = 0;
│ │ │ │ +
334 out[8] = 4*in[2];
│ │ │ │ +
335 out[9] = 0;
│ │ │ │ +
336 break;
│ │ │ │ +
337 case 2:
│ │ │ │ +
338 out[0] = -1;
│ │ │ │ +
339 out[1] = -4*in[0];
│ │ │ │ +
340 out[2] = 0;
│ │ │ │ +
341 out[3] = -4*in[1];
│ │ │ │ +
342 out[4] = 0;
│ │ │ │ +
343 out[5] = 0;
│ │ │ │ +
344 out[6] = 4-4*in[0]-4*in[1]-8*in[2];
│ │ │ │ +
345 out[7] = 4*in[0];
│ │ │ │ +
346 out[8] = 4*in[1];
│ │ │ │ +
347 out[9] = 1;
│ │ │ │ +
348 break;
│ │ │ │ +
349 default:
│ │ │ │ +
350 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
351 }
│ │ │ │ +
352 } else {
│ │ │ │ +
353 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
354 }
│ │ │ │ +
355 }
│ │ │ │ +
│ │ │ │ +
356
│ │ │ │ +
│ │ │ │ +
359 unsigned int order () const
│ │ │ │ +
360 {
│ │ │ │ +
361 return 2;
│ │ │ │ +
362 }
│ │ │ │ +
│ │ │ │ +
363
│ │ │ │ +
364 };
│ │ │ │ +
│ │ │ │ +
365}
│ │ │ │ +
366#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition nedelecsimplexprebasis.hh:64
│ │ │ │ -
NedelecVecMatrix(std::size_t order)
Definition nedelecsimplexprebasis.hh:69
│ │ │ │ -
MultiIndex< dim, Field > MI
Definition nedelecsimplexprebasis.hh:67
│ │ │ │ -
unsigned int row_
Definition nedelecsimplexprebasis.hh:275
│ │ │ │ -
unsigned int cols() const
Definition nedelecsimplexprebasis.hh:258
│ │ │ │ -
~NedelecVecMatrix()
Definition nedelecsimplexprebasis.hh:250
│ │ │ │ -
MonomialBasis< geometryId, MI > MIBasis
Definition nedelecsimplexprebasis.hh:68
│ │ │ │ -
unsigned int col_
Definition nedelecsimplexprebasis.hh:275
│ │ │ │ -
static const unsigned int dim
Definition nedelecsimplexprebasis.hh:66
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition nedelecsimplexprebasis.hh:267
│ │ │ │ -
static constexpr GeometryType geometry
Definition nedelecsimplexprebasis.hh:65
│ │ │ │ -
unsigned int rows() const
Definition nedelecsimplexprebasis.hh:262
│ │ │ │ -
Field ** mat_
Definition nedelecsimplexprebasis.hh:276
│ │ │ │ -
Definition nedelecsimplexprebasis.hh:25
│ │ │ │ -
static void release(Object *object)
Definition nedelecsimplexprebasis.hh:59
│ │ │ │ -
MBasisFactory::Object MBasis
Definition nedelecsimplexprebasis.hh:27
│ │ │ │ -
static Object * create(Key order)
Definition nedelecsimplexprebasis.hh:41
│ │ │ │ -
PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis
Definition nedelecsimplexprebasis.hh:29
│ │ │ │ -
const Basis Object
Definition nedelecsimplexprebasis.hh:31
│ │ │ │ -
StandardEvaluator< MBasis > EvalMBasis
Definition nedelecsimplexprebasis.hh:28
│ │ │ │ -
MonomialBasisProvider< dim, Field > MBasisFactory
Definition nedelecsimplexprebasis.hh:26
│ │ │ │ -
std::size_t Key
Definition nedelecsimplexprebasis.hh:32
│ │ │ │ -
Definition nedelecsimplexprebasis.hh:36
│ │ │ │ -
MonomialBasisProvider< dd, FF > Type
Definition nedelecsimplexprebasis.hh:37
│ │ │ │ -
Definition basisevaluator.hh:131
│ │ │ │ -
Definition monomialbasis.hh:440
│ │ │ │ -
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ -
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ -
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ -
Definition monomialbasis.hh:780
│ │ │ │ -
Definition multiindex.hh:38
│ │ │ │ -
int z(int i) const
Definition multiindex.hh:92
│ │ │ │ -
Definition polynomialbasis.hh:348
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition hierarchicalsimplexp2localbasis.hh:23
│ │ │ │ +
HierarchicalSimplexP2LocalBasis()
Definition hierarchicalsimplexp2localbasis.hh:25
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions (2, in this case)
Definition hierarchicalsimplexp2localbasis.hh:109
│ │ │ │ +
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:52
│ │ │ │ +
void partial(const std::array< unsigned int, 1 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:84
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:55
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:73
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:61
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:142
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:181
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:145
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition hierarchicalsimplexp2localbasis.hh:219
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:167
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:151
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:256
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:265
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:283
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:259
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:301
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition hierarchicalsimplexp2localbasis.hh:359
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,406 +1,403 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ -nedelecsimplexprebasis.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ +hierarchicalsimplexp2localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 template < GeometryType::Id geometryId, class Field > │ │ │ │ │ -18 struct NedelecVecMatrix; │ │ │ │ │ -19 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 struct _N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -25 { │ │ │ │ │ -_2_6 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_i_m_,_F_i_e_l_d_> _M_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_2_7 typedef typename MBasisFactory::Object _M_B_a_s_i_s; │ │ │ │ │ -_2_8 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_B_a_s_i_s_> _E_v_a_l_M_B_a_s_i_s; │ │ │ │ │ -_2_9 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_M_B_a_s_i_s_,_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_d_i_m_> > │ │ │ │ │ -_B_a_s_i_s; │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18 │ │ │ │ │ +19namespace _D_u_n_e │ │ │ │ │ +20{ │ │ │ │ │ +21 template │ │ │ │ │ +_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +23 { │ │ │ │ │ +24 public: │ │ │ │ │ +_2_5 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +26 { │ │ │ │ │ +27 DUNE_THROW(Dune::NotImplemented,"HierarchicalSimplexP2LocalBasis not │ │ │ │ │ +implemented for dim > 3."); │ │ │ │ │ +28 } │ │ │ │ │ +29 }; │ │ │ │ │ 30 │ │ │ │ │ -_3_1 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ -_3_2 typedef std::size_t _K_e_y; │ │ │ │ │ -33 │ │ │ │ │ -34 template │ │ │ │ │ -_3_5 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -36 { │ │ │ │ │ -_3_7 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ -38 }; │ │ │ │ │ -39 │ │ │ │ │ -40 template< GeometryType::Id geometryId > │ │ │ │ │ -_4_1 static _O_b_j_e_c_t *_c_r_e_a_t_e ( _K_e_y order ) │ │ │ │ │ -42 { │ │ │ │ │ -43 /* │ │ │ │ │ -44 * The nedelec parameter begins at 1. │ │ │ │ │ -45 * This is the numbering used by J.C. Nedelec himself. │ │ │ │ │ -46 * See "Mixed Finite Elements in \R^3" published in 1980. │ │ │ │ │ -47 * │ │ │ │ │ -48 * This construction is based on the construction of Raviart-Thomas elements. │ │ │ │ │ -49 * There the numbering starts at 0. │ │ │ │ │ -50 * Because of this we reduce the order internally by 1. │ │ │ │ │ -51 */ │ │ │ │ │ -52 order--; │ │ │ │ │ -53 _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> vecMatrix(order); │ │ │ │ │ -54 _M_B_a_s_i_s *mbasis = MBasisFactory::template create(order+1); │ │ │ │ │ -55 std::remove_const_t* tmBasis = new std::remove_const_t │ │ │ │ │ -(*mbasis); │ │ │ │ │ -56 tmBasis->fill(vecMatrix); │ │ │ │ │ -57 return tmBasis; │ │ │ │ │ +46 template │ │ │ │ │ +_4_7 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +48 { │ │ │ │ │ +49 public: │ │ │ │ │ +51 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_1_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_1_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_5_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +53 │ │ │ │ │ +_5_5 unsigned int _s_i_z_e () const │ │ │ │ │ +56 { │ │ │ │ │ +57 return 3; │ │ │ │ │ 58 } │ │ │ │ │ -_5_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -60 }; │ │ │ │ │ -61 │ │ │ │ │ -62 template │ │ │ │ │ -_6_3 struct _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ -64 { │ │ │ │ │ -_6_5 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ -_6_6 static const unsigned int _d_i_m = _g_e_o_m_e_t_r_y._d_i_m(); │ │ │ │ │ -_6_7 typedef _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _M_I; │ │ │ │ │ -_6_8 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_M_I_> _M_I_B_a_s_i_s; │ │ │ │ │ -_6_9 _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x(std::size_t order) │ │ │ │ │ -70 { │ │ │ │ │ -71 /* │ │ │ │ │ -72 * Construction of Nedelec elements see "Mixed Finite Elements in \R^3" by │ │ │ │ │ -Nedelec, 1980. │ │ │ │ │ -73 * │ │ │ │ │ -74 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree │ │ │ │ │ -$\leq k$. │ │ │ │ │ -75 * The space of Nedelec functions in $n$ dimensions with index $k$ is defined │ │ │ │ │ -as │ │ │ │ │ -76 * │ │ │ │ │ -77 * \begin{equation*} │ │ │ │ │ -78 * Ned_k := (\P_{n,k-1})^n \oplus \{p \in (\P_{n,k})^n: =0 \} │ │ │ │ │ -79 * \end{equation*} │ │ │ │ │ -80 * with $x=(x,y)$ in two dimensions and $x=(x,y,z)$ in three dimensions. │ │ │ │ │ -81 * │ │ │ │ │ -82 * For $Ned_k$ holds │ │ │ │ │ -83 * \begin{equation*} │ │ │ │ │ -84 * (\P_{n,k-1})^n \subset Ned_k \subset (\P_{n,k})^n. │ │ │ │ │ -85 * \end{equation*} │ │ │ │ │ -86 * │ │ │ │ │ -87 * We construct $(\P_{n,k})^n$ and and only use the monomials contained in │ │ │ │ │ -$Ned$. │ │ │ │ │ -88 * │ │ │ │ │ -89 */ │ │ │ │ │ -90 if( (_d_i_m!=2 && _d_i_m!=3) || !_g_e_o_m_e_t_r_y.isSimplex()) │ │ │ │ │ -91 DUNE_THROW(Dune::NotImplemented,"High order nedelec elements are only │ │ │ │ │ -supported by simplices in 2d and 3d"); │ │ │ │ │ -92 │ │ │ │ │ -93 _M_I_B_a_s_i_s basis(order+1); │ │ │ │ │ -94 FieldVector< MI, dim > x; │ │ │ │ │ -95 /* │ │ │ │ │ -96 * Init MultiIndices │ │ │ │ │ -97 * x[0]=(1,0,0) x │ │ │ │ │ -98 * x[1]=(0,1,0) y │ │ │ │ │ -99 * x[2]=(0,0,1) z │ │ │ │ │ -100 */ │ │ │ │ │ -101 for( unsigned int i = 0; i < _d_i_m; ++i ) │ │ │ │ │ -102 x[i].set(i,1); │ │ │ │ │ -103 std::vector< MI > val( basis._s_i_z_e() ); │ │ │ │ │ -104 │ │ │ │ │ -105 // val now contains all monomials in $n$ dimensions with degree $\leq │ │ │ │ │ -order+1$ │ │ │ │ │ -106 basis._e_v_a_l_u_a_t_e( x, val ); │ │ │ │ │ -107 │ │ │ │ │ -108 _c_o_l__ = basis._s_i_z_e(); │ │ │ │ │ -109 │ │ │ │ │ -110 // get $\dim (\P_{n,order-1})$ │ │ │ │ │ -111 unsigned int notHomogen = 0; │ │ │ │ │ -112 if (order>0) │ │ │ │ │ -113 notHomogen = basis._s_i_z_e_s()[order-1]; │ │ │ │ │ -114 │ │ │ │ │ -115 // the number of basis functions for the set of homogeneous polynomials │ │ │ │ │ -with degree $order$ │ │ │ │ │ -116 unsigned int homogen = basis._s_i_z_e_s()[order]-notHomogen; │ │ │ │ │ -117 │ │ │ │ │ -118 /* │ │ │ │ │ -119 * 2D: │ │ │ │ │ -120 * \begin{equation*} │ │ │ │ │ -121 * Ned_{order} = (\P_{order-1})^2 \oplus (-y,x)^T \widetilde \P_{order-1} │ │ │ │ │ -122 * \end{equation*} │ │ │ │ │ -123 * │ │ │ │ │ -124 * It gets more complicated in higher dimensions. │ │ │ │ │ -125 * │ │ │ │ │ -126 * 3D: │ │ │ │ │ -127 * \begin{equation*} │ │ │ │ │ -128 * Ned_{order} = (\P_{n,order-1})^3 \oplus (z,0,-x)^T \widetilde \P_ │ │ │ │ │ -{n,order-1} \oplus (-y,x,0)^T \widetilde \P_{n,order-1} \oplus (0,-z,y)^T │ │ │ │ │ -\widetilde \P_{n-1,order-1} │ │ │ │ │ -129 * \end{equation*} │ │ │ │ │ -130 * │ │ │ │ │ -131 * Note the last term. The index $n-1$ is on purpose. │ │ │ │ │ -132 * Else i.e. k=2 │ │ │ │ │ -133 * │ │ │ │ │ -134 * (0,z,-y)^T x = (z,0,-x)^T y - (y,-x,0)^T z. │ │ │ │ │ -135 * │ │ │ │ │ -136 */ │ │ │ │ │ -137 │ │ │ │ │ -138 /* │ │ │ │ │ -139 * compute the number of rows for the coefficient matrix │ │ │ │ │ -140 * │ │ │ │ │ -141 * row_ = dim* \dim Ned_{order} │ │ │ │ │ -142 */ │ │ │ │ │ -143 if (_d_i_m == 2) │ │ │ │ │ -144 _r_o_w__ = (notHomogen*_d_i_m+homogen*(_d_i_m+1))*_d_i_m; │ │ │ │ │ -145 else if (_d_i_m==3) │ │ │ │ │ +59 │ │ │ │ │ +_6_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +62 std::vector& out) const │ │ │ │ │ +63 { │ │ │ │ │ +64 out.resize(3); │ │ │ │ │ +65 │ │ │ │ │ +66 out[0] = 1-in[0]; │ │ │ │ │ +67 out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5); │ │ │ │ │ +68 out[2] = in[0]; │ │ │ │ │ +69 } │ │ │ │ │ +70 │ │ │ │ │ +72 inline void │ │ │ │ │ +_7_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +74 std::vector& out) const // return value │ │ │ │ │ +75 { │ │ │ │ │ +76 out.resize(3); │ │ │ │ │ +77 │ │ │ │ │ +78 out[0][0][0] = -1; │ │ │ │ │ +79 out[1][0][0] = 4-8*in[0]; │ │ │ │ │ +80 out[2][0][0] = 1; │ │ │ │ │ +81 } │ │ │ │ │ +82 │ │ │ │ │ +_8_4 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +85 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +86 std::vector& out) const // return value │ │ │ │ │ +87 { │ │ │ │ │ +88 auto totalOrder = order[0]; │ │ │ │ │ +89 if (totalOrder == 0) { │ │ │ │ │ +90 evaluateFunction(in, out); │ │ │ │ │ +91 } else if (totalOrder == 1) { │ │ │ │ │ +92 out.resize(size()); │ │ │ │ │ +93 out[0] = -1; │ │ │ │ │ +94 out[1] = 4-8*in[0]; │ │ │ │ │ +95 out[2] = 1; │ │ │ │ │ +96 } else if (totalOrder == 2) { │ │ │ │ │ +97 out.resize(size()); │ │ │ │ │ +98 out[0] = 0; │ │ │ │ │ +99 out[1] = -8; │ │ │ │ │ +100 out[2] = 0; │ │ │ │ │ +101 } else { │ │ │ │ │ +102 out.resize(size()); │ │ │ │ │ +103 out[0] = out[1] = out[2] = 0; │ │ │ │ │ +104 } │ │ │ │ │ +105 } │ │ │ │ │ +106 │ │ │ │ │ +_1_0_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ +110 { │ │ │ │ │ +111 return 2; │ │ │ │ │ +112 } │ │ │ │ │ +113 │ │ │ │ │ +114 }; │ │ │ │ │ +115 │ │ │ │ │ +136 template │ │ │ │ │ +_1_3_7 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +138 { │ │ │ │ │ +139 public: │ │ │ │ │ +141 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_1_4_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +143 │ │ │ │ │ +_1_4_5 unsigned int _s_i_z_e () const │ │ │ │ │ 146 { │ │ │ │ │ -147 // get dim \P_{n-1,order-1} │ │ │ │ │ -148 int homogenTwoVariables = 0; │ │ │ │ │ -149 for( int w = notHomogen; w& out) const │ │ │ │ │ +153 { │ │ │ │ │ +154 out.resize(6); │ │ │ │ │ +155 │ │ │ │ │ +156 out[0] = 1 - in[0] - in[1]; │ │ │ │ │ +157 out[1] = 4*in[0]*(1-in[0]-in[1]); │ │ │ │ │ +158 out[2] = in[0]; │ │ │ │ │ +159 out[3] = 4*in[1]*(1-in[0]-in[1]); │ │ │ │ │ +160 out[4] = 4*in[0]*in[1]; │ │ │ │ │ +161 out[5] = in[1]; │ │ │ │ │ +162 │ │ │ │ │ +163 } │ │ │ │ │ +164 │ │ │ │ │ +166 inline void │ │ │ │ │ +_1_6_7 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +168 std::vector& out) const // return value │ │ │ │ │ +169 { │ │ │ │ │ +170 out.resize(6); │ │ │ │ │ 171 │ │ │ │ │ -172 if (r==rr) │ │ │ │ │ -173 _m_a_t__[_r_o_w][i] = 1.; │ │ │ │ │ -174 ++_r_o_w; │ │ │ │ │ -175 } │ │ │ │ │ -176 } │ │ │ │ │ -177 } │ │ │ │ │ -178 │ │ │ │ │ -179 /* Assign the correct values for the homogeneous polymonials $p\in Ned_ │ │ │ │ │ -{order} \backslash (\P_{n,order-1})^dim$ │ │ │ │ │ -180 * A basis function is represented by $dim$ rows. │ │ │ │ │ -181 */ │ │ │ │ │ -182 for (unsigned int i=0; i0; │ │ │ │ │ -212 /* │ │ │ │ │ -213 * Init 9 rows to zero. │ │ │ │ │ -214 * If the homogeneous monomial has a positive x-exponent (0,-z,y) gets │ │ │ │ │ -skipped ( see example for the Nedelec space in 3D ) │ │ │ │ │ -215 * In this case only 6 rows get initialised. │ │ │ │ │ -216 */ │ │ │ │ │ -217 for (unsigned int r=0; r<_d_i_m*(_d_i_m-skipLastDim); ++r) │ │ │ │ │ -218 { │ │ │ │ │ -219 // init rows to zero │ │ │ │ │ -220 _m_a_t__[_r_o_w+r] = new Field[_c_o_l__]; │ │ │ │ │ -221 for (unsigned int j=0; j<_c_o_l__; ++j) │ │ │ │ │ -222 _m_a_t__[_r_o_w+r][j] = 0.; │ │ │ │ │ -223 } │ │ │ │ │ -224 │ │ │ │ │ -225 /* │ │ │ │ │ -226 * first $dim$ rows are for (z,0,-x) │ │ │ │ │ -227 * │ │ │ │ │ -228 * second $dim$ rows are for (-y,x,0) │ │ │ │ │ -229 * │ │ │ │ │ -230 * third $dim$ rows are for (0,-z,y) │ │ │ │ │ -231 * │ │ │ │ │ -232 */ │ │ │ │ │ -233 for (unsigned int r=0; r<_d_i_m - skipLastDim; ++r) │ │ │ │ │ -234 { │ │ │ │ │ -235 int index = (r+_d_i_m-1)%_d_i_m; │ │ │ │ │ -236 for (int w=homogen+notHomogen; w& order, │ │ │ │ │ +182 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +183 std::vector& out) const // return value │ │ │ │ │ +184 { │ │ │ │ │ +185 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +186 if (totalOrder == 0) { │ │ │ │ │ +187 evaluateFunction(in, out); │ │ │ │ │ +188 } else if (totalOrder == 1) { │ │ │ │ │ +189 out.resize(size()); │ │ │ │ │ +190 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +191 │ │ │ │ │ +192 switch (direction) { │ │ │ │ │ +193 case 0: │ │ │ │ │ +194 out[0] = -1; │ │ │ │ │ +195 out[1] = 4-8*in[0]-4*in[1]; │ │ │ │ │ +196 out[2] = 1; │ │ │ │ │ +197 out[3] = -4*in[1]; │ │ │ │ │ +198 out[4] = 4*in[1]; │ │ │ │ │ +199 out[5] = 0; │ │ │ │ │ +200 break; │ │ │ │ │ +201 case 1: │ │ │ │ │ +202 out[0] = -1; │ │ │ │ │ +203 out[1] = -4*in[0]; │ │ │ │ │ +204 out[2] = 0; │ │ │ │ │ +205 out[3] = 4-4*in[0]-8*in[1]; │ │ │ │ │ +206 out[4] = 4*in[0]; │ │ │ │ │ +207 out[5] = 1; │ │ │ │ │ +208 break; │ │ │ │ │ +209 default: │ │ │ │ │ +210 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +211 } │ │ │ │ │ +212 } else { │ │ │ │ │ +213 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +214 } │ │ │ │ │ +215 } │ │ │ │ │ +216 │ │ │ │ │ +_2_1_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ +220 { │ │ │ │ │ +221 return 2; │ │ │ │ │ +222 } │ │ │ │ │ +223 │ │ │ │ │ +224 }; │ │ │ │ │ +225 │ │ │ │ │ +250 template │ │ │ │ │ +_2_5_1 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +252 { │ │ │ │ │ +253 public: │ │ │ │ │ +255 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_2_5_6 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 257 │ │ │ │ │ -_2_5_8 unsigned int _c_o_l_s() const { │ │ │ │ │ -259 return _c_o_l__; │ │ │ │ │ -260 } │ │ │ │ │ -261 │ │ │ │ │ -_2_6_2 unsigned int _r_o_w_s() const { │ │ │ │ │ -263 return _r_o_w__; │ │ │ │ │ -264 } │ │ │ │ │ -265 │ │ │ │ │ -266 template │ │ │ │ │ -_2_6_7 void _r_o_w( const unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ -268 { │ │ │ │ │ -269 const unsigned int N = _c_o_l_s(); │ │ │ │ │ -270 assert( vec.size() == N ); │ │ │ │ │ -271 for (unsigned int i=0; i& out) const │ │ │ │ │ +267 { │ │ │ │ │ +268 out.resize(10); │ │ │ │ │ +269 │ │ │ │ │ +270 out[0] = 1 - in[0] - in[1] - in[2]; │ │ │ │ │ +271 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ +272 out[2] = in[0]; │ │ │ │ │ +273 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ +274 out[4] = 4 * in[0] * in[1]; │ │ │ │ │ +275 out[5] = in[1]; │ │ │ │ │ +276 out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ +277 out[7] = 4 * in[0] * in[2]; │ │ │ │ │ +278 out[8] = 4 * in[1] * in[2]; │ │ │ │ │ +279 out[9] = in[2]; │ │ │ │ │ +280 } │ │ │ │ │ +281 │ │ │ │ │ +_2_8_3 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +284 std::vector& out) const // return value │ │ │ │ │ +285 { │ │ │ │ │ +286 out.resize(10); │ │ │ │ │ +287 │ │ │ │ │ +288 out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1; │ │ │ │ │ +289 out[1][0][0] = 4-8*in[0]-4*in[1]-4*in[2]; out[1][0][1] = -4*in[0]; out[1] │ │ │ │ │ +[0][2] = -4*in[0]; │ │ │ │ │ +290 out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +291 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]-4*in[2]; out[3] │ │ │ │ │ +[0][2] = -4*in[1]; │ │ │ │ │ +292 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0; │ │ │ │ │ +293 out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0; │ │ │ │ │ +294 out[6][0][0] = -4*in[2]; out[6][0][1] = -4*in[2]; out[6][0][2] = 4-4*in[0]- │ │ │ │ │ +4*in[1]-8*in[2]; │ │ │ │ │ +295 out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0]; │ │ │ │ │ +296 out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1]; │ │ │ │ │ +297 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1; │ │ │ │ │ +298 } │ │ │ │ │ +299 │ │ │ │ │ +_3_0_1 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +302 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +303 std::vector& out) const // return value │ │ │ │ │ +304 { │ │ │ │ │ +305 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +306 if (totalOrder == 0) { │ │ │ │ │ +307 evaluateFunction(in, out); │ │ │ │ │ +308 } else if (totalOrder == 1) { │ │ │ │ │ +309 out.resize(size()); │ │ │ │ │ +310 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +311 │ │ │ │ │ +312 switch (direction) { │ │ │ │ │ +313 case 0: │ │ │ │ │ +314 out[0] = -1; │ │ │ │ │ +315 out[1] = 4-8*in[0]-4*in[1]-4*in[2]; │ │ │ │ │ +316 out[2] = 1; │ │ │ │ │ +317 out[3] = -4*in[1]; │ │ │ │ │ +318 out[4] = 4*in[1]; │ │ │ │ │ +319 out[5] = 0; │ │ │ │ │ +320 out[6] = -4*in[2]; │ │ │ │ │ +321 out[7] = 4*in[2]; │ │ │ │ │ +322 out[8] = 0; │ │ │ │ │ +323 out[9] = 0; │ │ │ │ │ +324 break; │ │ │ │ │ +325 case 1: │ │ │ │ │ +326 out[0] = -1; │ │ │ │ │ +327 out[1] = -4*in[0]; │ │ │ │ │ +328 out[2] = 0; │ │ │ │ │ +329 out[3] = 4-4*in[0]-8*in[1]-4*in[2]; │ │ │ │ │ +330 out[4] = 4*in[0]; │ │ │ │ │ +331 out[5] = 1; │ │ │ │ │ +332 out[6] = -4*in[2]; │ │ │ │ │ +333 out[7] = 0; │ │ │ │ │ +334 out[8] = 4*in[2]; │ │ │ │ │ +335 out[9] = 0; │ │ │ │ │ +336 break; │ │ │ │ │ +337 case 2: │ │ │ │ │ +338 out[0] = -1; │ │ │ │ │ +339 out[1] = -4*in[0]; │ │ │ │ │ +340 out[2] = 0; │ │ │ │ │ +341 out[3] = -4*in[1]; │ │ │ │ │ +342 out[4] = 0; │ │ │ │ │ +343 out[5] = 0; │ │ │ │ │ +344 out[6] = 4-4*in[0]-4*in[1]-8*in[2]; │ │ │ │ │ +345 out[7] = 4*in[0]; │ │ │ │ │ +346 out[8] = 4*in[1]; │ │ │ │ │ +347 out[9] = 1; │ │ │ │ │ +348 break; │ │ │ │ │ +349 default: │ │ │ │ │ +350 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +351 } │ │ │ │ │ +352 } else { │ │ │ │ │ +353 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +354 } │ │ │ │ │ +355 } │ │ │ │ │ +356 │ │ │ │ │ +_3_5_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ +360 { │ │ │ │ │ +361 return 2; │ │ │ │ │ +362 } │ │ │ │ │ +363 │ │ │ │ │ +364 }; │ │ │ │ │ +365} │ │ │ │ │ +366#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:64 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ -NedelecVecMatrix(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_M_I │ │ │ │ │ -MultiIndex< dim, Field > MI │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w__ │ │ │ │ │ -unsigned int row_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:275 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:258 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_~_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ -~NedelecVecMatrix() │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:250 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_M_I_B_a_s_i_s │ │ │ │ │ -MonomialBasis< geometryId, MI > MIBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_c_o_l__ │ │ │ │ │ -unsigned int col_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:275 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_d_i_m │ │ │ │ │ -static const unsigned int dim │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:267 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ -unsigned int rows() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:262 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_m_a_t__ │ │ │ │ │ -Field ** mat_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:276 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s │ │ │ │ │ -MBasisFactory::Object MBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(Key order) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ -PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const Basis Object │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_M_B_a_s_i_s │ │ │ │ │ -StandardEvaluator< MBasis > EvalMBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -MonomialBasisProvider< dim, Field > MBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -MonomialBasisProvider< dd, FF > Type │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexprebasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +HierarchicalSimplexP2LocalBasis() │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions (2, in this case) │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:109 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 1 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 1 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ -const unsigned int * sizes(unsigned int order) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ -int z(int i) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:142 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:181 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:145 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions (2 in this case) │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:219 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:167 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:151 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:256 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:265 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:283 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:259 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:301 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions (2 in this case) │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:359 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexbasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,31 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexbasis.hh File Reference
│ │ │ │ +
hierarchicalsimplexp2localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ -#include "nedelecsimplexinterpolation.hh"
│ │ │ │ -#include "nedelecsimplexprebasis.hh"
│ │ │ │ +
#include <vector>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::NedelecBasisFactory< dim, SF, CF >
class  Dune::HierarchicalSimplexP2LocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,20 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -nedelecsimplexbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ +hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00326_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexbasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,55 +70,130 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexbasis.hh
│ │ │ │ +
hierarchicalsimplexp2localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ -
6
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <fstream>
│ │ │ │ -
10#include <dune/common/exceptions.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
38 template< unsigned int dim, class SF, class CF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 : public DefaultBasisFactory< NedelecPreBasisFactory<dim,CF>,
│ │ │ │ -
41 NedelecL2InterpolationFactory<dim,CF>,
│ │ │ │ -
42 dim,dim,SF,CF >
│ │ │ │ -
43 {};
│ │ │ │ -
│ │ │ │ -
44}
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {
│ │ │ │ +
18 public:
│ │ │ │ +
19
│ │ │ │ +
20 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
22 {
│ │ │ │ +
23 typename LB::Traits::DomainType x;
│ │ │ │ +
24 typename LB::Traits::RangeType y;
│ │ │ │ +
25
│ │ │ │ +
26 static_assert(LB::Traits::dimDomain <= 3,
│ │ │ │ +
27 "LocalInterpolation for HierarchicalSimplexP2 finite elements"
│ │ │ │ +
28 " is only implemented for dimDomain <=3!");
│ │ │ │ +
29
│ │ │ │ +
30 switch ( int(LB::Traits::dimDomain)) {
│ │ │ │ +
31
│ │ │ │ +
32 case 1 :
│ │ │ │ +
33
│ │ │ │ +
34 out.resize(3);
│ │ │ │ +
35
│ │ │ │ +
36 // First: the two vertex dofs
│ │ │ │ +
37 x[0] = 0.0; out[0] = f(x);
│ │ │ │ +
38 x[0] = 1.0; out[2] = f(x);
│ │ │ │ +
39
│ │ │ │ +
40 // Then: the edge dof
│ │ │ │ +
41 x[0] = 0.5; y = f(x);
│ │ │ │ +
42 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ +
43
│ │ │ │ +
44 break;
│ │ │ │
45
│ │ │ │ -
46#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
46
│ │ │ │ +
47 case 2 :
│ │ │ │ +
48
│ │ │ │ +
49 out.resize(6);
│ │ │ │ +
50
│ │ │ │ +
51 // First: the three vertex dofs
│ │ │ │ +
52 x[0] = 0.0; x[1] = 0.0; out[0] = f(x);
│ │ │ │ +
53 x[0] = 1.0; x[1] = 0.0; out[2] = f(x);
│ │ │ │ +
54 x[0] = 0.0; x[1] = 1.0; out[5] = f(x);
│ │ │ │ +
55
│ │ │ │ +
56 // Then: the three edge dofs
│ │ │ │ +
57 x[0] = 0.5; x[1] = 0.0; y = f(x);
│ │ │ │ +
58 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ +
59
│ │ │ │ +
60 x[0] = 0.0; x[1] = 0.5; y = f(x);
│ │ │ │ +
61 out[3] = y - 0.5*(out[0] + out[5]);
│ │ │ │ +
62
│ │ │ │ +
63 x[0] = 0.5; x[1] = 0.5; y = f(x);
│ │ │ │ +
64 out[4] = y - 0.5*(out[2] + out[5]);
│ │ │ │ +
65
│ │ │ │ +
66 break;
│ │ │ │ +
67
│ │ │ │ +
68 case 3 :
│ │ │ │ +
69
│ │ │ │ +
70 out.resize(10);
│ │ │ │ +
71
│ │ │ │ +
72 // First: the four vertex dofs
│ │ │ │ +
73 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x);
│ │ │ │ +
74 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[2] = f(x);
│ │ │ │ +
75 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[5] = f(x);
│ │ │ │ +
76 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[9] = f(x);
│ │ │ │ +
77
│ │ │ │ +
78 // Then: the six edge dofs
│ │ │ │ +
79 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x);
│ │ │ │ +
80 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ +
81
│ │ │ │ +
82 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ +
83 out[3] = y - 0.5*(out[0] + out[5]);
│ │ │ │ +
84
│ │ │ │ +
85 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ +
86 out[4] = y - 0.5*(out[2] + out[5]);
│ │ │ │ +
87
│ │ │ │ +
88 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
89 out[6] = y - 0.5*(out[0] + out[9]);
│ │ │ │ +
90
│ │ │ │ +
91 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ +
92 out[7] = y - 0.5*(out[2] + out[9]);
│ │ │ │ +
93
│ │ │ │ +
94 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ +
95 out[8] = y - 0.5*(out[5] + out[9]);
│ │ │ │ +
96
│ │ │ │ +
97 break;
│ │ │ │ +
98
│ │ │ │ +
99 }
│ │ │ │ +
100 }
│ │ │ │ +
│ │ │ │ +
101
│ │ │ │ +
102 };
│ │ │ │ +
│ │ │ │ +
103}
│ │ │ │ +
104
│ │ │ │ +
105#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition nedelecsimplexbasis.hh:43
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ +
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalsimplexp2localinterpolation.hh:21
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,49 +1,122 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ -nedelecsimplexbasis.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ +hierarchicalsimplexp2localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ -6 │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -13#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -38 template< unsigned int dim, class SF, class CF > │ │ │ │ │ -_3_9 struct _N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -40 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< NedelecPreBasisFactory, │ │ │ │ │ -41 NedelecL2InterpolationFactory, │ │ │ │ │ -42 dim,dim,SF,CF > │ │ │ │ │ -43 {}; │ │ │ │ │ -44} │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +15 template │ │ │ │ │ +_1_6 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +17 { │ │ │ │ │ +18 public: │ │ │ │ │ +19 │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +22 { │ │ │ │ │ +23 typename LB::Traits::DomainType x; │ │ │ │ │ +24 typename LB::Traits::RangeType y; │ │ │ │ │ +25 │ │ │ │ │ +26 static_assert(LB::Traits::dimDomain <= 3, │ │ │ │ │ +27 "LocalInterpolation for HierarchicalSimplexP2 finite elements" │ │ │ │ │ +28 " is only implemented for dimDomain <=3!"); │ │ │ │ │ +29 │ │ │ │ │ +30 switch ( int(LB::Traits::dimDomain)) { │ │ │ │ │ +31 │ │ │ │ │ +32 case 1 : │ │ │ │ │ +33 │ │ │ │ │ +34 out.resize(3); │ │ │ │ │ +35 │ │ │ │ │ +36 // First: the two vertex dofs │ │ │ │ │ +37 x[0] = 0.0; out[0] = f(x); │ │ │ │ │ +38 x[0] = 1.0; out[2] = f(x); │ │ │ │ │ +39 │ │ │ │ │ +40 // Then: the edge dof │ │ │ │ │ +41 x[0] = 0.5; y = f(x); │ │ │ │ │ +42 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ +43 │ │ │ │ │ +44 break; │ │ │ │ │ 45 │ │ │ │ │ -46#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ -_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h │ │ │ │ │ -_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ +46 │ │ │ │ │ +47 case 2 : │ │ │ │ │ +48 │ │ │ │ │ +49 out.resize(6); │ │ │ │ │ +50 │ │ │ │ │ +51 // First: the three vertex dofs │ │ │ │ │ +52 x[0] = 0.0; x[1] = 0.0; out[0] = f(x); │ │ │ │ │ +53 x[0] = 1.0; x[1] = 0.0; out[2] = f(x); │ │ │ │ │ +54 x[0] = 0.0; x[1] = 1.0; out[5] = f(x); │ │ │ │ │ +55 │ │ │ │ │ +56 // Then: the three edge dofs │ │ │ │ │ +57 x[0] = 0.5; x[1] = 0.0; y = f(x); │ │ │ │ │ +58 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ +59 │ │ │ │ │ +60 x[0] = 0.0; x[1] = 0.5; y = f(x); │ │ │ │ │ +61 out[3] = y - 0.5*(out[0] + out[5]); │ │ │ │ │ +62 │ │ │ │ │ +63 x[0] = 0.5; x[1] = 0.5; y = f(x); │ │ │ │ │ +64 out[4] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ +65 │ │ │ │ │ +66 break; │ │ │ │ │ +67 │ │ │ │ │ +68 case 3 : │ │ │ │ │ +69 │ │ │ │ │ +70 out.resize(10); │ │ │ │ │ +71 │ │ │ │ │ +72 // First: the four vertex dofs │ │ │ │ │ +73 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x); │ │ │ │ │ +74 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[2] = f(x); │ │ │ │ │ +75 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[5] = f(x); │ │ │ │ │ +76 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[9] = f(x); │ │ │ │ │ +77 │ │ │ │ │ +78 // Then: the six edge dofs │ │ │ │ │ +79 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x); │ │ │ │ │ +80 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ +81 │ │ │ │ │ +82 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ +83 out[3] = y - 0.5*(out[0] + out[5]); │ │ │ │ │ +84 │ │ │ │ │ +85 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ +86 out[4] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ +87 │ │ │ │ │ +88 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +89 out[6] = y - 0.5*(out[0] + out[9]); │ │ │ │ │ +90 │ │ │ │ │ +91 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ +92 out[7] = y - 0.5*(out[2] + out[9]); │ │ │ │ │ +93 │ │ │ │ │ +94 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ +95 out[8] = y - 0.5*(out[5] + out[9]); │ │ │ │ │ +96 │ │ │ │ │ +97 break; │ │ │ │ │ +98 │ │ │ │ │ +99 } │ │ │ │ │ +100 } │ │ │ │ │ +101 │ │ │ │ │ +102 }; │ │ │ │ │ +103} │ │ │ │ │ +104 │ │ │ │ │ +105#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:21 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: hierarchicalp2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,50 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
nedelecsimplexinterpolation.hh File Reference
│ │ │ │ +
hierarchicalp2.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/utility/interpolationhelper.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include "hierarchicalp2/hierarchicalsimplexp2localbasis.hh"
│ │ │ │ +#include "hierarchicalp2/hierarchicalsimplexp2localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalCoefficientsContainer
 
struct  Dune::NedelecCoefficientsFactory< dim >
 
struct  Dune::NedelecL2InterpolationBuilder< dim, Field >
 
class  Dune::NedelecL2Interpolation< dimension, F >
 An L2-based interpolation for Nedelec. More...
 
struct  Dune::NedelecL2InterpolationFactory< dim, Field >
class  Dune::HierarchicalP2LocalFiniteElement< D, R, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,39 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -nedelecsimplexinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +hierarchicalp2.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> │ │ │ │ │ -  An L2-based interpolation for Nedelec. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00329_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelecsimplexinterpolation.hh Source File │ │ │ │ +dune-localfunctions: hierarchicalp2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,817 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelecsimplexinterpolation.hh
│ │ │ │ +
hierarchicalp2.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10#include <numeric>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/exceptions.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16#include <dune/geometry/type.hh>
│ │ │ │ -
17
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23namespace Dune
│ │ │ │ -
24{
│ │ │ │ -
25
│ │ │ │ -
26 // Internal Forward Declarations
│ │ │ │ -
27 // -----------------------------
│ │ │ │ -
28
│ │ │ │ -
32 template < unsigned int dim, class Field >
│ │ │ │ -
33 struct NedelecL2InterpolationFactory;
│ │ │ │ -
34
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
21 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24
│ │ │ │ +
25 static_assert(1 <= dim && dim <= 3,
│ │ │ │ +
26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3.");
│ │ │ │ +
27
│ │ │ │ +
28 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
35
│ │ │ │ -
36
│ │ │ │ -
37 // LocalCoefficientsContainer
│ │ │ │ -
38 // --------------------------
│ │ │ │ -
39
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
41 {
│ │ │ │ - │ │ │ │ -
43
│ │ │ │ -
44 public:
│ │ │ │ -
45 template <class Setter>
│ │ │ │ -
│ │ │ │ -
46 LocalCoefficientsContainer ( const Setter &setter )
│ │ │ │ -
47 {
│ │ │ │ -
48 setter.setLocalKeys(localKey_);
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
51 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ -
52 {
│ │ │ │ -
53 assert( i < size() );
│ │ │ │ -
54 return localKey_[ i ];
│ │ │ │ -
55 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 {}
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
43 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
44 {
│ │ │ │ +
45 return basis;
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
51 {
│ │ │ │ +
52 return coefficients;
│ │ │ │ +
53 }
│ │ │ │
│ │ │ │ -
56
│ │ │ │ +
54
│ │ │ │
│ │ │ │ -
57 std::size_t size () const
│ │ │ │ + │ │ │ │
58 {
│ │ │ │ -
59 return localKey_.size();
│ │ │ │ +
59 return interpolation;
│ │ │ │
60 }
│ │ │ │
│ │ │ │
61
│ │ │ │ -
62 private:
│ │ │ │ -
63 std::vector< LocalKey > localKey_;
│ │ │ │ -
64 };
│ │ │ │ +
│ │ │ │ +
63 unsigned int size () const
│ │ │ │ +
64 {
│ │ │ │ +
65 return basis.size();
│ │ │ │ +
66 }
│ │ │ │
│ │ │ │ -
65
│ │ │ │ -
66
│ │ │ │
67
│ │ │ │ -
68 // NedelecCoefficientsFactory
│ │ │ │ -
69 // --------------------------------
│ │ │ │ -
70
│ │ │ │ -
71 template < unsigned int dim >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
73 {
│ │ │ │ -
74 typedef std::size_t Key;
│ │ │ │ - │ │ │ │ -
76
│ │ │ │ -
77 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
78 static Object *create( const Key &key )
│ │ │ │ -
79 {
│ │ │ │ -
80 typedef NedelecL2InterpolationFactory< dim, double > InterpolationFactory;
│ │ │ │ -
81 if( !supports< geometryId >( key ) )
│ │ │ │ -
82 return nullptr;
│ │ │ │ -
83 typename InterpolationFactory::Object *interpolation = InterpolationFactory::template create< geometryId >( key );
│ │ │ │ -
84 Object *localKeys = new Object( *interpolation );
│ │ │ │ -
85 InterpolationFactory::release( interpolation );
│ │ │ │ -
86 return localKeys;
│ │ │ │ -
87 }
│ │ │ │ -
│ │ │ │ -
88
│ │ │ │ -
89 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
90 static bool supports ( const Key &key )
│ │ │ │ -
91 {
│ │ │ │ -
92 GeometryType gt = geometryId;
│ │ │ │ -
93 return gt.isTriangle() || gt.isTetrahedron() ;
│ │ │ │ -
94 }
│ │ │ │ -
│ │ │ │ -
95 static void release( Object *object ) { delete object; }
│ │ │ │ -
96 };
│ │ │ │ -
│ │ │ │ -
97
│ │ │ │ -
98
│ │ │ │ -
99
│ │ │ │ -
100 // NedelecL2InterpolationBuilder
│ │ │ │ -
101 // ------------------------
│ │ │ │ -
102
│ │ │ │ -
103 // L2 Interpolation requires:
│ │ │ │ -
104 // - for element
│ │ │ │ -
105 // - test basis
│ │ │ │ -
106 // - for each face (dynamic)
│ │ │ │ -
107 // - test basis
│ │ │ │ -
108 // - tangents
│ │ │ │ -
109 // - for each edge (dynamic)
│ │ │ │ -
110 // - test basis
│ │ │ │ -
111 // - tangent
│ │ │ │ -
112 template< unsigned int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
114 {
│ │ │ │ -
115 static const unsigned int dimension = dim;
│ │ │ │ -
116
│ │ │ │ -
117 // for the dofs associated to the element
│ │ │ │ - │ │ │ │ - │ │ │ │ -
120
│ │ │ │ -
121 // for the dofs associated to the faces
│ │ │ │ - │ │ │ │ - │ │ │ │ -
124
│ │ │ │ -
125 // for the dofs associated to the edges
│ │ │ │ - │ │ │ │ - │ │ │ │ -
128
│ │ │ │ -
129 // the tangent of the edges
│ │ │ │ -
130 typedef FieldVector< Field, dimension > Tangent;
│ │ │ │ -
131
│ │ │ │ -
132 // the normal and the tangents of the faces
│ │ │ │ -
133 typedef FieldVector< Field, dimension > Normal;
│ │ │ │ -
134 typedef std::array<FieldVector< Field, dimension >,dim-1> FaceTangents;
│ │ │ │ -
135
│ │ │ │ - │ │ │ │ -
137
│ │ │ │ - │ │ │ │ - │ │ │ │ -
140
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
142 {
│ │ │ │ -
143 TestBasisFactory::release( testBasis_ );
│ │ │ │ -
144 for( FaceStructure &f : faceStructure_ )
│ │ │ │ - │ │ │ │ -
146 for( EdgeStructure& e : edgeStructure_ )
│ │ │ │ - │ │ │ │ -
148 }
│ │ │ │ -
│ │ │ │ -
149
│ │ │ │ -
│ │ │ │ -
150 unsigned int topologyId () const
│ │ │ │ -
151 {
│ │ │ │ -
152 return geometry_.id();
│ │ │ │ -
153 }
│ │ │ │ -
│ │ │ │ -
154
│ │ │ │ -
│ │ │ │ -
155 GeometryType type () const
│ │ │ │ -
156 {
│ │ │ │ -
157 return geometry_;
│ │ │ │ -
158 }
│ │ │ │ -
│ │ │ │ -
159
│ │ │ │ -
│ │ │ │ -
160 std::size_t order () const
│ │ │ │ -
161 {
│ │ │ │ -
162 return order_;
│ │ │ │ -
163 }
│ │ │ │ -
│ │ │ │ -
164
│ │ │ │ -
165 // number of faces
│ │ │ │ -
│ │ │ │ -
166 unsigned int faceSize () const
│ │ │ │ -
167 {
│ │ │ │ -
168 return numberOfFaces_;
│ │ │ │ -
169 }
│ │ │ │ -
│ │ │ │ -
170
│ │ │ │ -
171 // number of edges
│ │ │ │ -
│ │ │ │ -
172 unsigned int edgeSize () const
│ │ │ │ -
173 {
│ │ │ │ -
174 return numberOfEdges_;
│ │ │ │ -
175 }
│ │ │ │ -
│ │ │ │ -
176
│ │ │ │ -
177 // basis associated to the element
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
179 {
│ │ │ │ -
180 return testBasis_;
│ │ │ │ -
181 }
│ │ │ │ -
│ │ │ │ -
182
│ │ │ │ -
183 // basis associated to face f
│ │ │ │ -
│ │ │ │ -
184 TestFaceBasis *testFaceBasis ( unsigned int f ) const
│ │ │ │ -
185 {
│ │ │ │ -
186 assert( f < faceSize() );
│ │ │ │ -
187 return faceStructure_[ f ].basis_;
│ │ │ │ -
188 }
│ │ │ │ -
│ │ │ │ -
189
│ │ │ │ -
190 // basis associated to edge e
│ │ │ │ -
│ │ │ │ -
191 TestEdgeBasis *testEdgeBasis ( unsigned int e ) const
│ │ │ │ -
192 {
│ │ │ │ -
193 assert( e < edgeSize() );
│ │ │ │ -
194 return edgeStructure_[ e ].basis_;
│ │ │ │ -
195 }
│ │ │ │ -
│ │ │ │ -
196
│ │ │ │ -
│ │ │ │ -
197 const Tangent& edgeTangent ( unsigned int e ) const
│ │ │ │ -
198 {
│ │ │ │ -
199 assert( e < edgeSize() );
│ │ │ │ -
200 return edgeStructure_[ e ].tangent_;
│ │ │ │ -
201 }
│ │ │ │ -
│ │ │ │ -
202
│ │ │ │ -
│ │ │ │ -
203 const FaceTangents& faceTangents ( unsigned int f ) const
│ │ │ │ -
204 {
│ │ │ │ -
205 assert( f < faceSize() );
│ │ │ │ -
206 return faceStructure_[ f ].faceTangents_;
│ │ │ │ -
207 }
│ │ │ │ -
│ │ │ │ -
208
│ │ │ │ -
│ │ │ │ -
209 const Normal &normal ( unsigned int f ) const
│ │ │ │ -
210 {
│ │ │ │ -
211 assert( f < faceSize() );
│ │ │ │ -
212 return faceStructure_[ f ].normal_;
│ │ │ │ -
213 }
│ │ │ │ -
│ │ │ │ -
214
│ │ │ │ -
215 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
216 void build ( std::size_t order )
│ │ │ │ -
217 {
│ │ │ │ -
218 constexpr GeometryType geometry = geometryId;
│ │ │ │ -
219 order_ = order;
│ │ │ │ -
220 geometry_ = geometry;
│ │ │ │ -
221
│ │ │ │ -
222 /*
│ │ │ │ -
223 * The Nedelec parameter begins at 1.
│ │ │ │ -
224 * This is the numbering used by J.C. Nedelec himself.
│ │ │ │ -
225 * See "Mixed Finite Elements in \R^3" published in 1980.
│ │ │ │ -
226 *
│ │ │ │ -
227 * This construction is based on the construction of Raviart-Thomas elements.
│ │ │ │ -
228 * There the numbering starts at 0.
│ │ │ │ -
229 * Because of this we reduce the order internally by 1.
│ │ │ │ -
230 */
│ │ │ │ -
231 order--;
│ │ │ │ -
232
│ │ │ │ -
233 // if dimension == 2: order-1 on element
│ │ │ │ -
234 // if dimension == 3: order-2 on element
│ │ │ │ -
235 int requiredOrder = static_cast<int>(dimension==3);
│ │ │ │ -
236 testBasis_ = (order > requiredOrder ? TestBasisFactory::template create< geometry >( order-1-requiredOrder ) : nullptr);
│ │ │ │ -
237
│ │ │ │ -
238 const auto &refElement = ReferenceElements< Field, dimension >::general( type() );
│ │ │ │ -
239
│ │ │ │ -
240 numberOfFaces_ = refElement.size( 1 );
│ │ │ │ -
241 faceStructure_.reserve( numberOfFaces_ );
│ │ │ │ -
242
│ │ │ │ -
243 // compute the basis, tangents and normals of each face
│ │ │ │ -
244 for (std::size_t i=0; i<numberOfFaces_; i++)
│ │ │ │ -
245 {
│ │ │ │ -
246 FieldVector<Field,dimension> zero(0);
│ │ │ │ - │ │ │ │ -
248 faceTangents.fill(zero);
│ │ │ │ -
249
│ │ │ │ -
250 // use the first dim-1 vertices of a face to compute the tangents
│ │ │ │ -
251 auto vertices = refElement.subEntities(i,1,dim).begin();
│ │ │ │ -
252 auto vertex1 = *vertices;
│ │ │ │ -
253 for(int j=1; j<dim;j++)
│ │ │ │ -
254 {
│ │ │ │ -
255 auto vertex2 = vertices[j];
│ │ │ │ -
256
│ │ │ │ -
257 faceTangents[j-1] = refElement.position(vertex2,dim) - refElement.position(vertex1,dim);
│ │ │ │ -
258
│ │ │ │ -
259 // By default, edges point from the vertex with the smaller index
│ │ │ │ -
260 // to the vertex with the larger index.
│ │ │ │ -
261 if (vertex1>vertex2)
│ │ │ │ -
262 faceTangents[j-1] *=-1;
│ │ │ │ -
263
│ │ │ │ -
264 vertex1 = vertex2;
│ │ │ │ -
265 }
│ │ │ │ -
266
│ │ │ │ -
267 /* For simplices or cubes of arbitrary dimension you could just use
│ │ │ │ -
268 *
│ │ │ │ -
269 * ```
│ │ │ │ -
270 * GeometryType faceGeometry = Impl::getBase(geometry_);
│ │ │ │ -
271 * TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? TestFaceBasisFactory::template create< faceGeometry >( order-1 ) : nullptr);
│ │ │ │ -
272 * ```
│ │ │ │ -
273 *
│ │ │ │ -
274 * For i.e. Prisms and Pyramids in 3d this does not work because they contain squares and triangles as faces.
│ │ │ │ -
275 * And depending on the dynamic face index a different face geometry is needed.
│ │ │ │ -
276 *
│ │ │ │ -
277 */
│ │ │ │ -
278 TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? Impl::IfGeometryType< CreateFaceBasis, dimension-1 >::apply( refElement.type( i, 1 ), order-1 ) : nullptr);
│ │ │ │ -
279 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal(i), faceTangents );
│ │ │ │ -
280 }
│ │ │ │ -
281 assert( faceStructure_.size() == numberOfFaces_ );
│ │ │ │ -
282
│ │ │ │ -
283 numberOfEdges_ = refElement.size( dim-1 );
│ │ │ │ -
284 edgeStructure_.reserve( numberOfEdges_ );
│ │ │ │ -
285
│ │ │ │ -
286 // compute the basis and tangent of each edge
│ │ │ │ -
287 for (std::size_t i=0; i<numberOfEdges_; i++)
│ │ │ │ -
288 {
│ │ │ │ -
289 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ -
290 auto v0 = *vertexIterator;
│ │ │ │ -
291 auto v1 = *(++vertexIterator);
│ │ │ │ -
292
│ │ │ │ -
293 // By default, edges point from the vertex with the smaller index
│ │ │ │ -
294 // to the vertex with the larger index.
│ │ │ │ -
295 if (v0>v1)
│ │ │ │ -
296 std::swap(v0,v1);
│ │ │ │ -
297 auto tangent = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ -
298
│ │ │ │ -
299 TestEdgeBasis *edgeBasis = Impl::IfGeometryType< CreateEdgeBasis, 1 >::apply( refElement.type( i, dim-1 ), order );
│ │ │ │ -
300 edgeStructure_.emplace_back( edgeBasis, tangent );
│ │ │ │ -
301 }
│ │ │ │ -
302 assert( edgeStructure_.size() == numberOfEdges_ );
│ │ │ │ -
303 }
│ │ │ │ -
│ │ │ │ -
304
│ │ │ │ -
305 private:
│ │ │ │ -
306
│ │ │ │ -
307 // helper struct for edges
│ │ │ │ -
308 struct EdgeStructure
│ │ │ │ -
309 {
│ │ │ │ -
310 EdgeStructure( TestEdgeBasis *teb, const Tangent &t )
│ │ │ │ -
311 : basis_( teb ), tangent_( t )
│ │ │ │ -
312 {}
│ │ │ │ -
313
│ │ │ │ -
314 TestEdgeBasis *basis_;
│ │ │ │ -
315 const Dune::FieldVector< Field, dimension > tangent_;
│ │ │ │ -
316 };
│ │ │ │ -
317
│ │ │ │ -
318 template< GeometryType::Id edgeGeometryId >
│ │ │ │ -
319 struct CreateEdgeBasis
│ │ │ │ -
320 {
│ │ │ │ -
321 static TestEdgeBasis *apply ( std::size_t order ) { return TestEdgeBasisFactory::template create< edgeGeometryId >( order ); }
│ │ │ │ -
322 };
│ │ │ │ -
323
│ │ │ │ -
324 // helper struct for faces
│ │ │ │ -
325 struct FaceStructure
│ │ │ │ -
326 {
│ │ │ │ -
327 FaceStructure( TestFaceBasis *tfb, const Normal& normal, const FaceTangents& faceTangents )
│ │ │ │ -
328 : basis_( tfb ), normal_(normal), faceTangents_( faceTangents )
│ │ │ │ -
329 {}
│ │ │ │ -
330
│ │ │ │ -
331 TestFaceBasis *basis_;
│ │ │ │ -
332 const Dune::FieldVector< Field, dimension > normal_;
│ │ │ │ -
333 const FaceTangents faceTangents_;
│ │ │ │ -
334 };
│ │ │ │ -
335
│ │ │ │ -
336 template< GeometryType::Id faceGeometryId >
│ │ │ │ -
337 struct CreateFaceBasis
│ │ │ │ -
338 {
│ │ │ │ -
339 static TestFaceBasis *apply ( std::size_t order ) { return TestFaceBasisFactory::template create< faceGeometryId >( order ); }
│ │ │ │ -
340 };
│ │ │ │ -
341
│ │ │ │ -
342 TestBasis *testBasis_ = nullptr;
│ │ │ │ -
343 std::vector< FaceStructure > faceStructure_;
│ │ │ │ -
344 unsigned int numberOfFaces_;
│ │ │ │ -
345 std::vector< EdgeStructure > edgeStructure_;
│ │ │ │ -
346 unsigned int numberOfEdges_;
│ │ │ │ -
347 GeometryType geometry_;
│ │ │ │ -
348 std::size_t order_;
│ │ │ │ -
349 };
│ │ │ │ -
│ │ │ │ -
350
│ │ │ │ -
351
│ │ │ │ -
352
│ │ │ │ -
353 // NedelecL2Interpolation
│ │ │ │ -
354 // ----------------------------
│ │ │ │ -
355
│ │ │ │ -
361 template< unsigned int dimension, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
363 : public InterpolationHelper< F ,dimension >
│ │ │ │ -
364 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
367
│ │ │ │ -
368 public:
│ │ │ │ -
369 typedef F Field;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
372
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
374 : order_(0),
│ │ │ │ -
375 size_(0)
│ │ │ │ -
376 {}
│ │ │ │ -
│ │ │ │ -
377
│ │ │ │ -
378 template< class Function, class Vector,
│ │ │ │ -
379 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ -
380 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
381 void interpolate ( const Function &function, Vector &coefficients ) const
│ │ │ │ -
382 {
│ │ │ │ -
383 coefficients.resize(size());
│ │ │ │ -
384 typename Base::template Helper<Function,Vector,true> func( function,coefficients );
│ │ │ │ -
385 interpolate(func);
│ │ │ │ -
386 }
│ │ │ │ -
│ │ │ │ -
387
│ │ │ │ -
388 template< class Basis, class Matrix,
│ │ │ │ -
389 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ -
390 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ -
391 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
392 void interpolate ( const Basis &basis, Matrix &matrix ) const
│ │ │ │ -
393 {
│ │ │ │ -
394 matrix.resize( size(), basis.size() );
│ │ │ │ -
395 typename Base::template Helper<Basis,Matrix,false> func( basis,matrix );
│ │ │ │ -
396 interpolate(func);
│ │ │ │ -
397 }
│ │ │ │ -
│ │ │ │ -
398
│ │ │ │ -
│ │ │ │ -
399 std::size_t order() const
│ │ │ │ -
400 {
│ │ │ │ -
401 return order_;
│ │ │ │ -
402 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
403 std::size_t size() const
│ │ │ │ -
404 {
│ │ │ │ -
405 return size_;
│ │ │ │ -
406 }
│ │ │ │ -
│ │ │ │ -
407
│ │ │ │ -
408 template <GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
409 void build( std::size_t order )
│ │ │ │ -
410 {
│ │ │ │ -
411 size_ = 0;
│ │ │ │ -
412 order_ = order;
│ │ │ │ -
413 builder_.template build<geometryId>(order_);
│ │ │ │ -
414 if (builder_.testBasis())
│ │ │ │ -
415 size_ += dimension*builder_.testBasis()->size();
│ │ │ │ -
416
│ │ │ │ -
417 for ( unsigned int f=0; f<builder_.faceSize(); ++f )
│ │ │ │ -
418 if (builder_.testFaceBasis(f))
│ │ │ │ -
419 size_ += (dimension-1)*builder_.testFaceBasis(f)->size();
│ │ │ │ -
420
│ │ │ │ -
421 for ( unsigned int e=0; e<builder_.edgeSize(); ++e )
│ │ │ │ -
422 if (builder_.testEdgeBasis(e))
│ │ │ │ - │ │ │ │ -
424 }
│ │ │ │ -
│ │ │ │ -
425
│ │ │ │ -
│ │ │ │ -
426 void setLocalKeys(std::vector< LocalKey > &keys) const
│ │ │ │ -
427 {
│ │ │ │ -
428 keys.resize(size());
│ │ │ │ -
429 unsigned int row = 0;
│ │ │ │ -
430 for (unsigned int e=0; e<builder_.edgeSize(); ++e)
│ │ │ │ -
431 {
│ │ │ │ -
432 if (builder_.edgeSize())
│ │ │ │ -
433 for (unsigned int i=0; i<builder_.testEdgeBasis(e)->size(); ++i,++row)
│ │ │ │ -
434 keys[row] = LocalKey(e,dimension-1,i);
│ │ │ │ -
435 }
│ │ │ │ -
436 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ -
437 {
│ │ │ │ -
438 if (builder_.faceSize())
│ │ │ │ -
439 for (unsigned int i=0; i<builder_.testFaceBasis(f)->size()*(dimension-1); ++i,++row)
│ │ │ │ -
440 keys[row] = LocalKey(f,1,i);
│ │ │ │ -
441 }
│ │ │ │ -
442
│ │ │ │ -
443 if (builder_.testBasis())
│ │ │ │ -
444 for (unsigned int i=0; i<builder_.testBasis()->size()*dimension; ++i,++row)
│ │ │ │ -
445 keys[row] = LocalKey(0,0,i);
│ │ │ │ -
446 assert( row == size() );
│ │ │ │ -
447 }
│ │ │ │ -
│ │ │ │ -
448
│ │ │ │ -
449 protected:
│ │ │ │ -
450 template< class Func, class Container, bool type >
│ │ │ │ -
│ │ │ │ -
451 void interpolate ( typename Base::template Helper<Func,Container,type> &func ) const
│ │ │ │ -
452 {
│ │ │ │ -
453 const Dune::GeometryType geoType( builder_.topologyId(), dimension );
│ │ │ │ -
454
│ │ │ │ -
455 std::vector<Field> testBasisVal;
│ │ │ │ -
456
│ │ │ │ -
457 for (unsigned int i=0; i<size(); ++i)
│ │ │ │ -
458 for (unsigned int j=0; j<func.size(); ++j)
│ │ │ │ -
459 func.set(i,j,0);
│ │ │ │ -
460
│ │ │ │ -
461 unsigned int row = 0;
│ │ │ │ -
462
│ │ │ │ -
463 // edge dofs:
│ │ │ │ -
464 typedef Dune::QuadratureRule<Field, 1> EdgeQuadrature;
│ │ │ │ -
465 typedef Dune::QuadratureRules<Field, 1> EdgeQuadratureRules;
│ │ │ │ -
466
│ │ │ │ -
467 const auto &refElement = Dune::ReferenceElements< Field, dimension >::general( geoType );
│ │ │ │ -
468
│ │ │ │ -
469 for (unsigned int e=0; e<builder_.edgeSize(); ++e)
│ │ │ │ -
470 {
│ │ │ │ -
471 if (!builder_.testEdgeBasis(e))
│ │ │ │ -
472 continue;
│ │ │ │ -
473 testBasisVal.resize(builder_.testEdgeBasis(e)->size());
│ │ │ │ -
474
│ │ │ │ -
475 const auto &geometry = refElement.template geometry< dimension-1 >( e );
│ │ │ │ -
476 const Dune::GeometryType subGeoType( geometry.type().id(), 1 );
│ │ │ │ -
477 const EdgeQuadrature &edgeQuad = EdgeQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ -
478
│ │ │ │ -
479 const unsigned int quadratureSize = edgeQuad.size();
│ │ │ │ -
480 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ -
481 {
│ │ │ │ -
482 if (dimension>1)
│ │ │ │ -
483 builder_.testEdgeBasis(e)->template evaluate<0>(edgeQuad[qi].position(),testBasisVal);
│ │ │ │ -
484 else
│ │ │ │ -
485 testBasisVal[0] = 1.;
│ │ │ │ -
486 computeEdgeDofs(row,
│ │ │ │ -
487 testBasisVal,
│ │ │ │ -
488 func.evaluate( geometry.global( edgeQuad[qi].position() ) ),
│ │ │ │ - │ │ │ │ -
490 edgeQuad[qi].weight(),
│ │ │ │ -
491 func);
│ │ │ │ -
492 }
│ │ │ │ -
493
│ │ │ │ -
494 row += builder_.testEdgeBasis(e)->size();
│ │ │ │ -
495 }
│ │ │ │ -
496
│ │ │ │ -
497 // face dofs:
│ │ │ │ -
498 typedef Dune::QuadratureRule<Field, dimension-1> FaceQuadrature;
│ │ │ │ -
499 typedef Dune::QuadratureRules<Field, dimension-1> FaceQuadratureRules;
│ │ │ │ -
500
│ │ │ │ -
501 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ -
502 {
│ │ │ │ -
503 if (builder_.testFaceBasis(f))
│ │ │ │ -
504 {
│ │ │ │ -
505 testBasisVal.resize(builder_.testFaceBasis(f)->size());
│ │ │ │ -
506
│ │ │ │ -
507 const auto &geometry = refElement.template geometry< 1 >( f );
│ │ │ │ -
508 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 );
│ │ │ │ -
509 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ -
510
│ │ │ │ -
511 const unsigned int quadratureSize = faceQuad.size();
│ │ │ │ -
512 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ -
513 {
│ │ │ │ -
514 if (dimension>1)
│ │ │ │ -
515 builder_.testFaceBasis(f)->template evaluate<0>(faceQuad[qi].position(),testBasisVal);
│ │ │ │ -
516 else
│ │ │ │ -
517 testBasisVal[0] = 1.;
│ │ │ │ -
518
│ │ │ │ -
519 computeFaceDofs( row,
│ │ │ │ -
520 testBasisVal,
│ │ │ │ -
521 func.evaluate( geometry.global( faceQuad[qi].position() ) ),
│ │ │ │ - │ │ │ │ -
523 builder_.normal(f),
│ │ │ │ -
524 faceQuad[qi].weight(),
│ │ │ │ -
525 func);
│ │ │ │ -
526 }
│ │ │ │ -
527
│ │ │ │ -
528 row += builder_.testFaceBasis(f)->size()*(dimension-1);
│ │ │ │ -
529 }
│ │ │ │ -
530 }
│ │ │ │ -
531
│ │ │ │ -
532 // element dofs
│ │ │ │ -
533 if (builder_.testBasis())
│ │ │ │ -
534 {
│ │ │ │ -
535 testBasisVal.resize(builder_.testBasis()->size());
│ │ │ │ -
536
│ │ │ │ -
537 typedef Dune::QuadratureRule<Field, dimension> Quadrature;
│ │ │ │ -
538 typedef Dune::QuadratureRules<Field, dimension> QuadratureRules;
│ │ │ │ -
539 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 );
│ │ │ │ -
540
│ │ │ │ -
541 const unsigned int quadratureSize = elemQuad.size();
│ │ │ │ -
542 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ -
543 {
│ │ │ │ -
544 builder_.testBasis()->template evaluate<0>(elemQuad[qi].position(),testBasisVal);
│ │ │ │ -
545 computeInteriorDofs(row,
│ │ │ │ -
546 testBasisVal,
│ │ │ │ -
547 func.evaluate(elemQuad[qi].position()),
│ │ │ │ -
548 elemQuad[qi].weight(),
│ │ │ │ -
549 func );
│ │ │ │ -
550 }
│ │ │ │ -
551
│ │ │ │ -
552 row += builder_.testBasis()->size()*dimension;
│ │ │ │ -
553 }
│ │ │ │ -
554 assert(row==size());
│ │ │ │ -
555 }
│ │ │ │ -
│ │ │ │ -
556
│ │ │ │ -
557 private:
│ │ │ │ -
567 template <class MVal, class NedVal,class Matrix>
│ │ │ │ -
568 void computeEdgeDofs (unsigned int startRow,
│ │ │ │ -
569 const MVal &mVal,
│ │ │ │ -
570 const NedVal &nedVal,
│ │ │ │ -
571 const FieldVector<Field,dimension> &tangent,
│ │ │ │ -
572 const Field &weight,
│ │ │ │ -
573 Matrix &matrix) const
│ │ │ │ -
574 {
│ │ │ │ -
575 const unsigned int endRow = startRow+mVal.size();
│ │ │ │ -
576 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ -
577 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ -
578 {
│ │ │ │ -
579 Field cFactor = (*nedIter)*tangent;
│ │ │ │ -
580 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ -
581 for (unsigned int row = startRow; row!=endRow; ++mIter, ++row )
│ │ │ │ -
582 matrix.add(row,col, (weight*cFactor)*(*mIter) );
│ │ │ │ -
583
│ │ │ │ -
584 assert( mIter == mVal.end() );
│ │ │ │ -
585 }
│ │ │ │ -
586 }
│ │ │ │ -
587
│ │ │ │ -
598 template <class MVal, class NedVal,class Matrix>
│ │ │ │ -
599 void computeFaceDofs (unsigned int startRow,
│ │ │ │ -
600 const MVal &mVal,
│ │ │ │ -
601 const NedVal &nedVal,
│ │ │ │ -
602 const FaceTangents& faceTangents,
│ │ │ │ -
603 const FieldVector<Field,dimension> &normal,
│ │ │ │ -
604 const Field &weight,
│ │ │ │ -
605 Matrix &matrix) const
│ │ │ │ -
606 {
│ │ │ │ -
607 const unsigned int endRow = startRow+mVal.size()*(dimension-1);
│ │ │ │ -
608 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ -
609 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ -
610 {
│ │ │ │ -
611 auto const& u=*nedIter;
│ │ │ │ -
612 auto const& n=normal;
│ │ │ │ -
613 FieldVector<Field,dimension> nedTimesNormal = { u[1]*n[2]-u[2]*n[1],
│ │ │ │ -
614 u[2]*n[0]-u[0]*n[2],
│ │ │ │ -
615 u[0]*n[1]-u[1]*n[0]};
│ │ │ │ -
616 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ -
617 for (unsigned int row = startRow; row!=endRow; ++mIter)
│ │ │ │ -
618 {
│ │ │ │ -
619 for(int i=0; i<dimension-1;i++)
│ │ │ │ -
620 {
│ │ │ │ -
621 auto test = *mIter*faceTangents[i];
│ │ │ │ -
622 matrix.add(row+i,col, weight*(nedTimesNormal*test) );
│ │ │ │ -
623 }
│ │ │ │ -
624 row += dimension-1;
│ │ │ │ -
625 }
│ │ │ │ -
626
│ │ │ │ -
627 assert( mIter == mVal.end() );
│ │ │ │ -
628 }
│ │ │ │ -
629 }
│ │ │ │ -
630
│ │ │ │ -
639 template <class MVal, class NedVal,class Matrix>
│ │ │ │ -
640 void computeInteriorDofs (unsigned int startRow,
│ │ │ │ -
641 const MVal &mVal,
│ │ │ │ -
642 const NedVal &nedVal,
│ │ │ │ -
643 Field weight,
│ │ │ │ -
644 Matrix &matrix) const
│ │ │ │ -
645 {
│ │ │ │ -
646 const unsigned int endRow = startRow+mVal.size()*dimension;
│ │ │ │ -
647 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ -
648 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ -
649 {
│ │ │ │ -
650 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ -
651 for (unsigned int row = startRow; row!=endRow; ++mIter,row+=dimension )
│ │ │ │ -
652 for (unsigned int i=0; i<dimension; ++i)
│ │ │ │ -
653 matrix.add(row+i,col, (weight*(*mIter))*(*nedIter)[i] );
│ │ │ │ -
654
│ │ │ │ -
655 assert( mIter == mVal.end() );
│ │ │ │ -
656 }
│ │ │ │ -
657 }
│ │ │ │ -
658
│ │ │ │ -
659 public:
│ │ │ │ - │ │ │ │ -
661 std::size_t order_;
│ │ │ │ -
662 std::size_t size_;
│ │ │ │ -
663 };
│ │ │ │ -
│ │ │ │ -
664
│ │ │ │ -
665 template < unsigned int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
667 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
670 typedef std::size_t Key;
│ │ │ │ -
671 typedef typename std::remove_const<Object>::type NonConstObject;
│ │ │ │ -
672
│ │ │ │ -
673 template <GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
674 static Object *create( const Key &key )
│ │ │ │ -
675 {
│ │ │ │ -
676 if ( !supports<geometryId>(key) )
│ │ │ │ -
677 return 0;
│ │ │ │ -
678 NonConstObject *interpol = new NonConstObject();
│ │ │ │ -
679 interpol->template build<geometryId>(key);
│ │ │ │ -
680 return interpol;
│ │ │ │ -
681 }
│ │ │ │ -
│ │ │ │ -
682
│ │ │ │ -
683 template <GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
684 static bool supports( const Key &key )
│ │ │ │ -
685 {
│ │ │ │ -
686 GeometryType gt = geometryId;
│ │ │ │ -
687 return gt.isTriangle() || gt.isTetrahedron() ;
│ │ │ │ -
688 }
│ │ │ │ -
│ │ │ │ -
689 static void release( Object *object ) { delete object; }
│ │ │ │ -
690 };
│ │ │ │ -
│ │ │ │ -
691
│ │ │ │ -
692} // namespace Dune
│ │ │ │ -
693
│ │ │ │ -
694#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
70 static constexpr GeometryType type ()
│ │ │ │ +
71 {
│ │ │ │ +
72 return GeometryTypes::simplex(dim);
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
75 private:
│ │ │ │ + │ │ │ │ +
77
│ │ │ │ +
78 typename Traits::LocalCoefficientsType coefficients;
│ │ │ │ +
79
│ │ │ │ + │ │ │ │ +
81 };
│ │ │ │ +
│ │ │ │ +
82
│ │ │ │ +
83}
│ │ │ │ +
84
│ │ │ │ +
85#endif
│ │ │ │ +
Hierarchical p2 shape functions for the simplex.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition nedelecsimplexinterpolation.hh:667
│ │ │ │ -
static Object * create(const Key &key)
Definition nedelecsimplexinterpolation.hh:674
│ │ │ │ -
const NedelecL2Interpolation< dim, Field > Object
Definition nedelecsimplexinterpolation.hh:669
│ │ │ │ -
NedelecL2InterpolationBuilder< dim, Field > Builder
Definition nedelecsimplexinterpolation.hh:668
│ │ │ │ -
std::size_t Key
Definition nedelecsimplexinterpolation.hh:670
│ │ │ │ -
static bool supports(const Key &key)
Definition nedelecsimplexinterpolation.hh:684
│ │ │ │ -
std::remove_const< Object >::type NonConstObject
Definition nedelecsimplexinterpolation.hh:671
│ │ │ │ -
static void release(Object *object)
Definition nedelecsimplexinterpolation.hh:689
│ │ │ │ -
Definition nedelecsimplexinterpolation.hh:41
│ │ │ │ -
LocalCoefficientsContainer(const Setter &setter)
Definition nedelecsimplexinterpolation.hh:46
│ │ │ │ -
const LocalKey & localKey(const unsigned int i) const
Definition nedelecsimplexinterpolation.hh:51
│ │ │ │ -
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:57
│ │ │ │ -
Definition nedelecsimplexinterpolation.hh:73
│ │ │ │ -
static Object * create(const Key &key)
Definition nedelecsimplexinterpolation.hh:78
│ │ │ │ -
static bool supports(const Key &key)
Definition nedelecsimplexinterpolation.hh:90
│ │ │ │ -
const LocalCoefficientsContainer Object
Definition nedelecsimplexinterpolation.hh:75
│ │ │ │ -
std::size_t Key
Definition nedelecsimplexinterpolation.hh:74
│ │ │ │ -
static void release(Object *object)
Definition nedelecsimplexinterpolation.hh:95
│ │ │ │ -
Definition nedelecsimplexinterpolation.hh:114
│ │ │ │ -
TestEdgeBasis * testEdgeBasis(unsigned int e) const
Definition nedelecsimplexinterpolation.hh:191
│ │ │ │ -
~NedelecL2InterpolationBuilder()
Definition nedelecsimplexinterpolation.hh:141
│ │ │ │ -
GeometryType type() const
Definition nedelecsimplexinterpolation.hh:155
│ │ │ │ -
TestBasisFactory::Object TestBasis
Definition nedelecsimplexinterpolation.hh:119
│ │ │ │ -
FieldVector< Field, dimension > Tangent
Definition nedelecsimplexinterpolation.hh:130
│ │ │ │ -
TestFaceBasisFactory::Object TestFaceBasis
Definition nedelecsimplexinterpolation.hh:123
│ │ │ │ -
TestFaceBasis * testFaceBasis(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:184
│ │ │ │ -
TestEdgeBasisFactory::Object TestEdgeBasis
Definition nedelecsimplexinterpolation.hh:127
│ │ │ │ -
FieldVector< Field, dimension > Normal
Definition nedelecsimplexinterpolation.hh:133
│ │ │ │ -
void build(std::size_t order)
Definition nedelecsimplexinterpolation.hh:216
│ │ │ │ -
OrthonormalBasisFactory< dimension, Field > TestBasisFactory
Definition nedelecsimplexinterpolation.hh:118
│ │ │ │ -
OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory
Definition nedelecsimplexinterpolation.hh:122
│ │ │ │ -
const FaceTangents & faceTangents(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:203
│ │ │ │ -
unsigned int faceSize() const
Definition nedelecsimplexinterpolation.hh:166
│ │ │ │ -
TestBasis * testBasis() const
Definition nedelecsimplexinterpolation.hh:178
│ │ │ │ -
std::array< FieldVector< Field, dimension >, dim-1 > FaceTangents
Definition nedelecsimplexinterpolation.hh:134
│ │ │ │ -
OrthonormalBasisFactory< 1, Field > TestEdgeBasisFactory
Definition nedelecsimplexinterpolation.hh:126
│ │ │ │ -
const Tangent & edgeTangent(unsigned int e) const
Definition nedelecsimplexinterpolation.hh:197
│ │ │ │ -
NedelecL2InterpolationBuilder(NedelecL2InterpolationBuilder &&)=delete
│ │ │ │ -
std::size_t order() const
Definition nedelecsimplexinterpolation.hh:160
│ │ │ │ -
unsigned int edgeSize() const
Definition nedelecsimplexinterpolation.hh:172
│ │ │ │ -
unsigned int topologyId() const
Definition nedelecsimplexinterpolation.hh:150
│ │ │ │ -
NedelecL2InterpolationBuilder(const NedelecL2InterpolationBuilder &)=delete
│ │ │ │ -
static const unsigned int dimension
Definition nedelecsimplexinterpolation.hh:115
│ │ │ │ - │ │ │ │ -
const Normal & normal(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:209
│ │ │ │ -
An L2-based interpolation for Nedelec.
Definition nedelecsimplexinterpolation.hh:364
│ │ │ │ -
Builder::FaceTangents FaceTangents
Definition nedelecsimplexinterpolation.hh:371
│ │ │ │ -
F Field
Definition nedelecsimplexinterpolation.hh:369
│ │ │ │ -
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:403
│ │ │ │ -
void interpolate(typename Base::template Helper< Func, Container, type > &func) const
Definition nedelecsimplexinterpolation.hh:451
│ │ │ │ -
std::size_t order_
Definition nedelecsimplexinterpolation.hh:661
│ │ │ │ -
NedelecL2InterpolationBuilder< dimension, Field > Builder
Definition nedelecsimplexinterpolation.hh:370
│ │ │ │ -
std::size_t size_
Definition nedelecsimplexinterpolation.hh:662
│ │ │ │ -
NedelecL2Interpolation()
Definition nedelecsimplexinterpolation.hh:373
│ │ │ │ -
void interpolate(const Function &function, Vector &coefficients) const
Definition nedelecsimplexinterpolation.hh:381
│ │ │ │ -
void build(std::size_t order)
Definition nedelecsimplexinterpolation.hh:409
│ │ │ │ -
std::size_t order() const
Definition nedelecsimplexinterpolation.hh:399
│ │ │ │ -
void setLocalKeys(std::vector< LocalKey > &keys) const
Definition nedelecsimplexinterpolation.hh:426
│ │ │ │ -
Builder builder_
Definition nedelecsimplexinterpolation.hh:660
│ │ │ │ -
Definition orthonormalbasis.hh:20
│ │ │ │ -
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │ -
Definition interpolationhelper.hh:21
│ │ │ │ -
Definition interpolationhelper.hh:23
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ -
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Definition hierarchicalp2.hh:23
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition hierarchicalp2.hh:43
│ │ │ │ +
HierarchicalP2LocalFiniteElement()
Definition hierarchicalp2.hh:38
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition hierarchicalp2.hh:63
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition hierarchicalp2.hh:50
│ │ │ │ +
LocalFiniteElementTraits< HierarchicalSimplexP2LocalBasis< D, R, dim >, typename LagrangeSimplexLocalFiniteElement< D, R, dim, 2 >::Traits::LocalCoefficientsType, HierarchicalSimplexP2LocalInterpolation< HierarchicalSimplexP2LocalBasis< D, R, dim > > > Traits
Definition hierarchicalp2.hh:34
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition hierarchicalp2.hh:57
│ │ │ │ +
static constexpr GeometryType type()
Definition hierarchicalp2.hh:70
│ │ │ │ +
Definition hierarchicalsimplexp2localbasis.hh:23
│ │ │ │ +
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,895 +1,137 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ - * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ -nedelecsimplexinterpolation.hh │ │ │ │ │ + * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ +hierarchicalp2.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ -6#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -22 │ │ │ │ │ -23namespace _D_u_n_e │ │ │ │ │ -24{ │ │ │ │ │ -25 │ │ │ │ │ -26 // Internal Forward Declarations │ │ │ │ │ -27 // ----------------------------- │ │ │ │ │ -28 │ │ │ │ │ -32 template < unsigned int dim, class Field > │ │ │ │ │ -33 struct NedelecL2InterpolationFactory; │ │ │ │ │ -34 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +14#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +21 template │ │ │ │ │ +_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +23 { │ │ │ │ │ +24 │ │ │ │ │ +25 static_assert(1 <= dim && dim <= 3, │ │ │ │ │ +26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3."); │ │ │ │ │ +27 │ │ │ │ │ +28 public: │ │ │ │ │ +31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +32 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ +33 typename _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_2_>_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ +_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e, │ │ │ │ │ +_3_4 │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> │ │ │ │ │ +> > _T_r_a_i_t_s; │ │ │ │ │ 35 │ │ │ │ │ -36 │ │ │ │ │ -37 // LocalCoefficientsContainer │ │ │ │ │ -38 // -------------------------- │ │ │ │ │ -39 │ │ │ │ │ -_4_0 class _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -41 { │ │ │ │ │ -42 typedef _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _T_h_i_s; │ │ │ │ │ -43 │ │ │ │ │ -44 public: │ │ │ │ │ -45 template │ │ │ │ │ -_4_6 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r ( const Setter &setter ) │ │ │ │ │ -47 { │ │ │ │ │ -48 setter.setLocalKeys(localKey_); │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_1 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ -52 { │ │ │ │ │ -53 assert( i < _s_i_z_e() ); │ │ │ │ │ -54 return localKey_[ i ]; │ │ │ │ │ -55 } │ │ │ │ │ -56 │ │ │ │ │ -_5_7 std::size_t _s_i_z_e () const │ │ │ │ │ +_3_8 _H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +39 {} │ │ │ │ │ +40 │ │ │ │ │ +_4_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +44 { │ │ │ │ │ +45 return basis; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return coefficients; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ 58 { │ │ │ │ │ -59 return localKey_.size(); │ │ │ │ │ +59 return interpolation; │ │ │ │ │ 60 } │ │ │ │ │ 61 │ │ │ │ │ -62 private: │ │ │ │ │ -63 std::vector< LocalKey > localKey_; │ │ │ │ │ -64 }; │ │ │ │ │ -65 │ │ │ │ │ -66 │ │ │ │ │ +_6_3 unsigned int _s_i_z_e () const │ │ │ │ │ +64 { │ │ │ │ │ +65 return basis.size(); │ │ │ │ │ +66 } │ │ │ │ │ 67 │ │ │ │ │ -68 // NedelecCoefficientsFactory │ │ │ │ │ -69 // -------------------------------- │ │ │ │ │ -70 │ │ │ │ │ -71 template < unsigned int dim > │ │ │ │ │ -_7_2 struct _N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -73 { │ │ │ │ │ -_7_4 typedef std::size_t _K_e_y; │ │ │ │ │ -_7_5 typedef const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _O_b_j_e_c_t; │ │ │ │ │ -76 │ │ │ │ │ -77 template< GeometryType::Id geometryId > │ │ │ │ │ -_7_8 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ -79 { │ │ │ │ │ -80 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _d_o_u_b_l_e_ _> InterpolationFactory; │ │ │ │ │ -81 if( !supports< geometryId >( key ) ) │ │ │ │ │ -82 return nullptr; │ │ │ │ │ -83 typename InterpolationFactory::Object *interpolation = │ │ │ │ │ -InterpolationFactory::template create< geometryId >( key ); │ │ │ │ │ -84 _O_b_j_e_c_t *localKeys = new _O_b_j_e_c_t( *interpolation ); │ │ │ │ │ -85 InterpolationFactory::release( interpolation ); │ │ │ │ │ -86 return localKeys; │ │ │ │ │ -87 } │ │ │ │ │ -88 │ │ │ │ │ -89 template< GeometryType::Id geometryId > │ │ │ │ │ -_9_0 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ -91 { │ │ │ │ │ -92 GeometryType gt = geometryId; │ │ │ │ │ -93 return gt.isTriangle() || gt.isTetrahedron() ; │ │ │ │ │ -94 } │ │ │ │ │ -_9_5 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -96 }; │ │ │ │ │ -97 │ │ │ │ │ -98 │ │ │ │ │ -99 │ │ │ │ │ -100 // NedelecL2InterpolationBuilder │ │ │ │ │ -101 // ------------------------ │ │ │ │ │ -102 │ │ │ │ │ -103 // L2 Interpolation requires: │ │ │ │ │ -104 // - for element │ │ │ │ │ -105 // - test basis │ │ │ │ │ -106 // - for each face (dynamic) │ │ │ │ │ -107 // - test basis │ │ │ │ │ -108 // - tangents │ │ │ │ │ -109 // - for each edge (dynamic) │ │ │ │ │ -110 // - test basis │ │ │ │ │ -111 // - tangent │ │ │ │ │ -112 template< unsigned int dim, class Field > │ │ │ │ │ -_1_1_3 struct _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -114 { │ │ │ │ │ -_1_1_5 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -116 │ │ │ │ │ -117 // for the dofs associated to the element │ │ │ │ │ -_1_1_8 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _F_i_e_l_d_ _> _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_1_1_9 typedef typename _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_B_a_s_i_s; │ │ │ │ │ -120 │ │ │ │ │ -121 // for the dofs associated to the faces │ │ │ │ │ -_1_2_2 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y< _d_i_m_e_n_s_i_o_n-1, Field > _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_1_2_3 typedef typename _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_F_a_c_e_B_a_s_i_s; │ │ │ │ │ -124 │ │ │ │ │ -125 // for the dofs associated to the edges │ │ │ │ │ -_1_2_6 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _1_,_ _F_i_e_l_d_ _> _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_1_2_7 typedef typename _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_E_d_g_e_B_a_s_i_s; │ │ │ │ │ -128 │ │ │ │ │ -129 // the tangent of the edges │ │ │ │ │ -_1_3_0 typedef FieldVector< Field, dimension > _T_a_n_g_e_n_t; │ │ │ │ │ -131 │ │ │ │ │ -132 // the normal and the tangents of the faces │ │ │ │ │ -_1_3_3 typedef FieldVector< Field, dimension > _N_o_r_m_a_l; │ │ │ │ │ -_1_3_4 typedef std::array,dim-1> _F_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ -135 │ │ │ │ │ -_1_3_6 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () = default; │ │ │ │ │ -137 │ │ │ │ │ -_1_3_8 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( const _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r & ) = │ │ │ │ │ -delete; │ │ │ │ │ -_1_3_9 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r && ) = │ │ │ │ │ -delete; │ │ │ │ │ -140 │ │ │ │ │ -_1_4_1 _~_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () │ │ │ │ │ -142 { │ │ │ │ │ -143 _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( testBasis_ ); │ │ │ │ │ -144 for( FaceStructure &f : faceStructure_ ) │ │ │ │ │ -145 _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( f.basis_ ); │ │ │ │ │ -146 for( EdgeStructure& e : edgeStructure_ ) │ │ │ │ │ -147 _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( e.basis_ ); │ │ │ │ │ -148 } │ │ │ │ │ -149 │ │ │ │ │ -_1_5_0 unsigned int _t_o_p_o_l_o_g_y_I_d () const │ │ │ │ │ -151 { │ │ │ │ │ -152 return geometry_.id(); │ │ │ │ │ -153 } │ │ │ │ │ -154 │ │ │ │ │ -_1_5_5 GeometryType _t_y_p_e () const │ │ │ │ │ -156 { │ │ │ │ │ -157 return geometry_; │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -_1_6_0 std::size_t _o_r_d_e_r () const │ │ │ │ │ -161 { │ │ │ │ │ -162 return order_; │ │ │ │ │ -163 } │ │ │ │ │ -164 │ │ │ │ │ -165 // number of faces │ │ │ │ │ -_1_6_6 unsigned int _f_a_c_e_S_i_z_e () const │ │ │ │ │ -167 { │ │ │ │ │ -168 return numberOfFaces_; │ │ │ │ │ -169 } │ │ │ │ │ -170 │ │ │ │ │ -171 // number of edges │ │ │ │ │ -_1_7_2 unsigned int _e_d_g_e_S_i_z_e () const │ │ │ │ │ -173 { │ │ │ │ │ -174 return numberOfEdges_; │ │ │ │ │ -175 } │ │ │ │ │ -176 │ │ │ │ │ -177 // basis associated to the element │ │ │ │ │ -_1_7_8 _T_e_s_t_B_a_s_i_s *_t_e_s_t_B_a_s_i_s () const │ │ │ │ │ -179 { │ │ │ │ │ -180 return testBasis_; │ │ │ │ │ -181 } │ │ │ │ │ -182 │ │ │ │ │ -183 // basis associated to face f │ │ │ │ │ -_1_8_4 _T_e_s_t_F_a_c_e_B_a_s_i_s *_t_e_s_t_F_a_c_e_B_a_s_i_s ( unsigned int f ) const │ │ │ │ │ -185 { │ │ │ │ │ -186 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ -187 return faceStructure_[ f ].basis_; │ │ │ │ │ -188 } │ │ │ │ │ -189 │ │ │ │ │ -190 // basis associated to edge e │ │ │ │ │ -_1_9_1 _T_e_s_t_E_d_g_e_B_a_s_i_s *_t_e_s_t_E_d_g_e_B_a_s_i_s ( unsigned int e ) const │ │ │ │ │ -192 { │ │ │ │ │ -193 assert( e < _e_d_g_e_S_i_z_e() ); │ │ │ │ │ -194 return edgeStructure_[ e ].basis_; │ │ │ │ │ -195 } │ │ │ │ │ -196 │ │ │ │ │ -_1_9_7 const _T_a_n_g_e_n_t& _e_d_g_e_T_a_n_g_e_n_t ( unsigned int e ) const │ │ │ │ │ -198 { │ │ │ │ │ -199 assert( e < _e_d_g_e_S_i_z_e() ); │ │ │ │ │ -200 return edgeStructure_[ e ].tangent_; │ │ │ │ │ -201 } │ │ │ │ │ -202 │ │ │ │ │ -_2_0_3 const _F_a_c_e_T_a_n_g_e_n_t_s& _f_a_c_e_T_a_n_g_e_n_t_s ( unsigned int f ) const │ │ │ │ │ -204 { │ │ │ │ │ -205 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ -206 return faceStructure_[ f ].faceTangents_; │ │ │ │ │ -207 } │ │ │ │ │ -208 │ │ │ │ │ -_2_0_9 const _N_o_r_m_a_l &_n_o_r_m_a_l ( unsigned int f ) const │ │ │ │ │ -210 { │ │ │ │ │ -211 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ -212 return faceStructure_[ f ].normal_; │ │ │ │ │ -213 } │ │ │ │ │ -214 │ │ │ │ │ -215 template< GeometryType::Id geometryId > │ │ │ │ │ -_2_1_6 void _b_u_i_l_d ( std::size_t _o_r_d_e_r ) │ │ │ │ │ -217 { │ │ │ │ │ -218 constexpr GeometryType geometry = geometryId; │ │ │ │ │ -219 order_ = _o_r_d_e_r; │ │ │ │ │ -220 geometry_ = geometry; │ │ │ │ │ -221 │ │ │ │ │ -222 /* │ │ │ │ │ -223 * The Nedelec parameter begins at 1. │ │ │ │ │ -224 * This is the numbering used by J.C. Nedelec himself. │ │ │ │ │ -225 * See "Mixed Finite Elements in \R^3" published in 1980. │ │ │ │ │ -226 * │ │ │ │ │ -227 * This construction is based on the construction of Raviart-Thomas │ │ │ │ │ -elements. │ │ │ │ │ -228 * There the numbering starts at 0. │ │ │ │ │ -229 * Because of this we reduce the order internally by 1. │ │ │ │ │ -230 */ │ │ │ │ │ -231 _o_r_d_e_r--; │ │ │ │ │ -232 │ │ │ │ │ -233 // if dimension == 2: order-1 on element │ │ │ │ │ -234 // if dimension == 3: order-2 on element │ │ │ │ │ -235 int requiredOrder = static_cast(_d_i_m_e_n_s_i_o_n==3); │ │ │ │ │ -236 testBasis_ = (_o_r_d_e_r > requiredOrder ? TestBasisFactory::template create< │ │ │ │ │ -geometry >( _o_r_d_e_r-1-requiredOrder ) : nullptr); │ │ │ │ │ -237 │ │ │ │ │ -238 const auto &refElement = ReferenceElements< Field, dimension >::general │ │ │ │ │ -( _t_y_p_e() ); │ │ │ │ │ -239 │ │ │ │ │ -240 numberOfFaces_ = refElement.size( 1 ); │ │ │ │ │ -241 faceStructure_.reserve( numberOfFaces_ ); │ │ │ │ │ -242 │ │ │ │ │ -243 // compute the basis, tangents and normals of each face │ │ │ │ │ -244 for (std::size_t i=0; i zero(0); │ │ │ │ │ -247 _F_a_c_e_T_a_n_g_e_n_t_s _f_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ -248 _f_a_c_e_T_a_n_g_e_n_t_s.fill(zero); │ │ │ │ │ -249 │ │ │ │ │ -250 // use the first dim-1 vertices of a face to compute the tangents │ │ │ │ │ -251 auto vertices = refElement.subEntities(i,1,dim).begin(); │ │ │ │ │ -252 auto vertex1 = *vertices; │ │ │ │ │ -253 for(int j=1; jvertex2) │ │ │ │ │ -262 _f_a_c_e_T_a_n_g_e_n_t_s[j-1] *=-1; │ │ │ │ │ -263 │ │ │ │ │ -264 vertex1 = vertex2; │ │ │ │ │ -265 } │ │ │ │ │ -266 │ │ │ │ │ -267 /* For simplices or cubes of arbitrary dimension you could just use │ │ │ │ │ -268 * │ │ │ │ │ -269 * ``` │ │ │ │ │ -270 * GeometryType faceGeometry = Impl::getBase(geometry_); │ │ │ │ │ -271 * TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? │ │ │ │ │ -TestFaceBasisFactory::template create< faceGeometry >( order-1 ) : nullptr); │ │ │ │ │ -272 * ``` │ │ │ │ │ -273 * │ │ │ │ │ -274 * For i.e. Prisms and Pyramids in 3d this does not work because they │ │ │ │ │ -contain squares and triangles as faces. │ │ │ │ │ -275 * And depending on the dynamic face index a different face geometry is │ │ │ │ │ -needed. │ │ │ │ │ -276 * │ │ │ │ │ -277 */ │ │ │ │ │ -278 _T_e_s_t_F_a_c_e_B_a_s_i_s *faceBasis = ( dim == 3 && _o_r_d_e_r > 0 ? Impl::IfGeometryType< │ │ │ │ │ -CreateFaceBasis, dimension-1 >::apply( refElement.type( i, 1 ), _o_r_d_e_r-1 ) : │ │ │ │ │ -nullptr); │ │ │ │ │ -279 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal │ │ │ │ │ -(i), _f_a_c_e_T_a_n_g_e_n_t_s ); │ │ │ │ │ -280 } │ │ │ │ │ -281 assert( faceStructure_.size() == numberOfFaces_ ); │ │ │ │ │ -282 │ │ │ │ │ -283 numberOfEdges_ = refElement.size( dim-1 ); │ │ │ │ │ -284 edgeStructure_.reserve( numberOfEdges_ ); │ │ │ │ │ -285 │ │ │ │ │ -286 // compute the basis and tangent of each edge │ │ │ │ │ -287 for (std::size_t i=0; iv1) │ │ │ │ │ -296 std::swap(v0,v1); │ │ │ │ │ -297 auto tangent = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ -298 │ │ │ │ │ -299 _T_e_s_t_E_d_g_e_B_a_s_i_s *edgeBasis = Impl::IfGeometryType< CreateEdgeBasis, 1 >:: │ │ │ │ │ -apply( refElement.type( i, dim-1 ), _o_r_d_e_r ); │ │ │ │ │ -300 edgeStructure_.emplace_back( edgeBasis, tangent ); │ │ │ │ │ -301 } │ │ │ │ │ -302 assert( edgeStructure_.size() == numberOfEdges_ ); │ │ │ │ │ -303 } │ │ │ │ │ -304 │ │ │ │ │ -305 private: │ │ │ │ │ -306 │ │ │ │ │ -307 // helper struct for edges │ │ │ │ │ -308 struct EdgeStructure │ │ │ │ │ -309 { │ │ │ │ │ -310 EdgeStructure( _T_e_s_t_E_d_g_e_B_a_s_i_s *teb, const _T_a_n_g_e_n_t &t ) │ │ │ │ │ -311 : basis_( teb ), tangent_( t ) │ │ │ │ │ -312 {} │ │ │ │ │ -313 │ │ │ │ │ -314 _T_e_s_t_E_d_g_e_B_a_s_i_s *basis_; │ │ │ │ │ -315 const Dune::FieldVector< Field, dimension > tangent_; │ │ │ │ │ -316 }; │ │ │ │ │ -317 │ │ │ │ │ -318 template< GeometryType::Id edgeGeometryId > │ │ │ │ │ -319 struct CreateEdgeBasis │ │ │ │ │ -320 { │ │ │ │ │ -321 static _T_e_s_t_E_d_g_e_B_a_s_i_s *apply ( std::size_t _o_r_d_e_r ) { return │ │ │ │ │ -TestEdgeBasisFactory::template create< edgeGeometryId >( _o_r_d_e_r ); } │ │ │ │ │ -322 }; │ │ │ │ │ -323 │ │ │ │ │ -324 // helper struct for faces │ │ │ │ │ -325 struct FaceStructure │ │ │ │ │ -326 { │ │ │ │ │ -327 FaceStructure( _T_e_s_t_F_a_c_e_B_a_s_i_s *tfb, const _N_o_r_m_a_l& _n_o_r_m_a_l, const │ │ │ │ │ -_F_a_c_e_T_a_n_g_e_n_t_s& _f_a_c_e_T_a_n_g_e_n_t_s ) │ │ │ │ │ -328 : basis_( tfb ), normal_(_n_o_r_m_a_l), faceTangents_( _f_a_c_e_T_a_n_g_e_n_t_s ) │ │ │ │ │ -329 {} │ │ │ │ │ -330 │ │ │ │ │ -331 _T_e_s_t_F_a_c_e_B_a_s_i_s *basis_; │ │ │ │ │ -332 const Dune::FieldVector< Field, dimension > normal_; │ │ │ │ │ -333 const _F_a_c_e_T_a_n_g_e_n_t_s faceTangents_; │ │ │ │ │ -334 }; │ │ │ │ │ -335 │ │ │ │ │ -336 template< GeometryType::Id faceGeometryId > │ │ │ │ │ -337 struct CreateFaceBasis │ │ │ │ │ -338 { │ │ │ │ │ -339 static _T_e_s_t_F_a_c_e_B_a_s_i_s *apply ( std::size_t _o_r_d_e_r ) { return │ │ │ │ │ -TestFaceBasisFactory::template create< faceGeometryId >( _o_r_d_e_r ); } │ │ │ │ │ -340 }; │ │ │ │ │ -341 │ │ │ │ │ -342 _T_e_s_t_B_a_s_i_s *testBasis_ = nullptr; │ │ │ │ │ -343 std::vector< FaceStructure > faceStructure_; │ │ │ │ │ -344 unsigned int numberOfFaces_; │ │ │ │ │ -345 std::vector< EdgeStructure > edgeStructure_; │ │ │ │ │ -346 unsigned int numberOfEdges_; │ │ │ │ │ -347 GeometryType geometry_; │ │ │ │ │ -348 std::size_t order_; │ │ │ │ │ -349 }; │ │ │ │ │ -350 │ │ │ │ │ -351 │ │ │ │ │ -352 │ │ │ │ │ -353 // NedelecL2Interpolation │ │ │ │ │ -354 // ---------------------------- │ │ │ │ │ -355 │ │ │ │ │ -361 template< unsigned int dimension, class F> │ │ │ │ │ -_3_6_2 class _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -363 : public _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r< F ,dimension > │ │ │ │ │ -364 { │ │ │ │ │ -365 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -366 typedef _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_F_,_d_i_m_e_n_s_i_o_n_> _B_a_s_e; │ │ │ │ │ -367 │ │ │ │ │ -368 public: │ │ │ │ │ -_3_6_9 typedef F _F_i_e_l_d; │ │ │ │ │ -_3_7_0 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ -_3_7_1 typedef typename _B_u_i_l_d_e_r_:_:_F_a_c_e_T_a_n_g_e_n_t_s _F_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ -372 │ │ │ │ │ -_3_7_3 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ -374 : _o_r_d_e_r__(0), │ │ │ │ │ -375 _s_i_z_e__(0) │ │ │ │ │ -376 {} │ │ │ │ │ -377 │ │ │ │ │ -378 template< class Function, class Vector, │ │ │ │ │ -379 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ -380 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ -_3_8_1 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, Vector &coefficients ) const │ │ │ │ │ -382 { │ │ │ │ │ -383 coefficients.resize(_s_i_z_e()); │ │ │ │ │ -384 typename Base::template _H_e_l_p_e_r_<_F_u_n_c_t_i_o_n_,_V_e_c_t_o_r_,_t_r_u_e_> func │ │ │ │ │ -( function,coefficients ); │ │ │ │ │ -385 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ -386 } │ │ │ │ │ -387 │ │ │ │ │ -388 template< class Basis, class Matrix, │ │ │ │ │ -389 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ -390 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ -391 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ -_3_9_2 void _i_n_t_e_r_p_o_l_a_t_e ( const Basis &basis, Matrix &matrix ) const │ │ │ │ │ -393 { │ │ │ │ │ -394 matrix.resize( _s_i_z_e(), basis.size() ); │ │ │ │ │ -395 typename Base::template _H_e_l_p_e_r_<_B_a_s_i_s_,_M_a_t_r_i_x_,_f_a_l_s_e_> func( basis,matrix ); │ │ │ │ │ -396 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ -397 } │ │ │ │ │ -398 │ │ │ │ │ -_3_9_9 std::size_t _o_r_d_e_r() const │ │ │ │ │ -400 { │ │ │ │ │ -401 return _o_r_d_e_r__; │ │ │ │ │ -402 } │ │ │ │ │ -_4_0_3 std::size_t _s_i_z_e() const │ │ │ │ │ -404 { │ │ │ │ │ -405 return _s_i_z_e__; │ │ │ │ │ -406 } │ │ │ │ │ -407 │ │ │ │ │ -408 template │ │ │ │ │ -_4_0_9 void _b_u_i_l_d( std::size_t _o_r_d_e_r ) │ │ │ │ │ -410 { │ │ │ │ │ -411 _s_i_z_e__ = 0; │ │ │ │ │ -412 _o_r_d_e_r__ = _o_r_d_e_r; │ │ │ │ │ -413 _b_u_i_l_d_e_r__.template build(_o_r_d_e_r__); │ │ │ │ │ -414 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -415 _s_i_z_e__ += dimension*_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e(); │ │ │ │ │ -416 │ │ │ │ │ -417 for ( unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f ) │ │ │ │ │ -418 if (_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)) │ │ │ │ │ -419 _s_i_z_e__ += (dimension-1)*_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e(); │ │ │ │ │ -420 │ │ │ │ │ -421 for ( unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e ) │ │ │ │ │ -422 if (_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)) │ │ │ │ │ -423 _s_i_z_e__ += _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); │ │ │ │ │ -424 } │ │ │ │ │ -425 │ │ │ │ │ -_4_2_6 void _s_e_t_L_o_c_a_l_K_e_y_s(std::vector< LocalKey > &keys) const │ │ │ │ │ -427 { │ │ │ │ │ -428 keys.resize(_s_i_z_e()); │ │ │ │ │ -429 unsigned int row = 0; │ │ │ │ │ -430 for (unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e) │ │ │ │ │ -431 { │ │ │ │ │ -432 if (_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e()) │ │ │ │ │ -433 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); ++i,++row) │ │ │ │ │ -434 keys[row] = _L_o_c_a_l_K_e_y(e,dimension-1,i); │ │ │ │ │ -435 } │ │ │ │ │ -436 for (unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f) │ │ │ │ │ -437 { │ │ │ │ │ -438 if (_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e()) │ │ │ │ │ -439 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()*(dimension-1); │ │ │ │ │ -++i,++row) │ │ │ │ │ -440 keys[row] = _L_o_c_a_l_K_e_y(f,1,i); │ │ │ │ │ -441 } │ │ │ │ │ -442 │ │ │ │ │ -443 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -444 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; ++i,++row) │ │ │ │ │ -445 keys[row] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ -446 assert( row == _s_i_z_e() ); │ │ │ │ │ -447 } │ │ │ │ │ -448 │ │ │ │ │ -449 protected: │ │ │ │ │ -450 template< class Func, class Container, bool type > │ │ │ │ │ -_4_5_1 void _i_n_t_e_r_p_o_l_a_t_e ( typename Base::template _H_e_l_p_e_r_<_F_u_n_c_,_C_o_n_t_a_i_n_e_r_,_t_y_p_e_> │ │ │ │ │ -&func ) const │ │ │ │ │ -452 { │ │ │ │ │ -453 const Dune::GeometryType geoType( _b_u_i_l_d_e_r__._t_o_p_o_l_o_g_y_I_d(), dimension ); │ │ │ │ │ -454 │ │ │ │ │ -455 std::vector testBasisVal; │ │ │ │ │ -456 │ │ │ │ │ -457 for (unsigned int i=0; i<_s_i_z_e(); ++i) │ │ │ │ │ -458 for (unsigned int j=0; j EdgeQuadrature; │ │ │ │ │ -465 typedef Dune::QuadratureRules EdgeQuadratureRules; │ │ │ │ │ -466 │ │ │ │ │ -467 const auto &refElement = Dune::ReferenceElements< Field, dimension >:: │ │ │ │ │ -general( geoType ); │ │ │ │ │ -468 │ │ │ │ │ -469 for (unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e) │ │ │ │ │ -470 { │ │ │ │ │ -471 if (!_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)) │ │ │ │ │ -472 continue; │ │ │ │ │ -473 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e()); │ │ │ │ │ -474 │ │ │ │ │ -475 const auto &geometry = refElement.template geometry< dimension-1 >( e ); │ │ │ │ │ -476 const Dune::GeometryType subGeoType( geometry.type().id(), 1 ); │ │ │ │ │ -477 const EdgeQuadrature &edgeQuad = EdgeQuadratureRules::rule( subGeoType, │ │ │ │ │ -2*_o_r_d_e_r__+2 ); │ │ │ │ │ -478 │ │ │ │ │ -479 const unsigned int quadratureSize = edgeQuad.size(); │ │ │ │ │ -480 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ -481 { │ │ │ │ │ -482 if (dimension>1) │ │ │ │ │ -483 _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->template evaluate<0>(edgeQuad[qi].position │ │ │ │ │ -(),testBasisVal); │ │ │ │ │ -484 else │ │ │ │ │ -485 testBasisVal[0] = 1.; │ │ │ │ │ -486 computeEdgeDofs(row, │ │ │ │ │ -487 testBasisVal, │ │ │ │ │ -488 func.evaluate( geometry.global( edgeQuad[qi].position() ) ), │ │ │ │ │ -489 _b_u_i_l_d_e_r__._e_d_g_e_T_a_n_g_e_n_t(e), │ │ │ │ │ -490 edgeQuad[qi].weight(), │ │ │ │ │ -491 func); │ │ │ │ │ -492 } │ │ │ │ │ -493 │ │ │ │ │ -494 row += _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); │ │ │ │ │ -495 } │ │ │ │ │ -496 │ │ │ │ │ -497 // face dofs: │ │ │ │ │ -498 typedef Dune::QuadratureRule<_F_i_e_l_d, dimension-1> FaceQuadrature; │ │ │ │ │ -499 typedef Dune::QuadratureRules<_F_i_e_l_d, dimension-1> FaceQuadratureRules; │ │ │ │ │ -500 │ │ │ │ │ -501 for (unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f) │ │ │ │ │ -502 { │ │ │ │ │ -503 if (_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)) │ │ │ │ │ -504 { │ │ │ │ │ -505 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()); │ │ │ │ │ -506 │ │ │ │ │ -507 const auto &geometry = refElement.template geometry< 1 >( f ); │ │ │ │ │ -508 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 ); │ │ │ │ │ -509 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, │ │ │ │ │ -2*_o_r_d_e_r__+2 ); │ │ │ │ │ -510 │ │ │ │ │ -511 const unsigned int quadratureSize = faceQuad.size(); │ │ │ │ │ -512 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ -513 { │ │ │ │ │ -514 if (dimension>1) │ │ │ │ │ -515 _b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->template evaluate<0>(faceQuad[qi].position │ │ │ │ │ -(),testBasisVal); │ │ │ │ │ -516 else │ │ │ │ │ -517 testBasisVal[0] = 1.; │ │ │ │ │ -518 │ │ │ │ │ -519 computeFaceDofs( row, │ │ │ │ │ -520 testBasisVal, │ │ │ │ │ -521 func.evaluate( geometry.global( faceQuad[qi].position() ) ), │ │ │ │ │ -522 _b_u_i_l_d_e_r__._f_a_c_e_T_a_n_g_e_n_t_s(f), │ │ │ │ │ -523 _b_u_i_l_d_e_r__._n_o_r_m_a_l(f), │ │ │ │ │ -524 faceQuad[qi].weight(), │ │ │ │ │ -525 func); │ │ │ │ │ -526 } │ │ │ │ │ -527 │ │ │ │ │ -528 row += _b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()*(dimension-1); │ │ │ │ │ -529 } │ │ │ │ │ -530 } │ │ │ │ │ -531 │ │ │ │ │ -532 // element dofs │ │ │ │ │ -533 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ -534 { │ │ │ │ │ -535 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()); │ │ │ │ │ -536 │ │ │ │ │ -537 typedef Dune::QuadratureRule Quadrature; │ │ │ │ │ -538 typedef Dune::QuadratureRules QuadratureRules; │ │ │ │ │ -539 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*_o_r_d_e_r__+1 ); │ │ │ │ │ -540 │ │ │ │ │ -541 const unsigned int quadratureSize = elemQuad.size(); │ │ │ │ │ -542 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ -543 { │ │ │ │ │ -544 _b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->template evaluate<0>(elemQuad[qi].position │ │ │ │ │ -(),testBasisVal); │ │ │ │ │ -545 computeInteriorDofs(row, │ │ │ │ │ -546 testBasisVal, │ │ │ │ │ -547 func.evaluate(elemQuad[qi].position()), │ │ │ │ │ -548 elemQuad[qi].weight(), │ │ │ │ │ -549 func ); │ │ │ │ │ -550 } │ │ │ │ │ -551 │ │ │ │ │ -552 row += _b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; │ │ │ │ │ -553 } │ │ │ │ │ -554 assert(row==_s_i_z_e()); │ │ │ │ │ -555 } │ │ │ │ │ -556 │ │ │ │ │ -557 private: │ │ │ │ │ -567 template │ │ │ │ │ -568 void computeEdgeDofs (unsigned int startRow, │ │ │ │ │ -569 const MVal &mVal, │ │ │ │ │ -570 const NedVal &nedVal, │ │ │ │ │ -571 const FieldVector &tangent, │ │ │ │ │ -572 const _F_i_e_l_d &weight, │ │ │ │ │ -573 Matrix &matrix) const │ │ │ │ │ -574 { │ │ │ │ │ -575 const unsigned int endRow = startRow+mVal.size(); │ │ │ │ │ -576 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ -577 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ -578 { │ │ │ │ │ -579 _F_i_e_l_d cFactor = (*nedIter)*tangent; │ │ │ │ │ -580 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ -581 for (unsigned int row = startRow; row!=endRow; ++mIter, ++row ) │ │ │ │ │ -582 matrix.add(row,col, (weight*cFactor)*(*mIter) ); │ │ │ │ │ -583 │ │ │ │ │ -584 assert( mIter == mVal.end() ); │ │ │ │ │ -585 } │ │ │ │ │ -586 } │ │ │ │ │ -587 │ │ │ │ │ -598 template │ │ │ │ │ -599 void computeFaceDofs (unsigned int startRow, │ │ │ │ │ -600 const MVal &mVal, │ │ │ │ │ -601 const NedVal &nedVal, │ │ │ │ │ -602 const _F_a_c_e_T_a_n_g_e_n_t_s& faceTangents, │ │ │ │ │ -603 const FieldVector &normal, │ │ │ │ │ -604 const _F_i_e_l_d &weight, │ │ │ │ │ -605 Matrix &matrix) const │ │ │ │ │ -606 { │ │ │ │ │ -607 const unsigned int endRow = startRow+mVal.size()*(dimension-1); │ │ │ │ │ -608 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ -609 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ -610 { │ │ │ │ │ -611 auto const& u=*nedIter; │ │ │ │ │ -612 auto const& n=normal; │ │ │ │ │ -613 FieldVector nedTimesNormal = { u[1]*n[2]-u[2]*n[1], │ │ │ │ │ -614 u[2]*n[0]-u[0]*n[2], │ │ │ │ │ -615 u[0]*n[1]-u[1]*n[0]}; │ │ │ │ │ -616 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ -617 for (unsigned int row = startRow; row!=endRow; ++mIter) │ │ │ │ │ -618 { │ │ │ │ │ -619 for(int i=0; i │ │ │ │ │ -640 void computeInteriorDofs (unsigned int startRow, │ │ │ │ │ -641 const MVal &mVal, │ │ │ │ │ -642 const NedVal &nedVal, │ │ │ │ │ -643 _F_i_e_l_d weight, │ │ │ │ │ -644 Matrix &matrix) const │ │ │ │ │ -645 { │ │ │ │ │ -646 const unsigned int endRow = startRow+mVal.size()*dimension; │ │ │ │ │ -647 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ -648 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ -649 { │ │ │ │ │ -650 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ -651 for (unsigned int row = startRow; row!=endRow; ++mIter,row+=dimension ) │ │ │ │ │ -652 for (unsigned int i=0; i │ │ │ │ │ -_6_6_6 struct _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -667 { │ │ │ │ │ -_6_6_8 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ -_6_6_9 typedef const _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_F_i_e_l_d_> _O_b_j_e_c_t; │ │ │ │ │ -_6_7_0 typedef std::size_t _K_e_y; │ │ │ │ │ -_6_7_1 typedef typename std::remove_const::type _N_o_n_C_o_n_s_t_O_b_j_e_c_t; │ │ │ │ │ -672 │ │ │ │ │ -673 template │ │ │ │ │ -_6_7_4 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ -675 { │ │ │ │ │ -676 if ( !supports(key) ) │ │ │ │ │ -677 return 0; │ │ │ │ │ -678 _N_o_n_C_o_n_s_t_O_b_j_e_c_t *interpol = new _N_o_n_C_o_n_s_t_O_b_j_e_c_t(); │ │ │ │ │ -679 interpol->template build(key); │ │ │ │ │ -680 return interpol; │ │ │ │ │ -681 } │ │ │ │ │ -682 │ │ │ │ │ -683 template │ │ │ │ │ -_6_8_4 static bool _s_u_p_p_o_r_t_s( const _K_e_y &key ) │ │ │ │ │ -685 { │ │ │ │ │ -686 GeometryType gt = geometryId; │ │ │ │ │ -687 return gt.isTriangle() || gt.isTetrahedron() ; │ │ │ │ │ -688 } │ │ │ │ │ -_6_8_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -690 }; │ │ │ │ │ -691 │ │ │ │ │ -692} // namespace Dune │ │ │ │ │ -693 │ │ │ │ │ -694#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h │ │ │ │ │ -_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +71 { │ │ │ │ │ +72 return GeometryTypes::simplex(dim); │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +75 private: │ │ │ │ │ +76 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ +77 │ │ │ │ │ +78 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients; │ │ │ │ │ +79 │ │ │ │ │ +80 │ │ │ │ │ +_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> │ │ │ │ │ +> interpolation; │ │ │ │ │ +81 }; │ │ │ │ │ +82 │ │ │ │ │ +83} │ │ │ │ │ +84 │ │ │ │ │ +85#endif │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Hierarchical p2 shape functions for the simplex. │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:667 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:674 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const NedelecL2Interpolation< dim, Field > Object │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:669 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_u_i_l_d_e_r │ │ │ │ │ -NedelecL2InterpolationBuilder< dim, Field > Builder │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:668 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:670 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:684 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_N_o_n_C_o_n_s_t_O_b_j_e_c_t │ │ │ │ │ -std::remove_const< Object >::type NonConstObject │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:671 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:689 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ -LocalCoefficientsContainer(const Setter &setter) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const LocalCoefficientsContainer Object │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:114 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_E_d_g_e_B_a_s_i_s │ │ │ │ │ -TestEdgeBasis * testEdgeBasis(unsigned int e) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:191 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_~_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -~NedelecL2InterpolationBuilder() │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:141 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:155 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s │ │ │ │ │ -TestBasisFactory::Object TestBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_a_n_g_e_n_t │ │ │ │ │ -FieldVector< Field, dimension > Tangent │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:130 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ -TestFaceBasisFactory::Object TestFaceBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:123 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ -TestFaceBasis * testFaceBasis(unsigned int f) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:184 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_E_d_g_e_B_a_s_i_s │ │ │ │ │ -TestEdgeBasisFactory::Object TestEdgeBasis │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_o_r_m_a_l │ │ │ │ │ -FieldVector< Field, dimension > Normal │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_b_u_i_l_d │ │ │ │ │ -void build(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:216 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -OrthonormalBasisFactory< dimension, Field > TestBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:118 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:122 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ -const FaceTangents & faceTangents(unsigned int f) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:203 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_S_i_z_e │ │ │ │ │ -unsigned int faceSize() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:166 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_B_a_s_i_s │ │ │ │ │ -TestBasis * testBasis() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:178 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_F_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ -std::array< FieldVector< Field, dimension >, dim-1 > FaceTangents │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:134 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -OrthonormalBasisFactory< 1, Field > TestEdgeBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:126 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_e_d_g_e_T_a_n_g_e_n_t │ │ │ │ │ -const Tangent & edgeTangent(unsigned int e) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:197 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -NedelecL2InterpolationBuilder(NedelecL2InterpolationBuilder &&)=delete │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:160 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_e_d_g_e_S_i_z_e │ │ │ │ │ -unsigned int edgeSize() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:172 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_o_p_o_l_o_g_y_I_d │ │ │ │ │ -unsigned int topologyId() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:150 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -NedelecL2InterpolationBuilder(const NedelecL2InterpolationBuilder &)=delete │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ -NedelecL2InterpolationBuilder()=default │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_n_o_r_m_a_l │ │ │ │ │ -const Normal & normal(unsigned int f) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:209 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -An L2-based interpolation for Nedelec. │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:364 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ -Builder::FaceTangents FaceTangents │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:371 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:369 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:403 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(typename Base::template Helper< Func, Container, type > &func) │ │ │ │ │ -const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:451 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r__ │ │ │ │ │ -std::size_t order_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:661 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_u_i_l_d_e_r │ │ │ │ │ -NedelecL2InterpolationBuilder< dimension, Field > Builder │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:370 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e__ │ │ │ │ │ -std::size_t size_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:662 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -NedelecL2Interpolation() │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:373 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const Function &function, Vector &coefficients) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:381 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d │ │ │ │ │ -void build(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:409 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:399 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_L_o_c_a_l_K_e_y_s │ │ │ │ │ -void setLocalKeys(std::vector< LocalKey > &keys) const │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:426 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d_e_r__ │ │ │ │ │ -Builder builder_ │ │ │ │ │ -DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:660 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:21 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +HierarchicalP2LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< HierarchicalSimplexP2LocalBasis< D, R, dim >, │ │ │ │ │ +typename LagrangeSimplexLocalFiniteElement< D, R, dim, 2 >::Traits:: │ │ │ │ │ +LocalCoefficientsType, HierarchicalSimplexP2LocalInterpolation< │ │ │ │ │ +HierarchicalSimplexP2LocalBasis< D, R, dim > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalp2.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:17 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindsimplex.hh File Reference │ │ │ │ +dune-localfunctions: dualmortarbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
nedelec1stkindsimplex.hh File Reference
│ │ │ │ +
dualmortarbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::Nedelec1stKindSimplexLocalFiniteElement< D, R, dim, k >
 Nédélec elements of the first kind for simplex elements. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -utf-8 │ │ │ │ │ +us-ascii │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,12 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -nedelec1stkindsimplex.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +dualmortarbasis.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_p_1_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_q_1_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ -  Nédélec elements of the first kind for simplex elements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00332_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindsimplex.hh Source File │ │ │ │ +dune-localfunctions: dualmortarbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,423 +70,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec1stkindsimplex.hh
│ │ │ │ +
dualmortarbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ -
15
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
19
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ -
22namespace Impl
│ │ │ │ -
23{
│ │ │ │ -
36 template<class D, class R, int dim, int k>
│ │ │ │ -
37 class Nedelec1stKindSimplexLocalBasis
│ │ │ │ -
38 {
│ │ │ │ -
39 // Number of edges of the reference simplex
│ │ │ │ -
40 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2;
│ │ │ │ -
41
│ │ │ │ -
42 public:
│ │ │ │ -
43 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,
│ │ │ │ -
44 R,dim,FieldVector<R,dim>,
│ │ │ │ -
45 FieldMatrix<R,dim,dim> >;
│ │ │ │ -
46
│ │ │ │ -
53 Nedelec1stKindSimplexLocalBasis()
│ │ │ │ -
54 {
│ │ │ │ -
55 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0);
│ │ │ │ -
56 }
│ │ │ │ -
57
│ │ │ │ -
60 Nedelec1stKindSimplexLocalBasis(std::bitset<numberOfEdges> edgeOrientation)
│ │ │ │ -
61 : Nedelec1stKindSimplexLocalBasis()
│ │ │ │ -
62 {
│ │ │ │ -
63 for (std::size_t i=0; i<edgeOrientation_.size(); i++)
│ │ │ │ -
64 edgeOrientation_[i] *= edgeOrientation[i] ? -1.0 : 1.0;
│ │ │ │ -
65 }
│ │ │ │ -
66
│ │ │ │ -
68 static constexpr unsigned int size()
│ │ │ │ -
69 {
│ │ │ │ -
70 static_assert(dim==2 || dim==3, "Nedelec shape functions are implemented only for 2d and 3d simplices.");
│ │ │ │ -
71 if (dim==2)
│ │ │ │ -
72 return k * (k+2);
│ │ │ │ -
73 if (dim==3)
│ │ │ │ -
74 return k * (k+2) * (k+3) / 2;
│ │ │ │ -
75 }
│ │ │ │ -
76
│ │ │ │ -
82 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
83 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
84 {
│ │ │ │ -
85 static_assert(k==1, "Evaluating Nédélec shape functions is implemented only for first order.");
│ │ │ │ -
86 out.resize(size());
│ │ │ │ -
87
│ │ │ │ -
88 if (dim==2)
│ │ │ │ -
89 {
│ │ │ │ -
90 // First-order Nédélec shape functions on a triangle are of the form
│ │ │ │ -
91 //
│ │ │ │ -
92 // (a1, a2) + b(-x2, x1)^T, a_1, a_2, b \in R
│ │ │ │ -
93 out[0] = {D(1) - in[1], in[0]};
│ │ │ │ -
94 out[1] = {in[1], -in[0]+D(1)};
│ │ │ │ -
95 out[2] = {-in[1], in[0]};
│ │ │ │ -
96 }
│ │ │ │ -
97
│ │ │ │ -
98 if constexpr (dim==3)
│ │ │ │ -
99 {
│ │ │ │ -
100 // First-order Nédélec shape functions on a tetrahedron are of the form
│ │ │ │ -
101 //
│ │ │ │ -
102 // a + b \times x, a, b \in R^3
│ │ │ │ -
103 //
│ │ │ │ -
104 // The following coefficients create the six basis vectors
│ │ │ │ -
105 // that are dual to the edge degrees of freedom:
│ │ │ │ -
106 //
│ │ │ │ -
107 // a[0] = { 1, 0, 0} b[0] = { 0, -1, 1}
│ │ │ │ -
108 // a[1] = { 0, 1, 0} b[1] = { 1, 0, -1}
│ │ │ │ -
109 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 1}
│ │ │ │ -
110 // a[3] = { 0, 0, 1} b[3] = {-1, 1, 0}
│ │ │ │ -
111 // a[4] = { 0, 0, 0} b[4] = { 0, -1, 0}
│ │ │ │ -
112 // a[5] = { 0, 0, 0} b[5] = { 1, 0, 0}
│ │ │ │ -
113 //
│ │ │ │ -
114 // The following implementation uses these values, and simply
│ │ │ │ -
115 // skips all the zeros.
│ │ │ │ -
116
│ │ │ │ -
117 out[0] = { 1 - in[1] - in[2], in[0] , in[0] };
│ │ │ │ -
118 out[1] = { in[1] , 1 - in[0] - in[2], in[1]};
│ │ │ │ -
119 out[2] = { - in[1] , in[0] , 0 };
│ │ │ │ -
120 out[3] = { in[2], in[2], 1 - in[0] - in[1]};
│ │ │ │ -
121 out[4] = { -in[2], 0 , in[0] };
│ │ │ │ -
122 out[5] = { 0 , -in[2], in[1]};
│ │ │ │ -
123 }
│ │ │ │ -
124
│ │ │ │ -
125 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
126 out[i] *= edgeOrientation_[i];
│ │ │ │ -
127 }
│ │ │ │ -
128
│ │ │ │ -
134 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
135 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
136 {
│ │ │ │ -
137 out.resize(size());
│ │ │ │ -
138 if (dim==2)
│ │ │ │ -
139 {
│ │ │ │ -
140 out[0][0] = { 0, -1};
│ │ │ │ -
141 out[0][1] = { 1, 0};
│ │ │ │ -
142
│ │ │ │ -
143 out[1][0] = { 0, 1};
│ │ │ │ -
144 out[1][1] = {-1, 0};
│ │ │ │ -
145
│ │ │ │ -
146 out[2][0] = { 0, -1};
│ │ │ │ -
147 out[2][1] = { 1, 0};
│ │ │ │ -
148 }
│ │ │ │ -
149 if (dim==3)
│ │ │ │ -
150 {
│ │ │ │ -
151 out[0][0] = { 0,-1,-1};
│ │ │ │ -
152 out[0][1] = { 1, 0, 0};
│ │ │ │ -
153 out[0][2] = { 1, 0, 0};
│ │ │ │ -
154
│ │ │ │ -
155 out[1][0] = { 0, 1, 0};
│ │ │ │ -
156 out[1][1] = {-1, 0, -1};
│ │ │ │ -
157 out[1][2] = { 0, 1, 0};
│ │ │ │ -
158
│ │ │ │ -
159 out[2][0] = { 0, -1, 0};
│ │ │ │ -
160 out[2][1] = { 1, 0, 0};
│ │ │ │ -
161 out[2][2] = { 0, 0, 0};
│ │ │ │ -
162
│ │ │ │ -
163 out[3][0] = { 0, 0, 1};
│ │ │ │ -
164 out[3][1] = { 0, 0, 1};
│ │ │ │ -
165 out[3][2] = {-1, -1, 0};
│ │ │ │ -
166
│ │ │ │ -
167 out[4][0] = { 0, 0, -1};
│ │ │ │ -
168 out[4][1] = { 0, 0, 0};
│ │ │ │ -
169 out[4][2] = { 1, 0, 0};
│ │ │ │ -
170
│ │ │ │ -
171 out[5][0] = { 0, 0, 0};
│ │ │ │ -
172 out[5][1] = { 0, 0, -1};
│ │ │ │ -
173 out[5][2] = { 0, 1, 0};
│ │ │ │ -
174 }
│ │ │ │ -
175
│ │ │ │ -
176 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
177 out[i] *= edgeOrientation_[i];
│ │ │ │ -
178
│ │ │ │ -
179 }
│ │ │ │ -
180
│ │ │ │ -
187 void partial(const std::array<unsigned int, dim>& order,
│ │ │ │ -
188 const typename Traits::DomainType& in,
│ │ │ │ -
189 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
190 {
│ │ │ │ -
191 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
192 if (totalOrder == 0) {
│ │ │ │ -
193 evaluateFunction(in, out);
│ │ │ │ -
194 } else if (totalOrder == 1) {
│ │ │ │ -
195 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
196 out.resize(size());
│ │ │ │ -
197
│ │ │ │ -
198 if (dim==2)
│ │ │ │ -
199 {
│ │ │ │ -
200 if (direction==0)
│ │ │ │ -
201 {
│ │ │ │ -
202 out[0] = {0, 1};
│ │ │ │ -
203 out[1] = {0, -1};
│ │ │ │ -
204 out[2] = {0, 1};
│ │ │ │ -
205 }
│ │ │ │ -
206 else
│ │ │ │ -
207 {
│ │ │ │ -
208 out[0] = {-1, 0};
│ │ │ │ -
209 out[1] = { 1, 0};
│ │ │ │ -
210 out[2] = {-1, 0};
│ │ │ │ -
211 }
│ │ │ │ -
212 }
│ │ │ │ -
213
│ │ │ │ -
214 if (dim==3)
│ │ │ │ -
215 {
│ │ │ │ -
216 switch (direction)
│ │ │ │ -
217 {
│ │ │ │ -
218 case 0:
│ │ │ │ -
219 out[0] = { 0, 1, 1};
│ │ │ │ -
220 out[1] = { 0,-1, 0};
│ │ │ │ -
221 out[2] = { 0, 1, 0};
│ │ │ │ -
222 out[3] = { 0, 0,-1};
│ │ │ │ -
223 out[4] = { 0, 0, 1};
│ │ │ │ -
224 out[5] = { 0, 0, 0};
│ │ │ │ -
225 break;
│ │ │ │ -
226
│ │ │ │ -
227 case 1:
│ │ │ │ -
228 out[0] = {-1, 0, 0};
│ │ │ │ -
229 out[1] = { 1, 0, 1};
│ │ │ │ -
230 out[2] = {-1, 0, 0};
│ │ │ │ -
231 out[3] = { 0, 0,-1};
│ │ │ │ -
232 out[4] = { 0, 0, 0};
│ │ │ │ -
233 out[5] = { 0, 0, 1};
│ │ │ │ -
234 break;
│ │ │ │ -
235
│ │ │ │ -
236 case 2:
│ │ │ │ -
237 out[0] = {-1, 0, 0};
│ │ │ │ -
238 out[1] = { 0,-1, 0};
│ │ │ │ -
239 out[2] = { 0, 0, 0};
│ │ │ │ -
240 out[3] = { 1, 1, 0};
│ │ │ │ -
241 out[4] = {-1, 0, 0};
│ │ │ │ -
242 out[5] = { 0,-1, 0};
│ │ │ │ -
243 break;
│ │ │ │ -
244 }
│ │ │ │ -
245 }
│ │ │ │ -
246
│ │ │ │ -
247 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
248 out[i] *= edgeOrientation_[i];
│ │ │ │ -
249
│ │ │ │ -
250 } else {
│ │ │ │ -
251 out.resize(size());
│ │ │ │ -
252 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
253 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ -
254 out[i][j] = 0;
│ │ │ │ -
255 }
│ │ │ │ -
256
│ │ │ │ -
257 }
│ │ │ │ -
258
│ │ │ │ -
260 unsigned int order() const
│ │ │ │ -
261 {
│ │ │ │ -
262 return k;
│ │ │ │ -
263 }
│ │ │ │ -
264
│ │ │ │ -
265 private:
│ │ │ │ -
266
│ │ │ │ -
267 // Orientations of the simplex edges
│ │ │ │ -
268 std::array<R,numberOfEdges> edgeOrientation_;
│ │ │ │ -
269 };
│ │ │ │ -
270
│ │ │ │ -
271
│ │ │ │ -
276 template <int dim, int k>
│ │ │ │ -
277 class Nedelec1stKindSimplexLocalCoefficients
│ │ │ │ -
278 {
│ │ │ │ -
279 public:
│ │ │ │ -
281 Nedelec1stKindSimplexLocalCoefficients ()
│ │ │ │ -
282 : localKey_(size())
│ │ │ │ -
283 {
│ │ │ │ -
284 static_assert(k==1, "Only first-order Nédélec local coefficients are implemented.");
│ │ │ │ -
285 // Assign all degrees of freedom to edges
│ │ │ │ -
286 // TODO: This is correct only for first-order Nédélec elements
│ │ │ │ -
287 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
288 localKey_[i] = LocalKey(i,dim-1,0);
│ │ │ │ -
289 }
│ │ │ │ -
290
│ │ │ │ -
292 std::size_t size() const
│ │ │ │ -
293 {
│ │ │ │ -
294 static_assert(dim==2 || dim==3, "Nédélec shape functions are implemented only for 2d and 3d simplices.");
│ │ │ │ -
295 return (dim==2) ? k * (k+2)
│ │ │ │ -
296 : k * (k+2) * (k+3) / 2;
│ │ │ │ -
297 }
│ │ │ │ -
298
│ │ │ │ -
301 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
302 {
│ │ │ │ -
303 return localKey_[i];
│ │ │ │ -
304 }
│ │ │ │ -
305
│ │ │ │ -
306 private:
│ │ │ │ -
307 std::vector<LocalKey> localKey_;
│ │ │ │ -
308 };
│ │ │ │ -
309
│ │ │ │ -
314 template<class LB>
│ │ │ │ -
315 class Nedelec1stKindSimplexLocalInterpolation
│ │ │ │ -
316 {
│ │ │ │ -
317 static constexpr auto dim = LB::Traits::dimDomain;
│ │ │ │ -
318 static constexpr auto size = LB::size();
│ │ │ │ -
319
│ │ │ │ -
320 // Number of edges of the reference simplex
│ │ │ │ -
321 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2;
│ │ │ │ -
322
│ │ │ │ -
323 public:
│ │ │ │ -
324
│ │ │ │ -
326 Nedelec1stKindSimplexLocalInterpolation (std::bitset<numberOfEdges> s = 0)
│ │ │ │ -
327 {
│ │ │ │ -
328 auto refElement = Dune::referenceElement<double,dim>(GeometryTypes::simplex(dim));
│ │ │ │ -
329
│ │ │ │ -
330 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ -
331 m_[i] = refElement.position(i,dim-1);
│ │ │ │ -
332
│ │ │ │ -
333 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ -
334 {
│ │ │ │ -
335 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ -
336 auto v0 = *vertexIterator;
│ │ │ │ -
337 auto v1 = *(++vertexIterator);
│ │ │ │ -
338 // By default, edges point from the vertex with the smaller index
│ │ │ │ -
339 // to the vertex with the larger index.
│ │ │ │ -
340 if (v0>v1)
│ │ │ │ -
341 std::swap(v0,v1);
│ │ │ │ -
342 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ -
343 edge_[i] *= (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
344 }
│ │ │ │ -
345 }
│ │ │ │ -
346
│ │ │ │ -
352 template<typename F, typename C>
│ │ │ │ -
353 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
354 {
│ │ │ │ -
355 out.resize(size);
│ │ │ │ -
356
│ │ │ │ -
357 for (std::size_t i=0; i<size; i++)
│ │ │ │ -
358 {
│ │ │ │ -
359 auto y = f(m_[i]);
│ │ │ │ -
360 out[i] = 0.0;
│ │ │ │ -
361 for (int j=0; j<dim; j++)
│ │ │ │ -
362 out[i] += y[j]*edge_[i][j];
│ │ │ │ -
363 }
│ │ │ │ -
364 }
│ │ │ │ -
365
│ │ │ │ -
366 private:
│ │ │ │ -
367 // Edge midpoints of the reference simplex
│ │ │ │ -
368 std::array<typename LB::Traits::DomainType, numberOfEdges> m_;
│ │ │ │ -
369 // Edges of the reference simplex
│ │ │ │ -
370 std::array<typename LB::Traits::DomainType, numberOfEdges> edge_;
│ │ │ │ -
371 };
│ │ │ │ -
372
│ │ │ │ -
373}
│ │ │ │ -
374
│ │ │ │ -
375
│ │ │ │ -
401 template<class D, class R, int dim, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
403 {
│ │ │ │ -
404 public:
│ │ │ │ - │ │ │ │ -
406 Impl::Nedelec1stKindSimplexLocalCoefficients<dim,k>,
│ │ │ │ -
407 Impl::Nedelec1stKindSimplexLocalInterpolation<Impl::Nedelec1stKindSimplexLocalBasis<D,R,dim,k> > >;
│ │ │ │ -
408
│ │ │ │ -
409 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for 2d and 3d elements.");
│ │ │ │ -
410 static_assert(k==1, "Nedelec elements of the first kind are currently only implemented for order k==1.");
│ │ │ │ -
411
│ │ │ │ - │ │ │ │ -
415
│ │ │ │ -
│ │ │ │ -
421 Nedelec1stKindSimplexLocalFiniteElement (std::bitset<dim*(dim+1)/2> s) :
│ │ │ │ -
422 basis_(s),
│ │ │ │ -
423 interpolation_(s)
│ │ │ │ -
424 {}
│ │ │ │ -
│ │ │ │ -
425
│ │ │ │ -
│ │ │ │ -
426 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
427 {
│ │ │ │ -
428 return basis_;
│ │ │ │ -
429 }
│ │ │ │ -
│ │ │ │ -
430
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
432 {
│ │ │ │ -
433 return coefficients_;
│ │ │ │ -
434 }
│ │ │ │ -
│ │ │ │ -
435
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
437 {
│ │ │ │ -
438 return interpolation_;
│ │ │ │ -
439 }
│ │ │ │ -
│ │ │ │ -
440
│ │ │ │ -
│ │ │ │ -
441 static constexpr unsigned int size ()
│ │ │ │ -
442 {
│ │ │ │ -
443 return Traits::LocalBasisType::size();
│ │ │ │ -
444 }
│ │ │ │ -
│ │ │ │ -
445
│ │ │ │ -
│ │ │ │ -
446 static constexpr GeometryType type ()
│ │ │ │ -
447 {
│ │ │ │ -
448 return GeometryTypes::simplex(dim);
│ │ │ │ -
449 }
│ │ │ │ -
│ │ │ │ -
450
│ │ │ │ -
451 private:
│ │ │ │ -
452 typename Traits::LocalBasisType basis_;
│ │ │ │ -
453 typename Traits::LocalCoefficientsType coefficients_;
│ │ │ │ -
454 typename Traits::LocalInterpolationType interpolation_;
│ │ │ │ -
455 };
│ │ │ │ -
│ │ │ │ -
456
│ │ │ │ -
457}
│ │ │ │ -
458
│ │ │ │ -
459#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Nédélec elements of the first kind for simplex elements.
Definition nedelec1stkindsimplex.hh:403
│ │ │ │ -
static constexpr unsigned int size()
Definition nedelec1stkindsimplex.hh:441
│ │ │ │ -
Nedelec1stKindSimplexLocalFiniteElement()=default
Default constructor.
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition nedelec1stkindsimplex.hh:436
│ │ │ │ -
Nedelec1stKindSimplexLocalFiniteElement(std::bitset< dim *(dim+1)/2 > s)
Constructor with explicitly given edge orientations.
Definition nedelec1stkindsimplex.hh:421
│ │ │ │ -
static constexpr GeometryType type()
Definition nedelec1stkindsimplex.hh:446
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition nedelec1stkindsimplex.hh:426
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition nedelec1stkindsimplex.hh:431
│ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
10
│ │ │ │ +
11#endif // #ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,441 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -nedelec1stkindsimplex.hh │ │ │ │ │ +dualmortarbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -19 │ │ │ │ │ -20namespace _D_u_n_e │ │ │ │ │ -21{ │ │ │ │ │ -22namespace Impl │ │ │ │ │ -23{ │ │ │ │ │ -36 template │ │ │ │ │ -37 class Nedelec1stKindSimplexLocalBasis │ │ │ │ │ -38 { │ │ │ │ │ -39 // Number of edges of the reference simplex │ │ │ │ │ -40 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2; │ │ │ │ │ -41 │ │ │ │ │ -42 public: │ │ │ │ │ -43 using Traits = LocalBasisTraits, │ │ │ │ │ -44 R,dim,FieldVector, │ │ │ │ │ -45 FieldMatrix >; │ │ │ │ │ -46 │ │ │ │ │ -53 Nedelec1stKindSimplexLocalBasis() │ │ │ │ │ -54 { │ │ │ │ │ -55 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0); │ │ │ │ │ -56 } │ │ │ │ │ -57 │ │ │ │ │ -60 Nedelec1stKindSimplexLocalBasis(std::bitset edgeOrientation) │ │ │ │ │ -61 : Nedelec1stKindSimplexLocalBasis() │ │ │ │ │ -62 { │ │ │ │ │ -63 for (std::size_t i=0; i& out) const │ │ │ │ │ -84 { │ │ │ │ │ -85 static_assert(k==1, "Evaluating Nédélec shape functions is implemented │ │ │ │ │ -only for first order."); │ │ │ │ │ -86 out.resize(size()); │ │ │ │ │ -87 │ │ │ │ │ -88 if (dim==2) │ │ │ │ │ -89 { │ │ │ │ │ -90 // First-order Nédélec shape functions on a triangle are of the form │ │ │ │ │ -91 // │ │ │ │ │ -92 // (a1, a2) + b(-x2, x1)^T, a_1, a_2, b \in R │ │ │ │ │ -93 out[0] = {D(1) - in[1], in[0]}; │ │ │ │ │ -94 out[1] = {in[1], -in[0]+D(1)}; │ │ │ │ │ -95 out[2] = {-in[1], in[0]}; │ │ │ │ │ -96 } │ │ │ │ │ -97 │ │ │ │ │ -98 if constexpr (dim==3) │ │ │ │ │ -99 { │ │ │ │ │ -100 // First-order Nédélec shape functions on a tetrahedron are of the form │ │ │ │ │ -101 // │ │ │ │ │ -102 // a + b \times x, a, b \in R^3 │ │ │ │ │ -103 // │ │ │ │ │ -104 // The following coefficients create the six basis vectors │ │ │ │ │ -105 // that are dual to the edge degrees of freedom: │ │ │ │ │ -106 // │ │ │ │ │ -107 // a[0] = { 1, 0, 0} b[0] = { 0, -1, 1} │ │ │ │ │ -108 // a[1] = { 0, 1, 0} b[1] = { 1, 0, -1} │ │ │ │ │ -109 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 1} │ │ │ │ │ -110 // a[3] = { 0, 0, 1} b[3] = {-1, 1, 0} │ │ │ │ │ -111 // a[4] = { 0, 0, 0} b[4] = { 0, -1, 0} │ │ │ │ │ -112 // a[5] = { 0, 0, 0} b[5] = { 1, 0, 0} │ │ │ │ │ -113 // │ │ │ │ │ -114 // The following implementation uses these values, and simply │ │ │ │ │ -115 // skips all the zeros. │ │ │ │ │ -116 │ │ │ │ │ -117 out[0] = { 1 - in[1] - in[2], in[0] , in[0] }; │ │ │ │ │ -118 out[1] = { in[1] , 1 - in[0] - in[2], in[1]}; │ │ │ │ │ -119 out[2] = { - in[1] , in[0] , 0 }; │ │ │ │ │ -120 out[3] = { in[2], in[2], 1 - in[0] - in[1]}; │ │ │ │ │ -121 out[4] = { -in[2], 0 , in[0] }; │ │ │ │ │ -122 out[5] = { 0 , -in[2], in[1]}; │ │ │ │ │ -123 } │ │ │ │ │ -124 │ │ │ │ │ -125 for (std::size_t i=0; i& out) const │ │ │ │ │ -136 { │ │ │ │ │ -137 out.resize(size()); │ │ │ │ │ -138 if (dim==2) │ │ │ │ │ -139 { │ │ │ │ │ -140 out[0][0] = { 0, -1}; │ │ │ │ │ -141 out[0][1] = { 1, 0}; │ │ │ │ │ -142 │ │ │ │ │ -143 out[1][0] = { 0, 1}; │ │ │ │ │ -144 out[1][1] = {-1, 0}; │ │ │ │ │ -145 │ │ │ │ │ -146 out[2][0] = { 0, -1}; │ │ │ │ │ -147 out[2][1] = { 1, 0}; │ │ │ │ │ -148 } │ │ │ │ │ -149 if (dim==3) │ │ │ │ │ -150 { │ │ │ │ │ -151 out[0][0] = { 0,-1,-1}; │ │ │ │ │ -152 out[0][1] = { 1, 0, 0}; │ │ │ │ │ -153 out[0][2] = { 1, 0, 0}; │ │ │ │ │ -154 │ │ │ │ │ -155 out[1][0] = { 0, 1, 0}; │ │ │ │ │ -156 out[1][1] = {-1, 0, -1}; │ │ │ │ │ -157 out[1][2] = { 0, 1, 0}; │ │ │ │ │ -158 │ │ │ │ │ -159 out[2][0] = { 0, -1, 0}; │ │ │ │ │ -160 out[2][1] = { 1, 0, 0}; │ │ │ │ │ -161 out[2][2] = { 0, 0, 0}; │ │ │ │ │ -162 │ │ │ │ │ -163 out[3][0] = { 0, 0, 1}; │ │ │ │ │ -164 out[3][1] = { 0, 0, 1}; │ │ │ │ │ -165 out[3][2] = {-1, -1, 0}; │ │ │ │ │ -166 │ │ │ │ │ -167 out[4][0] = { 0, 0, -1}; │ │ │ │ │ -168 out[4][1] = { 0, 0, 0}; │ │ │ │ │ -169 out[4][2] = { 1, 0, 0}; │ │ │ │ │ -170 │ │ │ │ │ -171 out[5][0] = { 0, 0, 0}; │ │ │ │ │ -172 out[5][1] = { 0, 0, -1}; │ │ │ │ │ -173 out[5][2] = { 0, 1, 0}; │ │ │ │ │ -174 } │ │ │ │ │ -175 │ │ │ │ │ -176 for (std::size_t i=0; i& order, │ │ │ │ │ -188 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -189 std::vector& out) const │ │ │ │ │ -190 { │ │ │ │ │ -191 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -192 if (totalOrder == 0) { │ │ │ │ │ -193 evaluateFunction(in, out); │ │ │ │ │ -194 } else if (totalOrder == 1) { │ │ │ │ │ -195 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -196 out.resize(size()); │ │ │ │ │ -197 │ │ │ │ │ -198 if (dim==2) │ │ │ │ │ -199 { │ │ │ │ │ -200 if (direction==0) │ │ │ │ │ -201 { │ │ │ │ │ -202 out[0] = {0, 1}; │ │ │ │ │ -203 out[1] = {0, -1}; │ │ │ │ │ -204 out[2] = {0, 1}; │ │ │ │ │ -205 } │ │ │ │ │ -206 else │ │ │ │ │ -207 { │ │ │ │ │ -208 out[0] = {-1, 0}; │ │ │ │ │ -209 out[1] = { 1, 0}; │ │ │ │ │ -210 out[2] = {-1, 0}; │ │ │ │ │ -211 } │ │ │ │ │ -212 } │ │ │ │ │ -213 │ │ │ │ │ -214 if (dim==3) │ │ │ │ │ -215 { │ │ │ │ │ -216 switch (direction) │ │ │ │ │ -217 { │ │ │ │ │ -218 case 0: │ │ │ │ │ -219 out[0] = { 0, 1, 1}; │ │ │ │ │ -220 out[1] = { 0,-1, 0}; │ │ │ │ │ -221 out[2] = { 0, 1, 0}; │ │ │ │ │ -222 out[3] = { 0, 0,-1}; │ │ │ │ │ -223 out[4] = { 0, 0, 1}; │ │ │ │ │ -224 out[5] = { 0, 0, 0}; │ │ │ │ │ -225 break; │ │ │ │ │ -226 │ │ │ │ │ -227 case 1: │ │ │ │ │ -228 out[0] = {-1, 0, 0}; │ │ │ │ │ -229 out[1] = { 1, 0, 1}; │ │ │ │ │ -230 out[2] = {-1, 0, 0}; │ │ │ │ │ -231 out[3] = { 0, 0,-1}; │ │ │ │ │ -232 out[4] = { 0, 0, 0}; │ │ │ │ │ -233 out[5] = { 0, 0, 1}; │ │ │ │ │ -234 break; │ │ │ │ │ -235 │ │ │ │ │ -236 case 2: │ │ │ │ │ -237 out[0] = {-1, 0, 0}; │ │ │ │ │ -238 out[1] = { 0,-1, 0}; │ │ │ │ │ -239 out[2] = { 0, 0, 0}; │ │ │ │ │ -240 out[3] = { 1, 1, 0}; │ │ │ │ │ -241 out[4] = {-1, 0, 0}; │ │ │ │ │ -242 out[5] = { 0,-1, 0}; │ │ │ │ │ -243 break; │ │ │ │ │ -244 } │ │ │ │ │ -245 } │ │ │ │ │ -246 │ │ │ │ │ -247 for (std::size_t i=0; i edgeOrientation_; │ │ │ │ │ -269 }; │ │ │ │ │ -270 │ │ │ │ │ -271 │ │ │ │ │ -276 template │ │ │ │ │ -277 class Nedelec1stKindSimplexLocalCoefficients │ │ │ │ │ -278 { │ │ │ │ │ -279 public: │ │ │ │ │ -281 Nedelec1stKindSimplexLocalCoefficients () │ │ │ │ │ -282 : localKey_(size()) │ │ │ │ │ -283 { │ │ │ │ │ -284 static_assert(k==1, "Only first-order Nédélec local coefficients are │ │ │ │ │ -implemented."); │ │ │ │ │ -285 // Assign all degrees of freedom to edges │ │ │ │ │ -286 // TODO: This is correct only for first-order Nédélec elements │ │ │ │ │ -287 for (std::size_t i=0; i localKey_; │ │ │ │ │ -308 }; │ │ │ │ │ -309 │ │ │ │ │ -314 template │ │ │ │ │ -315 class Nedelec1stKindSimplexLocalInterpolation │ │ │ │ │ -316 { │ │ │ │ │ -317 static constexpr auto dim = LB::Traits::dimDomain; │ │ │ │ │ -318 static constexpr auto size = LB::size(); │ │ │ │ │ -319 │ │ │ │ │ -320 // Number of edges of the reference simplex │ │ │ │ │ -321 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2; │ │ │ │ │ -322 │ │ │ │ │ -323 public: │ │ │ │ │ -324 │ │ │ │ │ -326 Nedelec1stKindSimplexLocalInterpolation (std::bitset s = 0) │ │ │ │ │ -327 { │ │ │ │ │ -328 auto refElement = Dune::referenceElement(GeometryTypes::simplex │ │ │ │ │ -(dim)); │ │ │ │ │ -329 │ │ │ │ │ -330 for (std::size_t i=0; iv1) │ │ │ │ │ -341 std::swap(v0,v1); │ │ │ │ │ -342 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ -343 edge_[i] *= (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -344 } │ │ │ │ │ -345 } │ │ │ │ │ -346 │ │ │ │ │ -352 template │ │ │ │ │ -353 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -354 { │ │ │ │ │ -355 out.resize(size); │ │ │ │ │ -356 │ │ │ │ │ -357 for (std::size_t i=0; i m_; │ │ │ │ │ -369 // Edges of the reference simplex │ │ │ │ │ -370 std::array edge_; │ │ │ │ │ -371 }; │ │ │ │ │ -372 │ │ │ │ │ -373} │ │ │ │ │ -374 │ │ │ │ │ -375 │ │ │ │ │ -401 template │ │ │ │ │ -_4_0_2 class _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -403 { │ │ │ │ │ -404 public: │ │ │ │ │ -_4_0_5 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ -406 Impl::Nedelec1stKindSimplexLocalCoefficients, │ │ │ │ │ -407 Impl::Nedelec1stKindSimplexLocalInterpolation > >; │ │ │ │ │ -408 │ │ │ │ │ -409 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for │ │ │ │ │ -2d and 3d elements."); │ │ │ │ │ -410 static_assert(k==1, "Nedelec elements of the first kind are currently only │ │ │ │ │ -implemented for order k==1."); │ │ │ │ │ -411 │ │ │ │ │ -_4_1_4 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() = default; │ │ │ │ │ -415 │ │ │ │ │ -_4_2_1 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset s) : │ │ │ │ │ -422 basis_(s), │ │ │ │ │ -423 interpolation_(s) │ │ │ │ │ -424 {} │ │ │ │ │ -425 │ │ │ │ │ -_4_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -427 { │ │ │ │ │ -428 return basis_; │ │ │ │ │ -429 } │ │ │ │ │ -430 │ │ │ │ │ -_4_3_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -432 { │ │ │ │ │ -433 return coefficients_; │ │ │ │ │ -434 } │ │ │ │ │ -435 │ │ │ │ │ -_4_3_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -437 { │ │ │ │ │ -438 return interpolation_; │ │ │ │ │ -439 } │ │ │ │ │ -440 │ │ │ │ │ -_4_4_1 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -442 { │ │ │ │ │ -443 return Traits::LocalBasisType::size(); │ │ │ │ │ -444 } │ │ │ │ │ -445 │ │ │ │ │ -_4_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -447 { │ │ │ │ │ -448 return GeometryTypes::simplex(dim); │ │ │ │ │ -449 } │ │ │ │ │ -450 │ │ │ │ │ -451 private: │ │ │ │ │ -452 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_; │ │ │ │ │ -453 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_; │ │ │ │ │ -454 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_; │ │ │ │ │ -455 }; │ │ │ │ │ -456 │ │ │ │ │ -457} │ │ │ │ │ -458 │ │ │ │ │ -459#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nédélec elements of the first kind for simplex elements. │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:403 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:441 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nedelec1stKindSimplexLocalFiniteElement()=default │ │ │ │ │ -Default constructor. │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:436 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nedelec1stKindSimplexLocalFiniteElement(std::bitset< dim *(dim+1)/2 > s) │ │ │ │ │ -Constructor with explicitly given edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:421 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:446 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:426 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindsimplex.hh:431 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_p_1_._h_h> │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_/_d_u_a_l_q_1_._h_h> │ │ │ │ │ +10 │ │ │ │ │ +11#endif // #ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_HH │ │ │ │ │ +_d_u_a_l_q_1_._h_h │ │ │ │ │ +_d_u_a_l_p_1_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindcube.hh File Reference │ │ │ │ +dune-localfunctions: field.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,128 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
nedelec1stkindcube.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
field.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ +
#include <dune/common/gmpfield.hh>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::Nedelec1stKindCubeLocalFiniteElement< D, R, dim, k >
 Nédélec elements of the first kind for cube elements. More...
struct  Dune::Unity< Field >
 A class representing the unit of a given Field. More...
 
struct  Dune::Zero< Field >
 A class representing the zero of a given Field. More...
 
struct  Dune::FieldCast< F2, V >
 
struct  Dune::FieldCast< F2, Dune::FieldVector< F1, dim > >
 
struct  Dune::FieldCast< F2, Dune::FieldMatrix< F1, dim1, dim2 > >
 
struct  Dune::Precision< double >
 
struct  Dune::Precision< long double >
 
struct  Dune::Precision< float >
 
struct  Dune::ComputeField< Field, sum >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<class Field >
Field Dune::operator+ (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator- (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator* (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator/ (const Unity< Field > &u, const Field &f)
 
template<class Field >
bool Dune::operator== (const Zero< Field > &, const Field &f)
 
template<class Field >
bool Dune::operator== (const Field &f, const Zero< Field > &z)
 
template<class Field >
bool Dune::operator< (const Zero< Field > &, const Field &f)
 
template<class Field >
bool Dune::operator< (const Field &f, const Zero< Field > &)
 
template<class Field >
bool Dune::operator> (const Zero< Field > &z, const Field &f)
 
template<class Field >
bool Dune::operator> (const Field &f, const Zero< Field > &z)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, F2 &f2)
 a helper class to cast from one field to another
 
template<class F2 , class F1 , int dim>
void Dune::field_cast (const Dune::FieldVector< F1, dim > &f1, Dune::FieldVector< F2, dim > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, F2 &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class F1 , int rdim, int cdim>
void Dune::field_cast (const Dune::FieldMatrix< F1, rdim, cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, F2 &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class V >
FieldCast< F2, V >::type Dune::field_cast (const V &f1)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -utf-8 │ │ │ │ │ +us-ascii │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,127 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -nedelec1stkindcube.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +field.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ -  Nédélec elements of the first kind for cube elements. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_U_n_i_t_y_<_ _F_i_e_l_d_ _> │ │ │ │ │ +  A class representing the unit of a given Field. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_Z_e_r_o_<_ _F_i_e_l_d_ _> │ │ │ │ │ +  A class representing the zero of a given Field. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _V_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_ _F_1_,_ _d_i_m_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_M_a_t_r_i_x_<_ _F_1_,_ _d_i_m_1_,_ _d_i_m_2_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _d_o_u_b_l_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _l_o_n_g_ _d_o_u_b_l_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _f_l_o_a_t_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d_<_ _F_i_e_l_d_,_ _s_u_m_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ + Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_- (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= (const _Z_e_r_o< Field > &, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ + &z) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _Z_e_r_o< Field > &, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ + &) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_> (const _Z_e_r_o< Field > &z, const Field │ │ │ │ │ + &f) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_> (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ + &z) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, F2 &f2) │ │ │ │ │ +  a helper class to cast from one field to another │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, dim > │ │ │ │ │ + &f1, Dune::FieldVector< F2, dim > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ + &f1, F2 &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, Dune::FieldVector< │ │ │ │ │ + F2, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, rdim, │ │ │ │ │ + cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ + &f1, Dune::FieldMatrix< F2, 1, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ + &f1, F2 &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, Dune::FieldMatrix< │ │ │ │ │ + F2, 1, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ + &f1, Dune::FieldMatrix< F2, 1, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ + &f1, Dune::FieldVector< F2, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ + &f1, Dune::FieldVector< F2, 1 > &f2) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +_F_i_e_l_d_C_a_s_t< F2, V >::type  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const V &f1) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00335_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: nedelec1stkindcube.hh Source File │ │ │ │ +dune-localfunctions: field.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,518 +70,385 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
nedelec1stkindcube.hh
│ │ │ │ +
field.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ +
8#include <dune/common/gmpfield.hh>
│ │ │ │ +
9#include <dune/common/fvector.hh>
│ │ │ │
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/math.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
15#include <dune/geometry/type.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune
│ │ │ │ -
22{
│ │ │ │ -
23namespace Impl
│ │ │ │ -
24{
│ │ │ │ -
37 template<class D, class R, int dim, int k>
│ │ │ │ -
38 class Nedelec1stKindCubeLocalBasis
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
15 // Unity
│ │ │ │ +
16 // -----
│ │ │ │ +
17
│ │ │ │ +
28 template< class Field >
│ │ │ │ +
│ │ │ │ +
29 struct Unity
│ │ │ │ +
30 {
│ │ │ │ +
│ │ │ │ +
31 operator Field () const
│ │ │ │ +
32 {
│ │ │ │ +
33 return Field( 1 );
│ │ │ │ +
34 }
│ │ │ │ +
│ │ │ │ +
35 };
│ │ │ │ +
│ │ │ │ +
36
│ │ │ │ +
37 template< class Field >
│ │ │ │ +
│ │ │ │ +
38 Field operator+ ( const Unity< Field > &u, const Field &f )
│ │ │ │
39 {
│ │ │ │ -
40 // Number of edges of the reference cube
│ │ │ │ -
41 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim;
│ │ │ │ +
40 return (Field)u + f;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │
42
│ │ │ │ -
43 public:
│ │ │ │ -
44 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,
│ │ │ │ -
45 R,dim,FieldVector<R,dim>,
│ │ │ │ -
46 FieldMatrix<R,dim,dim> >;
│ │ │ │ -
47
│ │ │ │ -
54 Nedelec1stKindCubeLocalBasis()
│ │ │ │ -
55 {
│ │ │ │ -
56 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0);
│ │ │ │ -
57 }
│ │ │ │ -
58
│ │ │ │ -
61 Nedelec1stKindCubeLocalBasis(std::bitset<numberOfEdges> edgeOrientation)
│ │ │ │ -
62 : Nedelec1stKindCubeLocalBasis()
│ │ │ │ -
63 {
│ │ │ │ -
64 for (std::size_t i=0; i<edgeOrientation_.size(); i++)
│ │ │ │ -
65 edgeOrientation_[i] *= edgeOrientation[i] ? -1.0 : 1.0;
│ │ │ │ -
66 }
│ │ │ │ -
67
│ │ │ │ -
69 static constexpr unsigned int size()
│ │ │ │ -
70 {
│ │ │ │ -
71 static_assert(dim==2 || dim==3, "Nedelec shape functions are implemented only for 2d and 3d cubes.");
│ │ │ │ -
72 if (dim==2)
│ │ │ │ -
73 return 2*k * (k+1);
│ │ │ │ -
74 if (dim==3)
│ │ │ │ -
75 return 3*k * (k+1) * (k+1);
│ │ │ │ -
76 }
│ │ │ │ -
77
│ │ │ │ -
83 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
84 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
85 {
│ │ │ │ -
86 static_assert(k==1, "Evaluating Nédélec shape functions is implemented only for first order.");
│ │ │ │ -
87 out.resize(size());
│ │ │ │ -
88
│ │ │ │ -
89 if (dim==2)
│ │ │ │ -
90 {
│ │ │ │ -
91 // First-order Nédélec shape functions on a square are of the form
│ │ │ │ -
92 //
│ │ │ │ -
93 // (a, b)^T + (c y, d x)^T, a, b, c, d \in R
│ │ │ │ -
94 //
│ │ │ │ -
95 // The following coefficients create the four basis vectors
│ │ │ │ -
96 // that are dual to the edge degrees of freedom:
│ │ │ │ -
97 //
│ │ │ │ -
98 // a[0] = 0 b[0] = 1 c[0] = 0 d[0] = -1
│ │ │ │ -
99 // a[1] = 0 b[1] = 0 c[1] = 0 d[1] = 1
│ │ │ │ -
100 // a[2] = 1 b[2] = 0 c[2] = 0 d[2] = -1
│ │ │ │ -
101 // a[3] = 0 b[3] = 0 c[3] = 0 d[3] = 1
│ │ │ │ -
102
│ │ │ │ -
103 out[0] = { 0, D(1) - in[0]};
│ │ │ │ -
104 out[1] = { 0, in[0]};
│ │ │ │ -
105 out[2] = { D(1) - in[1], 0};
│ │ │ │ -
106 out[3] = { in[1], 0};
│ │ │ │ -
107 }
│ │ │ │ -
108
│ │ │ │ -
109 if constexpr (dim==3)
│ │ │ │ -
110 {
│ │ │ │ -
111 // First-order Nédélec shape functions on a cube are of the form
│ │ │ │ -
112 //
│ │ │ │ -
113 // (e1 yz)
│ │ │ │ -
114 // a + b x + c y + d z + (e2 xz) , a, b, c, d \in R^3 and b[0]=c[1]=d[2]=0
│ │ │ │ -
115 // (e3 xy)
│ │ │ │ -
116 //
│ │ │ │ -
117 // The following coefficients create the twelve basis vectors
│ │ │ │ -
118 // that are dual to the edge degrees of freedom:
│ │ │ │ -
119 //
│ │ │ │ -
120 // a[0] = { 0, 0, 1} b[0] = { 0, 0, -1} c[0] = { 0, 0, -1} d[0] = { 0, 0, 0} e[0] = { 0, 0, 1}
│ │ │ │ -
121 // a[1] = { 0, 0, 0} b[1] = { 0, 0, 1} c[1] = { 0, 0, 0} d[1] = { 0, 0, 0} e[1] = { 0, 0, -1}
│ │ │ │ -
122 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 0} c[2] = { 0, 0, 1} d[2] = { 0, 0, 0} e[2] = { 0, 0, -1}
│ │ │ │ -
123 // a[3] = { 0, 0, 0} b[3] = { 0, 0, 0} c[3] = { 0, 0, 0} d[3] = { 0, 0, 0} e[3] = { 0, 0, 1}
│ │ │ │ -
124 //
│ │ │ │ -
125 // The following implementation uses these values, and simply
│ │ │ │ -
126 // skips all the zeros.
│ │ │ │ -
127
│ │ │ │ -
128 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
129 out[i] = {0,0,0};
│ │ │ │ -
130
│ │ │ │ -
131 out[0][2] = { 1 - in[0] - in[1] + in[0]*in[1]};
│ │ │ │ -
132 out[1][2] = { in[0] - in[0]*in[1]};
│ │ │ │ -
133 out[2][2] = { in[1] - in[0]*in[1]};
│ │ │ │ -
134 out[3][2] = { in[0]*in[1]};
│ │ │ │ +
43 template< class Field >
│ │ │ │ +
│ │ │ │ +
44 Field operator- ( const Unity< Field > &u, const Field &f )
│ │ │ │ +
45 {
│ │ │ │ +
46 return (Field)u - f;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
49 template< class Field >
│ │ │ │ +
│ │ │ │ +
50 Field operator* ( const Unity< Field > &u, const Field &f )
│ │ │ │ +
51 {
│ │ │ │ +
52 return f;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 template< class Field >
│ │ │ │ +
│ │ │ │ +
56 Field operator/ ( const Unity< Field > &u, const Field &f )
│ │ │ │ +
57 {
│ │ │ │ +
58 return (Field)u / f;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
61
│ │ │ │ +
62
│ │ │ │ +
63 // Zero
│ │ │ │ +
64 // ----
│ │ │ │ +
65
│ │ │ │ +
77 template< class Field >
│ │ │ │ +
│ │ │ │ +
78 struct Zero
│ │ │ │ +
79 {
│ │ │ │ +
│ │ │ │ +
80 operator Field () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return Field( 0 );
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
84 static const Field epsilon()
│ │ │ │ +
85 {
│ │ │ │ +
86 return Field(1e-12);
│ │ │ │ +
87 }
│ │ │ │ +
│ │ │ │ +
88 };
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
90#if HAVE_GMP
│ │ │ │ +
91 template< unsigned int precision >
│ │ │ │ +
92 struct Zero< GMPField< precision > >
│ │ │ │ +
93 {
│ │ │ │ +
94 typedef GMPField< precision > Field;
│ │ │ │ +
95 operator Field () const
│ │ │ │ +
96 {
│ │ │ │ +
97 return Field( 0 );
│ │ │ │ +
98 }
│ │ │ │ +
99 static const Field epsilon()
│ │ │ │ +
100 {
│ │ │ │ +
101 return Field(1e-20);
│ │ │ │ +
102 }
│ │ │ │ +
103 };
│ │ │ │ +
104#endif
│ │ │ │ +
105
│ │ │ │ +
106 template< class Field >
│ │ │ │ +
│ │ │ │ +
107 inline bool operator == ( const Zero< Field > &, const Field &f )
│ │ │ │ +
108 {
│ │ │ │ +
109 return ( f < Zero<Field>::epsilon() && f > -Zero<Field>::epsilon() );
│ │ │ │ +
110 }
│ │ │ │ +
│ │ │ │ +
111
│ │ │ │ +
112 template< class Field >
│ │ │ │ +
│ │ │ │ +
113 inline bool operator == ( const Field &f, const Zero< Field > &z)
│ │ │ │ +
114 {
│ │ │ │ +
115 return ( z == f );
│ │ │ │ +
116 }
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
118 template< class Field >
│ │ │ │ +
│ │ │ │ +
119 inline bool operator< ( const Zero< Field > &, const Field &f )
│ │ │ │ +
120 {
│ │ │ │ +
121 return f > Zero<Field>::epsilon();
│ │ │ │ +
122 }
│ │ │ │ +
│ │ │ │ +
123
│ │ │ │ +
124 template< class Field >
│ │ │ │ +
│ │ │ │ +
125 inline bool operator< ( const Field &f, const Zero< Field > & )
│ │ │ │ +
126 {
│ │ │ │ +
127 return f < -Zero<Field>::epsilon();
│ │ │ │ +
128 }
│ │ │ │ +
│ │ │ │ +
129
│ │ │ │ +
130 template< class Field >
│ │ │ │ +
│ │ │ │ +
131 inline bool operator> ( const Zero< Field > &z, const Field &f )
│ │ │ │ +
132 {
│ │ │ │ +
133 return f < z;
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │
135
│ │ │ │ -
136 out[4][1] = { 1 - in[0] - in[2] + in[0]*in[2]};
│ │ │ │ -
137 out[5][1] = { in[0] - in[0]*in[2]};
│ │ │ │ -
138 out[8][1] = { in[2] - in[0]*in[2]};
│ │ │ │ -
139 out[9][1] = { in[0]*in[2]};
│ │ │ │ -
140
│ │ │ │ -
141 out[6][0] = { 1 - in[1] - in[2] + in[1]*in[2]};
│ │ │ │ -
142 out[7][0] = { in[1] - in[1]*in[2]};
│ │ │ │ -
143 out[10][0] = { in[2] - in[1]*in[2]};
│ │ │ │ -
144 out[11][0] = { in[1]*in[2]};
│ │ │ │ -
145 }
│ │ │ │ -
146
│ │ │ │ -
147 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
148 out[i] *= edgeOrientation_[i];
│ │ │ │ -
149 }
│ │ │ │ -
150
│ │ │ │ -
156 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
157 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
158 {
│ │ │ │ -
159 out.resize(size());
│ │ │ │ -
160 if (dim==2)
│ │ │ │ -
161 {
│ │ │ │ -
162 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
163 for (std::size_t j=0; j<dim; j++)
│ │ │ │ -
164 out[i][j] = { 0, 0};
│ │ │ │ -
165
│ │ │ │ -
166 out[0][1] = { -1, 0};
│ │ │ │ -
167 out[1][1] = { 1, 0};
│ │ │ │ -
168
│ │ │ │ -
169 out[2][0] = { 0, -1};
│ │ │ │ -
170 out[3][0] = { 0, 1};
│ │ │ │ -
171 }
│ │ │ │ -
172 if (dim==3)
│ │ │ │ -
173 {
│ │ │ │ -
174 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
175 for(std::size_t j=0;j<dim; j++)
│ │ │ │ -
176 out[i][j] = {0,0,0};
│ │ │ │ +
136 template< class Field >
│ │ │ │ +
│ │ │ │ +
137 inline bool operator> ( const Field &f, const Zero< Field > &z )
│ │ │ │ +
138 {
│ │ │ │ +
139 return z < f;
│ │ │ │ +
140 }
│ │ │ │ +
│ │ │ │ +
141
│ │ │ │ +
142
│ │ │ │ +
143 // field_cast
│ │ │ │ +
144 // ----------
│ │ │ │ +
145
│ │ │ │ +
158 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
159 inline void field_cast ( const F1 &f1, F2 &f2 )
│ │ │ │ +
160 {
│ │ │ │ +
161 f2 = f1;
│ │ │ │ +
162 }
│ │ │ │ +
│ │ │ │ +
163
│ │ │ │ +
164#if HAVE_GMP
│ │ │ │ +
165 template< unsigned int precision >
│ │ │ │ +
166 inline void field_cast ( const Dune::GMPField< precision > &f1, double &f2 )
│ │ │ │ +
167 {
│ │ │ │ +
168 f2 = f1.get_d();
│ │ │ │ +
169 }
│ │ │ │ +
170
│ │ │ │ +
171 template< unsigned int precision >
│ │ │ │ +
172 inline void field_cast ( const Dune::GMPField< precision > &f1, long double &f2 )
│ │ │ │ +
173 {
│ │ │ │ +
174 f2 = f1.get_d();
│ │ │ │ +
175 }
│ │ │ │ +
176#endif
│ │ │ │
177
│ │ │ │ -
178
│ │ │ │ -
179 out[0][2] = {-1 +in[1], -1 + in[0], 0};
│ │ │ │ -
180 out[1][2] = { 1 -in[1], - in[0], 0};
│ │ │ │ -
181 out[2][2] = { -in[1], 1 - in[0], 0};
│ │ │ │ -
182 out[3][2] = { in[1], in[0], 0};
│ │ │ │ -
183
│ │ │ │ -
184 out[4][1] = {-1 +in[2], 0, -1 + in[0]};
│ │ │ │ -
185 out[5][1] = { 1 -in[2], 0, - in[0]};
│ │ │ │ -
186 out[8][1] = { -in[2], 0, 1 - in[0]};
│ │ │ │ -
187 out[9][1] = { in[2], 0, in[0]};
│ │ │ │ -
188
│ │ │ │ -
189 out[6][0] = { 0, -1 + in[2], -1 + in[1]};
│ │ │ │ -
190 out[7][0] = { 0, 1 - in[2], - in[1]};
│ │ │ │ -
191 out[10][0] = { 0, - in[2], 1 - in[1]};
│ │ │ │ -
192 out[11][0] = { 0, in[2], in[1]};
│ │ │ │ -
193
│ │ │ │ -
194 }
│ │ │ │ -
195
│ │ │ │ -
196 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
197 out[i] *= edgeOrientation_[i];
│ │ │ │ -
198
│ │ │ │ -
199 }
│ │ │ │ -
200
│ │ │ │ -
207 void partial(const std::array<unsigned int, dim>& order,
│ │ │ │ -
208 const typename Traits::DomainType& in,
│ │ │ │ -
209 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
210 {
│ │ │ │ -
211 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
212 if (totalOrder == 0) {
│ │ │ │ -
213 evaluateFunction(in, out);
│ │ │ │ -
214 } else if (totalOrder == 1) {
│ │ │ │ -
215 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
216 out.resize(size());
│ │ │ │ -
217
│ │ │ │ -
218 if (dim==2)
│ │ │ │ -
219 {
│ │ │ │ -
220 if (direction==0)
│ │ │ │ -
221 {
│ │ │ │ -
222 out[0] = { 0, -1};
│ │ │ │ -
223 out[1] = { 0, 1};
│ │ │ │ -
224 out[2] = { 0, 0};
│ │ │ │ -
225 out[3] = { 0, 0};
│ │ │ │ -
226 }
│ │ │ │ -
227 else
│ │ │ │ -
228 {
│ │ │ │ -
229 out[0] = { 0, 0};
│ │ │ │ -
230 out[1] = { 0, 0};
│ │ │ │ -
231 out[2] = { -1, 0};
│ │ │ │ -
232 out[3] = { 1, 0};
│ │ │ │ -
233 }
│ │ │ │ -
234 }
│ │ │ │ -
235
│ │ │ │ -
236 if (dim==3)
│ │ │ │ -
237 {
│ │ │ │ -
238 switch (direction)
│ │ │ │ -
239 {
│ │ │ │ -
240 case 0:
│ │ │ │ -
241 out[0] = { 0, 0, -1 +in[1]};
│ │ │ │ -
242 out[1] = { 0, 0, 1 -in[1]};
│ │ │ │ -
243 out[2] = { 0, 0, -in[1]};
│ │ │ │ -
244 out[3] = { 0, 0, in[1]};
│ │ │ │ -
245
│ │ │ │ -
246 out[4] = { 0, -1 +in[2], 0};
│ │ │ │ -
247 out[5] = { 0, 1 -in[2], 0};
│ │ │ │ -
248 out[8] = { 0, -in[2], 0};
│ │ │ │ -
249 out[9] = { 0, in[2], 0};
│ │ │ │ -
250
│ │ │ │ -
251 out[6] = {0,0,0};
│ │ │ │ -
252 out[7] = {0,0,0};
│ │ │ │ -
253 out[10] = {0,0,0};
│ │ │ │ -
254 out[11] = {0,0,0};
│ │ │ │ -
255 break;
│ │ │ │ +
178 template< class F2, class F1, int dim >
│ │ │ │ +
│ │ │ │ +
179 inline void field_cast ( const Dune::FieldVector< F1, dim > &f1, Dune::FieldVector< F2, dim > &f2 )
│ │ │ │ +
180 {
│ │ │ │ +
181 for( int d = 0; d < dim; ++d )
│ │ │ │ +
182 field_cast( f1[ d ], f2[ d ] );
│ │ │ │ +
183 }
│ │ │ │ +
│ │ │ │ +
184 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
185 inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, F2 &f2 )
│ │ │ │ +
186 {
│ │ │ │ +
187 field_cast( f1[ 0 ], f2 );
│ │ │ │ +
188 }
│ │ │ │ +
│ │ │ │ +
189 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
190 inline void field_cast ( const F1 &f1, Dune::FieldVector< F2, 1 > &f2 )
│ │ │ │ +
191 {
│ │ │ │ +
192 field_cast( f1, f2[ 0 ] );
│ │ │ │ +
193 }
│ │ │ │ +
│ │ │ │ +
194
│ │ │ │ +
195 template< class F2, class F1, int rdim, int cdim >
│ │ │ │ +
│ │ │ │ +
196 inline void field_cast ( const Dune::FieldMatrix< F1, rdim, cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2 )
│ │ │ │ +
197 {
│ │ │ │ +
198 for( int r = 0; r < rdim; ++r )
│ │ │ │ +
199 field_cast( f1[ r ], f2[ r ] );
│ │ │ │ +
200 }
│ │ │ │ +
│ │ │ │ +
201 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
202 inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ +
203 {
│ │ │ │ +
204 field_cast( f1[ 0 ][ 0 ], f2[ 0 ][ 0 ] );
│ │ │ │ +
205 }
│ │ │ │ +
│ │ │ │ +
206 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
207 inline void field_cast ( const Dune::FieldMatrix< F1, 1,1 > &f1, F2 &f2 )
│ │ │ │ +
208 {
│ │ │ │ +
209 field_cast( f1[ 0 ][ 0 ], f2 );
│ │ │ │ +
210 }
│ │ │ │ +
│ │ │ │ +
211 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
212 inline void field_cast ( const F1 &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ +
213 {
│ │ │ │ +
214 field_cast( f1, f2[ 0 ][ 0 ] );
│ │ │ │ +
215 }
│ │ │ │ +
│ │ │ │ +
216 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
217 inline void field_cast ( const Dune::FieldVector<F1,1> &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ +
218 {
│ │ │ │ +
219 field_cast( f1[ 0 ], f2[ 0 ][ 0 ] );
│ │ │ │ +
220 }
│ │ │ │ +
│ │ │ │ +
221 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
222 inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, Dune::FieldVector< F2, 1 > &f2 )
│ │ │ │ +
223 {
│ │ │ │ +
224 field_cast( f1[ 0 ][ 0 ], f2[ 0 ] );
│ │ │ │ +
225 }
│ │ │ │ +
│ │ │ │ +
226
│ │ │ │ +
227 template< class F2, class F1 >
│ │ │ │ +
│ │ │ │ +
228 inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, Dune::FieldVector<F2, 1> &f2 )
│ │ │ │ +
229 {
│ │ │ │ +
230 field_cast( f1[ 0 ], f2[ 0 ] );
│ │ │ │ +
231 }
│ │ │ │ +
│ │ │ │ +
232
│ │ │ │ +
233 template< class F2,class V >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
235 {
│ │ │ │ +
236 typedef F2 type;
│ │ │ │ +
237 };
│ │ │ │ +
│ │ │ │ +
238 template< class F2,class F1,int dim >
│ │ │ │ +
│ │ │ │ +
239 struct FieldCast< F2, Dune::FieldVector<F1,dim> >
│ │ │ │ +
240 {
│ │ │ │ +
241 typedef Dune::FieldVector<F2,dim> type;
│ │ │ │ +
242 };
│ │ │ │ +
│ │ │ │ +
243 template< class F2,class F1,int dim1, int dim2>
│ │ │ │ +
│ │ │ │ +
244 struct FieldCast< F2, Dune::FieldMatrix<F1,dim1,dim2> >
│ │ │ │ +
245 {
│ │ │ │ +
246 typedef Dune::FieldMatrix<F2,dim1,dim2> type;
│ │ │ │ +
247 };
│ │ │ │ +
│ │ │ │ +
248 template< class F2,class V >
│ │ │ │ +
│ │ │ │ +
249 inline typename FieldCast<F2,V>::type field_cast ( const V &f1 )
│ │ │ │ +
250 {
│ │ │ │ +
251 typename FieldCast<F2,V>::type f2;
│ │ │ │ +
252 field_cast( f1, f2 );
│ │ │ │ +
253 return f2;
│ │ │ │ +
254 }
│ │ │ │ +
│ │ │ │ +
255
│ │ │ │
256
│ │ │ │ -
257 case 1:
│ │ │ │ -
258 out[0] = { 0, 0, -1 + in[0]};
│ │ │ │ -
259 out[1] = { 0, 0, - in[0]};
│ │ │ │ -
260 out[2] = { 0, 0, 1 - in[0]};
│ │ │ │ -
261 out[3] = { 0, 0, in[0]};
│ │ │ │ +
257 // Precision
│ │ │ │ +
258 // this is not a perfect solution to obtain the
│ │ │ │ +
259 // precision of a field - definition is not clear
│ │ │ │ +
260 // to be removed
│ │ │ │ +
261 // ---------
│ │ │ │
262
│ │ │ │ -
263 out[4] = {0,0,0};
│ │ │ │ -
264 out[5] = {0,0,0};
│ │ │ │ -
265 out[8] = {0,0,0};
│ │ │ │ -
266 out[9] = {0,0,0};
│ │ │ │ -
267
│ │ │ │ -
268 out[6] = { -1 + in[2], 0, 0};
│ │ │ │ -
269 out[7] = { 1 - in[2], 0, 0};
│ │ │ │ -
270 out[10] = { - in[2], 0, 0};
│ │ │ │ -
271 out[11] = { in[2], 0, 0};
│ │ │ │ -
272 break;
│ │ │ │ -
273
│ │ │ │ -
274 case 2:
│ │ │ │ -
275 out[0] = {0,0,0};
│ │ │ │ -
276 out[1] = {0,0,0};
│ │ │ │ -
277 out[2] = {0,0,0};
│ │ │ │ -
278 out[3] = {0,0,0};
│ │ │ │ -
279
│ │ │ │ -
280 out[4] = { 0, -1 + in[0], 0};
│ │ │ │ -
281 out[5] = { 0, - in[0], 0};
│ │ │ │ -
282 out[8] = { 0, 1 - in[0], 0};
│ │ │ │ -
283 out[9] = { 0, in[0], 0};
│ │ │ │ -
284
│ │ │ │ -
285 out[6] = { -1 + in[1], 0, 0};
│ │ │ │ -
286 out[7] = { - in[1], 0, 0};
│ │ │ │ -
287 out[10] = { 1 - in[1], 0, 0};
│ │ │ │ -
288 out[11] = { in[1], 0, 0};
│ │ │ │ -
289 break;
│ │ │ │ -
290 }
│ │ │ │ -
291 }
│ │ │ │ -
292
│ │ │ │ -
293 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
294 out[i] *= edgeOrientation_[i];
│ │ │ │ -
295
│ │ │ │ -
296 } else if (totalOrder == 2) {
│ │ │ │ -
297 out.resize(size());
│ │ │ │ -
298
│ │ │ │ -
299 if (dim==2)
│ │ │ │ -
300 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
301 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ -
302 out[i][j] = 0;
│ │ │ │ -
303
│ │ │ │ -
304 if (dim==3)
│ │ │ │ -
305 {
│ │ │ │ -
306 for(size_t i=0; i<out.size(); i++)
│ │ │ │ -
307 out[i] = { 0, 0, 0};
│ │ │ │ -
308
│ │ │ │ -
309 //case (1,1,0):
│ │ │ │ -
310 if( order[0] == 1 and order[1]==1)
│ │ │ │ -
311 {
│ │ │ │ -
312 out[0] = { 0, 0, 1};
│ │ │ │ -
313 out[1] = { 0, 0, -1};
│ │ │ │ -
314 out[2] = { 0, 0, -1};
│ │ │ │ -
315 out[3] = { 0, 0, 1};
│ │ │ │ -
316 }
│ │ │ │ -
317
│ │ │ │ -
318 //case (1,0,1):
│ │ │ │ -
319 if( order[0] == 1 and order[2]==1)
│ │ │ │ -
320 {
│ │ │ │ -
321 out[4] = { 0, 1, 0};
│ │ │ │ -
322 out[5] = { 0, -1, 0};
│ │ │ │ -
323 out[8] = { 0, -1, 0};
│ │ │ │ -
324 out[9] = { 0, 1, 0};
│ │ │ │ -
325 }
│ │ │ │ -
326
│ │ │ │ -
327 //case (0,1,1):
│ │ │ │ -
328 if( order[1] == 1 and order[2]==1)
│ │ │ │ -
329 {
│ │ │ │ -
330 out[6] = { 1, 0, 0};
│ │ │ │ -
331 out[7] = { -1, 0, 0};
│ │ │ │ -
332 out[10] = { -1, 0, 0};
│ │ │ │ -
333 out[11] = { 1, 0, 0};
│ │ │ │ -
334 }
│ │ │ │ -
335
│ │ │ │ -
336 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ -
337 out[i] *= edgeOrientation_[i];
│ │ │ │ -
338 }
│ │ │ │ -
339
│ │ │ │ -
340
│ │ │ │ -
341 }else {
│ │ │ │ -
342 out.resize(size());
│ │ │ │ -
343 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
344 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ -
345 out[i][j] = 0;
│ │ │ │ -
346 }
│ │ │ │ -
347
│ │ │ │ -
348 }
│ │ │ │ -
349
│ │ │ │ -
351 unsigned int order() const
│ │ │ │ -
352 {
│ │ │ │ -
353 if (dim==2)
│ │ │ │ -
354 return 2*k-1;
│ │ │ │ -
355 if (dim==3)
│ │ │ │ -
356 return 3*k-1;
│ │ │ │ -
357 }
│ │ │ │ -
358
│ │ │ │ -
359 private:
│ │ │ │ -
360
│ │ │ │ -
361 // Orientations of the cube edges
│ │ │ │ -
362 std::array<R,numberOfEdges> edgeOrientation_;
│ │ │ │ -
363 };
│ │ │ │ -
364
│ │ │ │ -
365
│ │ │ │ -
370 template <int dim, int k>
│ │ │ │ -
371 class Nedelec1stKindCubeLocalCoefficients
│ │ │ │ -
372 {
│ │ │ │ -
373 public:
│ │ │ │ -
375 Nedelec1stKindCubeLocalCoefficients ()
│ │ │ │ -
376 : localKey_(size())
│ │ │ │ -
377 {
│ │ │ │ -
378 static_assert(k==1, "Only first-order Nédélec local coefficients are implemented.");
│ │ │ │ -
379 // Assign all degrees of freedom to edges
│ │ │ │ -
380 // TODO: This is correct only for first-order Nédélec elements
│ │ │ │ -
381 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
382 localKey_[i] = LocalKey(i,dim-1,0);
│ │ │ │ -
383 }
│ │ │ │ -
384
│ │ │ │ -
386 std::size_t size() const
│ │ │ │ -
387 {
│ │ │ │ -
388 static_assert(dim==2 || dim==3, "Nédélec shape functions are implemented only for 2d and 3d cubes.");
│ │ │ │ -
389 return (dim==2) ? 2*k * (k+1)
│ │ │ │ -
390 : 3*k * (k+1) * (k+1);
│ │ │ │ -
391 }
│ │ │ │ -
392
│ │ │ │ -
395 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
396 {
│ │ │ │ -
397 return localKey_[i];
│ │ │ │ -
398 }
│ │ │ │ -
399
│ │ │ │ -
400 private:
│ │ │ │ -
401 std::vector<LocalKey> localKey_;
│ │ │ │ -
402 };
│ │ │ │ -
403
│ │ │ │ -
408 template<class LB>
│ │ │ │ -
409 class Nedelec1stKindCubeLocalInterpolation
│ │ │ │ -
410 {
│ │ │ │ -
411 static constexpr auto dim = LB::Traits::dimDomain;
│ │ │ │ -
412 static constexpr auto size = LB::size();
│ │ │ │ -
413
│ │ │ │ -
414 // Number of edges of the reference cube
│ │ │ │ -
415 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim;
│ │ │ │ -
416
│ │ │ │ -
417 public:
│ │ │ │ -
418
│ │ │ │ -
420 Nedelec1stKindCubeLocalInterpolation (std::bitset<numberOfEdges> s = 0)
│ │ │ │ -
421 {
│ │ │ │ -
422 auto refElement = Dune::referenceElement<double,dim>(GeometryTypes::cube(dim));
│ │ │ │ -
423
│ │ │ │ -
424 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ -
425 m_[i] = refElement.position(i,dim-1);
│ │ │ │ -
426
│ │ │ │ -
427 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ -
428 {
│ │ │ │ -
429 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ -
430 auto v0 = *vertexIterator;
│ │ │ │ -
431 auto v1 = *(++vertexIterator);
│ │ │ │ -
432
│ │ │ │ -
433 // By default, edges point from the vertex with the smaller index
│ │ │ │ -
434 // to the vertex with the larger index.
│ │ │ │ -
435 if (v0>v1)
│ │ │ │ -
436 std::swap(v0,v1);
│ │ │ │ -
437 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ -
438 edge_[i] *= (s[i]) ? -1.0 : 1.0;
│ │ │ │ -
439 }
│ │ │ │ -
440 }
│ │ │ │ -
441
│ │ │ │ -
447 template<typename F, typename C>
│ │ │ │ -
448 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
449 {
│ │ │ │ -
450 out.resize(size);
│ │ │ │ -
451
│ │ │ │ -
452 for (std::size_t i=0; i<size; i++)
│ │ │ │ -
453 {
│ │ │ │ -
454 auto y = f(m_[i]);
│ │ │ │ -
455 out[i] = 0.0;
│ │ │ │ -
456 for (int j=0; j<dim; j++)
│ │ │ │ -
457 out[i] += y[j]*edge_[i][j];
│ │ │ │ -
458 }
│ │ │ │ -
459 }
│ │ │ │ -
460
│ │ │ │ -
461 private:
│ │ │ │ -
462 // Edge midpoints of the reference cube
│ │ │ │ -
463 std::array<typename LB::Traits::DomainType, numberOfEdges> m_;
│ │ │ │ -
464 // Edges of the reference cube
│ │ │ │ -
465 std::array<typename LB::Traits::DomainType, numberOfEdges> edge_;
│ │ │ │ -
466 };
│ │ │ │ -
467
│ │ │ │ -
468}
│ │ │ │ -
469
│ │ │ │ -
470
│ │ │ │ -
494 template<class D, class R, int dim, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
496 {
│ │ │ │ -
497 public:
│ │ │ │ - │ │ │ │ -
499 Impl::Nedelec1stKindCubeLocalCoefficients<dim,k>,
│ │ │ │ -
500 Impl::Nedelec1stKindCubeLocalInterpolation<Impl::Nedelec1stKindCubeLocalBasis<D,R,dim,k> > >;
│ │ │ │ -
501
│ │ │ │ -
502 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for 2d and 3d elements.");
│ │ │ │ -
503 static_assert(k==1, "Nedelec elements of the first kind are currently only implemented for order k==1.");
│ │ │ │ -
504
│ │ │ │ - │ │ │ │ -
508
│ │ │ │ -
│ │ │ │ -
514 Nedelec1stKindCubeLocalFiniteElement (std::bitset<power(2,dim-1)*dim> s) :
│ │ │ │ -
515 basis_(s),
│ │ │ │ -
516 interpolation_(s)
│ │ │ │ -
517 {}
│ │ │ │ -
│ │ │ │ -
518
│ │ │ │ -
│ │ │ │ -
519 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
520 {
│ │ │ │ -
521 return basis_;
│ │ │ │ -
522 }
│ │ │ │ -
│ │ │ │ -
523
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
525 {
│ │ │ │ -
526 return coefficients_;
│ │ │ │ -
527 }
│ │ │ │ -
│ │ │ │ -
528
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
530 {
│ │ │ │ -
531 return interpolation_;
│ │ │ │ -
532 }
│ │ │ │ -
│ │ │ │ -
533
│ │ │ │ -
│ │ │ │ -
534 static constexpr unsigned int size ()
│ │ │ │ -
535 {
│ │ │ │ -
536 return Traits::LocalBasisType::size();
│ │ │ │ -
537 }
│ │ │ │ -
│ │ │ │ -
538
│ │ │ │ -
│ │ │ │ -
539 static constexpr GeometryType type ()
│ │ │ │ -
540 {
│ │ │ │ -
541 return GeometryTypes::cube(dim);
│ │ │ │ -
542 }
│ │ │ │ -
│ │ │ │ -
543
│ │ │ │ -
544 private:
│ │ │ │ -
545 typename Traits::LocalBasisType basis_;
│ │ │ │ -
546 typename Traits::LocalCoefficientsType coefficients_;
│ │ │ │ -
547 typename Traits::LocalInterpolationType interpolation_;
│ │ │ │ -
548 };
│ │ │ │ -
│ │ │ │ -
549
│ │ │ │ -
550}
│ │ │ │ -
551
│ │ │ │ -
552#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
263 template <class Field>
│ │ │ │ +
264 struct Precision;
│ │ │ │ +
265
│ │ │ │ +
266 template<>
│ │ │ │ +
│ │ │ │ +
267 struct Precision< double >
│ │ │ │ +
268 {
│ │ │ │ +
269 static const unsigned int value = 64;
│ │ │ │ +
270 };
│ │ │ │ +
│ │ │ │ +
271
│ │ │ │ +
272 template<>
│ │ │ │ +
│ │ │ │ +
273 struct Precision< long double >
│ │ │ │ +
274 {
│ │ │ │ +
275 static const unsigned int value = 80;
│ │ │ │ +
276 };
│ │ │ │ +
│ │ │ │ +
277
│ │ │ │ +
278 template<>
│ │ │ │ +
│ │ │ │ +
279 struct Precision< float >
│ │ │ │ +
280 {
│ │ │ │ +
281 static const unsigned int value = 32;
│ │ │ │ +
282 };
│ │ │ │ +
│ │ │ │ +
283
│ │ │ │ +
284#if HAVE_GMP
│ │ │ │ +
285 template< unsigned int precision >
│ │ │ │ +
286 struct Precision< GMPField< precision > >
│ │ │ │ +
287 {
│ │ │ │ +
288 static const unsigned int value = precision;
│ │ │ │ +
289 };
│ │ │ │ +
290#endif
│ │ │ │ +
291
│ │ │ │ +
292 // ComputeField
│ │ │ │ +
293 // ------------
│ │ │ │ +
294
│ │ │ │ +
295 template <class Field,unsigned int sum>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
297 {
│ │ │ │ +
298 typedef Field Type;
│ │ │ │ +
299 };
│ │ │ │ +
│ │ │ │ +
300
│ │ │ │ +
301#if HAVE_GMP
│ │ │ │ +
302 template< unsigned int precision, unsigned int sum >
│ │ │ │ +
303 struct ComputeField< GMPField< precision >, sum >
│ │ │ │ +
304 {
│ │ │ │ +
305 typedef GMPField<precision+sum> Type;
│ │ │ │ +
306 };
│ │ │ │ +
307#endif
│ │ │ │ +
308} // namespace Dune
│ │ │ │ +
309
│ │ │ │ +
310#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Nédélec elements of the first kind for cube elements.
Definition nedelec1stkindcube.hh:496
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition nedelec1stkindcube.hh:529
│ │ │ │ -
static constexpr unsigned int size()
Definition nedelec1stkindcube.hh:534
│ │ │ │ -
Nedelec1stKindCubeLocalFiniteElement()=default
Default constructor.
│ │ │ │ -
static constexpr GeometryType type()
Definition nedelec1stkindcube.hh:539
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition nedelec1stkindcube.hh:524
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition nedelec1stkindcube.hh:519
│ │ │ │ -
Nedelec1stKindCubeLocalFiniteElement(std::bitset< power(2, dim-1) *dim > s)
Constructor with explicitly given edge orientations.
Definition nedelec1stkindcube.hh:514
│ │ │ │ - │ │ │ │ +
Field operator-(const Unity< Field > &u, const Field &f)
Definition field.hh:44
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
bool operator<(const Zero< Field > &, const Field &f)
Definition field.hh:119
│ │ │ │ +
bool operator==(const Zero< Field > &, const Field &f)
Definition field.hh:107
│ │ │ │ +
bool operator>(const Zero< Field > &z, const Field &f)
Definition field.hh:131
│ │ │ │ +
Field operator+(const Unity< Field > &u, const Field &f)
Definition field.hh:38
│ │ │ │ +
Field operator/(const Unity< Field > &u, const Field &f)
Definition field.hh:56
│ │ │ │ +
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ +
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
static const Field epsilon()
Definition field.hh:84
│ │ │ │ +
Definition field.hh:235
│ │ │ │ +
F2 type
Definition field.hh:236
│ │ │ │ +
Dune::FieldVector< F2, dim > type
Definition field.hh:241
│ │ │ │ +
Dune::FieldMatrix< F2, dim1, dim2 > type
Definition field.hh:246
│ │ │ │ +
Definition field.hh:264
│ │ │ │ +
Definition field.hh:297
│ │ │ │ +
Field Type
Definition field.hh:298
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,540 +1,351 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _n_e_d_e_l_e_c │ │ │ │ │ -nedelec1stkindcube.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +field.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e │ │ │ │ │ -22{ │ │ │ │ │ -23namespace Impl │ │ │ │ │ -24{ │ │ │ │ │ -37 template │ │ │ │ │ -38 class Nedelec1stKindCubeLocalBasis │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +15 // Unity │ │ │ │ │ +16 // ----- │ │ │ │ │ +17 │ │ │ │ │ +28 template< class Field > │ │ │ │ │ +_2_9 struct _U_n_i_t_y │ │ │ │ │ +30 { │ │ │ │ │ +_3_1 operator Field () const │ │ │ │ │ +32 { │ │ │ │ │ +33 return Field( 1 ); │ │ │ │ │ +34 } │ │ │ │ │ +35 }; │ │ │ │ │ +36 │ │ │ │ │ +37 template< class Field > │ │ │ │ │ +_3_8 Field _o_p_e_r_a_t_o_r_+_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ 39 { │ │ │ │ │ -40 // Number of edges of the reference cube │ │ │ │ │ -41 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim; │ │ │ │ │ +40 return (Field)u + f; │ │ │ │ │ +41 } │ │ │ │ │ 42 │ │ │ │ │ -43 public: │ │ │ │ │ -44 using Traits = LocalBasisTraits, │ │ │ │ │ -45 R,dim,FieldVector, │ │ │ │ │ -46 FieldMatrix >; │ │ │ │ │ -47 │ │ │ │ │ -54 Nedelec1stKindCubeLocalBasis() │ │ │ │ │ -55 { │ │ │ │ │ -56 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0); │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -61 Nedelec1stKindCubeLocalBasis(std::bitset edgeOrientation) │ │ │ │ │ -62 : Nedelec1stKindCubeLocalBasis() │ │ │ │ │ -63 { │ │ │ │ │ -64 for (std::size_t i=0; i& out) const │ │ │ │ │ +43 template< class Field > │ │ │ │ │ +_4_4 Field _o_p_e_r_a_t_o_r_-_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ +45 { │ │ │ │ │ +46 return (Field)u - f; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +49 template< class Field > │ │ │ │ │ +_5_0 Field _o_p_e_r_a_t_o_r_*_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ +51 { │ │ │ │ │ +52 return f; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 template< class Field > │ │ │ │ │ +_5_6 Field _o_p_e_r_a_t_o_r_/_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ +57 { │ │ │ │ │ +58 return (Field)u / f; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +61 │ │ │ │ │ +62 │ │ │ │ │ +63 // Zero │ │ │ │ │ +64 // ---- │ │ │ │ │ +65 │ │ │ │ │ +77 template< class Field > │ │ │ │ │ +_7_8 struct _Z_e_r_o │ │ │ │ │ +79 { │ │ │ │ │ +_8_0 operator Field () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return Field( 0 ); │ │ │ │ │ +83 } │ │ │ │ │ +_8_4 static const Field _e_p_s_i_l_o_n() │ │ │ │ │ 85 { │ │ │ │ │ -86 static_assert(k==1, "Evaluating Nédélec shape functions is implemented │ │ │ │ │ -only for first order."); │ │ │ │ │ -87 out.resize(size()); │ │ │ │ │ -88 │ │ │ │ │ -89 if (dim==2) │ │ │ │ │ -90 { │ │ │ │ │ -91 // First-order Nédélec shape functions on a square are of the form │ │ │ │ │ -92 // │ │ │ │ │ -93 // (a, b)^T + (c y, d x)^T, a, b, c, d \in R │ │ │ │ │ -94 // │ │ │ │ │ -95 // The following coefficients create the four basis vectors │ │ │ │ │ -96 // that are dual to the edge degrees of freedom: │ │ │ │ │ -97 // │ │ │ │ │ -98 // a[0] = 0 b[0] = 1 c[0] = 0 d[0] = -1 │ │ │ │ │ -99 // a[1] = 0 b[1] = 0 c[1] = 0 d[1] = 1 │ │ │ │ │ -100 // a[2] = 1 b[2] = 0 c[2] = 0 d[2] = -1 │ │ │ │ │ -101 // a[3] = 0 b[3] = 0 c[3] = 0 d[3] = 1 │ │ │ │ │ -102 │ │ │ │ │ -103 out[0] = { 0, D(1) - in[0]}; │ │ │ │ │ -104 out[1] = { 0, in[0]}; │ │ │ │ │ -105 out[2] = { D(1) - in[1], 0}; │ │ │ │ │ -106 out[3] = { in[1], 0}; │ │ │ │ │ -107 } │ │ │ │ │ -108 │ │ │ │ │ -109 if constexpr (dim==3) │ │ │ │ │ -110 { │ │ │ │ │ -111 // First-order Nédélec shape functions on a cube are of the form │ │ │ │ │ -112 // │ │ │ │ │ -113 // (e1 yz) │ │ │ │ │ -114 // a + b x + c y + d z + (e2 xz) , a, b, c, d \in R^3 and b[0]=c[1]=d[2]=0 │ │ │ │ │ -115 // (e3 xy) │ │ │ │ │ -116 // │ │ │ │ │ -117 // The following coefficients create the twelve basis vectors │ │ │ │ │ -118 // that are dual to the edge degrees of freedom: │ │ │ │ │ -119 // │ │ │ │ │ -120 // a[0] = { 0, 0, 1} b[0] = { 0, 0, -1} c[0] = { 0, 0, -1} d[0] = { 0, 0, │ │ │ │ │ -0} e[0] = { 0, 0, 1} │ │ │ │ │ -121 // a[1] = { 0, 0, 0} b[1] = { 0, 0, 1} c[1] = { 0, 0, 0} d[1] = { 0, 0, 0} │ │ │ │ │ -e[1] = { 0, 0, -1} │ │ │ │ │ -122 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 0} c[2] = { 0, 0, 1} d[2] = { 0, 0, 0} │ │ │ │ │ -e[2] = { 0, 0, -1} │ │ │ │ │ -123 // a[3] = { 0, 0, 0} b[3] = { 0, 0, 0} c[3] = { 0, 0, 0} d[3] = { 0, 0, 0} │ │ │ │ │ -e[3] = { 0, 0, 1} │ │ │ │ │ -124 // │ │ │ │ │ -125 // The following implementation uses these values, and simply │ │ │ │ │ -126 // skips all the zeros. │ │ │ │ │ -127 │ │ │ │ │ -128 for (std::size_t i=0; i │ │ │ │ │ +92 struct Zero< GMPField< precision > > │ │ │ │ │ +93 { │ │ │ │ │ +94 typedef GMPField< precision > Field; │ │ │ │ │ +95 operator Field () const │ │ │ │ │ +96 { │ │ │ │ │ +97 return Field( 0 ); │ │ │ │ │ +98 } │ │ │ │ │ +99 static const Field _e_p_s_i_l_o_n() │ │ │ │ │ +100 { │ │ │ │ │ +101 return Field(1e-20); │ │ │ │ │ +102 } │ │ │ │ │ +103 }; │ │ │ │ │ +104#endif │ │ │ │ │ +105 │ │ │ │ │ +106 template< class Field > │ │ │ │ │ +_1_0_7 inline bool _o_p_e_r_a_t_o_r_ _=_=_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &, const Field &f ) │ │ │ │ │ +108 { │ │ │ │ │ +109 return ( f < _Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n() && f > -_Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n() ); │ │ │ │ │ +110 } │ │ │ │ │ +111 │ │ │ │ │ +112 template< class Field > │ │ │ │ │ +_1_1_3 inline bool _o_p_e_r_a_t_o_r_ _=_=_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z) │ │ │ │ │ +114 { │ │ │ │ │ +115 return ( z == f ); │ │ │ │ │ +116 } │ │ │ │ │ +117 │ │ │ │ │ +118 template< class Field > │ │ │ │ │ +_1_1_9 inline bool _o_p_e_r_a_t_o_r_<_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &, const Field &f ) │ │ │ │ │ +120 { │ │ │ │ │ +121 return f > _Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n(); │ │ │ │ │ +122 } │ │ │ │ │ +123 │ │ │ │ │ +124 template< class Field > │ │ │ │ │ +_1_2_5 inline bool _o_p_e_r_a_t_o_r_<_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> & ) │ │ │ │ │ +126 { │ │ │ │ │ +127 return f < -_Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n(); │ │ │ │ │ +128 } │ │ │ │ │ +129 │ │ │ │ │ +130 template< class Field > │ │ │ │ │ +_1_3_1 inline bool _o_p_e_r_a_t_o_r_>_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z, const Field &f ) │ │ │ │ │ +132 { │ │ │ │ │ +133 return f < z; │ │ │ │ │ +134 } │ │ │ │ │ 135 │ │ │ │ │ -136 out[4][1] = { 1 - in[0] - in[2] + in[0]*in[2]}; │ │ │ │ │ -137 out[5][1] = { in[0] - in[0]*in[2]}; │ │ │ │ │ -138 out[8][1] = { in[2] - in[0]*in[2]}; │ │ │ │ │ -139 out[9][1] = { in[0]*in[2]}; │ │ │ │ │ -140 │ │ │ │ │ -141 out[6][0] = { 1 - in[1] - in[2] + in[1]*in[2]}; │ │ │ │ │ -142 out[7][0] = { in[1] - in[1]*in[2]}; │ │ │ │ │ -143 out[10][0] = { in[2] - in[1]*in[2]}; │ │ │ │ │ -144 out[11][0] = { in[1]*in[2]}; │ │ │ │ │ -145 } │ │ │ │ │ -146 │ │ │ │ │ -147 for (std::size_t i=0; i& out) const │ │ │ │ │ -158 { │ │ │ │ │ -159 out.resize(size()); │ │ │ │ │ -160 if (dim==2) │ │ │ │ │ -161 { │ │ │ │ │ -162 for (std::size_t i=0; i │ │ │ │ │ +_1_3_7 inline bool _o_p_e_r_a_t_o_r_>_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z ) │ │ │ │ │ +138 { │ │ │ │ │ +139 return z < f; │ │ │ │ │ +140 } │ │ │ │ │ +141 │ │ │ │ │ +142 │ │ │ │ │ +143 // field_cast │ │ │ │ │ +144 // ---------- │ │ │ │ │ +145 │ │ │ │ │ +158 template< class F2, class F1 > │ │ │ │ │ +_1_5_9 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, F2 &f2 ) │ │ │ │ │ +160 { │ │ │ │ │ +161 f2 = f1; │ │ │ │ │ +162 } │ │ │ │ │ +163 │ │ │ │ │ +164#if HAVE_GMP │ │ │ │ │ +165 template< unsigned int precision > │ │ │ │ │ +166 inline void _f_i_e_l_d___c_a_s_t ( const Dune::GMPField< precision > &f1, double &f2 │ │ │ │ │ +) │ │ │ │ │ +167 { │ │ │ │ │ +168 f2 = f1.get_d(); │ │ │ │ │ +169 } │ │ │ │ │ +170 │ │ │ │ │ +171 template< unsigned int precision > │ │ │ │ │ +172 inline void _f_i_e_l_d___c_a_s_t ( const Dune::GMPField< precision > &f1, long double │ │ │ │ │ +&f2 ) │ │ │ │ │ 173 { │ │ │ │ │ -174 for (std::size_t i=0; i& order, │ │ │ │ │ -208 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -209 std::vector& out) const │ │ │ │ │ -210 { │ │ │ │ │ -211 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -212 if (totalOrder == 0) { │ │ │ │ │ -213 evaluateFunction(in, out); │ │ │ │ │ -214 } else if (totalOrder == 1) { │ │ │ │ │ -215 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -216 out.resize(size()); │ │ │ │ │ -217 │ │ │ │ │ -218 if (dim==2) │ │ │ │ │ -219 { │ │ │ │ │ -220 if (direction==0) │ │ │ │ │ -221 { │ │ │ │ │ -222 out[0] = { 0, -1}; │ │ │ │ │ -223 out[1] = { 0, 1}; │ │ │ │ │ -224 out[2] = { 0, 0}; │ │ │ │ │ -225 out[3] = { 0, 0}; │ │ │ │ │ -226 } │ │ │ │ │ -227 else │ │ │ │ │ -228 { │ │ │ │ │ -229 out[0] = { 0, 0}; │ │ │ │ │ -230 out[1] = { 0, 0}; │ │ │ │ │ -231 out[2] = { -1, 0}; │ │ │ │ │ -232 out[3] = { 1, 0}; │ │ │ │ │ -233 } │ │ │ │ │ -234 } │ │ │ │ │ -235 │ │ │ │ │ -236 if (dim==3) │ │ │ │ │ -237 { │ │ │ │ │ -238 switch (direction) │ │ │ │ │ -239 { │ │ │ │ │ -240 case 0: │ │ │ │ │ -241 out[0] = { 0, 0, -1 +in[1]}; │ │ │ │ │ -242 out[1] = { 0, 0, 1 -in[1]}; │ │ │ │ │ -243 out[2] = { 0, 0, -in[1]}; │ │ │ │ │ -244 out[3] = { 0, 0, in[1]}; │ │ │ │ │ -245 │ │ │ │ │ -246 out[4] = { 0, -1 +in[2], 0}; │ │ │ │ │ -247 out[5] = { 0, 1 -in[2], 0}; │ │ │ │ │ -248 out[8] = { 0, -in[2], 0}; │ │ │ │ │ -249 out[9] = { 0, in[2], 0}; │ │ │ │ │ -250 │ │ │ │ │ -251 out[6] = {0,0,0}; │ │ │ │ │ -252 out[7] = {0,0,0}; │ │ │ │ │ -253 out[10] = {0,0,0}; │ │ │ │ │ -254 out[11] = {0,0,0}; │ │ │ │ │ -255 break; │ │ │ │ │ +178 template< class F2, class F1, int dim > │ │ │ │ │ +_1_7_9 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, dim > &f1, Dune:: │ │ │ │ │ +FieldVector< F2, dim > &f2 ) │ │ │ │ │ +180 { │ │ │ │ │ +181 for( int d = 0; d < dim; ++d ) │ │ │ │ │ +182 _f_i_e_l_d___c_a_s_t( f1[ d ], f2[ d ] ); │ │ │ │ │ +183 } │ │ │ │ │ +184 template< class F2, class F1 > │ │ │ │ │ +_1_8_5 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, 1 > &f1, F2 &f2 ) │ │ │ │ │ +186 { │ │ │ │ │ +187 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2 ); │ │ │ │ │ +188 } │ │ │ │ │ +189 template< class F2, class F1 > │ │ │ │ │ +_1_9_0 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, Dune::FieldVector< F2, 1 > &f2 ) │ │ │ │ │ +191 { │ │ │ │ │ +192 _f_i_e_l_d___c_a_s_t( f1, f2[ 0 ] ); │ │ │ │ │ +193 } │ │ │ │ │ +194 │ │ │ │ │ +195 template< class F2, class F1, int rdim, int cdim > │ │ │ │ │ +_1_9_6 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix< F1, rdim, cdim > &f1, │ │ │ │ │ +Dune::FieldMatrix< F2, rdim, cdim > &f2 ) │ │ │ │ │ +197 { │ │ │ │ │ +198 for( int r = 0; r < rdim; ++r ) │ │ │ │ │ +199 _f_i_e_l_d___c_a_s_t( f1[ r ], f2[ r ] ); │ │ │ │ │ +200 } │ │ │ │ │ +201 template< class F2, class F1 > │ │ │ │ │ +_2_0_2 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix &f1, Dune:: │ │ │ │ │ +FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ +203 { │ │ │ │ │ +204 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2[ 0 ][ 0 ] ); │ │ │ │ │ +205 } │ │ │ │ │ +206 template< class F2, class F1 > │ │ │ │ │ +_2_0_7 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix< F1, 1,1 > &f1, F2 &f2 ) │ │ │ │ │ +208 { │ │ │ │ │ +209 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2 ); │ │ │ │ │ +210 } │ │ │ │ │ +211 template< class F2, class F1 > │ │ │ │ │ +_2_1_2 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, Dune::FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ +213 { │ │ │ │ │ +214 _f_i_e_l_d___c_a_s_t( f1, f2[ 0 ][ 0 ] ); │ │ │ │ │ +215 } │ │ │ │ │ +216 template< class F2, class F1 > │ │ │ │ │ +_2_1_7 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector &f1, Dune:: │ │ │ │ │ +FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ +218 { │ │ │ │ │ +219 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2[ 0 ][ 0 ] ); │ │ │ │ │ +220 } │ │ │ │ │ +221 template< class F2, class F1 > │ │ │ │ │ +_2_2_2 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix &f1, Dune:: │ │ │ │ │ +FieldVector< F2, 1 > &f2 ) │ │ │ │ │ +223 { │ │ │ │ │ +224 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2[ 0 ] ); │ │ │ │ │ +225 } │ │ │ │ │ +226 │ │ │ │ │ +227 template< class F2, class F1 > │ │ │ │ │ +_2_2_8 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, 1 > &f1, Dune:: │ │ │ │ │ +FieldVector &f2 ) │ │ │ │ │ +229 { │ │ │ │ │ +230 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2[ 0 ] ); │ │ │ │ │ +231 } │ │ │ │ │ +232 │ │ │ │ │ +233 template< class F2,class V > │ │ │ │ │ +_2_3_4 struct _F_i_e_l_d_C_a_s_t │ │ │ │ │ +235 { │ │ │ │ │ +_2_3_6 typedef F2 _t_y_p_e; │ │ │ │ │ +237 }; │ │ │ │ │ +238 template< class F2,class F1,int dim > │ │ │ │ │ +_2_3_9 struct _F_i_e_l_d_C_a_s_t< F2, _D_u_n_e::FieldVector > │ │ │ │ │ +240 { │ │ │ │ │ +_2_4_1 typedef Dune::FieldVector _t_y_p_e; │ │ │ │ │ +242 }; │ │ │ │ │ +243 template< class F2,class F1,int dim1, int dim2> │ │ │ │ │ +_2_4_4 struct _F_i_e_l_d_C_a_s_t< F2, _D_u_n_e::FieldMatrix > │ │ │ │ │ +245 { │ │ │ │ │ +_2_4_6 typedef Dune::FieldMatrix _t_y_p_e; │ │ │ │ │ +247 }; │ │ │ │ │ +248 template< class F2,class V > │ │ │ │ │ +_2_4_9 inline typename _F_i_e_l_d_C_a_s_t_<_F_2_,_V_>_:_:_t_y_p_e _f_i_e_l_d___c_a_s_t ( const V &f1 ) │ │ │ │ │ +250 { │ │ │ │ │ +251 typename _F_i_e_l_d_C_a_s_t_<_F_2_,_V_>_:_:_t_y_p_e f2; │ │ │ │ │ +252 _f_i_e_l_d___c_a_s_t( f1, f2 ); │ │ │ │ │ +253 return f2; │ │ │ │ │ +254 } │ │ │ │ │ +255 │ │ │ │ │ 256 │ │ │ │ │ -257 case 1: │ │ │ │ │ -258 out[0] = { 0, 0, -1 + in[0]}; │ │ │ │ │ -259 out[1] = { 0, 0, - in[0]}; │ │ │ │ │ -260 out[2] = { 0, 0, 1 - in[0]}; │ │ │ │ │ -261 out[3] = { 0, 0, in[0]}; │ │ │ │ │ +257 // Precision │ │ │ │ │ +258 // this is not a perfect solution to obtain the │ │ │ │ │ +259 // precision of a field - definition is not clear │ │ │ │ │ +260 // to be removed │ │ │ │ │ +261 // --------- │ │ │ │ │ 262 │ │ │ │ │ -263 out[4] = {0,0,0}; │ │ │ │ │ -264 out[5] = {0,0,0}; │ │ │ │ │ -265 out[8] = {0,0,0}; │ │ │ │ │ -266 out[9] = {0,0,0}; │ │ │ │ │ -267 │ │ │ │ │ -268 out[6] = { -1 + in[2], 0, 0}; │ │ │ │ │ -269 out[7] = { 1 - in[2], 0, 0}; │ │ │ │ │ -270 out[10] = { - in[2], 0, 0}; │ │ │ │ │ -271 out[11] = { in[2], 0, 0}; │ │ │ │ │ -272 break; │ │ │ │ │ -273 │ │ │ │ │ -274 case 2: │ │ │ │ │ -275 out[0] = {0,0,0}; │ │ │ │ │ -276 out[1] = {0,0,0}; │ │ │ │ │ -277 out[2] = {0,0,0}; │ │ │ │ │ -278 out[3] = {0,0,0}; │ │ │ │ │ -279 │ │ │ │ │ -280 out[4] = { 0, -1 + in[0], 0}; │ │ │ │ │ -281 out[5] = { 0, - in[0], 0}; │ │ │ │ │ -282 out[8] = { 0, 1 - in[0], 0}; │ │ │ │ │ -283 out[9] = { 0, in[0], 0}; │ │ │ │ │ -284 │ │ │ │ │ -285 out[6] = { -1 + in[1], 0, 0}; │ │ │ │ │ -286 out[7] = { - in[1], 0, 0}; │ │ │ │ │ -287 out[10] = { 1 - in[1], 0, 0}; │ │ │ │ │ -288 out[11] = { in[1], 0, 0}; │ │ │ │ │ -289 break; │ │ │ │ │ -290 } │ │ │ │ │ -291 } │ │ │ │ │ -292 │ │ │ │ │ -293 for (std::size_t i=0; i edgeOrientation_; │ │ │ │ │ -363 }; │ │ │ │ │ -364 │ │ │ │ │ -365 │ │ │ │ │ -370 template │ │ │ │ │ -371 class Nedelec1stKindCubeLocalCoefficients │ │ │ │ │ -372 { │ │ │ │ │ -373 public: │ │ │ │ │ -375 Nedelec1stKindCubeLocalCoefficients () │ │ │ │ │ -376 : localKey_(size()) │ │ │ │ │ -377 { │ │ │ │ │ -378 static_assert(k==1, "Only first-order Nédélec local coefficients are │ │ │ │ │ -implemented."); │ │ │ │ │ -379 // Assign all degrees of freedom to edges │ │ │ │ │ -380 // TODO: This is correct only for first-order Nédélec elements │ │ │ │ │ -381 for (std::size_t i=0; i localKey_; │ │ │ │ │ -402 }; │ │ │ │ │ -403 │ │ │ │ │ -408 template │ │ │ │ │ -409 class Nedelec1stKindCubeLocalInterpolation │ │ │ │ │ -410 { │ │ │ │ │ -411 static constexpr auto dim = LB::Traits::dimDomain; │ │ │ │ │ -412 static constexpr auto size = LB::size(); │ │ │ │ │ -413 │ │ │ │ │ -414 // Number of edges of the reference cube │ │ │ │ │ -415 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim; │ │ │ │ │ -416 │ │ │ │ │ -417 public: │ │ │ │ │ -418 │ │ │ │ │ -420 Nedelec1stKindCubeLocalInterpolation (std::bitset s = 0) │ │ │ │ │ -421 { │ │ │ │ │ -422 auto refElement = Dune::referenceElement(GeometryTypes::cube │ │ │ │ │ -(dim)); │ │ │ │ │ -423 │ │ │ │ │ -424 for (std::size_t i=0; iv1) │ │ │ │ │ -436 std::swap(v0,v1); │ │ │ │ │ -437 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ -438 edge_[i] *= (s[i]) ? -1.0 : 1.0; │ │ │ │ │ -439 } │ │ │ │ │ -440 } │ │ │ │ │ -441 │ │ │ │ │ -447 template │ │ │ │ │ -448 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -449 { │ │ │ │ │ -450 out.resize(size); │ │ │ │ │ -451 │ │ │ │ │ -452 for (std::size_t i=0; i m_; │ │ │ │ │ -464 // Edges of the reference cube │ │ │ │ │ -465 std::array edge_; │ │ │ │ │ -466 }; │ │ │ │ │ -467 │ │ │ │ │ -468} │ │ │ │ │ -469 │ │ │ │ │ -470 │ │ │ │ │ -494 template │ │ │ │ │ -_4_9_5 class _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -496 { │ │ │ │ │ -497 public: │ │ │ │ │ -_4_9_8 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ -499 Impl::Nedelec1stKindCubeLocalCoefficients, │ │ │ │ │ -500 Impl::Nedelec1stKindCubeLocalInterpolation > >; │ │ │ │ │ -501 │ │ │ │ │ -502 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for │ │ │ │ │ -2d and 3d elements."); │ │ │ │ │ -503 static_assert(k==1, "Nedelec elements of the first kind are currently only │ │ │ │ │ -implemented for order k==1."); │ │ │ │ │ -504 │ │ │ │ │ -_5_0_7 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() = default; │ │ │ │ │ -508 │ │ │ │ │ -_5_1_4 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset s) : │ │ │ │ │ -515 basis_(s), │ │ │ │ │ -516 interpolation_(s) │ │ │ │ │ -517 {} │ │ │ │ │ -518 │ │ │ │ │ -_5_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -520 { │ │ │ │ │ -521 return basis_; │ │ │ │ │ -522 } │ │ │ │ │ -523 │ │ │ │ │ -_5_2_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -525 { │ │ │ │ │ -526 return coefficients_; │ │ │ │ │ -527 } │ │ │ │ │ -528 │ │ │ │ │ -_5_2_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -530 { │ │ │ │ │ -531 return interpolation_; │ │ │ │ │ -532 } │ │ │ │ │ -533 │ │ │ │ │ -_5_3_4 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -535 { │ │ │ │ │ -536 return Traits::LocalBasisType::size(); │ │ │ │ │ -537 } │ │ │ │ │ -538 │ │ │ │ │ -_5_3_9 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -540 { │ │ │ │ │ -541 return GeometryTypes::cube(dim); │ │ │ │ │ -542 } │ │ │ │ │ -543 │ │ │ │ │ -544 private: │ │ │ │ │ -545 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_; │ │ │ │ │ -546 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_; │ │ │ │ │ -547 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_; │ │ │ │ │ -548 }; │ │ │ │ │ -549 │ │ │ │ │ -550} │ │ │ │ │ -551 │ │ │ │ │ -552#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +263 template │ │ │ │ │ +_2_6_4 struct _P_r_e_c_i_s_i_o_n; │ │ │ │ │ +265 │ │ │ │ │ +266 template<> │ │ │ │ │ +_2_6_7 struct _P_r_e_c_i_s_i_o_n< double > │ │ │ │ │ +268 { │ │ │ │ │ +_2_6_9 static const unsigned int value = 64; │ │ │ │ │ +270 }; │ │ │ │ │ +271 │ │ │ │ │ +272 template<> │ │ │ │ │ +_2_7_3 struct _P_r_e_c_i_s_i_o_n< long double > │ │ │ │ │ +274 { │ │ │ │ │ +_2_7_5 static const unsigned int value = 80; │ │ │ │ │ +276 }; │ │ │ │ │ +277 │ │ │ │ │ +278 template<> │ │ │ │ │ +_2_7_9 struct _P_r_e_c_i_s_i_o_n< float > │ │ │ │ │ +280 { │ │ │ │ │ +_2_8_1 static const unsigned int value = 32; │ │ │ │ │ +282 }; │ │ │ │ │ +283 │ │ │ │ │ +284#if HAVE_GMP │ │ │ │ │ +285 template< unsigned int precision > │ │ │ │ │ +286 struct _P_r_e_c_i_s_i_o_n< GMPField< precision > > │ │ │ │ │ +287 { │ │ │ │ │ +288 static const unsigned int value = precision; │ │ │ │ │ +289 }; │ │ │ │ │ +290#endif │ │ │ │ │ +291 │ │ │ │ │ +292 // ComputeField │ │ │ │ │ +293 // ------------ │ │ │ │ │ +294 │ │ │ │ │ +295 template │ │ │ │ │ +_2_9_6 struct _C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ +297 { │ │ │ │ │ +_2_9_8 typedef Field _T_y_p_e; │ │ │ │ │ +299 }; │ │ │ │ │ +300 │ │ │ │ │ +301#if HAVE_GMP │ │ │ │ │ +302 template< unsigned int precision, unsigned int sum > │ │ │ │ │ +303 struct _C_o_m_p_u_t_e_F_i_e_l_d< GMPField< precision >, sum > │ │ │ │ │ +304 { │ │ │ │ │ +305 typedef GMPField _T_y_p_e; │ │ │ │ │ +306 }; │ │ │ │ │ +307#endif │ │ │ │ │ +308} // namespace Dune │ │ │ │ │ +309 │ │ │ │ │ +310#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nédélec elements of the first kind for cube elements. │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:496 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:529 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:534 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nedelec1stKindCubeLocalFiniteElement()=default │ │ │ │ │ -Default constructor. │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:539 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:524 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:519 │ │ │ │ │ -_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Nedelec1stKindCubeLocalFiniteElement(std::bitset< power(2, dim-1) *dim > s) │ │ │ │ │ -Constructor with explicitly given edge orientations. │ │ │ │ │ -DDeeffiinniittiioonn nedelec1stkindcube.hh:514 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ +Field operator-(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ +bool operator<(const Zero< Field > &, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ +bool operator==(const Zero< Field > &, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_> │ │ │ │ │ +bool operator>(const Zero< Field > &z, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ │ +Field operator+(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ +Field operator/(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ +Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ +A class representing the unit of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o_:_:_e_p_s_i_l_o_n │ │ │ │ │ +static const Field epsilon() │ │ │ │ │ +DDeeffiinniittiioonn field.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t │ │ │ │ │ +DDeeffiinniittiioonn field.hh:235 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_:_:_t_y_p_e │ │ │ │ │ +F2 type │ │ │ │ │ +DDeeffiinniittiioonn field.hh:236 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_ _F_1_,_ _d_i_m_ _>_ _>_:_:_t_y_p_e │ │ │ │ │ +Dune::FieldVector< F2, dim > type │ │ │ │ │ +DDeeffiinniittiioonn field.hh:241 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_M_a_t_r_i_x_<_ _F_1_,_ _d_i_m_1_,_ _d_i_m_2_ _>_ _>_:_:_t_y_p_e │ │ │ │ │ +Dune::FieldMatrix< F2, dim1, dim2 > type │ │ │ │ │ +DDeeffiinniittiioonn field.hh:246 │ │ │ │ │ +_D_u_n_e_:_:_P_r_e_c_i_s_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn field.hh:264 │ │ │ │ │ +_D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ +DDeeffiinniittiioonn field.hh:297 │ │ │ │ │ +_D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d_:_:_T_y_p_e │ │ │ │ │ +Field Type │ │ │ │ │ +DDeeffiinniittiioonn field.hh:298 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q1.hh File Reference │ │ │ │ +dune-localfunctions: basismatrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
q1.hh File Reference
│ │ │ │ +
basismatrix.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <dune/common/dynmatrix.hh>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::Q1FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q1 elements. More...
struct  Dune::BasisMatrixBase< PreBasis, Interpolation, Field >
 
struct  Dune::BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const PolynomialBasis< Eval, CM, D, R >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const PolynomialBasisWithMatrix< Eval, CM >, Interpolation, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,35 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -q1.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +basismatrix.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ -  Factory for global-valued Q1 elements. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_ _P_r_e_B_a_s_i_s_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_, │ │ │ │ │ + _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_, │ │ │ │ │ + _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_, │ │ │ │ │ + _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_, │ │ │ │ │ + _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00338_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q1.hh Source File │ │ │ │ +dune-localfunctions: basismatrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,75 +70,277 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
q1.hh
│ │ │ │ +
basismatrix.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
7#define DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <dune/geometry/type.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_BASISMATRIX_HH
│ │ │ │ +
6#define DUNE_BASISMATRIX_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/dynmatrix.hh>
│ │ │ │ +
10#include <dune/common/exceptions.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │ -
17
│ │ │ │ -
19
│ │ │ │ -
24 template<class Geometry, class RF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
27 LagrangeCubeLocalFiniteElement<
│ │ │ │ -
28 typename Geometry::ctype, RF, Geometry::mydimension, 1
│ │ │ │ -
29 >,
│ │ │ │ -
30 Geometry
│ │ │ │ -
31 >
│ │ │ │ +
17 /****************************************
│ │ │ │ +
18 * A dense matrix representation of a ''polynomial''
│ │ │ │ +
19 * basis. Its represent a basis as a linear
│ │ │ │ +
20 * combination of a second basis, i.e., a
│ │ │ │ +
21 * monomial basis. It is simular to the PolynomialBasis
│ │ │ │ +
22 * but it not derived from the LocalBasis class.
│ │ │ │ +
23 * It is used to define a ''pre basis''.
│ │ │ │ +
24 ****************************************/
│ │ │ │ +
25 template< class PreBasis, class Interpolation,
│ │ │ │ +
26 class Field >
│ │ │ │ + │ │ │ │ +
28
│ │ │ │ +
29 template< class PreBasis, class Interpolation,
│ │ │ │ +
30 class Field >
│ │ │ │ +
│ │ │ │ +
31 struct BasisMatrixBase : public DynamicMatrix<Field>
│ │ │ │
32 {
│ │ │ │ - │ │ │ │ -
34 typename Geometry::ctype, RF, Geometry::mydimension, 1
│ │ │ │ -
35 > LFE;
│ │ │ │ - │ │ │ │ -
37
│ │ │ │ -
38 static const LFE lfe;
│ │ │ │ -
39
│ │ │ │ -
40 public:
│ │ │ │ - │ │ │ │ -
43 };
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
45 template<class Geometry, class RF>
│ │ │ │ -
46 const typename Q1FiniteElementFactory<Geometry, RF>::LFE
│ │ │ │ -
47 Q1FiniteElementFactory<Geometry, RF>::lfe;
│ │ │ │ -
48}
│ │ │ │ -
49
│ │ │ │ -
50#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
33 typedef DynamicMatrix<Field> Matrix;
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
35 BasisMatrixBase( const PreBasis& preBasis,
│ │ │ │ +
36 const Interpolation& localInterpolation )
│ │ │ │ +
37 : cols_(preBasis.size())
│ │ │ │ +
38 {
│ │ │ │ +
39 localInterpolation.interpolate( preBasis, *this );
│ │ │ │ +
40 this->invert();
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
42 unsigned int cols () const
│ │ │ │ +
43 {
│ │ │ │ +
44 return cols_;
│ │ │ │ +
45 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
46 unsigned int rows () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return Matrix::rows();
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50 private:
│ │ │ │ +
51 unsigned int cols_;
│ │ │ │ +
52 };
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
54 template< GeometryType::Id geometryId, class F,
│ │ │ │ +
55 class Interpolation,
│ │ │ │ +
56 class Field >
│ │ │ │ +
│ │ │ │ +
57 struct BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field >
│ │ │ │ +
58 : public BasisMatrixBase< const MonomialBasis< geometryId, F >, Interpolation, Field >
│ │ │ │ +
59 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
62 typedef typename Base::Matrix Matrix;
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
64 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ +
65 const Interpolation& localInterpolation )
│ │ │ │ +
66 : Base(preBasis, localInterpolation)
│ │ │ │ +
67 {}
│ │ │ │ +
│ │ │ │ +
68 template <class Vector>
│ │ │ │ +
│ │ │ │ +
69 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
70 {
│ │ │ │ +
71 const unsigned int N = Matrix::rows();
│ │ │ │ +
72 assert( Matrix::cols() == N && vec.size() == N );
│ │ │ │ +
73 // note: that the transposed matrix is computed,
│ │ │ │ +
74 // and is square
│ │ │ │ +
75 for (unsigned int i=0; i<N; ++i)
│ │ │ │ +
76 field_cast((*this)[i][row],vec[i]);
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78 };
│ │ │ │ +
│ │ │ │ +
79 template< int dim, class F,
│ │ │ │ +
80 class Interpolation,
│ │ │ │ +
81 class Field >
│ │ │ │ +
│ │ │ │ +
82 struct BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field >
│ │ │ │ +
83 : public BasisMatrixBase< const VirtualMonomialBasis< dim, F >, Interpolation, Field >
│ │ │ │ +
84 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
87 typedef typename Base::Matrix Matrix;
│ │ │ │ +
88
│ │ │ │ +
│ │ │ │ +
89 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ +
90 const Interpolation& localInterpolation )
│ │ │ │ +
91 : Base(preBasis, localInterpolation)
│ │ │ │ +
92 {}
│ │ │ │ +
│ │ │ │ +
93 template <class Vector>
│ │ │ │ +
│ │ │ │ +
94 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
95 {
│ │ │ │ +
96 const unsigned int N = Matrix::rows();
│ │ │ │ +
97 assert( Matrix::cols() == N && vec.size() == N );
│ │ │ │ +
98 // note: that the transposed matrix is computed,
│ │ │ │ +
99 // and is square
│ │ │ │ +
100 for (unsigned int i=0; i<N; ++i)
│ │ │ │ +
101 field_cast((*this)[i][row],vec[i]);
│ │ │ │ +
102 }
│ │ │ │ +
│ │ │ │ +
103 };
│ │ │ │ +
│ │ │ │ +
104 template< class Eval, class CM, class D, class R,
│ │ │ │ +
105 class Interpolation,
│ │ │ │ +
106 class Field >
│ │ │ │ +
│ │ │ │ +
107 struct BasisMatrix< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
│ │ │ │ +
108 : public BasisMatrixBase< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
│ │ │ │ +
109 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
112 typedef typename Base::Matrix Matrix;
│ │ │ │ +
113
│ │ │ │ +
│ │ │ │ +
114 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ +
115 const Interpolation& localInterpolation )
│ │ │ │ +
116 : Base(preBasis, localInterpolation),
│ │ │ │ +
117 preBasis_(preBasis)
│ │ │ │ +
118 {}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
119 unsigned int cols() const
│ │ │ │ +
120 {
│ │ │ │ +
121 return preBasis_.matrix().baseSize() ;
│ │ │ │ +
122 }
│ │ │ │ +
│ │ │ │ +
123 template <class Vector>
│ │ │ │ +
│ │ │ │ +
124 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
125 {
│ │ │ │ +
126 assert( Matrix::rows() == Matrix::cols() );
│ │ │ │ +
127 assert( vec.size() == preBasis_.matrix().baseSize() );
│ │ │ │ +
128 assert( Matrix::cols() == preBasis_.size() );
│ │ │ │ +
129 for (unsigned int j=0; j<Matrix::cols(); ++j)
│ │ │ │ +
130 vec[j] = 0;
│ │ │ │ +
131 for (unsigned int i=0; i<Matrix::rows(); ++i)
│ │ │ │ +
132 preBasis_.matrix().
│ │ │ │ +
133 addRow(i,(*this)[i][row],vec);
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135 private:
│ │ │ │ +
136 const PreBasis& preBasis_;
│ │ │ │ +
137 };
│ │ │ │ +
│ │ │ │ +
138 template< class Eval, class CM,
│ │ │ │ +
139 class Interpolation,
│ │ │ │ +
140 class Field >
│ │ │ │ +
│ │ │ │ +
141 struct BasisMatrix< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
│ │ │ │ +
142 : public BasisMatrixBase< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
│ │ │ │ +
143 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
146 typedef typename Base::Matrix Matrix;
│ │ │ │ +
147
│ │ │ │ +
│ │ │ │ +
148 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ +
149 const Interpolation& localInterpolation )
│ │ │ │ +
150 : Base(preBasis, localInterpolation),
│ │ │ │ +
151 preBasis_(preBasis)
│ │ │ │ +
152 {}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
153 unsigned int cols() const
│ │ │ │ +
154 {
│ │ │ │ +
155 return preBasis_.matrix().baseSize() ;
│ │ │ │ +
156 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
157 unsigned int rows () const
│ │ │ │ +
158 {
│ │ │ │ +
159 assert( Matrix::rows() == preBasis_.matrix().size() );
│ │ │ │ +
160 return preBasis_.matrix().size()*CM::blockSize ;
│ │ │ │ +
161 }
│ │ │ │ +
│ │ │ │ +
162 template <class Vector>
│ │ │ │ +
│ │ │ │ +
163 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
164 {
│ │ │ │ +
165 unsigned int r = row / CM::blockSize;
│ │ │ │ +
166 assert( r < Matrix::rows() );
│ │ │ │ +
167 assert( Matrix::rows() == Matrix::cols() );
│ │ │ │ +
168 assert( vec.size() == preBasis_.matrix().baseSize() );
│ │ │ │ +
169 assert( Matrix::cols() == preBasis_.size() );
│ │ │ │ +
170 for (unsigned int j=0; j<vec.size(); ++j)
│ │ │ │ +
171 vec[j] = 0;
│ │ │ │ +
172 for (unsigned int i=0; i<Matrix::rows(); ++i)
│ │ │ │ +
173 preBasis_.matrix().
│ │ │ │ +
174 addRow(i*CM::blockSize+row%CM::blockSize,(*this)[i][r],vec);
│ │ │ │ +
175 }
│ │ │ │ +
│ │ │ │ +
176 private:
│ │ │ │ +
177 const PreBasis& preBasis_;
│ │ │ │ +
178 };
│ │ │ │ +
│ │ │ │ +
179}
│ │ │ │ +
180
│ │ │ │ +
181#endif // DUNE_BASISMATRIX_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ -
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ -
Factory for global-valued Q1 elements.
Definition q1.hh:32
│ │ │ │ -
Q1FiniteElementFactory()
default constructor
Definition q1.hh:42
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition basismatrix.hh:27
│ │ │ │ +
Definition basismatrix.hh:32
│ │ │ │ +
unsigned int cols() const
Definition basismatrix.hh:42
│ │ │ │ +
DynamicMatrix< Field > Matrix
Definition basismatrix.hh:33
│ │ │ │ +
unsigned int rows() const
Definition basismatrix.hh:46
│ │ │ │ +
BasisMatrixBase(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:35
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:69
│ │ │ │ +
const MonomialBasis< geometryId, F > PreBasis
Definition basismatrix.hh:60
│ │ │ │ + │ │ │ │ +
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:64
│ │ │ │ +
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:61
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:94
│ │ │ │ +
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:86
│ │ │ │ + │ │ │ │ +
const VirtualMonomialBasis< dim, F > PreBasis
Definition basismatrix.hh:85
│ │ │ │ +
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:89
│ │ │ │ + │ │ │ │ +
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:111
│ │ │ │ +
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:114
│ │ │ │ + │ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:124
│ │ │ │ +
const PolynomialBasis< Eval, CM, D, R > PreBasis
Definition basismatrix.hh:110
│ │ │ │ +
const PolynomialBasisWithMatrix< Eval, CM > PreBasis
Definition basismatrix.hh:144
│ │ │ │ +
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:145
│ │ │ │ + │ │ │ │ + │ │ │ │ +
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:148
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:163
│ │ │ │ + │ │ │ │ +
Definition monomialbasis.hh:440
│ │ │ │ +
Definition monomialbasis.hh:612
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │ +
Definition polynomialbasis.hh:348
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,75 +1,326 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -q1.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +basismatrix.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ -7#define DUNE_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +5#ifndef DUNE_BASISMATRIX_HH │ │ │ │ │ +6#define DUNE_BASISMATRIX_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 14 │ │ │ │ │ 15namespace _D_u_n_e │ │ │ │ │ 16{ │ │ │ │ │ -17 │ │ │ │ │ -19 │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 class _Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y : │ │ │ │ │ -26 public _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y< │ │ │ │ │ -27 LagrangeCubeLocalFiniteElement< │ │ │ │ │ -28 typename Geometry::ctype, RF, Geometry::mydimension, 1 │ │ │ │ │ -29 >, │ │ │ │ │ -30 Geometry │ │ │ │ │ -31 > │ │ │ │ │ +17 /**************************************** │ │ │ │ │ +18 * A dense matrix representation of a ''polynomial'' │ │ │ │ │ +19 * basis. Its represent a basis as a linear │ │ │ │ │ +20 * combination of a second basis, i.e., a │ │ │ │ │ +21 * monomial basis. It is simular to the PolynomialBasis │ │ │ │ │ +22 * but it not derived from the LocalBasis class. │ │ │ │ │ +23 * It is used to define a ''pre basis''. │ │ │ │ │ +24 ****************************************/ │ │ │ │ │ +25 template< class PreBasis, class Interpolation, │ │ │ │ │ +26 class Field > │ │ │ │ │ +_2_7 struct _B_a_s_i_s_M_a_t_r_i_x; │ │ │ │ │ +28 │ │ │ │ │ +29 template< class PreBasis, class Interpolation, │ │ │ │ │ +30 class Field > │ │ │ │ │ +_3_1 struct _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e : public DynamicMatrix │ │ │ │ │ 32 { │ │ │ │ │ -33 typedef _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< │ │ │ │ │ -34 typename Geometry::ctype, RF, Geometry::mydimension, 1 │ │ │ │ │ -35 > _L_F_E; │ │ │ │ │ -36 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_<_L_F_E_,_ _G_e_o_m_e_t_r_y_> _B_a_s_e; │ │ │ │ │ -37 │ │ │ │ │ -38 static const _L_F_E lfe; │ │ │ │ │ -39 │ │ │ │ │ -40 public: │ │ │ │ │ -_4_2 _Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() : _B_a_s_e(lfe) {} │ │ │ │ │ -43 }; │ │ │ │ │ -44 │ │ │ │ │ -45 template │ │ │ │ │ -46 const typename Q1FiniteElementFactory::LFE │ │ │ │ │ -47 Q1FiniteElementFactory::lfe; │ │ │ │ │ -48} │ │ │ │ │ -49 │ │ │ │ │ -50#endif │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_3_3 typedef DynamicMatrix _M_a_t_r_i_x; │ │ │ │ │ +34 │ │ │ │ │ +_3_5 _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e( const PreBasis& preBasis, │ │ │ │ │ +36 const Interpolation& localInterpolation ) │ │ │ │ │ +37 : cols_(preBasis.size()) │ │ │ │ │ +38 { │ │ │ │ │ +39 localInterpolation.interpolate( preBasis, *this ); │ │ │ │ │ +40 this->invert(); │ │ │ │ │ +41 } │ │ │ │ │ +_4_2 unsigned int _c_o_l_s () const │ │ │ │ │ +43 { │ │ │ │ │ +44 return cols_; │ │ │ │ │ +45 } │ │ │ │ │ +_4_6 unsigned int _r_o_w_s () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return Matrix::rows(); │ │ │ │ │ +49 } │ │ │ │ │ +50 private: │ │ │ │ │ +51 unsigned int cols_; │ │ │ │ │ +52 }; │ │ │ │ │ +53 │ │ │ │ │ +54 template< GeometryType::Id geometryId, class F, │ │ │ │ │ +55 class Interpolation, │ │ │ │ │ +56 class Field > │ │ │ │ │ +_5_7 struct _B_a_s_i_s_M_a_t_r_i_x< const _M_o_n_o_m_i_a_l_B_a_s_i_s< geometryId, F >, Interpolation, │ │ │ │ │ +Field > │ │ │ │ │ +58 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const MonomialBasis< geometryId, F >, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +59 { │ │ │ │ │ +_6_0 typedef const _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _P_r_e_B_a_s_i_s; │ │ │ │ │ +_6_1 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ +_6_2 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ +63 │ │ │ │ │ +_6_4 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ +65 const Interpolation& localInterpolation ) │ │ │ │ │ +66 : _B_a_s_e(preBasis, localInterpolation) │ │ │ │ │ +67 {} │ │ │ │ │ +68 template │ │ │ │ │ +_6_9 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ +70 { │ │ │ │ │ +71 const unsigned int N = Matrix::rows(); │ │ │ │ │ +72 assert( Matrix::cols() == N && vec.size() == N ); │ │ │ │ │ +73 // note: that the transposed matrix is computed, │ │ │ │ │ +74 // and is square │ │ │ │ │ +75 for (unsigned int i=0; i │ │ │ │ │ +_8_2 struct _B_a_s_i_s_M_a_t_r_i_x< const _D_u_n_e::_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< dim, F >, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +83 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const VirtualMonomialBasis< dim, F >, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +84 { │ │ │ │ │ +_8_5 typedef const _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _P_r_e_B_a_s_i_s; │ │ │ │ │ +_8_6 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ +_8_7 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ +88 │ │ │ │ │ +_8_9 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ +90 const Interpolation& localInterpolation ) │ │ │ │ │ +91 : _B_a_s_e(preBasis, localInterpolation) │ │ │ │ │ +92 {} │ │ │ │ │ +93 template │ │ │ │ │ +_9_4 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ +95 { │ │ │ │ │ +96 const unsigned int N = Matrix::rows(); │ │ │ │ │ +97 assert( Matrix::cols() == N && vec.size() == N ); │ │ │ │ │ +98 // note: that the transposed matrix is computed, │ │ │ │ │ +99 // and is square │ │ │ │ │ +100 for (unsigned int i=0; i │ │ │ │ │ +_1_0_7 struct _B_a_s_i_s_M_a_t_r_i_x< const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s, Interpolation, │ │ │ │ │ +Field > │ │ │ │ │ +108 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const PolynomialBasis, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +109 { │ │ │ │ │ +_1_1_0 typedef const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_E_v_a_l_,_C_M_,_D_,_R_> _P_r_e_B_a_s_i_s; │ │ │ │ │ +_1_1_1 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ +_1_1_2 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ +113 │ │ │ │ │ +_1_1_4 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ +115 const Interpolation& localInterpolation ) │ │ │ │ │ +116 : _B_a_s_e(preBasis, localInterpolation), │ │ │ │ │ +117 preBasis_(preBasis) │ │ │ │ │ +118 {} │ │ │ │ │ +_1_1_9 unsigned int _c_o_l_s() const │ │ │ │ │ +120 { │ │ │ │ │ +121 return preBasis_.matrix().baseSize() ; │ │ │ │ │ +122 } │ │ │ │ │ +123 template │ │ │ │ │ +_1_2_4 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ +125 { │ │ │ │ │ +126 assert( Matrix::rows() == Matrix::cols() ); │ │ │ │ │ +127 assert( vec.size() == preBasis_.matrix().baseSize() ); │ │ │ │ │ +128 assert( Matrix::cols() == preBasis_.size() ); │ │ │ │ │ +129 for (unsigned int j=0; j │ │ │ │ │ +_1_4_1 struct _B_a_s_i_s_M_a_t_r_i_x< const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +142 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const PolynomialBasisWithMatrix, │ │ │ │ │ +Interpolation, Field > │ │ │ │ │ +143 { │ │ │ │ │ +_1_4_4 typedef const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_,_C_M_> _P_r_e_B_a_s_i_s; │ │ │ │ │ +_1_4_5 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ +_1_4_6 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ +147 │ │ │ │ │ +_1_4_8 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ +149 const Interpolation& localInterpolation ) │ │ │ │ │ +150 : _B_a_s_e(preBasis, localInterpolation), │ │ │ │ │ +151 preBasis_(preBasis) │ │ │ │ │ +152 {} │ │ │ │ │ +_1_5_3 unsigned int _c_o_l_s() const │ │ │ │ │ +154 { │ │ │ │ │ +155 return preBasis_.matrix().baseSize() ; │ │ │ │ │ +156 } │ │ │ │ │ +_1_5_7 unsigned int _r_o_w_s () const │ │ │ │ │ +158 { │ │ │ │ │ +159 assert( Matrix::rows() == preBasis_.matrix().size() ); │ │ │ │ │ +160 return preBasis_.matrix().size()*CM::blockSize ; │ │ │ │ │ +161 } │ │ │ │ │ +162 template │ │ │ │ │ +_1_6_3 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ +164 { │ │ │ │ │ +165 unsigned int r = row / CM::blockSize; │ │ │ │ │ +166 assert( r < Matrix::rows() ); │ │ │ │ │ +167 assert( Matrix::rows() == Matrix::cols() ); │ │ │ │ │ +168 assert( vec.size() == preBasis_.matrix().baseSize() ); │ │ │ │ │ +169 assert( Matrix::cols() == preBasis_.size() ); │ │ │ │ │ +170 for (unsigned int j=0; j Matrix │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_r_o_w_s │ │ │ │ │ +unsigned int rows() const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e │ │ │ │ │ +BasisMatrixBase(const PreBasis &preBasis, const Interpolation │ │ │ │ │ +&localInterpolation) │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ +_>_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ +_>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ +const MonomialBasis< geometryId, F > PreBasis │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ +_>_:_:_M_a_t_r_i_x │ │ │ │ │ +Base::Matrix Matrix │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ +_>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ +BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:64 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ +_>_:_:_B_a_s_e │ │ │ │ │ +BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:94 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ +BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:86 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ +Base::Matrix Matrix │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ +const VirtualMonomialBasis< dim, F > PreBasis │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ +BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ +Base::Matrix Matrix │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:112 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ +BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ +BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:114 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_c_o_l_s │ │ │ │ │ +unsigned int cols() const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:124 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ +const PolynomialBasis< Eval, CM, D, R > PreBasis │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ +const PolynomialBasisWithMatrix< Eval, CM > PreBasis │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:144 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ +BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:145 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_r_o_w_s │ │ │ │ │ +unsigned int rows() const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:157 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ +Base::Matrix Matrix │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:146 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ +BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:148 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ +_F_i_e_l_d_ _>_:_:_c_o_l_s │ │ │ │ │ +unsigned int cols() const │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:153 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk1d.hh File Reference │ │ │ │ +dune-localfunctions: polynomialbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
pk1d.hh File Reference
│ │ │ │ +
polynomialbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/utility/coeffmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ +#include <dune/localfunctions/utility/basisevaluator.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::Pk1DFiniteElement< Geometry, RF, k >
 Langrange finite element of arbitrary order on triangles. More...
class  Dune::PolynomialBasis< Eval, CM, D, R >
 
struct  Dune::Pk1DFiniteElement< Geometry, RF, k >::Traits
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DVector >
 
struct  Dune::Pk1DFiniteElementFactory< Geometry, RF, k >
 Factory for Pk1DFiniteElement objects. More...
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DomainVector >
 
class  Dune::PolynomialBasisWithMatrix< Eval, CM, D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,33 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pk1d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +polynomialbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_c_o_e_f_f_m_a_t_r_i_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ -  Langrange finite element of arbitrary order on triangles. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +struct   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_V_e_c_t_o_r_ _> │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ -  Factory for _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ + _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00341_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk1d.hh Source File │ │ │ │ +dune-localfunctions: polynomialbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,481 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pk1d.hh
│ │ │ │ +
polynomialbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_POLYNOMIALBASIS_HH
│ │ │ │ +
6#define DUNE_POLYNOMIALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
19
│ │ │ │ -
21
│ │ │ │ -
28 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 typedef typename Geometry::ctype DF;
│ │ │ │ -
31 typedef Impl::LagrangeSimplexLocalBasis<DF,RF,1,k> LocalBasis;
│ │ │ │ -
32 typedef Impl::LagrangeSimplexLocalInterpolation<LocalBasis> LocalInterpolation;
│ │ │ │ -
33
│ │ │ │ -
34 public:
│ │ │ │ -
│ │ │ │ -
38 struct Traits {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
41 LocalInterpolation,
│ │ │ │ -
42 typename Basis::Traits
│ │ │ │ - │ │ │ │ -
44 typedef Impl::LagrangeSimplexLocalCoefficients<1,k> Coefficients;
│ │ │ │ -
45 };
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47 private:
│ │ │ │ -
48 static const GeometryType gt;
│ │ │ │ -
49 static const LocalBasis localBasis;
│ │ │ │ -
50 static const LocalInterpolation localInterpolation;
│ │ │ │ -
51
│ │ │ │ -
52 typename Traits::Basis basis_;
│ │ │ │ -
53 typename Traits::Interpolation interpolation_;
│ │ │ │ -
54 typename Traits::Coefficients coefficients_;
│ │ │ │ -
55
│ │ │ │ -
56 public:
│ │ │ │ -
58
│ │ │ │ -
71 template<class VertexOrder>
│ │ │ │ -
│ │ │ │ -
72 Pk1DFiniteElement(const Geometry &geometry,
│ │ │ │ -
73 const VertexOrder& vertexOrder) :
│ │ │ │ -
74 basis_(localBasis, geometry), interpolation_(localInterpolation),
│ │ │ │ -
75 coefficients_(vertexOrder.begin(0, 0))
│ │ │ │ -
76 { }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
78 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
│ │ │ │ -
79 const typename Traits::Interpolation& interpolation() const
│ │ │ │ -
80 { return interpolation_; }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
81 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
82 { return coefficients_; }
│ │ │ │ -
│ │ │ │ -
83 const GeometryType &type() const { return gt; }
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
87 const GeometryType
│ │ │ │ -
88 Pk1DFiniteElement<Geometry, RF, k>::gt(GeometryTypes::simplex(2));
│ │ │ │ -
89
│ │ │ │ -
90 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
91 const typename Pk1DFiniteElement<Geometry, RF, k>::LocalBasis
│ │ │ │ -
92 Pk1DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
│ │ │ │ -
93
│ │ │ │ -
94 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
95 const typename Pk1DFiniteElement<Geometry, RF, k>::LocalInterpolation
│ │ │ │ -
96 Pk1DFiniteElement<Geometry, RF, k>::localInterpolation =
│ │ │ │ -
97 LocalInterpolation();
│ │ │ │ -
98
│ │ │ │ -
100
│ │ │ │ -
110 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
113
│ │ │ │ -
115
│ │ │ │ -
129 template<class VertexOrder>
│ │ │ │ -
│ │ │ │ -
130 const FiniteElement make(const Geometry& geometry,
│ │ │ │ -
131 const VertexOrder& vertexOrder)
│ │ │ │ -
132 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ -
│ │ │ │ -
133 };
│ │ │ │ -
│ │ │ │ -
134}
│ │ │ │ -
135
│ │ │ │ -
136#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
20namespace Dune
│ │ │ │ +
21{
│ │ │ │ +
22
│ │ │ │ +
23 // PolynomialBasis
│ │ │ │ +
24 // ---------------
│ │ │ │ +
25
│ │ │ │ +
63 template< class Eval, class CM, class D=double, class R=double >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
65 {
│ │ │ │ + │ │ │ │ +
67 typedef Eval Evaluator;
│ │ │ │ +
68
│ │ │ │ +
69 public:
│ │ │ │ + │ │ │ │ +
71
│ │ │ │ +
72 typedef typename CoefficientMatrix::Field StorageField;
│ │ │ │ +
73
│ │ │ │ +
74 static const unsigned int dimension = Evaluator::dimension;
│ │ │ │ +
75 static const unsigned int dimRange = Evaluator::dimRange*CoefficientMatrix::blockSize;
│ │ │ │ + │ │ │ │ +
77 R,dimRange,FieldVector<R,dimRange>,
│ │ │ │ +
78 FieldMatrix<R,dimRange,dimension> > Traits;
│ │ │ │ +
79 typedef typename Evaluator::Basis Basis;
│ │ │ │ +
80 typedef typename Evaluator::DomainVector DomainVector;
│ │ │ │ +
81 template <class Fy>
│ │ │ │ +
82 using HessianFyType = FieldVector<FieldMatrix<Fy,dimension,dimension>,dimRange>;
│ │ │ │ + │ │ │ │ +
84
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
86 const CoefficientMatrix &coeffMatrix,
│ │ │ │ +
87 unsigned int size)
│ │ │ │ +
88 : basis_(basis),
│ │ │ │ +
89 coeffMatrix_(&coeffMatrix),
│ │ │ │ +
90 eval_(basis),
│ │ │ │ + │ │ │ │ +
92 size_(size)
│ │ │ │ +
93 {
│ │ │ │ +
94 // assert(coeffMatrix_);
│ │ │ │ +
95 // assert(size_ <= coeffMatrix.size()); // !!!
│ │ │ │ +
96 }
│ │ │ │ +
│ │ │ │ +
97
│ │ │ │ +
│ │ │ │ +
98 const Basis &basis () const
│ │ │ │ +
99 {
│ │ │ │ +
100 return basis_;
│ │ │ │ +
101 }
│ │ │ │ +
│ │ │ │ +
102
│ │ │ │ +
│ │ │ │ +
103 const CoefficientMatrix &matrix () const
│ │ │ │ +
104 {
│ │ │ │ +
105 return *coeffMatrix_;
│ │ │ │ +
106 }
│ │ │ │ +
│ │ │ │ +
107
│ │ │ │ +
│ │ │ │ +
108 unsigned int order () const
│ │ │ │ +
109 {
│ │ │ │ +
110 return order_;
│ │ │ │ +
111 }
│ │ │ │ +
│ │ │ │ +
112
│ │ │ │ +
│ │ │ │ +
113 unsigned int size () const
│ │ │ │ +
114 {
│ │ │ │ +
115 return size_;
│ │ │ │ +
116 }
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
│ │ │ │ +
119 void evaluateFunction (const typename Traits::DomainType& x,
│ │ │ │ +
120 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
121 {
│ │ │ │ +
122 out.resize(size());
│ │ │ │ +
123 evaluate(x,out);
│ │ │ │ +
124 }
│ │ │ │ +
│ │ │ │ +
125
│ │ │ │ +
│ │ │ │ +
127 void evaluateJacobian (const typename Traits::DomainType& x, // position
│ │ │ │ +
128 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
129 {
│ │ │ │ +
130 out.resize(size());
│ │ │ │ +
131 jacobian(x,out);
│ │ │ │ +
132 }
│ │ │ │ +
│ │ │ │ +
133
│ │ │ │ +
│ │ │ │ +
135 void evaluateHessian (const typename Traits::DomainType& x, // position
│ │ │ │ +
136 std::vector<HessianType>& out) const // return value
│ │ │ │ +
137 {
│ │ │ │ +
138 out.resize(size());
│ │ │ │ +
139 hessian(x,out);
│ │ │ │ +
140 }
│ │ │ │ +
│ │ │ │ +
141
│ │ │ │ +
│ │ │ │ +
143 void partial (const std::array<unsigned int, dimension>& order,
│ │ │ │ +
144 const typename Traits::DomainType& in, // position
│ │ │ │ +
145 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
146 {
│ │ │ │ +
147 out.resize(size());
│ │ │ │ +
148 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
149 if (totalOrder == 0) {
│ │ │ │ +
150 evaluateFunction(in, out);
│ │ │ │ +
151 }
│ │ │ │ +
152 else if (totalOrder == 1) {
│ │ │ │ +
153 std::vector<typename Traits::JacobianType> jacs(out.size());
│ │ │ │ +
154 unsigned int k;
│ │ │ │ +
155 for (unsigned int i=0;i<order.size();++i)
│ │ │ │ +
156 if (order[i]==1) k=i;
│ │ │ │ +
157 evaluateJacobian(in, jacs);
│ │ │ │ +
158 for (unsigned int i=0;i<out.size();++i)
│ │ │ │ +
159 for (unsigned int r=0;r<Traits::RangeType::dimension;++r)
│ │ │ │ +
160 out[i][r] = jacs[i][r][k];
│ │ │ │ +
161 }
│ │ │ │ +
162 else if (totalOrder == 2) {
│ │ │ │ +
163 std::vector<HessianType> hesss(out.size());
│ │ │ │ +
164 int k=-1,l=-1;
│ │ │ │ +
165 for (unsigned int i=0;i<order.size();++i) {
│ │ │ │ +
166 if (order[i] >= 1 && k == -1)
│ │ │ │ +
167 k = i;
│ │ │ │ +
168 else if (order[i]==1) l=i;
│ │ │ │ +
169 }
│ │ │ │ +
170 if (l==-1) l=k;
│ │ │ │ +
171 evaluateHessian(in, hesss);
│ │ │ │ +
172 for (unsigned int i=0;i<out.size();++i)
│ │ │ │ +
173 for (unsigned int r=0;r<Traits::RangeType::dimension;++r)
│ │ │ │ +
174 out[i][r] = hesss[i][r][k][l];
│ │ │ │ +
175 }
│ │ │ │ +
176 else {
│ │ │ │ +
177 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
178 }
│ │ │ │ +
179 }
│ │ │ │ +
│ │ │ │ +
180
│ │ │ │ +
181 template< unsigned int deriv, class F >
│ │ │ │ +
│ │ │ │ +
182 void evaluate ( const DomainVector &x, F *values ) const
│ │ │ │ +
183 {
│ │ │ │ +
184 coeffMatrix_->mult( eval_.template evaluate<deriv>( x ), size(), values);
│ │ │ │ +
185 }
│ │ │ │ +
│ │ │ │ +
186 template< unsigned int deriv, class DVector, class F >
│ │ │ │ +
│ │ │ │ +
187 void evaluate ( const DVector &x, F *values ) const
│ │ │ │ +
188 {
│ │ │ │ +
189 assert( DVector::dimension == dimension);
│ │ │ │ +
190 DomainVector bx;
│ │ │ │ +
191 for( int d = 0; d < dimension; ++d )
│ │ │ │ +
192 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
193 evaluate<deriv>( bx, values );
│ │ │ │ +
194 }
│ │ │ │ +
│ │ │ │ +
195
│ │ │ │ +
196 template <bool dummy,class DVector>
│ │ │ │ +
│ │ │ │ +
197 struct Convert
│ │ │ │ +
198 {
│ │ │ │ +
│ │ │ │ +
199 static DomainVector apply( const DVector &x )
│ │ │ │ +
200 {
│ │ │ │ +
201 assert( DVector::dimension == dimension);
│ │ │ │ +
202 DomainVector bx;
│ │ │ │ +
203 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ +
204 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
205 return bx;
│ │ │ │ +
206 }
│ │ │ │ +
│ │ │ │ +
207 };
│ │ │ │ +
│ │ │ │ +
208 template <bool dummy>
│ │ │ │ +
│ │ │ │ +
209 struct Convert<dummy,DomainVector>
│ │ │ │ +
210 {
│ │ │ │ +
│ │ │ │ +
211 static const DomainVector &apply( const DomainVector &x )
│ │ │ │ +
212 {
│ │ │ │ +
213 return x;
│ │ │ │ +
214 }
│ │ │ │ +
│ │ │ │ +
215 };
│ │ │ │ +
│ │ │ │ +
216 template< unsigned int deriv, class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
217 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ +
218 {
│ │ │ │ +
219 assert(values.size()>=size());
│ │ │ │ + │ │ │ │ +
221 coeffMatrix_->mult( eval_.template evaluate<deriv>( bx ), values );
│ │ │ │ +
222 }
│ │ │ │ +
│ │ │ │ +
223
│ │ │ │ +
224 template <class Fy>
│ │ │ │ +
│ │ │ │ +
225 void evaluate ( const DomainVector &x, std::vector<FieldVector<Fy,dimRange> > &values ) const
│ │ │ │ +
226 {
│ │ │ │ +
227 evaluate<0>(x,values);
│ │ │ │ +
228 }
│ │ │ │ +
│ │ │ │ +
229 template< class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
230 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ +
231 {
│ │ │ │ +
232 assert( DVector::dimension == dimension);
│ │ │ │ +
233 DomainVector bx;
│ │ │ │ +
234 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ +
235 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
236 evaluate<0>( bx, values );
│ │ │ │ +
237 }
│ │ │ │ +
│ │ │ │ +
238
│ │ │ │ +
239 template< unsigned int deriv, class Vector >
│ │ │ │ +
│ │ │ │ +
240 void evaluateSingle ( const DomainVector &x, Vector &values ) const
│ │ │ │ +
241 {
│ │ │ │ +
242 assert(values.size()>=size());
│ │ │ │ +
243 coeffMatrix_->template mult<deriv>( eval_.template evaluate<deriv>( x ), values );
│ │ │ │ +
244 }
│ │ │ │ +
│ │ │ │ +
245 template< unsigned int deriv, class Fy >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
247 std::vector< FieldVector<FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size>,dimRange> > &values) const
│ │ │ │ +
248 {
│ │ │ │ +
249 evaluateSingle<deriv>(x,reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange> >&>(values));
│ │ │ │ +
250 }
│ │ │ │ +
│ │ │ │ +
251 template< unsigned int deriv, class Fy >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
253 std::vector< FieldVector<LFETensor<Fy,dimension,deriv>,dimRange> > &values) const
│ │ │ │ +
254 {
│ │ │ │ +
255 evaluateSingle<deriv>(x,reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange> >&>(values));
│ │ │ │ +
256 }
│ │ │ │ +
│ │ │ │ +
257
│ │ │ │ +
258 template <class Fy>
│ │ │ │ +
│ │ │ │ +
259 void jacobian ( const DomainVector &x,
│ │ │ │ +
260 std::vector<FieldMatrix<Fy,dimRange,dimension> > &values ) const
│ │ │ │ +
261 {
│ │ │ │ +
262 assert(values.size()>=size());
│ │ │ │ +
263 evaluateSingle<1>(x,reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension> >&>(values));
│ │ │ │ +
264 }
│ │ │ │ +
│ │ │ │ +
265 template< class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
266 void jacobian ( const DVector &x, RVector &values ) const
│ │ │ │ +
267 {
│ │ │ │ +
268 assert( DVector::dimension == dimension);
│ │ │ │ +
269 DomainVector bx;
│ │ │ │ +
270 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ +
271 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
272 jacobian( bx, values );
│ │ │ │ +
273 }
│ │ │ │ +
│ │ │ │ +
274 template <class Fy>
│ │ │ │ +
│ │ │ │ +
275 void hessian ( const DomainVector &x,
│ │ │ │ +
276 std::vector<HessianFyType<Fy>> &values ) const
│ │ │ │ +
277 {
│ │ │ │ +
278 assert(values.size()>=size());
│ │ │ │ +
279 // only upper part of hessians matrix is computed - so we have
│ │ │ │ +
280 // y[0] = FV< FV<Fy,d*(d+1)/2>, dimRange>
│ │ │ │ +
281 const unsigned int hsize = LFETensor<Fy,dimension,2>::size;
│ │ │ │ +
282 std::vector< FieldVector< FieldVector<Fy,hsize>, dimRange> > y( size() );
│ │ │ │ +
283 evaluateSingle<2>(x, y);
│ │ │ │ +
284 unsigned int q = 0;
│ │ │ │ +
285 for (unsigned int i = 0; i < size(); ++i)
│ │ │ │ +
286 for (unsigned int r = 0; r < dimRange; ++r)
│ │ │ │ +
287 {
│ │ │ │ +
288 q = 0;
│ │ │ │ +
289 // tensor-based things follow unintuitive index scheme
│ │ │ │ +
290 // e.g. for dim = 3, the k-l index of y is 00,01,11,02,12,22, i.e. partial derivatives
│ │ │ │ +
291 // are ordered: xx,xy,yy,xz,yz,zz
│ │ │ │ +
292
│ │ │ │ +
293 // Fill values 'directionwise'
│ │ │ │ +
294 for (unsigned int k = 0; k < dimension; ++k)
│ │ │ │ +
295 for (unsigned int l = 0; l <= k; ++l)
│ │ │ │ +
296 {
│ │ │ │ +
297
│ │ │ │ +
298 values[i][r][k][l] = y[i][r][q];
│ │ │ │ +
299 values[i][r][l][k] = y[i][r][q];
│ │ │ │ +
300 assert(q < hsize);
│ │ │ │ +
301 ++q;
│ │ │ │ +
302 }
│ │ │ │ +
303 }
│ │ │ │ +
304 // evaluateSingle<2>(x,reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension*dimension> >&>(values));
│ │ │ │ +
305 }
│ │ │ │ +
│ │ │ │ +
306 template< class DVector, class HVector >
│ │ │ │ +
│ │ │ │ +
307 void hessian ( const DVector &x, HVector &values ) const
│ │ │ │ +
308 {
│ │ │ │ +
309 assert( DVector::dimension == dimension);
│ │ │ │ +
310 DomainVector bx;
│ │ │ │ +
311 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ +
312 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
313 hessian( bx, values );
│ │ │ │ +
314 }
│ │ │ │ +
│ │ │ │ +
315
│ │ │ │ +
316 template <class Fy>
│ │ │ │ +
│ │ │ │ +
317 void integrate ( std::vector<Fy> &values ) const
│ │ │ │ +
318 {
│ │ │ │ +
319 assert(values.size()>=size());
│ │ │ │ +
320 coeffMatrix_->mult( eval_.template integrate(), values );
│ │ │ │ +
321 }
│ │ │ │ +
│ │ │ │ +
322
│ │ │ │ +
323 protected:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
325 : basis_(other.basis_),
│ │ │ │ + │ │ │ │ +
327 eval_(basis_),
│ │ │ │ + │ │ │ │ +
329 size_(other.size_)
│ │ │ │ +
330 {}
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
332 const Basis &basis_;
│ │ │ │ + │ │ │ │ +
334 mutable Evaluator eval_;
│ │ │ │ +
335 unsigned int order_,size_;
│ │ │ │ +
336 };
│ │ │ │ +
│ │ │ │ +
337
│ │ │ │ +
344 template< class Eval, class CM = SparseCoeffMatrix<typename Eval::Field,Eval::dimRange>,
│ │ │ │ +
345 class D=double, class R=double>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
347 : public PolynomialBasis< Eval, CM, D, R >
│ │ │ │ +
348 {
│ │ │ │ +
349 public:
│ │ │ │ + │ │ │ │ +
351
│ │ │ │ +
352 private:
│ │ │ │ +
353 typedef Eval Evaluator;
│ │ │ │ +
354
│ │ │ │ + │ │ │ │ + │ │ │ │ +
357
│ │ │ │ +
358 public:
│ │ │ │ +
359 typedef typename Base::Basis Basis;
│ │ │ │ +
360
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
362 : Base(basis,coeffMatrix_,0)
│ │ │ │ +
363 {}
│ │ │ │ +
│ │ │ │ +
364
│ │ │ │ +
365 template <class Matrix>
│ │ │ │ +
│ │ │ │ +
366 void fill(const Matrix& matrix)
│ │ │ │ +
367 {
│ │ │ │ +
368 coeffMatrix_.fill(matrix);
│ │ │ │ +
369 this->size_ = coeffMatrix_.size();
│ │ │ │ +
370 }
│ │ │ │ +
│ │ │ │ +
371 template <class Matrix>
│ │ │ │ +
│ │ │ │ +
372 void fill(const Matrix& matrix,int size)
│ │ │ │ +
373 {
│ │ │ │ +
374 coeffMatrix_.fill(matrix);
│ │ │ │ +
375 assert(size<=coeffMatrix_.size());
│ │ │ │ +
376 this->size_ = size;
│ │ │ │ +
377 }
│ │ │ │ +
│ │ │ │ +
378
│ │ │ │ +
379 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
382 CoefficientMatrix coeffMatrix_;
│ │ │ │ +
383 };
│ │ │ │ +
│ │ │ │ +
384}
│ │ │ │ +
385#endif // DUNE_POLYNOMIALBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ -
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ -
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ -
Langrange finite element of arbitrary order on triangles.
Definition pk1d.hh:29
│ │ │ │ -
Pk1DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder)
construct a Pk1DFiniteElement
Definition pk1d.hh:72
│ │ │ │ -
const Traits::Basis & basis() const
Definition pk1d.hh:78
│ │ │ │ -
const GeometryType & type() const
Definition pk1d.hh:83
│ │ │ │ -
const Traits::Coefficients & coefficients() const
Definition pk1d.hh:81
│ │ │ │ -
const Traits::Interpolation & interpolation() const
Definition pk1d.hh:79
│ │ │ │ -
Definition pk1d.hh:38
│ │ │ │ -
ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis
Definition pk1d.hh:39
│ │ │ │ -
LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > Interpolation
Definition pk1d.hh:43
│ │ │ │ -
Impl::LagrangeSimplexLocalCoefficients< 1, k > Coefficients
Definition pk1d.hh:44
│ │ │ │ -
Factory for Pk1DFiniteElement objects.
Definition pk1d.hh:111
│ │ │ │ -
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct Pk1DFiniteElementFactory
Definition pk1d.hh:130
│ │ │ │ -
Pk1DFiniteElement< Geometry, RF, k > FiniteElement
Definition pk1d.hh:112
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │ +
void evaluate(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:230
│ │ │ │ +
void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > &values) const
Definition polynomialbasis.hh:225
│ │ │ │ +
PolynomialBasis(const PolynomialBasis &other)
Definition polynomialbasis.hh:324
│ │ │ │ +
void evaluate(const DVector &x, F *values) const
Definition polynomialbasis.hh:187
│ │ │ │ +
void evaluateHessian(const typename Traits::DomainType &x, std::vector< HessianType > &out) const
Evaluate Jacobian of all shape functions.
Definition polynomialbasis.hh:135
│ │ │ │ +
CoefficientMatrix::Field StorageField
Definition polynomialbasis.hh:72
│ │ │ │ +
static const unsigned int dimRange
Definition polynomialbasis.hh:75
│ │ │ │ +
void jacobian(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:266
│ │ │ │ +
Evaluator::DomainVector DomainVector
Definition polynomialbasis.hh:80
│ │ │ │ +
Evaluator::Basis Basis
Definition polynomialbasis.hh:79
│ │ │ │ +
void evaluateSingle(const DomainVector &x, Vector &values) const
Definition polynomialbasis.hh:240
│ │ │ │ +
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< Fy, dimension, deriv >, dimRange > > &values) const
Definition polynomialbasis.hh:252
│ │ │ │ +
void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, dimension > > &values) const
Definition polynomialbasis.hh:259
│ │ │ │ +
const CoefficientMatrix & matrix() const
Definition polynomialbasis.hh:103
│ │ │ │ +
const Basis & basis_
Definition polynomialbasis.hh:332
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &x, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition polynomialbasis.hh:119
│ │ │ │ +
static const unsigned int dimension
Definition polynomialbasis.hh:74
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &x, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition polynomialbasis.hh:127
│ │ │ │ +
PolynomialBasis & operator=(const PolynomialBasis &)
│ │ │ │ +
const CoefficientMatrix * coeffMatrix_
Definition polynomialbasis.hh:333
│ │ │ │ +
void integrate(std::vector< Fy > &values) const
Definition polynomialbasis.hh:317
│ │ │ │ +
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │ +
void evaluate(const DomainVector &x, F *values) const
Definition polynomialbasis.hh:182
│ │ │ │ +
void hessian(const DVector &x, HVector &values) const
Definition polynomialbasis.hh:307
│ │ │ │ +
CM CoefficientMatrix
Definition polynomialbasis.hh:70
│ │ │ │ +
HessianFyType< R > HessianType
Definition polynomialbasis.hh:83
│ │ │ │ +
LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits
Definition polynomialbasis.hh:78
│ │ │ │ +
unsigned int order_
Definition polynomialbasis.hh:335
│ │ │ │ +
void hessian(const DomainVector &x, std::vector< HessianFyType< Fy > > &values) const
Definition polynomialbasis.hh:275
│ │ │ │ +
void evaluate(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:217
│ │ │ │ +
PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, unsigned int size)
Definition polynomialbasis.hh:85
│ │ │ │ +
FieldVector< FieldMatrix< Fy, dimension, dimension >, dimRange > HessianFyType
Definition polynomialbasis.hh:82
│ │ │ │ +
unsigned int order() const
Definition polynomialbasis.hh:108
│ │ │ │ +
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > &values) const
Definition polynomialbasis.hh:246
│ │ │ │ +
const Basis & basis() const
Definition polynomialbasis.hh:98
│ │ │ │ +
void partial(const std::array< unsigned int, dimension > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition polynomialbasis.hh:143
│ │ │ │ +
unsigned int size_
Definition polynomialbasis.hh:335
│ │ │ │ +
Evaluator eval_
Definition polynomialbasis.hh:334
│ │ │ │ +
Definition polynomialbasis.hh:198
│ │ │ │ +
static DomainVector apply(const DVector &x)
Definition polynomialbasis.hh:199
│ │ │ │ +
static const DomainVector & apply(const DomainVector &x)
Definition polynomialbasis.hh:211
│ │ │ │ +
Definition polynomialbasis.hh:348
│ │ │ │ +
PolynomialBasisWithMatrix(const Basis &basis)
Definition polynomialbasis.hh:361
│ │ │ │ +
CM CoefficientMatrix
Definition polynomialbasis.hh:350
│ │ │ │ +
void fill(const Matrix &matrix, int size)
Definition polynomialbasis.hh:372
│ │ │ │ +
Base::Basis Basis
Definition polynomialbasis.hh:359
│ │ │ │ +
void fill(const Matrix &matrix)
Definition polynomialbasis.hh:366
│ │ │ │ +
Definition tensor.hh:33
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,158 +1,538 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pk1d.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +polynomialbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ +6#define DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_c_o_e_f_f_m_a_t_r_i_x_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h> │ │ │ │ │ 19 │ │ │ │ │ -21 │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ -30 typedef typename Geometry::ctype DF; │ │ │ │ │ -31 typedef Impl::LagrangeSimplexLocalBasis LocalBasis; │ │ │ │ │ -32 typedef Impl::LagrangeSimplexLocalInterpolation │ │ │ │ │ -LocalInterpolation; │ │ │ │ │ -33 │ │ │ │ │ -34 public: │ │ │ │ │ -_3_8 struct _T_r_a_i_t_s { │ │ │ │ │ -_3_9 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _B_a_s_i_s; │ │ │ │ │ -40 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r< │ │ │ │ │ -41 LocalInterpolation, │ │ │ │ │ -42 typename _B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -_4_3 > _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_4_4 typedef Impl::LagrangeSimplexLocalCoefficients<1,k> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -45 }; │ │ │ │ │ -46 │ │ │ │ │ -47 private: │ │ │ │ │ -48 static const GeometryType gt; │ │ │ │ │ -49 static const LocalBasis localBasis; │ │ │ │ │ -50 static const LocalInterpolation localInterpolation; │ │ │ │ │ -51 │ │ │ │ │ -52 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ -53 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ -54 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ -55 │ │ │ │ │ -56 public: │ │ │ │ │ -58 │ │ │ │ │ -71 template │ │ │ │ │ -_7_2 _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry &geometry, │ │ │ │ │ -73 const VertexOrder& vertexOrder) : │ │ │ │ │ -74 basis_(localBasis, geometry), interpolation_(localInterpolation), │ │ │ │ │ -75 coefficients_(vertexOrder.begin(0, 0)) │ │ │ │ │ -76 { } │ │ │ │ │ -77 │ │ │ │ │ -_7_8 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ -_7_9 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -80 { return interpolation_; } │ │ │ │ │ -_8_1 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -82 { return coefficients_; } │ │ │ │ │ -_8_3 const GeometryType &_t_y_p_e() const { return gt; } │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ -86 template │ │ │ │ │ -87 const GeometryType │ │ │ │ │ -88 Pk1DFiniteElement::gt(GeometryTypes::simplex(2)); │ │ │ │ │ -89 │ │ │ │ │ -90 template │ │ │ │ │ -91 const typename Pk1DFiniteElement::LocalBasis │ │ │ │ │ -92 Pk1DFiniteElement::localBasis = LocalBasis(); │ │ │ │ │ -93 │ │ │ │ │ -94 template │ │ │ │ │ -95 const typename Pk1DFiniteElement::LocalInterpolation │ │ │ │ │ -96 Pk1DFiniteElement::localInterpolation = │ │ │ │ │ -97 LocalInterpolation(); │ │ │ │ │ -98 │ │ │ │ │ -100 │ │ │ │ │ -110 template │ │ │ │ │ -_1_1_1 struct _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ -_1_1_2 typedef _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -113 │ │ │ │ │ -115 │ │ │ │ │ -129 template │ │ │ │ │ -_1_3_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ -131 const VertexOrder& vertexOrder) │ │ │ │ │ -132 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ -133 }; │ │ │ │ │ -134} │ │ │ │ │ -135 │ │ │ │ │ -136#endif │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +20namespace _D_u_n_e │ │ │ │ │ +21{ │ │ │ │ │ +22 │ │ │ │ │ +23 // PolynomialBasis │ │ │ │ │ +24 // --------------- │ │ │ │ │ +25 │ │ │ │ │ +63 template< class Eval, class CM, class D=double, class R=double > │ │ │ │ │ +_6_4 class _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +65 { │ │ │ │ │ +66 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_ _> _T_h_i_s; │ │ │ │ │ +67 typedef Eval Evaluator; │ │ │ │ │ +68 │ │ │ │ │ +69 public: │ │ │ │ │ +_7_0 typedef CM _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ +71 │ │ │ │ │ +_7_2 typedef typename CoefficientMatrix::Field _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +73 │ │ │ │ │ +_7_4 static const unsigned int _d_i_m_e_n_s_i_o_n = Evaluator::dimension; │ │ │ │ │ +_7_5 static const unsigned int _d_i_m_R_a_n_g_e = Evaluator::dimRange*CoefficientMatrix:: │ │ │ │ │ +blockSize; │ │ │ │ │ +76 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_e_n_s_i_o_n_>, │ │ │ │ │ +77 R,_d_i_m_R_a_n_g_e,FieldVector, │ │ │ │ │ +_7_8 FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +_7_9 typedef typename Evaluator::Basis _B_a_s_i_s; │ │ │ │ │ +_8_0 typedef typename Evaluator::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +81 template │ │ │ │ │ +_8_2 using _H_e_s_s_i_a_n_F_y_T_y_p_e = │ │ │ │ │ +FieldVector,_d_i_m_R_a_n_g_e>; │ │ │ │ │ +_8_3 using _H_e_s_s_i_a_n_T_y_p_e = _H_e_s_s_i_a_n_F_y_T_y_p_e_<_R_>; │ │ │ │ │ +84 │ │ │ │ │ +_8_5 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s (const _B_a_s_i_s &_b_a_s_i_s, │ │ │ │ │ +86 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x &coeffMatrix, │ │ │ │ │ +87 unsigned int _s_i_z_e) │ │ │ │ │ +88 : _b_a_s_i_s__(_b_a_s_i_s), │ │ │ │ │ +89 _c_o_e_f_f_M_a_t_r_i_x__(&coeffMatrix), │ │ │ │ │ +90 _e_v_a_l__(_b_a_s_i_s), │ │ │ │ │ +91 _o_r_d_e_r__(_b_a_s_i_s._o_r_d_e_r()), │ │ │ │ │ +92 _s_i_z_e__(_s_i_z_e) │ │ │ │ │ +93 { │ │ │ │ │ +94 // assert(coeffMatrix_); │ │ │ │ │ +95 // assert(size_ <= coeffMatrix.size()); // !!! │ │ │ │ │ +96 } │ │ │ │ │ +97 │ │ │ │ │ +_9_8 const _B_a_s_i_s &_b_a_s_i_s () const │ │ │ │ │ +99 { │ │ │ │ │ +100 return _b_a_s_i_s__; │ │ │ │ │ +101 } │ │ │ │ │ +102 │ │ │ │ │ +_1_0_3 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x &_m_a_t_r_i_x () const │ │ │ │ │ +104 { │ │ │ │ │ +105 return *_c_o_e_f_f_M_a_t_r_i_x__; │ │ │ │ │ +106 } │ │ │ │ │ +107 │ │ │ │ │ +_1_0_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ +109 { │ │ │ │ │ +110 return _o_r_d_e_r__; │ │ │ │ │ +111 } │ │ │ │ │ +112 │ │ │ │ │ +_1_1_3 unsigned int _s_i_z_e () const │ │ │ │ │ +114 { │ │ │ │ │ +115 return _s_i_z_e__; │ │ │ │ │ +116 } │ │ │ │ │ +117 │ │ │ │ │ +_1_1_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ +120 std::vector& out) const │ │ │ │ │ +121 { │ │ │ │ │ +122 out.resize(_s_i_z_e()); │ │ │ │ │ +123 _e_v_a_l_u_a_t_e(x,out); │ │ │ │ │ +124 } │ │ │ │ │ +125 │ │ │ │ │ +_1_2_7 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, // position │ │ │ │ │ +128 std::vector& out) const // return value │ │ │ │ │ +129 { │ │ │ │ │ +130 out.resize(_s_i_z_e()); │ │ │ │ │ +131 _j_a_c_o_b_i_a_n(x,out); │ │ │ │ │ +132 } │ │ │ │ │ +133 │ │ │ │ │ +_1_3_5 void _e_v_a_l_u_a_t_e_H_e_s_s_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, // position │ │ │ │ │ +136 std::vector& out) const // return value │ │ │ │ │ +137 { │ │ │ │ │ +138 out.resize(_s_i_z_e()); │ │ │ │ │ +139 _h_e_s_s_i_a_n(x,out); │ │ │ │ │ +140 } │ │ │ │ │ +141 │ │ │ │ │ +_1_4_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +144 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +145 std::vector& out) const // return value │ │ │ │ │ +146 { │ │ │ │ │ +147 out.resize(_s_i_z_e()); │ │ │ │ │ +148 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +149 if (totalOrder == 0) { │ │ │ │ │ +150 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +151 } │ │ │ │ │ +152 else if (totalOrder == 1) { │ │ │ │ │ +153 std::vector jacs(out.size()); │ │ │ │ │ +154 unsigned int k; │ │ │ │ │ +155 for (unsigned int i=0;i<_o_r_d_e_r.size();++i) │ │ │ │ │ +156 if (_o_r_d_e_r[i]==1) k=i; │ │ │ │ │ +157 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(in, jacs); │ │ │ │ │ +158 for (unsigned int i=0;i hesss(out.size()); │ │ │ │ │ +164 int k=-1,l=-1; │ │ │ │ │ +165 for (unsigned int i=0;i<_o_r_d_e_r.size();++i) { │ │ │ │ │ +166 if (_o_r_d_e_r[i] >= 1 && k == -1) │ │ │ │ │ +167 k = i; │ │ │ │ │ +168 else if (_o_r_d_e_r[i]==1) l=i; │ │ │ │ │ +169 } │ │ │ │ │ +170 if (l==-1) l=k; │ │ │ │ │ +171 _e_v_a_l_u_a_t_e_H_e_s_s_i_a_n(in, hesss); │ │ │ │ │ +172 for (unsigned int i=0;i │ │ │ │ │ +_1_8_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, F *values ) const │ │ │ │ │ +183 { │ │ │ │ │ +184 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template evaluate( x ), _s_i_z_e(), values); │ │ │ │ │ +185 } │ │ │ │ │ +186 template< unsigned int deriv, class DVector, class F > │ │ │ │ │ +_1_8_7 void _e_v_a_l_u_a_t_e ( const DVector &x, F *values ) const │ │ │ │ │ +188 { │ │ │ │ │ +189 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +190 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +191 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +192 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +193 evaluate( bx, values ); │ │ │ │ │ +194 } │ │ │ │ │ +195 │ │ │ │ │ +196 template │ │ │ │ │ +_1_9_7 struct _C_o_n_v_e_r_t │ │ │ │ │ +198 { │ │ │ │ │ +_1_9_9 static _D_o_m_a_i_n_V_e_c_t_o_r _a_p_p_l_y( const DVector &x ) │ │ │ │ │ +200 { │ │ │ │ │ +201 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +202 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +203 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +204 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +205 return bx; │ │ │ │ │ +206 } │ │ │ │ │ +207 }; │ │ │ │ │ +208 template │ │ │ │ │ +_2_0_9 struct _C_o_n_v_e_r_t │ │ │ │ │ +210 { │ │ │ │ │ +_2_1_1 static const _D_o_m_a_i_n_V_e_c_t_o_r &_a_p_p_l_y( const _D_o_m_a_i_n_V_e_c_t_o_r &x ) │ │ │ │ │ +212 { │ │ │ │ │ +213 return x; │ │ │ │ │ +214 } │ │ │ │ │ +215 }; │ │ │ │ │ +216 template< unsigned int deriv, class DVector, class RVector > │ │ │ │ │ +_2_1_7 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ +218 { │ │ │ │ │ +219 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ +220 const _D_o_m_a_i_n_V_e_c_t_o_r &bx = _C_o_n_v_e_r_t_<_t_r_u_e_,_D_V_e_c_t_o_r_>_:_:_a_p_p_l_y(x); │ │ │ │ │ +221 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template evaluate( bx ), values ); │ │ │ │ │ +222 } │ │ │ │ │ +223 │ │ │ │ │ +224 template │ │ │ │ │ +_2_2_5 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, std::vector │ │ │ │ │ +> &values ) const │ │ │ │ │ +226 { │ │ │ │ │ +227 evaluate<0>(x,values); │ │ │ │ │ +228 } │ │ │ │ │ +229 template< class DVector, class RVector > │ │ │ │ │ +_2_3_0 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ +231 { │ │ │ │ │ +232 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +233 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +234 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +235 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +236 evaluate<0>( bx, values ); │ │ │ │ │ +237 } │ │ │ │ │ +238 │ │ │ │ │ +239 template< unsigned int deriv, class Vector > │ │ │ │ │ +_2_4_0 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, Vector &values ) const │ │ │ │ │ +241 { │ │ │ │ │ +242 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ +243 _c_o_e_f_f_M_a_t_r_i_x__->template mult( _e_v_a_l__.template evaluate( x ), │ │ │ │ │ +values ); │ │ │ │ │ +244 } │ │ │ │ │ +245 template< unsigned int deriv, class Fy > │ │ │ │ │ +_2_4_6 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +247 std::vector< FieldVector_:_: │ │ │ │ │ +_s_i_z_e>,_d_i_m_R_a_n_g_e> > &values) const │ │ │ │ │ +248 { │ │ │ │ │ +249 evaluateSingle(x,reinterpret_cast::size*_d_i_m_R_a_n_g_e> >&>(values)); │ │ │ │ │ +250 } │ │ │ │ │ +251 template< unsigned int deriv, class Fy > │ │ │ │ │ +_2_5_2 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +253 std::vector< FieldVector<_L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_e_n_s_i_o_n_,_d_e_r_i_v_>,_d_i_m_R_a_n_g_e> > &values) │ │ │ │ │ +const │ │ │ │ │ +254 { │ │ │ │ │ +255 evaluateSingle(x,reinterpret_cast::size*_d_i_m_R_a_n_g_e> >&>(values)); │ │ │ │ │ +256 } │ │ │ │ │ +257 │ │ │ │ │ +258 template │ │ │ │ │ +_2_5_9 void _j_a_c_o_b_i_a_n ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +260 std::vector > &values ) const │ │ │ │ │ +261 { │ │ │ │ │ +262 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ +263 evaluateSingle<1>(x,reinterpret_cast >&>(values)); │ │ │ │ │ +264 } │ │ │ │ │ +265 template< class DVector, class RVector > │ │ │ │ │ +_2_6_6 void _j_a_c_o_b_i_a_n ( const DVector &x, RVector &values ) const │ │ │ │ │ +267 { │ │ │ │ │ +268 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +269 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +270 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +271 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +272 _j_a_c_o_b_i_a_n( bx, values ); │ │ │ │ │ +273 } │ │ │ │ │ +274 template │ │ │ │ │ +_2_7_5 void _h_e_s_s_i_a_n ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +276 std::vector<_H_e_s_s_i_a_n_F_y_T_y_p_e_<_F_y_>> &values ) const │ │ │ │ │ +277 { │ │ │ │ │ +278 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ +279 // only upper part of hessians matrix is computed - so we have │ │ │ │ │ +280 // y[0] = FV< FV, dimRange> │ │ │ │ │ +281 const unsigned int hsize = _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_e_n_s_i_o_n_,_2_>_:_:_s_i_z_e; │ │ │ │ │ +282 std::vector< FieldVector< FieldVector, _d_i_m_R_a_n_g_e> > y( _s_i_z_e() ); │ │ │ │ │ +283 evaluateSingle<2>(x, y); │ │ │ │ │ +284 unsigned int q = 0; │ │ │ │ │ +285 for (unsigned int i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +286 for (unsigned int r = 0; r < _d_i_m_R_a_n_g_e; ++r) │ │ │ │ │ +287 { │ │ │ │ │ +288 q = 0; │ │ │ │ │ +289 // tensor-based things follow unintuitive index scheme │ │ │ │ │ +290 // e.g. for dim = 3, the k-l index of y is 00,01,11,02,12,22, i.e. partial │ │ │ │ │ +derivatives │ │ │ │ │ +291 // are ordered: xx,xy,yy,xz,yz,zz │ │ │ │ │ +292 │ │ │ │ │ +293 // Fill values 'directionwise' │ │ │ │ │ +294 for (unsigned int k = 0; k < _d_i_m_e_n_s_i_o_n; ++k) │ │ │ │ │ +295 for (unsigned int l = 0; l <= k; ++l) │ │ │ │ │ +296 { │ │ │ │ │ +297 │ │ │ │ │ +298 values[i][r][k][l] = y[i][r][q]; │ │ │ │ │ +299 values[i][r][l][k] = y[i][r][q]; │ │ │ │ │ +300 assert(q < hsize); │ │ │ │ │ +301 ++q; │ │ │ │ │ +302 } │ │ │ │ │ +303 } │ │ │ │ │ +304 // evaluateSingle<2>(x,reinterpret_cast >&>(values)); │ │ │ │ │ +305 } │ │ │ │ │ +306 template< class DVector, class HVector > │ │ │ │ │ +_3_0_7 void _h_e_s_s_i_a_n ( const DVector &x, HVector &values ) const │ │ │ │ │ +308 { │ │ │ │ │ +309 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +310 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +311 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +312 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +313 _h_e_s_s_i_a_n( bx, values ); │ │ │ │ │ +314 } │ │ │ │ │ +315 │ │ │ │ │ +316 template │ │ │ │ │ +_3_1_7 void _i_n_t_e_g_r_a_t_e ( std::vector &values ) const │ │ │ │ │ +318 { │ │ │ │ │ +319 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ +320 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template _i_n_t_e_g_r_a_t_e(), values ); │ │ │ │ │ +321 } │ │ │ │ │ +322 │ │ │ │ │ +323 protected: │ │ │ │ │ +_3_2_4 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s &other) │ │ │ │ │ +325 : _b_a_s_i_s__(other._b_a_s_i_s__), │ │ │ │ │ +326 _c_o_e_f_f_M_a_t_r_i_x__(other._c_o_e_f_f_M_a_t_r_i_x__), │ │ │ │ │ +327 _e_v_a_l__(_b_a_s_i_s__), │ │ │ │ │ +328 _o_r_d_e_r__(_b_a_s_i_s__._o_r_d_e_r()), │ │ │ │ │ +329 _s_i_z_e__(other._s_i_z_e__) │ │ │ │ │ +330 {} │ │ │ │ │ +_3_3_1 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s &_o_p_e_r_a_t_o_r_=(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s&); │ │ │ │ │ +_3_3_2 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ +_3_3_3 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x* _c_o_e_f_f_M_a_t_r_i_x__; │ │ │ │ │ +_3_3_4 mutable Evaluator _e_v_a_l__; │ │ │ │ │ +_3_3_5 unsigned int _o_r_d_e_r__,_s_i_z_e__; │ │ │ │ │ +336 }; │ │ │ │ │ +337 │ │ │ │ │ +344 template< class Eval, class CM = SparseCoeffMatrix, │ │ │ │ │ +345 class D=double, class R=double> │ │ │ │ │ +_3_4_6 class _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +347 : public _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s< Eval, CM, D, R > │ │ │ │ │ +348 { │ │ │ │ │ +349 public: │ │ │ │ │ +_3_5_0 typedef CM _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ +351 │ │ │ │ │ +352 private: │ │ │ │ │ +353 typedef Eval Evaluator; │ │ │ │ │ +354 │ │ │ │ │ +355 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_u_a_t_o_r_,_ _C_M_ _> _T_h_i_s; │ │ │ │ │ +356 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_E_v_a_l_u_a_t_o_r_,_ _C_M_,_ _D_,_ _R_> _B_a_s_e; │ │ │ │ │ +357 │ │ │ │ │ +358 public: │ │ │ │ │ +_3_5_9 typedef typename _B_a_s_e_:_:_B_a_s_i_s _B_a_s_i_s; │ │ │ │ │ +360 │ │ │ │ │ +_3_6_1 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x (const _B_a_s_i_s &_b_a_s_i_s) │ │ │ │ │ +362 : _B_a_s_e(_b_a_s_i_s,coeffMatrix_,0) │ │ │ │ │ +363 {} │ │ │ │ │ +364 │ │ │ │ │ +365 template │ │ │ │ │ +_3_6_6 void _f_i_l_l(const Matrix& _m_a_t_r_i_x) │ │ │ │ │ +367 { │ │ │ │ │ +368 coeffMatrix_.fill(_m_a_t_r_i_x); │ │ │ │ │ +369 this->_s_i_z_e__ = coeffMatrix_.size(); │ │ │ │ │ +370 } │ │ │ │ │ +371 template │ │ │ │ │ +_3_7_2 void _f_i_l_l(const Matrix& _m_a_t_r_i_x,int _s_i_z_e) │ │ │ │ │ +373 { │ │ │ │ │ +374 coeffMatrix_.fill(_m_a_t_r_i_x); │ │ │ │ │ +375 assert(_s_i_z_e<=coeffMatrix_.size()); │ │ │ │ │ +376 this->_s_i_z_e__ = _s_i_z_e; │ │ │ │ │ +377 } │ │ │ │ │ +378 │ │ │ │ │ +379 private: │ │ │ │ │ +380 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &); │ │ │ │ │ +381 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &operator=(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &); │ │ │ │ │ +382 _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x coeffMatrix_; │ │ │ │ │ +383 }; │ │ │ │ │ +384} │ │ │ │ │ +385#endif // DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ +_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +_c_o_e_f_f_m_a_t_r_i_x_._h_h │ │ │ │ │ +_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ -Traits class for local-to-global basis adaptors. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local basis into a global basis. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -Convert a local interpolation into a global interpolation. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Langrange finite element of arbitrary order on triangles. │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Pk1DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder) │ │ │ │ │ -construct a Pk1DFiniteElement │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ -const Traits::Basis & basis() const │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -const GeometryType & type() const │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::Coefficients & coefficients() const │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:81 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::Interpolation & interpolation() const │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > │ │ │ │ │ -Interpolation │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Impl::LagrangeSimplexLocalCoefficients< 1, k > Coefficients │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory for Pk1DFiniteElement objects. │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ -&vertexOrder) │ │ │ │ │ -construct Pk1DFiniteElementFactory │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:130 │ │ │ │ │ -_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Pk1DFiniteElement< Geometry, RF, k > FiniteElement │ │ │ │ │ -DDeeffiinniittiioonn pk1d.hh:112 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:230 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > │ │ │ │ │ +&values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +PolynomialBasis(const PolynomialBasis &other) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:324 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, F *values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_H_e_s_s_i_a_n │ │ │ │ │ +void evaluateHessian(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ +HessianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +CoefficientMatrix::Field StorageField │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const unsigned int dimRange │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_j_a_c_o_b_i_a_n │ │ │ │ │ +void jacobian(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:266 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +Evaluator::DomainVector DomainVector │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_B_a_s_i_s │ │ │ │ │ +Evaluator::Basis Basis │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ +void evaluateSingle(const DomainVector &x, Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ +void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< │ │ │ │ │ +Fy, dimension, deriv >, dimRange > > &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:252 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_j_a_c_o_b_i_a_n │ │ │ │ │ +void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, │ │ │ │ │ +dimension > > &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:259 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_m_a_t_r_i_x │ │ │ │ │ +const CoefficientMatrix & matrix() const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:103 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_b_a_s_i_s__ │ │ │ │ │ +const Basis & basis_ │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:332 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +PolynomialBasis & operator=(const PolynomialBasis &) │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_c_o_e_f_f_M_a_t_r_i_x__ │ │ │ │ │ +const CoefficientMatrix * coeffMatrix_ │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:333 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +void integrate(std::vector< Fy > &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:317 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, F *values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:182 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_h_e_s_s_i_a_n │ │ │ │ │ +void hessian(const DVector &x, HVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:307 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ +CM CoefficientMatrix │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_H_e_s_s_i_a_n_T_y_p_e │ │ │ │ │ +HessianFyType< R > HessianType │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, │ │ │ │ │ +FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r__ │ │ │ │ │ +unsigned int order_ │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:335 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_h_e_s_s_i_a_n │ │ │ │ │ +void hessian(const DomainVector &x, std::vector< HessianFyType< Fy > > &values) │ │ │ │ │ +const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:275 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:217 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, │ │ │ │ │ +unsigned int size) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_H_e_s_s_i_a_n_F_y_T_y_p_e │ │ │ │ │ +FieldVector< FieldMatrix< Fy, dimension, dimension >, dimRange > HessianFyType │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:82 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:108 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ +void evaluateSingle(const DomainVector &x, std::vector< FieldVector< │ │ │ │ │ +FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > │ │ │ │ │ +&values) const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:246 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_b_a_s_i_s │ │ │ │ │ +const Basis & basis() const │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:98 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dimension > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:143 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e__ │ │ │ │ │ +unsigned int size_ │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:335 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l__ │ │ │ │ │ +Evaluator eval_ │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:334 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:198 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t_:_:_a_p_p_l_y │ │ │ │ │ +static DomainVector apply(const DVector &x) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:199 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_o_m_a_i_n_V_e_c_t_o_r_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static const DomainVector & apply(const DomainVector &x) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:211 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +PolynomialBasisWithMatrix(const Basis &basis) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:361 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ +CM CoefficientMatrix │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:350 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ +void fill(const Matrix &matrix, int size) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:372 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_B_a_s_i_s │ │ │ │ │ +Base::Basis Basis │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:359 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ +void fill(const Matrix &matrix) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:366 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:33 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangesimplex.hh File Reference │ │ │ │ +dune-localfunctions: monomialbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,60 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangesimplex.hh File Reference
│ │ │ │ +
monomialbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/deprecated.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/topologyfactory.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ +#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LagrangeSimplexLocalFiniteElement< D, R, d, k >
 Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order. More...
class  Dune::MonomialBasisSize< geometryId >
 
struct  Dune::MonomialBasisHelper< mydim, dim, F >
 
class  Dune::MonomialBasisImpl< geometryId, F >
 
class  Dune::MonomialBasis< geometryId, F >
 
class  Dune::StandardMonomialBasis< dim, F >
 
class  Dune::StandardBiMonomialBasis< dim, F >
 
class  Dune::VirtualMonomialBasis< dim, F >
 
class  Dune::VirtualMonomialBasisImpl< geometryId, F >
 
struct  Dune::MonomialBasisFactory< dim, F >
 
struct  Dune::MonomialBasisFactory< dim, F >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::MonomialBasisProvider< dim, SF >
 
struct  Dune::MonomialBasisProvider< dim, SF >::EvaluationBasisFactory< dd, FF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,49 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangesimplex.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +monomialbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_,_ _k_ _> │ │ │ │ │ -  Lagrange finite element for simplices with arbitrary compile-time │ │ │ │ │ - dimension and polynomial order. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_ _g_e_o_m_e_t_r_y_I_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_<_ _m_y_d_i_m_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_ _d_i_m_,_ _S_F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_ _d_i_m_,_ _S_F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F │ │ │ │ │ + _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00344_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangesimplex.hh Source File │ │ │ │ +dune-localfunctions: monomialbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,876 +70,1025 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangesimplex.hh
│ │ │ │ +
monomialbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ +
5#ifndef DUNE_MONOMIALBASIS_HH
│ │ │ │ +
6#define DUNE_MONOMIALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/deprecated.hh>
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13#include <dune/common/fvector.hh>
│ │ │ │ -
14#include <dune/common/math.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14#include <dune/geometry/topologyfactory.hh>
│ │ │ │
15
│ │ │ │ -
16#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
17
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
21
│ │ │ │ -
22namespace Dune { namespace Impl
│ │ │ │ -
23{
│ │ │ │ -
34 template<class D, class R, unsigned int dim, unsigned int k>
│ │ │ │ -
35 class LagrangeSimplexLocalBasis
│ │ │ │ -
36 {
│ │ │ │ -
37 public:
│ │ │ │ -
38 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ -
39
│ │ │ │ -
44 static constexpr unsigned int size ()
│ │ │ │ -
45 {
│ │ │ │ -
46 return binomial(k+dim,dim);
│ │ │ │ -
47 }
│ │ │ │ -
48
│ │ │ │ -
50 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ -
51 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
52 {
│ │ │ │ -
53 out.resize(size());
│ │ │ │ -
54
│ │ │ │ -
55 // Specialization for zero-order case
│ │ │ │ -
56 if (k==0)
│ │ │ │ -
57 {
│ │ │ │ -
58 out[0] = 1;
│ │ │ │ -
59 return;
│ │ │ │ -
60 }
│ │ │ │ -
61
│ │ │ │ -
62 // Specialization for first-order case
│ │ │ │ -
63 if (k==1)
│ │ │ │ -
64 {
│ │ │ │ -
65 out[0] = 1.0;
│ │ │ │ -
66 for (size_t i=0; i<dim; i++)
│ │ │ │ -
67 {
│ │ │ │ -
68 out[0] -= x[i];
│ │ │ │ -
69 out[i+1] = x[i];
│ │ │ │ -
70 }
│ │ │ │ -
71 return;
│ │ │ │ -
72 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
19
│ │ │ │ +
20namespace Dune
│ │ │ │ +
21{
│ │ │ │ +
22 /************************************************
│ │ │ │ +
23 * Classes for evaluating ''Monomials'' on any order
│ │ │ │ +
24 * for all reference element type.
│ │ │ │ +
25 * For a simplex topology these are the normal
│ │ │ │ +
26 * monomials for cube topologies the bimonomials.
│ │ │ │ +
27 * The construction follows the construction of the
│ │ │ │ +
28 * generic geometries using tensor products for
│ │ │ │ +
29 * prism generation and duffy transform for pyramid
│ │ │ │ +
30 * construction.
│ │ │ │ +
31 * A derivative argument can be applied, in which case
│ │ │ │ +
32 * all derivatives up to the desired order are
│ │ │ │ +
33 * evaluated. Note that for higher order derivatives
│ │ │ │ +
34 * only the ''lower'' part of the symmetric tensor
│ │ │ │ +
35 * is evaluated, e.g., passing derivative equal to 2
│ │ │ │ +
36 * to the class will provide the vector
│ │ │ │ +
37 * (d/dxdx p, d/dxydx p, d/dydy p,
│ │ │ │ +
38 * d/dx p, d/dy p, p)
│ │ │ │ +
39 * Important:
│ │ │ │ +
40 * So far the computation of the derivatives has not
│ │ │ │ +
41 * been fully implemented for general pyramid
│ │ │ │ +
42 * construction, i.e., in the case where a pyramid is
│ │ │ │ +
43 * build over a non simplex base geometry.
│ │ │ │ +
44 *
│ │ │ │ +
45 * Central classes:
│ │ │ │ +
46 * 1) template< GeometryType::Id geometryId, class F >
│ │ │ │ +
47 * class MonomialBasisImpl;
│ │ │ │ +
48 * Implementation of the monomial evaluation for
│ │ │ │ +
49 * a given topology and field type.
│ │ │ │ +
50 * The method evaluate fills a F* vector
│ │ │ │ +
51 * 2) template< GeometryType::Id geometryId, class F >
│ │ │ │ +
52 * class MonomialBasis
│ │ │ │ +
53 * The base class for the static monomial evaluation
│ │ │ │ +
54 * providing additional evaluate methods including
│ │ │ │ +
55 * one taking std::vector<F>.
│ │ │ │ +
56 * 3) template< int dim, class F >
│ │ │ │ +
57 * class VirtualMonomialBasis
│ │ │ │ +
58 * Virtualization of the MonomialBasis.
│ │ │ │ +
59 * 4) template< int dim, class F >
│ │ │ │ +
60 * struct MonomialBasisFactory;
│ │ │ │ +
61 * A factory class for the VirtualMonomialBasis
│ │ │ │ +
62 * 5) template< int dim, class F >
│ │ │ │ +
63 * struct MonomialBasisProvider
│ │ │ │ +
64 * A singleton container for the virtual monomial
│ │ │ │ +
65 * basis
│ │ │ │ +
66 ************************************************/
│ │ │ │ +
67
│ │ │ │ +
68 // Internal Forward Declarations
│ │ │ │ +
69 // -----------------------------
│ │ │ │ +
70
│ │ │ │ +
71 template< GeometryType::Id geometryId >
│ │ │ │ +
72 class MonomialBasisSize;
│ │ │ │
73
│ │ │ │ -
74 assert(k>=2);
│ │ │ │ -
75
│ │ │ │ -
76 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ +
74 template< GeometryType::Id geometryId, class F >
│ │ │ │ +
75 class MonomialBasis;
│ │ │ │ +
76
│ │ │ │
77
│ │ │ │ -
78 if (dim==1)
│ │ │ │ -
79 {
│ │ │ │ -
80 for (unsigned int i=0; i<size(); i++)
│ │ │ │ -
81 {
│ │ │ │ -
82 out[i] = 1.0;
│ │ │ │ -
83 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
84 out[i] *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
85 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ -
86 out[i] *= (x[0]-lagrangeNode(gamma))/(lagrangeNode(i)-lagrangeNode(gamma));
│ │ │ │ -
87 }
│ │ │ │ -
88 return;
│ │ │ │ -
89 }
│ │ │ │ -
90
│ │ │ │ -
91 if (dim==2)
│ │ │ │ -
92 {
│ │ │ │ -
93 int n=0;
│ │ │ │ -
94 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
95 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ -
96 {
│ │ │ │ -
97 out[n] = 1.0;
│ │ │ │ -
98 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
99 out[n] *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
100 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ -
101 out[n] *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ -
102 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ -
103 out[n] *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
104 n++;
│ │ │ │ -
105 }
│ │ │ │ -
106
│ │ │ │ -
107 return;
│ │ │ │ -
108 }
│ │ │ │ +
78
│ │ │ │ +
79 // MonomialBasisSize
│ │ │ │ +
80 // -----------------
│ │ │ │ +
81
│ │ │ │ +
82 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
84 {
│ │ │ │ + │ │ │ │ +
86
│ │ │ │ +
87 public:
│ │ │ │ +
│ │ │ │ +
88 static This &instance ()
│ │ │ │ +
89 {
│ │ │ │ +
90 static This _instance;
│ │ │ │ +
91 return _instance;
│ │ │ │ +
92 }
│ │ │ │ +
│ │ │ │ +
93
│ │ │ │ +
94 unsigned int maxOrder_;
│ │ │ │ +
95
│ │ │ │ +
96 // sizes_[ k ]: number of basis functions of exactly order k
│ │ │ │ +
97 mutable unsigned int *sizes_;
│ │ │ │ +
98
│ │ │ │ +
99 // numBaseFunctions_[ k ] = sizes_[ 0 ] + ... + sizes_[ k ]
│ │ │ │ +
100 mutable unsigned int *numBaseFunctions_;
│ │ │ │ +
101
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
103 : maxOrder_( 0 ),
│ │ │ │ +
104 sizes_( 0 ),
│ │ │ │ + │ │ │ │ +
106 {
│ │ │ │ +
107 computeSizes( 2 );
│ │ │ │ +
108 }
│ │ │ │ +
│ │ │ │
109
│ │ │ │ -
110 if (dim!=3)
│ │ │ │ -
111 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis for k>=2 only implemented for dim==1 or dim==3");
│ │ │ │ -
112
│ │ │ │ -
113 typename Traits::DomainType kx = x;
│ │ │ │ -
114 kx *= k;
│ │ │ │ -
115 unsigned int n = 0;
│ │ │ │ -
116 unsigned int i[4];
│ │ │ │ -
117 R factor[4];
│ │ │ │ -
118 for (i[2] = 0; i[2] <= k; ++i[2])
│ │ │ │ -
119 {
│ │ │ │ -
120 factor[2] = 1.0;
│ │ │ │ -
121 for (unsigned int j = 0; j < i[2]; ++j)
│ │ │ │ -
122 factor[2] *= (kx[2]-j) / (i[2]-j);
│ │ │ │ -
123 for (i[1] = 0; i[1] <= k - i[2]; ++i[1])
│ │ │ │ -
124 {
│ │ │ │ -
125 factor[1] = 1.0;
│ │ │ │ -
126 for (unsigned int j = 0; j < i[1]; ++j)
│ │ │ │ -
127 factor[1] *= (kx[1]-j) / (i[1]-j);
│ │ │ │ -
128 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0])
│ │ │ │ -
129 {
│ │ │ │ -
130 factor[0] = 1.0;
│ │ │ │ -
131 for (unsigned int j = 0; j < i[0]; ++j)
│ │ │ │ -
132 factor[0] *= (kx[0]-j) / (i[0]-j);
│ │ │ │ -
133 i[3] = k - i[0] - i[1] - i[2];
│ │ │ │ -
134 D kx3 = k - kx[0] - kx[1] - kx[2];
│ │ │ │ -
135 factor[3] = 1.0;
│ │ │ │ -
136 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ -
137 factor[3] *= (kx3-j) / (i[3]-j);
│ │ │ │ -
138 out[n++] = factor[0] * factor[1] * factor[2] * factor[3];
│ │ │ │ -
139 }
│ │ │ │ -
140 }
│ │ │ │ -
141 }
│ │ │ │ -
142 }
│ │ │ │ -
143
│ │ │ │ -
149 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ -
150 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
151 {
│ │ │ │ -
152 out.resize(size());
│ │ │ │ -
153
│ │ │ │ -
154 // Specialization for k==0
│ │ │ │ -
155 if (k==0)
│ │ │ │ -
156 {
│ │ │ │ -
157 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ -
158 return;
│ │ │ │ -
159 }
│ │ │ │ -
160
│ │ │ │ -
161 // Specialization for k==1
│ │ │ │ -
162 if (k==1)
│ │ │ │ -
163 {
│ │ │ │ -
164 std::fill(out[0][0].begin(), out[0][0].end(), -1);
│ │ │ │ -
165
│ │ │ │ -
166 for (unsigned int i=0; i<dim; i++)
│ │ │ │ -
167 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
168 out[i+1][0][j] = (i==j);
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
111 {
│ │ │ │ +
112 delete[] sizes_;
│ │ │ │ +
113 delete[] numBaseFunctions_;
│ │ │ │ +
114 }
│ │ │ │ +
│ │ │ │ +
115
│ │ │ │ +
│ │ │ │ +
116 unsigned int operator() ( const unsigned int order ) const
│ │ │ │ +
117 {
│ │ │ │ +
118 return numBaseFunctions_[ order ];
│ │ │ │ +
119 }
│ │ │ │ +
│ │ │ │ +
120
│ │ │ │ +
│ │ │ │ +
121 unsigned int maxOrder() const
│ │ │ │ +
122 {
│ │ │ │ +
123 return maxOrder_;
│ │ │ │ +
124 }
│ │ │ │ +
│ │ │ │ +
125
│ │ │ │ +
│ │ │ │ +
126 void computeSizes ( unsigned int order )
│ │ │ │ +
127 {
│ │ │ │ +
128 if (order <= maxOrder_)
│ │ │ │ +
129 return;
│ │ │ │ +
130
│ │ │ │ +
131 maxOrder_ = order;
│ │ │ │ +
132
│ │ │ │ +
133 delete[] sizes_;
│ │ │ │ +
134 delete[] numBaseFunctions_;
│ │ │ │ +
135 sizes_ = new unsigned int[ order+1 ];
│ │ │ │ +
136 numBaseFunctions_ = new unsigned int[ order+1 ];
│ │ │ │ +
137
│ │ │ │ +
138 constexpr GeometryType geometry = geometryId;
│ │ │ │ +
139 constexpr auto dim = geometry.dim();
│ │ │ │ +
140
│ │ │ │ +
141 sizes_[ 0 ] = 1;
│ │ │ │ +
142 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
143 sizes_[ k ] = 0;
│ │ │ │ +
144
│ │ │ │ +
145 std::fill(numBaseFunctions_, numBaseFunctions_+order+1, 1);
│ │ │ │ +
146
│ │ │ │ +
147 for( int codim=dim-1; codim>=0; codim--)
│ │ │ │ +
148 {
│ │ │ │ +
149 if (Impl::isPrism(geometry.id(),dim,codim))
│ │ │ │ +
150 {
│ │ │ │ +
151 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
152 {
│ │ │ │ +
153 sizes_[ k ] = numBaseFunctions_[ k ] + k*sizes_[ k ];
│ │ │ │ +
154 numBaseFunctions_[ k ] = numBaseFunctions_[ k-1 ] + sizes_[ k ];
│ │ │ │ +
155 }
│ │ │ │ +
156 }
│ │ │ │ +
157 else
│ │ │ │ +
158 {
│ │ │ │ +
159 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
160 {
│ │ │ │ +
161 sizes_[ k ] = numBaseFunctions_[ k ];
│ │ │ │ +
162 numBaseFunctions_[ k ] = numBaseFunctions_[ k-1 ] + sizes_[ k ];
│ │ │ │ +
163 }
│ │ │ │ +
164 }
│ │ │ │ +
165 }
│ │ │ │ +
166 }
│ │ │ │ +
│ │ │ │ +
167 };
│ │ │ │ +
│ │ │ │ +
168
│ │ │ │
169
│ │ │ │ -
170 return;
│ │ │ │ -
171 }
│ │ │ │ -
172
│ │ │ │ -
173 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ +
170
│ │ │ │ +
171 // MonomialBasisHelper
│ │ │ │ +
172 // -------------------
│ │ │ │ +
173
│ │ │ │
174
│ │ │ │ -
175 // Specialization for dim==1
│ │ │ │ -
176 if (dim==1)
│ │ │ │ -
177 {
│ │ │ │ -
178 for (unsigned int i=0; i<=k; i++)
│ │ │ │ -
179 {
│ │ │ │ -
180 // x_0 derivative
│ │ │ │ -
181 out[i][0][0] = 0.0;
│ │ │ │ -
182 R factor=1.0;
│ │ │ │ -
183 for (unsigned int a=0; a<i; a++)
│ │ │ │ -
184 {
│ │ │ │ -
185 R product=factor;
│ │ │ │ -
186 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
187 product *= (alpha==a) ? 1.0/(lagrangeNode(i)-lagrangeNode(alpha))
│ │ │ │ -
188 : (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
189 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ -
190 product *= (lagrangeNode(gamma)-x[0])/(lagrangeNode(gamma)-lagrangeNode(i));
│ │ │ │ -
191 out[i][0][0] += product;
│ │ │ │ -
192 }
│ │ │ │ -
193 for (unsigned int c=i+1; c<=k; c++)
│ │ │ │ -
194 {
│ │ │ │ -
195 R product=factor;
│ │ │ │ -
196 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
197 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
198 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ -
199 product *= (gamma==c) ? -1.0/(lagrangeNode(gamma)-lagrangeNode(i))
│ │ │ │ -
200 : (lagrangeNode(gamma)-x[0])/(lagrangeNode(gamma)-lagrangeNode(i));
│ │ │ │ -
201 out[i][0][0] += product;
│ │ │ │ -
202 }
│ │ │ │ -
203 }
│ │ │ │ -
204 return;
│ │ │ │ -
205 }
│ │ │ │ -
206
│ │ │ │ -
207 if (dim==2)
│ │ │ │ -
208 {
│ │ │ │ -
209 int n=0;
│ │ │ │ -
210 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
211 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ -
212 {
│ │ │ │ -
213 // x_0 derivative
│ │ │ │ -
214 out[n][0][0] = 0.0;
│ │ │ │ -
215 R factor=1.0;
│ │ │ │ -
216 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ -
217 factor *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ -
218 for (unsigned int a=0; a<i; a++)
│ │ │ │ -
219 {
│ │ │ │ -
220 R product=factor;
│ │ │ │ -
221 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
222 if (alpha==a)
│ │ │ │ -
223 product *= D(1)/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
224 else
│ │ │ │ -
225 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
226 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ -
227 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
228 out[n][0][0] += product;
│ │ │ │ -
229 }
│ │ │ │ -
230 for (unsigned int c=i+j+1; c<=k; c++)
│ │ │ │ -
231 {
│ │ │ │ -
232 R product=factor;
│ │ │ │ -
233 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
234 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
235 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ -
236 if (gamma==c)
│ │ │ │ -
237 product *= -D(1)/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
238 else
│ │ │ │ -
239 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
240 out[n][0][0] += product;
│ │ │ │ -
241 }
│ │ │ │ -
242
│ │ │ │ -
243 // x_1 derivative
│ │ │ │ -
244 out[n][0][1] = 0.0;
│ │ │ │ -
245 factor = 1.0;
│ │ │ │ -
246 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ -
247 factor *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ -
248 for (unsigned int b=0; b<j; b++)
│ │ │ │ -
249 {
│ │ │ │ -
250 R product=factor;
│ │ │ │ -
251 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ -
252 if (beta==b)
│ │ │ │ -
253 product *= D(1)/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ -
254 else
│ │ │ │ -
255 product *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ -
256 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ -
257 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
258 out[n][0][1] += product;
│ │ │ │ -
259 }
│ │ │ │ -
260 for (unsigned int c=i+j+1; c<=k; c++)
│ │ │ │ -
261 {
│ │ │ │ -
262 R product=factor;
│ │ │ │ -
263 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ -
264 product *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ -
265 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ -
266 if (gamma==c)
│ │ │ │ -
267 product *= -D(1)/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
268 else
│ │ │ │ -
269 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
270 out[n][0][1] += product;
│ │ │ │ -
271 }
│ │ │ │ -
272
│ │ │ │ -
273 n++;
│ │ │ │ -
274 }
│ │ │ │ -
275
│ │ │ │ -
276 return;
│ │ │ │ -
277 }
│ │ │ │ +
175 template< int mydim, int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
177 {
│ │ │ │ +
178 typedef MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize;
│ │ │ │ +
179 typedef MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size;
│ │ │ │ +
180
│ │ │ │ +
│ │ │ │ +
181 static void copy ( const unsigned int deriv, F *&wit, F *&rit,
│ │ │ │ +
182 const unsigned int numBaseFunctions, const F &z )
│ │ │ │ +
183 {
│ │ │ │ +
184 // n(d,k) = size<k>[d];
│ │ │ │ +
185 MySize &mySize = MySize::instance();
│ │ │ │ +
186 Size &size = Size::instance();
│ │ │ │ +
187
│ │ │ │ +
188 const F *const rend = rit + size( deriv )*numBaseFunctions;
│ │ │ │ +
189 for( ; rit != rend; )
│ │ │ │ +
190 {
│ │ │ │ +
191 F *prit = rit;
│ │ │ │ +
192
│ │ │ │ +
193 *wit = z * *rit;
│ │ │ │ +
194 ++rit, ++wit;
│ │ │ │ +
195
│ │ │ │ +
196 for( unsigned d = 1; d <= deriv; ++d )
│ │ │ │ +
197 {
│ │ │ │ +
198 #ifndef NDEBUG
│ │ │ │ +
199 const F *const derivEnd = rit + mySize.sizes_[ d ];
│ │ │ │ +
200 #endif
│ │ │ │ +
201
│ │ │ │ +
202 {
│ │ │ │ +
203 const F *const drend = rit + mySize.sizes_[ d ] - mySize.sizes_[ d-1 ];
│ │ │ │ +
204 for( ; rit != drend ; ++rit, ++wit )
│ │ │ │ +
205 *wit = z * *rit;
│ │ │ │ +
206 }
│ │ │ │ +
207
│ │ │ │ +
208 for (unsigned int j=1; j<d; ++j)
│ │ │ │ +
209 {
│ │ │ │ +
210 const F *const drend = rit + mySize.sizes_[ d-j ] - mySize.sizes_[ d-j-1 ];
│ │ │ │ +
211 for( ; rit != drend ; ++prit, ++rit, ++wit )
│ │ │ │ +
212 *wit = F(j) * *prit + z * *rit;
│ │ │ │ +
213 }
│ │ │ │ +
214 *wit = F(d) * *prit + z * *rit;
│ │ │ │ +
215 ++prit, ++rit, ++wit;
│ │ │ │ +
216 assert(derivEnd == rit);
│ │ │ │ +
217 rit += size.sizes_[d] - mySize.sizes_[d];
│ │ │ │ +
218 prit += size.sizes_[d-1] - mySize.sizes_[d-1];
│ │ │ │ +
219 const F *const emptyWitEnd = wit + size.sizes_[d] - mySize.sizes_[d];
│ │ │ │ +
220 for ( ; wit != emptyWitEnd; ++wit )
│ │ │ │ +
221 *wit = Zero<F>();
│ │ │ │ +
222 }
│ │ │ │ +
223 }
│ │ │ │ +
224 }
│ │ │ │ +
│ │ │ │ +
225 };
│ │ │ │ +
│ │ │ │ +
226
│ │ │ │ +
227
│ │ │ │ +
228
│ │ │ │ +
229 // MonomialBasisImpl
│ │ │ │ +
230 // -----------------
│ │ │ │ +
231
│ │ │ │ +
232 template< GeometryType::Id geometryId, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
234 {
│ │ │ │ +
235 public:
│ │ │ │ +
236 typedef F Field;
│ │ │ │ +
237
│ │ │ │ +
238 static constexpr GeometryType geometry = geometryId;
│ │ │ │ +
239
│ │ │ │ +
240 static const unsigned int dimDomain = geometry.dim();
│ │ │ │ +
241
│ │ │ │ +
242 typedef FieldVector< Field, dimDomain > DomainVector;
│ │ │ │ +
243
│ │ │ │ +
244 private:
│ │ │ │ +
245 friend class MonomialBasis< geometryId, Field >;
│ │ │ │ +
246
│ │ │ │ + │ │ │ │ +
248 {}
│ │ │ │ +
249
│ │ │ │ +
250 template< int dimD >
│ │ │ │ +
251 void evaluate ( const unsigned int deriv, const unsigned int order,
│ │ │ │ +
252 const FieldVector< Field, dimD > &x,
│ │ │ │ +
253 const unsigned int block, const unsigned int *const offsets,
│ │ │ │ +
254 Field *const values ) const
│ │ │ │ +
255 {
│ │ │ │ +
256 //start with vertex
│ │ │ │ +
257 *values = Unity< F >();
│ │ │ │ +
258 F *const end = values + block;
│ │ │ │ +
259 for( Field *it = values+1 ; it != end; ++it )
│ │ │ │ +
260 *it = Zero< F >();
│ │ │ │ +
261
│ │ │ │ +
262 constexpr GeometryType gt = GeometryTypes::vertex;
│ │ │ │ +
263
│ │ │ │ +
264 if constexpr ( geometry == gt)
│ │ │ │ +
265 return;
│ │ │ │ +
266 else
│ │ │ │ +
267 evaluate<gt,dimD>(deriv, order, x, block, offsets, values );
│ │ │ │ +
268 }
│ │ │ │ +
269
│ │ │ │ +
270 template<GeometryType::Id baseGeometryId, int dimD >
│ │ │ │ +
271 void evaluate ( const unsigned int deriv, const unsigned int order,
│ │ │ │ +
272 const FieldVector< Field, dimD > &x,
│ │ │ │ +
273 const unsigned int block, const unsigned int *const offsets,
│ │ │ │ +
274 Field *const values ) const
│ │ │ │ +
275 {
│ │ │ │ +
276
│ │ │ │ +
277 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │
278
│ │ │ │ -
279 if (dim!=3)
│ │ │ │ -
280 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis only implemented for dim==3!");
│ │ │ │ -
281
│ │ │ │ -
282 // Specialization for arbitrary order and dim==3
│ │ │ │ -
283 typename Traits::DomainType kx = x;
│ │ │ │ -
284 kx *= k;
│ │ │ │ -
285 unsigned int n = 0;
│ │ │ │ -
286 unsigned int i[4];
│ │ │ │ -
287 R factor[4];
│ │ │ │ -
288 for (i[2] = 0; i[2] <= k; ++i[2])
│ │ │ │ -
289 {
│ │ │ │ -
290 factor[2] = 1.0;
│ │ │ │ -
291 for (unsigned int j = 0; j < i[2]; ++j)
│ │ │ │ -
292 factor[2] *= (kx[2]-j) / (i[2]-j);
│ │ │ │ -
293 for (i[1] = 0; i[1] <= k - i[2]; ++i[1])
│ │ │ │ -
294 {
│ │ │ │ -
295 factor[1] = 1.0;
│ │ │ │ -
296 for (unsigned int j = 0; j < i[1]; ++j)
│ │ │ │ -
297 factor[1] *= (kx[1]-j) / (i[1]-j);
│ │ │ │ -
298 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0])
│ │ │ │ -
299 {
│ │ │ │ -
300 factor[0] = 1.0;
│ │ │ │ -
301 for (unsigned int j = 0; j < i[0]; ++j)
│ │ │ │ -
302 factor[0] *= (kx[0]-j) / (i[0]-j);
│ │ │ │ -
303 i[3] = k - i[0] - i[1] - i[2];
│ │ │ │ -
304 D kx3 = k - kx[0] - kx[1] - kx[2];
│ │ │ │ -
305 R sum3 = 0.0;
│ │ │ │ -
306 factor[3] = 1.0;
│ │ │ │ -
307 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ -
308 factor[3] /= i[3] - j;
│ │ │ │ -
309 R prod_all = factor[0] * factor[1] * factor[2] * factor[3];
│ │ │ │ -
310 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ -
311 {
│ │ │ │ -
312 R prod = prod_all;
│ │ │ │ -
313 for (unsigned int l = 0; l < i[3]; ++l)
│ │ │ │ -
314 if (j == l)
│ │ │ │ -
315 prod *= -R(k);
│ │ │ │ -
316 else
│ │ │ │ -
317 prod *= kx3 - l;
│ │ │ │ -
318 sum3 += prod;
│ │ │ │ -
319 }
│ │ │ │ -
320 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ -
321 factor[3] *= kx3 - j;
│ │ │ │ -
322 for (unsigned int m = 0; m < 3; ++m)
│ │ │ │ -
323 {
│ │ │ │ -
324 out[n][0][m] = sum3;
│ │ │ │ -
325 for (unsigned int j = 0; j < i[m]; ++j)
│ │ │ │ -
326 {
│ │ │ │ -
327 R prod = factor[3];
│ │ │ │ -
328 for (unsigned int p = 0; p < 3; ++p)
│ │ │ │ -
329 {
│ │ │ │ -
330 if (m == p)
│ │ │ │ -
331 for (unsigned int l = 0; l < i[p]; ++l)
│ │ │ │ -
332 prod *= (j==l) ? R(k) / (i[p]-l) : R(kx[p]-l) / (i[p]-l);
│ │ │ │ -
333 else
│ │ │ │ -
334 prod *= factor[p];
│ │ │ │ -
335 }
│ │ │ │ -
336 out[n][0][m] += prod;
│ │ │ │ -
337 }
│ │ │ │ -
338 }
│ │ │ │ -
339 n++;
│ │ │ │ -
340 }
│ │ │ │ -
341 }
│ │ │ │ -
342 }
│ │ │ │ -
343 }
│ │ │ │ -
344
│ │ │ │ -
351 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ -
352 const typename Traits::DomainType& in,
│ │ │ │ -
353 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
354 {
│ │ │ │ -
355 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
356
│ │ │ │ -
357 out.resize(size());
│ │ │ │ -
358
│ │ │ │ -
359 if (totalOrder == 0) {
│ │ │ │ -
360 evaluateFunction(in, out);
│ │ │ │ -
361 return;
│ │ │ │ -
362 }
│ │ │ │ +
279 auto constexpr isPrismatic = geometry.isPrismatic(baseGeometry.dim());
│ │ │ │ +
280
│ │ │ │ +
281 // compute
│ │ │ │ +
282 typedef MonomialBasisHelper< baseGeometry.dim() + 1, dimD, Field > Helper;
│ │ │ │ +
283 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ +
284
│ │ │ │ +
285 const BaseSize &size = BaseSize::instance();
│ │ │ │ +
286 const_cast<BaseSize&>(size).computeSizes(order);
│ │ │ │ +
287
│ │ │ │ +
288 const Field &z = x[ baseGeometry.dim() ];
│ │ │ │ +
289
│ │ │ │ +
290 Field *row0 = values;
│ │ │ │ +
291 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
292 {
│ │ │ │ +
293 Field *row1 = values + block*offsets[ k-1 ];
│ │ │ │ +
294 Field *wit = row1 + block*size.sizes_[ k ];
│ │ │ │ +
295 if constexpr ( isPrismatic )
│ │ │ │ +
296 Helper::copy( deriv, wit, row1, k*size.sizes_[ k ], z );
│ │ │ │ +
297 Helper::copy( deriv, wit, row0, size( k-1 ), z );
│ │ │ │ +
298 row0 = row1;
│ │ │ │ +
299 }
│ │ │ │ +
300
│ │ │ │ +
301 // stop if desired dimension is reached
│ │ │ │ +
302 if constexpr( baseGeometry.dim() == dimDomain-1)
│ │ │ │ +
303 return;
│ │ │ │ +
304 else
│ │ │ │ +
305 {
│ │ │ │ +
306 constexpr GeometryType nextGeometry = isPrismatic ? GeometryTypes::prismaticExtension(baseGeometry)
│ │ │ │ +
307 : GeometryTypes::conicalExtension(baseGeometry);
│ │ │ │ +
308
│ │ │ │ +
309 evaluate<nextGeometry.toId(),dimD>(deriv, order, x, block, offsets, values );
│ │ │ │ +
310 }
│ │ │ │ +
311 }
│ │ │ │ +
312
│ │ │ │ +
313 void integrate ( const unsigned int order,
│ │ │ │ +
314 const unsigned int *const offsets,
│ │ │ │ +
315 Field *const values ) const
│ │ │ │ +
316 {
│ │ │ │ +
317 //start with vertex
│ │ │ │ +
318 values[ 0 ] = Unity< Field >();
│ │ │ │ +
319 static constexpr GeometryType gt = GeometryTypes::vertex;
│ │ │ │ +
320
│ │ │ │ +
321 if constexpr ( geometry == gt)
│ │ │ │ +
322 return;
│ │ │ │ +
323 else
│ │ │ │ +
324 integrate<gt>(order, offsets, values);
│ │ │ │ +
325 }
│ │ │ │ +
326
│ │ │ │ +
327 template<GeometryType::Id baseGeometryId>
│ │ │ │ +
328 void integrate ( const unsigned int order,
│ │ │ │ +
329 const unsigned int *const offsets,
│ │ │ │ +
330 Field *const values) const
│ │ │ │ +
331 {
│ │ │ │ +
332 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ +
333
│ │ │ │ +
334 auto constexpr isPrismatic = geometry.isPrismatic(baseGeometry.dim());
│ │ │ │ +
335
│ │ │ │ +
336 // decide which kind of integration should be performed
│ │ │ │ +
337 if constexpr ( isPrismatic )
│ │ │ │ +
338 integratePrismatic<baseGeometry>(order, offsets, values);
│ │ │ │ +
339 else
│ │ │ │ +
340 integrateConical<baseGeometry>(order, offsets, values);
│ │ │ │ +
341
│ │ │ │ +
342 // stop if the desired dimension is reached
│ │ │ │ +
343 if constexpr( baseGeometry.dim() == dimDomain-1)
│ │ │ │ +
344 return;
│ │ │ │ +
345 else
│ │ │ │ +
346 {
│ │ │ │ +
347 static constexpr GeometryType nextGeometry = (isPrismatic ? GeometryTypes::prismaticExtension(baseGeometry)
│ │ │ │ +
348 : GeometryTypes::conicalExtension(baseGeometry));
│ │ │ │ +
349
│ │ │ │ +
350 integrate<nextGeometry.toId()>(order, offsets, values);
│ │ │ │ +
351 }
│ │ │ │ +
352
│ │ │ │ +
353 }
│ │ │ │ +
354
│ │ │ │ +
355 template<GeometryType::Id baseGeometryId>
│ │ │ │ +
356 void integratePrismatic ( const unsigned int order,
│ │ │ │ +
357 const unsigned int *const offsets,
│ │ │ │ +
358 Field *const values ) const
│ │ │ │ +
359 {
│ │ │ │ +
360 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ +
361 static const BaseSize &size = BaseSize::instance();
│ │ │ │ +
362 const unsigned int *const baseSizes = size.sizes_;
│ │ │ │
363
│ │ │ │ -
364 if (k==0)
│ │ │ │ -
365 {
│ │ │ │ -
366 out[0] = 0;
│ │ │ │ -
367 return;
│ │ │ │ -
368 }
│ │ │ │ +
364 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ +
365 static constexpr GeometryType nextGeometry = GeometryTypes::prismaticExtension(baseGeometry);
│ │ │ │ +
366
│ │ │ │ +
367 typedef MonomialBasisSize<nextGeometry.toId()> Size;
│ │ │ │ +
368 static const Size &mySize = Size::instance();
│ │ │ │
369
│ │ │ │ -
370 if (k==1)
│ │ │ │ -
371 {
│ │ │ │ -
372 if (totalOrder==1)
│ │ │ │ -
373 {
│ │ │ │ -
374 auto direction = std::find(order.begin(), order.end(), 1);
│ │ │ │ -
375
│ │ │ │ -
376 out[0] = -1;
│ │ │ │ -
377 for (unsigned int i=0; i<dim; i++)
│ │ │ │ -
378 out[i+1] = (i==(direction-order.begin()));
│ │ │ │ -
379 }
│ │ │ │ -
380 else // all higher order derivatives are zero
│ │ │ │ -
381 std::fill(out.begin(), out.end(), 0);
│ │ │ │ -
382 return;
│ │ │ │ -
383 }
│ │ │ │ -
384
│ │ │ │ -
385 if (dim==2)
│ │ │ │ -
386 {
│ │ │ │ -
387 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ -
388
│ │ │ │ -
389 // Helper method: Return a single Lagrangian factor of l_ij evaluated at x
│ │ │ │ -
390 auto lagrangianFactor = [&lagrangeNode]
│ │ │ │ -
391 (const int no, const int i, const int j, const typename Traits::DomainType& x)
│ │ │ │ -
392 -> typename Traits::RangeType
│ │ │ │ -
393 {
│ │ │ │ -
394 if ( no < i)
│ │ │ │ -
395 return (x[0]-lagrangeNode(no))/(lagrangeNode(i)-lagrangeNode(no));
│ │ │ │ -
396 if (no < i+j)
│ │ │ │ -
397 return (x[1]-lagrangeNode(no-i))/(lagrangeNode(j)-lagrangeNode(no-i));
│ │ │ │ -
398 return (lagrangeNode(no+1)-x[0]-x[1])/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
399 };
│ │ │ │ -
400
│ │ │ │ -
401 // Helper method: Return the derivative of a single Lagrangian factor of l_ij evaluated at x
│ │ │ │ -
402 // direction: Derive in x-direction if this is 0, otherwise derive in y direction
│ │ │ │ -
403 auto lagrangianFactorDerivative = [&lagrangeNode]
│ │ │ │ -
404 (const int direction, const int no, const int i, const int j, const typename Traits::DomainType&)
│ │ │ │ -
405 -> typename Traits::RangeType
│ │ │ │ -
406 {
│ │ │ │ -
407 using T = typename Traits::RangeType;
│ │ │ │ -
408 if ( no < i)
│ │ │ │ -
409 return (direction == 0) ? T(1.0/(lagrangeNode(i)-lagrangeNode(no))) : T(0);
│ │ │ │ -
410
│ │ │ │ -
411 if (no < i+j)
│ │ │ │ -
412 return (direction == 0) ? T(0) : T(1.0/(lagrangeNode(j)-lagrangeNode(no-i)));
│ │ │ │ -
413
│ │ │ │ -
414 return -1.0/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ -
415 };
│ │ │ │ -
416
│ │ │ │ -
417 if (totalOrder==1)
│ │ │ │ -
418 {
│ │ │ │ -
419 int direction = std::find(order.begin(), order.end(), 1)-order.begin();
│ │ │ │ -
420
│ │ │ │ -
421 int n=0;
│ │ │ │ -
422 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
423 {
│ │ │ │ -
424 for (unsigned int i=0; i<=k-j; i++, n++)
│ │ │ │ -
425 {
│ │ │ │ -
426 out[n] = 0.0;
│ │ │ │ -
427 for (unsigned int no1=0; no1 < k; no1++)
│ │ │ │ -
428 {
│ │ │ │ -
429 R factor = lagrangianFactorDerivative(direction, no1, i, j, in);
│ │ │ │ -
430 for (unsigned int no2=0; no2 < k; no2++)
│ │ │ │ -
431 if (no1 != no2)
│ │ │ │ -
432 factor *= lagrangianFactor(no2, i, j, in);
│ │ │ │ +
370 Field *row0 = values;
│ │ │ │ +
371 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
372 {
│ │ │ │ +
373 Field *const row1begin = values + offsets[ k-1 ];
│ │ │ │ +
374 Field *const row1End = row1begin + mySize.sizes_[ k ];
│ │ │ │ +
375 assert( (unsigned int)(row1End - values) <= offsets[ k ] );
│ │ │ │ +
376
│ │ │ │ +
377 Field *row1 = row1begin;
│ │ │ │ +
378 Field *it = row1begin + baseSizes[ k ];
│ │ │ │ +
379 for( unsigned int j = 1; j <= k; ++j )
│ │ │ │ +
380 {
│ │ │ │ +
381 Field *const end = it + baseSizes[ k ];
│ │ │ │ +
382 assert( (unsigned int)(end - values) <= offsets[ k ] );
│ │ │ │ +
383 for( ; it != end; ++row1, ++it )
│ │ │ │ +
384 *it = (Field( j ) / Field( j+1 )) * (*row1);
│ │ │ │ +
385 }
│ │ │ │ +
386 for( ; it != row1End; ++row0, ++it )
│ │ │ │ +
387 *it = (Field( k ) / Field( k+1 )) * (*row0);
│ │ │ │ +
388 row0 = row1;
│ │ │ │ +
389 }
│ │ │ │ +
390 }
│ │ │ │ +
391
│ │ │ │ +
392
│ │ │ │ +
393 template<GeometryType::Id baseGeometryId>
│ │ │ │ +
394 void integrateConical ( const unsigned int order,
│ │ │ │ +
395 const unsigned int *const offsets,
│ │ │ │ +
396 Field *const values) const
│ │ │ │ +
397 {
│ │ │ │ +
398 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ +
399 static const BaseSize &size = BaseSize::instance();
│ │ │ │ +
400 const unsigned int *const baseSizes = size.sizes_;
│ │ │ │ +
401
│ │ │ │ +
402 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ +
403
│ │ │ │ +
404 {
│ │ │ │ +
405 Field *const col0End = values + baseSizes[ 0 ];
│ │ │ │ +
406 for( Field *it = values; it != col0End; ++it )
│ │ │ │ +
407 *it *= Field( 1 ) / Field( int(baseGeometry.dim()+1) );
│ │ │ │ +
408 }
│ │ │ │ +
409
│ │ │ │ +
410 Field *row0 = values;
│ │ │ │ +
411 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ +
412 {
│ │ │ │ +
413 const Field factor = (Field( 1 ) / Field( k + baseGeometry.dim()+1));
│ │ │ │ +
414
│ │ │ │ +
415 Field *const row1 = values+offsets[ k-1 ];
│ │ │ │ +
416 Field *const col0End = row1 + baseSizes[ k ];
│ │ │ │ +
417 Field *it = row1;
│ │ │ │ +
418 for( ; it != col0End; ++it )
│ │ │ │ +
419 *it *= factor;
│ │ │ │ +
420 for( unsigned int i = 1; i <= k; ++i )
│ │ │ │ +
421 {
│ │ │ │ +
422 Field *const end = it + baseSizes[ k-i ];
│ │ │ │ +
423 assert( (unsigned int)(end - values) <= offsets[ k ] );
│ │ │ │ +
424 for( ; it != end; ++row0, ++it )
│ │ │ │ +
425 *it = (*row0) * (Field( i ) * factor);
│ │ │ │ +
426 }
│ │ │ │ +
427 row0 = row1;
│ │ │ │ +
428 }
│ │ │ │ +
429 }
│ │ │ │ +
430
│ │ │ │ +
431 };
│ │ │ │ +
│ │ │ │ +
432
│ │ │ │
433
│ │ │ │ -
434 out[n] += factor;
│ │ │ │ -
435 }
│ │ │ │ -
436 }
│ │ │ │ -
437 }
│ │ │ │ -
438 return;
│ │ │ │ -
439 }
│ │ │ │ -
440
│ │ │ │ -
441 if (totalOrder==2)
│ │ │ │ -
442 {
│ │ │ │ -
443 std::array<int,2> directions;
│ │ │ │ -
444 unsigned int counter = 0;
│ │ │ │ -
445 auto nonconstOrder = order; // need a copy that I can modify
│ │ │ │ -
446 for (int i=0; i<2; i++)
│ │ │ │ -
447 {
│ │ │ │ -
448 while (nonconstOrder[i])
│ │ │ │ -
449 {
│ │ │ │ -
450 directions[counter++] = i;
│ │ │ │ -
451 nonconstOrder[i]--;
│ │ │ │ -
452 }
│ │ │ │ -
453 }
│ │ │ │ +
434 // MonomialBasis
│ │ │ │ +
435 // -------------
│ │ │ │ +
436
│ │ │ │ +
437 template< GeometryType::Id geometryId, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
439 : public MonomialBasisImpl< geometryId, F >
│ │ │ │ +
440 {
│ │ │ │ +
441 static constexpr GeometryType geometry = geometryId;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
444
│ │ │ │ +
445 public:
│ │ │ │ +
446 static const unsigned int dimension = Base::dimDomain;
│ │ │ │ +
447 static const unsigned int dimRange = 1;
│ │ │ │ +
448
│ │ │ │ +
449 typedef typename Base::Field Field;
│ │ │ │ +
450
│ │ │ │ + │ │ │ │ +
452
│ │ │ │ +
453 typedef Dune::FieldVector<Field,dimRange> RangeVector;
│ │ │ │
454
│ │ │ │ -
455 //f = prod_{i} f_i -> dxa dxb f = sum_{i} {dxa f_i sum_{k \neq i} dxb f_k prod_{l \neq k,i} f_l
│ │ │ │ -
456 int n=0;
│ │ │ │ -
457 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
458 {
│ │ │ │ -
459 for (unsigned int i=0; i<=k-j; i++, n++)
│ │ │ │ -
460 {
│ │ │ │ -
461 R res = 0.0;
│ │ │ │ -
462
│ │ │ │ -
463 for (unsigned int no1=0; no1 < k; no1++)
│ │ │ │ -
464 {
│ │ │ │ -
465 R factor1 = lagrangianFactorDerivative(directions[0], no1, i, j, in);
│ │ │ │ -
466 for (unsigned int no2=0; no2 < k; no2++)
│ │ │ │ -
467 {
│ │ │ │ -
468 if (no1 == no2)
│ │ │ │ -
469 continue;
│ │ │ │ -
470 R factor2 = factor1*lagrangianFactorDerivative(directions[1], no2, i, j, in);
│ │ │ │ -
471 for (unsigned int no3=0; no3 < k; no3++)
│ │ │ │ -
472 {
│ │ │ │ -
473 if (no3 == no1 || no3 == no2)
│ │ │ │ -
474 continue;
│ │ │ │ -
475 factor2 *= lagrangianFactor(no3, i, j, in);
│ │ │ │ -
476 }
│ │ │ │ -
477 res += factor2;
│ │ │ │ -
478 }
│ │ │ │ -
479 }
│ │ │ │ -
480 out[n] = res;
│ │ │ │ -
481 }
│ │ │ │ -
482 }
│ │ │ │ -
483
│ │ │ │ -
484 return;
│ │ │ │ -
485 } // totalOrder==2
│ │ │ │ -
486
│ │ │ │ -
487 } // dim==2
│ │ │ │ -
488
│ │ │ │ -
489 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
490 }
│ │ │ │ -
491
│ │ │ │ -
493 static constexpr unsigned int order ()
│ │ │ │ -
494 {
│ │ │ │ -
495 return k;
│ │ │ │ + │ │ │ │ +
456
│ │ │ │ +
│ │ │ │ +
457 MonomialBasis (unsigned int order)
│ │ │ │ +
458 : Base(),
│ │ │ │ +
459 order_(order),
│ │ │ │ +
460 size_(Size::instance())
│ │ │ │ +
461 {
│ │ │ │ +
462 assert(order<=1024); // avoid wrapping of unsigned int (0-1) order=1024 is quite high...)
│ │ │ │ +
463 }
│ │ │ │ +
│ │ │ │ +
464
│ │ │ │ +
│ │ │ │ +
465 const unsigned int *sizes ( unsigned int order ) const
│ │ │ │ +
466 {
│ │ │ │ +
467 size_.computeSizes( order );
│ │ │ │ +
468 return size_.numBaseFunctions_;
│ │ │ │ +
469 }
│ │ │ │ +
│ │ │ │ +
470
│ │ │ │ +
│ │ │ │ +
471 const unsigned int *sizes () const
│ │ │ │ +
472 {
│ │ │ │ +
473 return sizes( order_ );
│ │ │ │ +
474 }
│ │ │ │ +
│ │ │ │ +
475
│ │ │ │ +
│ │ │ │ +
476 unsigned int size () const
│ │ │ │ +
477 {
│ │ │ │ +
478 size_.computeSizes( order_ );
│ │ │ │ +
479 return size_( order_ );
│ │ │ │ +
480 }
│ │ │ │ +
│ │ │ │ +
481
│ │ │ │ +
│ │ │ │ +
482 unsigned int derivSize ( const unsigned int deriv ) const
│ │ │ │ +
483 {
│ │ │ │ +
484 MonomialBasisSize< GeometryTypes::simplex(dimension).toId() >::instance().computeSizes( deriv );
│ │ │ │ +
485 return MonomialBasisSize< GeometryTypes::simplex(dimension).toId() >::instance() ( deriv );
│ │ │ │ +
486 }
│ │ │ │ +
│ │ │ │ +
487
│ │ │ │ +
│ │ │ │ +
488 unsigned int order () const
│ │ │ │ +
489 {
│ │ │ │ +
490 return order_ ;
│ │ │ │ +
491 }
│ │ │ │ +
│ │ │ │ +
492
│ │ │ │ +
│ │ │ │ +
493 unsigned int topologyId ( ) const
│ │ │ │ +
494 {
│ │ │ │ +
495 return geometry.id();
│ │ │ │
496 }
│ │ │ │ -
497 };
│ │ │ │ -
498
│ │ │ │ -
504 template<unsigned int dim, unsigned int k>
│ │ │ │ -
505 class LagrangeSimplexLocalCoefficients
│ │ │ │ -
506 {
│ │ │ │ -
507 public:
│ │ │ │ -
509 LagrangeSimplexLocalCoefficients ()
│ │ │ │ -
510 : localKeys_(size())
│ │ │ │ -
511 {
│ │ │ │ -
512 if (k==0)
│ │ │ │ -
513 {
│ │ │ │ -
514 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ -
515 return;
│ │ │ │ -
516 }
│ │ │ │ -
517
│ │ │ │ -
518 if (k==1)
│ │ │ │ -
519 {
│ │ │ │ -
520 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
521 localKeys_[i] = LocalKey(i,dim,0);
│ │ │ │ -
522 return;
│ │ │ │ -
523 }
│ │ │ │ -
524
│ │ │ │ -
525 if (dim==1)
│ │ │ │ -
526 {
│ │ │ │ -
527 // Order is at least 2 here
│ │ │ │ -
528 localKeys_[0] = LocalKey(0,1,0); // vertex dof
│ │ │ │ -
529 for (unsigned int i=1; i<k; i++)
│ │ │ │ -
530 localKeys_[i] = LocalKey(0,0,i-1); // element dofs
│ │ │ │ -
531 localKeys_.back() = LocalKey(1,1,0); // vertex dof
│ │ │ │ -
532 return;
│ │ │ │ -
533 }
│ │ │ │ -
534
│ │ │ │ -
535 if (dim==2)
│ │ │ │ -
536 {
│ │ │ │ -
537 int n=0;
│ │ │ │ -
538 int c=0;
│ │ │ │ -
539 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
540 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ -
541 {
│ │ │ │ -
542 if (i==0 && j==0)
│ │ │ │ -
543 {
│ │ │ │ -
544 localKeys_[n++] = LocalKey(0,2,0);
│ │ │ │ -
545 continue;
│ │ │ │ -
546 }
│ │ │ │ -
547 if (i==k && j==0)
│ │ │ │ -
548 {
│ │ │ │ -
549 localKeys_[n++] = LocalKey(1,2,0);
│ │ │ │ -
550 continue;
│ │ │ │ -
551 }
│ │ │ │ -
552 if (i==0 && j==k)
│ │ │ │ -
553 {
│ │ │ │ -
554 localKeys_[n++] = LocalKey(2,2,0);
│ │ │ │ -
555 continue;
│ │ │ │ -
556 }
│ │ │ │ -
557 if (j==0)
│ │ │ │ -
558 {
│ │ │ │ -
559 localKeys_[n++] = LocalKey(0,1,i-1);
│ │ │ │ -
560 continue;
│ │ │ │ -
561 }
│ │ │ │ -
562 if (i==0)
│ │ │ │ -
563 {
│ │ │ │ -
564 localKeys_[n++] = LocalKey(1,1,j-1);
│ │ │ │ -
565 continue;
│ │ │ │ -
566 }
│ │ │ │ -
567 if (i+j==k)
│ │ │ │ -
568 {
│ │ │ │ -
569 localKeys_[n++] = LocalKey(2,1,j-1);
│ │ │ │ -
570 continue;
│ │ │ │ -
571 }
│ │ │ │ -
572 localKeys_[n++] = LocalKey(0,0,c++);
│ │ │ │ -
573 }
│ │ │ │ -
574 return;
│ │ │ │ -
575 }
│ │ │ │ -
576
│ │ │ │ -
577 if (dim==3)
│ │ │ │ -
578 {
│ │ │ │ -
579 std::array<unsigned int, dim+1> vertexMap;
│ │ │ │ -
580 for (unsigned int i=0; i<=dim; i++)
│ │ │ │ -
581 vertexMap[i] = i;
│ │ │ │ -
582 generateLocalKeys(vertexMap);
│ │ │ │ -
583 return;
│ │ │ │ -
584 }
│ │ │ │ -
585 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for k<=1 or dim<=3!");
│ │ │ │ -
586 }
│ │ │ │ -
587
│ │ │ │ -
594 LagrangeSimplexLocalCoefficients (const std::array<unsigned int, dim+1> vertexMap)
│ │ │ │ -
595 : localKeys_(size())
│ │ │ │ -
596 {
│ │ │ │ -
597 if (dim!=2 && dim!=3)
│ │ │ │ -
598 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==2 and dim==3!");
│ │ │ │ +
│ │ │ │ +
497
│ │ │ │ +
│ │ │ │ +
498 void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ +
499 Field *const values ) const
│ │ │ │ +
500 {
│ │ │ │ +
501 Base::evaluate( deriv, order_, x, derivSize( deriv ), sizes( order_ ), values );
│ │ │ │ +
502 }
│ │ │ │ +
│ │ │ │ +
503
│ │ │ │ +
504 template <unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
505 void evaluate ( const DomainVector &x,
│ │ │ │ +
506 Field *const values ) const
│ │ │ │ +
507 {
│ │ │ │ +
508 evaluate( deriv, x, values );
│ │ │ │ +
509 }
│ │ │ │ +
│ │ │ │ +
510
│ │ │ │ +
511 template<unsigned int deriv, class Vector >
│ │ │ │ +
│ │ │ │ +
512 void evaluate ( const DomainVector &x,
│ │ │ │ +
513 Vector &values ) const
│ │ │ │ +
514 {
│ │ │ │ +
515 evaluate<deriv>(x,&(values[0]));
│ │ │ │ +
516 }
│ │ │ │ +
│ │ │ │ +
517 template<unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout >
│ │ │ │ +
│ │ │ │ +
518 void evaluate ( const DomainVector &x,
│ │ │ │ + │ │ │ │ +
520 {
│ │ │ │ +
521 evaluate<deriv>(x,&(values->block()));
│ │ │ │ +
522 }
│ │ │ │ +
│ │ │ │ +
523 template< unsigned int deriv >
│ │ │ │ +
│ │ │ │ +
524 void evaluate ( const DomainVector &x,
│ │ │ │ + │ │ │ │ +
526 {
│ │ │ │ +
527 evaluate(0,x,&(values[0][0]));
│ │ │ │ +
528 }
│ │ │ │ +
│ │ │ │ +
529
│ │ │ │ +
530 template<class Vector >
│ │ │ │ +
│ │ │ │ +
531 void evaluate ( const DomainVector &x,
│ │ │ │ +
532 Vector &values ) const
│ │ │ │ +
533 {
│ │ │ │ +
534 evaluate<0>(x,&(values[0]));
│ │ │ │ +
535 }
│ │ │ │ +
│ │ │ │ +
536
│ │ │ │ +
537 template< class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
538 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ +
539 {
│ │ │ │ +
540 assert( DVector::dimension == dimension);
│ │ │ │ +
541 DomainVector bx;
│ │ │ │ +
542 for( int d = 0; d < dimension; ++d )
│ │ │ │ +
543 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
544 evaluate<0>( bx, values );
│ │ │ │ +
545 }
│ │ │ │ +
│ │ │ │ +
546
│ │ │ │ +
│ │ │ │ +
547 void integrate ( Field *const values ) const
│ │ │ │ +
548 {
│ │ │ │ +
549 Base::integrate( order_, sizes( order_ ), values );
│ │ │ │ +
550 }
│ │ │ │ +
│ │ │ │ +
551 template <class Vector>
│ │ │ │ +
│ │ │ │ +
552 void integrate ( Vector &values ) const
│ │ │ │ +
553 {
│ │ │ │ +
554 integrate( &(values[ 0 ]) );
│ │ │ │ +
555 }
│ │ │ │ +
│ │ │ │ +
556 private:
│ │ │ │ +
557 MonomialBasis(const This&);
│ │ │ │ +
558 This& operator=(const This&);
│ │ │ │ +
559 unsigned int order_;
│ │ │ │ +
560 Size &size_;
│ │ │ │ +
561 };
│ │ │ │ +
│ │ │ │ +
562
│ │ │ │ +
563
│ │ │ │ +
564
│ │ │ │ +
565 // StdMonomialBasis
│ │ │ │ +
566 // ----------------
│ │ │ │ +
567
│ │ │ │ +
568 template< int dim,class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
570 : public MonomialBasis< GeometryTypes::simplex(dim).toId() , F >
│ │ │ │ +
571 {
│ │ │ │ + │ │ │ │ +
573 typedef MonomialBasis< GeometryTypes::simplex(dim).toId(), F > Base;
│ │ │ │ +
574
│ │ │ │ +
575 public:
│ │ │ │ +
576 static constexpr GeometryType geometry = GeometryTypes::simplex(dim);
│ │ │ │ +
577 static const int dimension = dim;
│ │ │ │ +
578
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
580 : Base( order )
│ │ │ │ +
581 {}
│ │ │ │ +
│ │ │ │ +
582 };
│ │ │ │ +
│ │ │ │ +
583
│ │ │ │ +
584
│ │ │ │ +
585
│ │ │ │ +
586 // StandardBiMonomialBasis
│ │ │ │ +
587 // -----------------------
│ │ │ │ +
588
│ │ │ │ +
589 template< int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
591 : public MonomialBasis< GeometryTypes::cube(dim).toId() , F >
│ │ │ │ +
592 {
│ │ │ │ + │ │ │ │ +
594 typedef MonomialBasis< GeometryTypes::cube(dim).toId() , F > Base;
│ │ │ │ +
595
│ │ │ │ +
596 public:
│ │ │ │ +
597 static constexpr GeometryType geometry = GeometryTypes::cube(dim);
│ │ │ │ +
598 static const int dimension = dim;
│ │ │ │
599
│ │ │ │ -
600 generateLocalKeys(vertexMap);
│ │ │ │ -
601 }
│ │ │ │ -
602
│ │ │ │ -
603
│ │ │ │ -
604 template<class VertexMap>
│ │ │ │ -
605 LagrangeSimplexLocalCoefficients(const VertexMap &vertexmap)
│ │ │ │ -
606 : localKeys_(size())
│ │ │ │ -
607 {
│ │ │ │ -
608 if (dim!=2 && dim!=3)
│ │ │ │ -
609 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==2 and dim==3!");
│ │ │ │ -
610
│ │ │ │ -
611 std::array<unsigned int, dim+1> vertexmap_array;
│ │ │ │ -
612 std::copy(vertexmap, vertexmap + dim + 1, vertexmap_array.begin());
│ │ │ │ -
613 generateLocalKeys(vertexmap_array);
│ │ │ │ -
614 }
│ │ │ │ -
615
│ │ │ │ -
617 static constexpr std::size_t size ()
│ │ │ │ -
618 {
│ │ │ │ -
619 return binomial(k+dim,dim);
│ │ │ │ -
620 }
│ │ │ │ -
621
│ │ │ │ -
623 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
624 {
│ │ │ │ -
625 return localKeys_[i];
│ │ │ │ -
626 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
601 : Base( order )
│ │ │ │ +
602 {}
│ │ │ │ +
│ │ │ │ +
603 };
│ │ │ │ +
│ │ │ │ +
604
│ │ │ │ +
605 // -----------------------------------------------------------
│ │ │ │ +
606 // -----------------------------------------------------------
│ │ │ │ +
607 // VirtualMonomialBasis
│ │ │ │ +
608 // -------------------
│ │ │ │ +
609
│ │ │ │ +
610 template< int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
612 {
│ │ │ │ + │ │ │ │ +
614
│ │ │ │ +
615 public:
│ │ │ │ +
616 typedef F Field;
│ │ │ │ +
617 typedef F StorageField;
│ │ │ │ +
618 static const int dimension = dim;
│ │ │ │ +
619 static const unsigned int dimRange = 1;
│ │ │ │ +
620
│ │ │ │ +
621 typedef FieldVector<Field,dimension> DomainVector;
│ │ │ │ +
622 typedef FieldVector<Field,dimRange> RangeVector;
│ │ │ │ +
623
│ │ │ │ +
│ │ │ │ +
624 explicit VirtualMonomialBasis(const GeometryType& gt,
│ │ │ │ +
625 unsigned int order)
│ │ │ │ +
626 : order_(order), geometry_(gt) {}
│ │ │ │ +
│ │ │ │
627
│ │ │ │ -
628 private:
│ │ │ │ -
629 std::vector<LocalKey> localKeys_;
│ │ │ │ -
630
│ │ │ │ -
631 void generateLocalKeys(const std::array<unsigned int, dim+1> vertexMap)
│ │ │ │ -
632 {
│ │ │ │ -
633 if (k==0)
│ │ │ │ -
634 {
│ │ │ │ -
635 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ -
636 return;
│ │ │ │ -
637 }
│ │ │ │ -
638
│ │ │ │ -
639 if (dim==2)
│ │ │ │ -
640 {
│ │ │ │ -
641 // Create default assignment
│ │ │ │ -
642 int n=0;
│ │ │ │ -
643 int c=0;
│ │ │ │ -
644 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
645 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ -
646 {
│ │ │ │ -
647 if (i==0 && j==0)
│ │ │ │ -
648 {
│ │ │ │ -
649 localKeys_[n++] = LocalKey(0,2,0);
│ │ │ │ -
650 continue;
│ │ │ │ -
651 }
│ │ │ │ -
652 if (i==k && j==0)
│ │ │ │ -
653 {
│ │ │ │ -
654 localKeys_[n++] = LocalKey(1,2,0);
│ │ │ │ -
655 continue;
│ │ │ │ -
656 }
│ │ │ │ -
657 if (i==0 && j==k)
│ │ │ │ -
658 {
│ │ │ │ -
659 localKeys_[n++] = LocalKey(2,2,0);
│ │ │ │ -
660 continue;
│ │ │ │ -
661 }
│ │ │ │ -
662 if (j==0)
│ │ │ │ -
663 {
│ │ │ │ -
664 localKeys_[n++] = LocalKey(0,1,i-1);
│ │ │ │ -
665 continue;
│ │ │ │ -
666 }
│ │ │ │ -
667 if (i==0)
│ │ │ │ -
668 {
│ │ │ │ -
669 localKeys_[n++] = LocalKey(1,1,j-1);
│ │ │ │ -
670 continue;
│ │ │ │ -
671 }
│ │ │ │ -
672 if (i+j==k)
│ │ │ │ -
673 {
│ │ │ │ -
674 localKeys_[n++] = LocalKey(2,1,j-1);
│ │ │ │ -
675 continue;
│ │ │ │ -
676 }
│ │ │ │ -
677 localKeys_[n++] = LocalKey(0,0,c++);
│ │ │ │ -
678 }
│ │ │ │ -
679
│ │ │ │ -
680 // Flip edge orientations, if requested
│ │ │ │ -
681 bool flip[3];
│ │ │ │ -
682 flip[0] = vertexMap[0] > vertexMap[1];
│ │ │ │ -
683 flip[1] = vertexMap[0] > vertexMap[2];
│ │ │ │ -
684 flip[2] = vertexMap[1] > vertexMap[2];
│ │ │ │ -
685 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
686 if (localKeys_[i].codim()==1 && flip[localKeys_[i].subEntity()])
│ │ │ │ -
687 localKeys_[i].index(k-2-localKeys_[i].index());
│ │ │ │ -
688
│ │ │ │ -
689 return;
│ │ │ │ -
690 }
│ │ │ │ -
691
│ │ │ │ -
692 if (dim!=3)
│ │ │ │ -
693 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==3!");
│ │ │ │ -
694
│ │ │ │ -
695 unsigned int subindex[16];
│ │ │ │ -
696 unsigned int codim_count[4] = {0};
│ │ │ │ -
697 for (unsigned int m = 1; m < 16; ++m)
│ │ │ │ -
698 {
│ │ │ │ -
699 unsigned int codim = !(m&1) + !(m&2) + !(m&4) + !(m&8);
│ │ │ │ -
700 subindex[m] = codim_count[codim]++;
│ │ │ │ -
701 }
│ │ │ │ -
702
│ │ │ │ -
703 int a1 = (3*k + 12)*k + 11;
│ │ │ │ -
704 int a2 = -3*k - 6;
│ │ │ │ -
705 unsigned int dof_count[16] = {0};
│ │ │ │ -
706 unsigned int i[4];
│ │ │ │ -
707 for (i[3] = 0; i[3] <= k; ++i[3])
│ │ │ │ -
708 for (i[2] = 0; i[2] <= k - i[3]; ++i[2])
│ │ │ │ -
709 for (i[1] = 0; i[1] <= k - i[2] - i[3]; ++i[1])
│ │ │ │ -
710 {
│ │ │ │ -
711 i[0] = k - i[1] - i[2] - i[3];
│ │ │ │ -
712 unsigned int j[4];
│ │ │ │ -
713 unsigned int entity = 0;
│ │ │ │ -
714 unsigned int codim = 0;
│ │ │ │ -
715 for (unsigned int m = 0; m < 4; ++m)
│ │ │ │ -
716 {
│ │ │ │ -
717 j[m] = i[vertexMap[m]];
│ │ │ │ -
718 entity += !!j[m] << m;
│ │ │ │ -
719 codim += !j[m];
│ │ │ │ -
720 }
│ │ │ │ -
721 int local_index = j[3]*(a1 + (a2 + j[3])*j[3])/6
│ │ │ │ -
722 + j[2]*(2*(k - j[3]) + 3 - j[2])/2 + j[1];
│ │ │ │ -
723 localKeys_[local_index] = LocalKey(subindex[entity], codim, dof_count[entity]++);
│ │ │ │ -
724 }
│ │ │ │ -
725 }
│ │ │ │ -
726 };
│ │ │ │ -
727
│ │ │ │ -
732 template<class LocalBasis>
│ │ │ │ -
733 class LagrangeSimplexLocalInterpolation
│ │ │ │ -
734 {
│ │ │ │ -
735 static const int kdiv = (LocalBasis::order() == 0 ? 1 : LocalBasis::order());
│ │ │ │ -
736 public:
│ │ │ │ -
737
│ │ │ │ -
745 template<typename F, typename C>
│ │ │ │ -
746 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
747 {
│ │ │ │ -
748 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ -
749 constexpr auto k = LocalBasis::order();
│ │ │ │ -
750 using D = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ -
751
│ │ │ │ -
752 typename LocalBasis::Traits::DomainType x;
│ │ │ │ -
753
│ │ │ │ -
754 out.resize(LocalBasis::size());
│ │ │ │ -
755
│ │ │ │ -
756 // Specialization for zero-order case
│ │ │ │ -
757 if (k==0)
│ │ │ │ -
758 {
│ │ │ │ -
759 auto center = ReferenceElements<D,dim>::simplex().position(0,0);
│ │ │ │ -
760 out[0] = f(center);
│ │ │ │ -
761 return;
│ │ │ │ -
762 }
│ │ │ │ + │ │ │ │ +
629
│ │ │ │ +
630 virtual const unsigned int *sizes ( ) const = 0;
│ │ │ │ +
631
│ │ │ │ +
│ │ │ │ +
632 unsigned int size ( ) const
│ │ │ │ +
633 {
│ │ │ │ +
634 return sizes( )[ order_ ];
│ │ │ │ +
635 }
│ │ │ │ +
│ │ │ │ +
636
│ │ │ │ +
│ │ │ │ +
637 unsigned int order () const
│ │ │ │ +
638 {
│ │ │ │ +
639 return order_;
│ │ │ │ +
640 }
│ │ │ │ +
│ │ │ │ +
641
│ │ │ │ +
│ │ │ │ +
642 GeometryType type() const
│ │ │ │ +
643 {
│ │ │ │ +
644 return geometry_;
│ │ │ │ +
645 }
│ │ │ │ +
│ │ │ │ +
646
│ │ │ │ +
647 virtual void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ +
648 Field *const values ) const = 0;
│ │ │ │ +
649 template < unsigned int deriv >
│ │ │ │ +
│ │ │ │ +
650 void evaluate ( const DomainVector &x,
│ │ │ │ +
651 Field *const values ) const
│ │ │ │ +
652 {
│ │ │ │ +
653 evaluate( deriv, x, values );
│ │ │ │ +
654 }
│ │ │ │ +
│ │ │ │ +
655 template < unsigned int deriv, int size >
│ │ │ │ +
│ │ │ │ +
656 void evaluate ( const DomainVector &x,
│ │ │ │ +
657 Dune::FieldVector<Field,size> *const values ) const
│ │ │ │ +
658 {
│ │ │ │ +
659 evaluate( deriv, x, &(values[0][0]) );
│ │ │ │ +
660 }
│ │ │ │ +
│ │ │ │ +
661 template<unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout >
│ │ │ │ +
│ │ │ │ +
662 void evaluate ( const DomainVector &x,
│ │ │ │ + │ │ │ │ +
664 {
│ │ │ │ +
665 evaluate<deriv>(x,&(values->block()));
│ │ │ │ +
666 }
│ │ │ │ +
│ │ │ │ +
667 template <unsigned int deriv, class Vector>
│ │ │ │ +
│ │ │ │ +
668 void evaluate ( const DomainVector &x,
│ │ │ │ +
669 Vector &values ) const
│ │ │ │ +
670 {
│ │ │ │ +
671 evaluate<deriv>( x, &(values[ 0 ]) );
│ │ │ │ +
672 }
│ │ │ │ +
│ │ │ │ +
673 template< class Vector >
│ │ │ │ +
│ │ │ │ +
674 void evaluate ( const DomainVector &x,
│ │ │ │ +
675 Vector &values ) const
│ │ │ │ +
676 {
│ │ │ │ +
677 evaluate<0>(x,values);
│ │ │ │ +
678 }
│ │ │ │ +
│ │ │ │ +
679 template< class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
680 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ +
681 {
│ │ │ │ +
682 assert( DVector::dimension == dimension);
│ │ │ │ +
683 DomainVector bx;
│ │ │ │ +
684 for( int d = 0; d < dimension; ++d )
│ │ │ │ +
685 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
686 evaluate<0>( bx, values );
│ │ │ │ +
687 }
│ │ │ │ +
│ │ │ │ +
688 template< unsigned int deriv, class DVector, class RVector >
│ │ │ │ +
│ │ │ │ +
689 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ +
690 {
│ │ │ │ +
691 assert( DVector::dimension == dimension);
│ │ │ │ +
692 DomainVector bx;
│ │ │ │ +
693 for( int d = 0; d < dimension; ++d )
│ │ │ │ +
694 field_cast( x[ d ], bx[ d ] );
│ │ │ │ +
695 evaluate<deriv>( bx, values );
│ │ │ │ +
696 }
│ │ │ │ +
│ │ │ │ +
697
│ │ │ │ +
698 virtual void integrate ( Field *const values ) const = 0;
│ │ │ │ +
699 template <class Vector>
│ │ │ │ +
│ │ │ │ +
700 void integrate ( Vector &values ) const
│ │ │ │ +
701 {
│ │ │ │ +
702 integrate( &(values[ 0 ]) );
│ │ │ │ +
703 }
│ │ │ │ +
│ │ │ │ +
704 protected:
│ │ │ │ +
705 unsigned int order_;
│ │ │ │ +
706 GeometryType geometry_;
│ │ │ │ +
707 };
│ │ │ │ +
│ │ │ │ +
708
│ │ │ │ +
709 template< GeometryType::Id geometryId, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
711 : public VirtualMonomialBasis< static_cast<GeometryType>(geometryId).dim(), F >
│ │ │ │ +
712 {
│ │ │ │ +
713 static constexpr GeometryType geometry = geometryId;
│ │ │ │ +
714 typedef VirtualMonomialBasis< geometry.dim(), F > Base;
│ │ │ │ + │ │ │ │ +
716
│ │ │ │ +
717 public:
│ │ │ │ +
718 typedef typename Base::Field Field;
│ │ │ │ + │ │ │ │ +
720
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
722 : Base(geometry,order), basis_(order)
│ │ │ │ +
723 {}
│ │ │ │ +
│ │ │ │ +
724
│ │ │ │ +
│ │ │ │ +
725 const unsigned int *sizes ( ) const
│ │ │ │ +
726 {
│ │ │ │ +
727 return basis_.sizes(order_);
│ │ │ │ +
728 }
│ │ │ │ +
│ │ │ │ +
729
│ │ │ │ +
│ │ │ │ +
730 void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ +
731 Field *const values ) const
│ │ │ │ +
732 {
│ │ │ │ +
733 basis_.evaluate(deriv,x,values);
│ │ │ │ +
734 }
│ │ │ │ +
│ │ │ │ +
735
│ │ │ │ +
│ │ │ │ +
736 void integrate ( Field *const values ) const
│ │ │ │ +
737 {
│ │ │ │ +
738 basis_.integrate(values);
│ │ │ │ +
739 }
│ │ │ │ +
│ │ │ │ +
740
│ │ │ │ +
741 private:
│ │ │ │ + │ │ │ │ +
743 using Base::order_;
│ │ │ │ +
744 };
│ │ │ │ +
│ │ │ │ +
745
│ │ │ │ +
746 // MonomialBasisFactory
│ │ │ │ +
747 // --------------------
│ │ │ │ +
748
│ │ │ │ +
749 template< int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
751 {
│ │ │ │ +
752 static const unsigned int dimension = dim;
│ │ │ │ +
753 typedef F StorageField;
│ │ │ │ +
754
│ │ │ │ +
755 typedef unsigned int Key;
│ │ │ │ + │ │ │ │ +
757
│ │ │ │ +
758 template < int dd, class FF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
760 {
│ │ │ │ + │ │ │ │ +
762 };
│ │ │ │ +
│ │ │ │
763
│ │ │ │ -
764 // Specialization for first-order case
│ │ │ │ -
765 if (k==1)
│ │ │ │ -
766 {
│ │ │ │ -
767 // vertex 0
│ │ │ │ -
768 std::fill(x.begin(), x.end(), 0);
│ │ │ │ -
769 out[0] = f(x);
│ │ │ │ -
770
│ │ │ │ -
771 // remaining vertices
│ │ │ │ -
772 for (int i=0; i<dim; i++)
│ │ │ │ -
773 {
│ │ │ │ -
774 for (int j=0; j<dim; j++)
│ │ │ │ -
775 x[j] = (i==j);
│ │ │ │ +
764 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
765 static Object* create ( const Key &order )
│ │ │ │ +
766 {
│ │ │ │ + │ │ │ │ +
768 }
│ │ │ │ +
│ │ │ │ +
769 static void release( Object *object ) { delete object; }
│ │ │ │ +
770 };
│ │ │ │ +
│ │ │ │ +
771
│ │ │ │ +
772
│ │ │ │ +
773
│ │ │ │ +
774 // MonomialBasisProvider
│ │ │ │ +
775 // ---------------------
│ │ │ │
776
│ │ │ │ -
777 out[i+1] = f(x);
│ │ │ │ -
778 }
│ │ │ │ -
779 return;
│ │ │ │ -
780 }
│ │ │ │ -
781
│ │ │ │ -
782 if (dim==1)
│ │ │ │ -
783 {
│ │ │ │ -
784 for (unsigned int i=0; i<k+1; i++)
│ │ │ │ -
785 {
│ │ │ │ -
786 x[0] = ((D)i)/k;
│ │ │ │ -
787 out[i] = f(x);
│ │ │ │ -
788 }
│ │ │ │ -
789 return;
│ │ │ │ -
790 }
│ │ │ │ +
777 template< int dim, class SF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
779 : public TopologySingletonFactory< MonomialBasisFactory< dim, SF > >
│ │ │ │ +
780 {
│ │ │ │ +
781 static const unsigned int dimension = dim;
│ │ │ │ +
782 typedef SF StorageField;
│ │ │ │ +
783 template < int dd, class FF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
785 {
│ │ │ │ + │ │ │ │ +
787 };
│ │ │ │ +
│ │ │ │ +
788 };
│ │ │ │ +
│ │ │ │ +
789
│ │ │ │ +
790}
│ │ │ │
791
│ │ │ │ -
792 if (dim==2)
│ │ │ │ -
793 {
│ │ │ │ -
794 int n=0;
│ │ │ │ -
795 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
796 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ -
797 {
│ │ │ │ -
798 x = { ((D)i)/k, ((D)j)/k };
│ │ │ │ -
799 out[n] = f(x);
│ │ │ │ -
800 n++;
│ │ │ │ -
801 }
│ │ │ │ -
802 return;
│ │ │ │ -
803 }
│ │ │ │ -
804
│ │ │ │ -
805 if (dim!=3)
│ │ │ │ -
806 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalInterpolation only implemented for dim<=3!");
│ │ │ │ -
807
│ │ │ │ -
808 int n=0;
│ │ │ │ -
809 for (int i2 = 0; i2 <= (int)k; i2++)
│ │ │ │ -
810 for (int i1 = 0; i1 <= (int)k-i2; i1++)
│ │ │ │ -
811 for (int i0 = 0; i0 <= (int)k-i1-i2; i0++)
│ │ │ │ -
812 {
│ │ │ │ -
813 x[0] = ((D)i0)/((D)kdiv);
│ │ │ │ -
814 x[1] = ((D)i1)/((D)kdiv);
│ │ │ │ -
815 x[2] = ((D)i2)/((D)kdiv);
│ │ │ │ -
816 out[n] = f(x);
│ │ │ │ -
817 n++;
│ │ │ │ -
818 }
│ │ │ │ -
819 }
│ │ │ │ -
820
│ │ │ │ -
821 };
│ │ │ │ -
822
│ │ │ │ -
823} } // namespace Dune::Impl
│ │ │ │ -
824
│ │ │ │ -
825namespace Dune
│ │ │ │ -
826{
│ │ │ │ -
834 template<class D, class R, int d, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
836 {
│ │ │ │ -
837 public:
│ │ │ │ - │ │ │ │ -
841 Impl::LagrangeSimplexLocalCoefficients<d,k>,
│ │ │ │ -
842 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,d,k> > >;
│ │ │ │ -
843
│ │ │ │ - │ │ │ │ -
846
│ │ │ │ -
851 template<typename VertexMap>
│ │ │ │ -
│ │ │ │ -
852 LagrangeSimplexLocalFiniteElement(const VertexMap& vertexmap)
│ │ │ │ -
853 : coefficients_(vertexmap)
│ │ │ │ -
854 {}
│ │ │ │ -
│ │ │ │ -
855
│ │ │ │ -
│ │ │ │ -
858 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
859 {
│ │ │ │ -
860 return basis_;
│ │ │ │ -
861 }
│ │ │ │ -
│ │ │ │ -
862
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
866 {
│ │ │ │ -
867 return coefficients_;
│ │ │ │ -
868 }
│ │ │ │ -
│ │ │ │ -
869
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
873 {
│ │ │ │ -
874 return interpolation_;
│ │ │ │ -
875 }
│ │ │ │ -
│ │ │ │ -
876
│ │ │ │ -
│ │ │ │ -
878 static constexpr std::size_t size ()
│ │ │ │ -
879 {
│ │ │ │ -
880 return Impl::LagrangeSimplexLocalBasis<D,R,d,k>::size();
│ │ │ │ -
881 }
│ │ │ │ -
│ │ │ │ -
882
│ │ │ │ -
│ │ │ │ -
885 static constexpr GeometryType type ()
│ │ │ │ -
886 {
│ │ │ │ -
887 return GeometryTypes::simplex(d);
│ │ │ │ -
888 }
│ │ │ │ -
│ │ │ │ -
889
│ │ │ │ -
890 private:
│ │ │ │ -
891 Impl::LagrangeSimplexLocalBasis<D,R,d,k> basis_;
│ │ │ │ -
892 Impl::LagrangeSimplexLocalCoefficients<d,k> coefficients_;
│ │ │ │ -
893 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,d,k> > interpolation_;
│ │ │ │ -
894 };
│ │ │ │ -
│ │ │ │ -
895
│ │ │ │ -
896} // namespace Dune
│ │ │ │ -
897
│ │ │ │ -
898#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
792#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangesimplex.hh:872
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangesimplex.hh:858
│ │ │ │ -
LagrangeSimplexLocalFiniteElement()
Definition lagrangesimplex.hh:845
│ │ │ │ -
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangesimplex.hh:878
│ │ │ │ -
LagrangeSimplexLocalFiniteElement(const VertexMap &vertexmap)
Definition lagrangesimplex.hh:852
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangesimplex.hh:865
│ │ │ │ -
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangesimplex.hh:885
│ │ │ │ - │ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
Definition monomialbasis.hh:84
│ │ │ │ +
unsigned int * numBaseFunctions_
Definition monomialbasis.hh:100
│ │ │ │ +
void computeSizes(unsigned int order)
Definition monomialbasis.hh:126
│ │ │ │ +
unsigned int * sizes_
Definition monomialbasis.hh:97
│ │ │ │ +
MonomialBasisSize()
Definition monomialbasis.hh:102
│ │ │ │ +
~MonomialBasisSize()
Definition monomialbasis.hh:110
│ │ │ │ +
unsigned int operator()(const unsigned int order) const
Definition monomialbasis.hh:116
│ │ │ │ +
unsigned int maxOrder_
Definition monomialbasis.hh:94
│ │ │ │ +
unsigned int maxOrder() const
Definition monomialbasis.hh:121
│ │ │ │ +
static This & instance()
Definition monomialbasis.hh:88
│ │ │ │ +
Definition monomialbasis.hh:440
│ │ │ │ +
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ +
static const unsigned int dimension
Definition monomialbasis.hh:446
│ │ │ │ +
Dune::FieldVector< Field, dimRange > RangeVector
Definition monomialbasis.hh:453
│ │ │ │ +
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ +
const unsigned int * sizes() const
Definition monomialbasis.hh:471
│ │ │ │ +
unsigned int topologyId() const
Definition monomialbasis.hh:493
│ │ │ │ +
void integrate(Vector &values) const
Definition monomialbasis.hh:552
│ │ │ │ +
Base::Field Field
Definition monomialbasis.hh:449
│ │ │ │ +
void integrate(Field *const values) const
Definition monomialbasis.hh:547
│ │ │ │ +
static const unsigned int dimRange
Definition monomialbasis.hh:447
│ │ │ │ +
Base::DomainVector DomainVector
Definition monomialbasis.hh:451
│ │ │ │ +
void evaluate(const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:505
│ │ │ │ +
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:531
│ │ │ │ +
void evaluate(const DomainVector &x, FieldVector< Field, Derivatives< Field, dimension, 1, deriv, DerivativeLayoutNS::value >::size > *values) const
Definition monomialbasis.hh:524
│ │ │ │ +
void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, layout > *values) const
Definition monomialbasis.hh:518
│ │ │ │ +
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:538
│ │ │ │ +
MonomialBasisSize< geometryId > Size
Definition monomialbasis.hh:455
│ │ │ │ +
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:512
│ │ │ │ +
MonomialBasis(unsigned int order)
Definition monomialbasis.hh:457
│ │ │ │ +
unsigned int derivSize(const unsigned int deriv) const
Definition monomialbasis.hh:482
│ │ │ │ +
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ +
unsigned int order() const
Definition monomialbasis.hh:488
│ │ │ │ +
Definition monomialbasis.hh:177
│ │ │ │ +
MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size
Definition monomialbasis.hh:179
│ │ │ │ +
static void copy(const unsigned int deriv, F *&wit, F *&rit, const unsigned int numBaseFunctions, const F &z)
Definition monomialbasis.hh:181
│ │ │ │ +
MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize
Definition monomialbasis.hh:178
│ │ │ │ +
Definition monomialbasis.hh:234
│ │ │ │ +
FieldVector< Field, dimDomain > DomainVector
Definition monomialbasis.hh:242
│ │ │ │ +
static constexpr GeometryType geometry
Definition monomialbasis.hh:238
│ │ │ │ +
F Field
Definition monomialbasis.hh:236
│ │ │ │ +
static const unsigned int dimDomain
Definition monomialbasis.hh:240
│ │ │ │ +
Definition monomialbasis.hh:571
│ │ │ │ +
static constexpr GeometryType geometry
Definition monomialbasis.hh:576
│ │ │ │ +
StandardMonomialBasis(unsigned int order)
Definition monomialbasis.hh:579
│ │ │ │ +
static const int dimension
Definition monomialbasis.hh:577
│ │ │ │ +
Definition monomialbasis.hh:592
│ │ │ │ +
static const int dimension
Definition monomialbasis.hh:598
│ │ │ │ +
static constexpr GeometryType geometry
Definition monomialbasis.hh:597
│ │ │ │ +
StandardBiMonomialBasis(unsigned int order)
Definition monomialbasis.hh:600
│ │ │ │ +
Definition monomialbasis.hh:612
│ │ │ │ +
GeometryType geometry_
Definition monomialbasis.hh:706
│ │ │ │ +
FieldVector< Field, dimension > DomainVector
Definition monomialbasis.hh:621
│ │ │ │ +
unsigned int order_
Definition monomialbasis.hh:705
│ │ │ │ +
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:674
│ │ │ │ +
void evaluate(const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:650
│ │ │ │ +
F Field
Definition monomialbasis.hh:616
│ │ │ │ +
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:668
│ │ │ │ +
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:680
│ │ │ │ +
unsigned int order() const
Definition monomialbasis.hh:637
│ │ │ │ +
static const unsigned int dimRange
Definition monomialbasis.hh:619
│ │ │ │ +
F StorageField
Definition monomialbasis.hh:617
│ │ │ │ +
static const int dimension
Definition monomialbasis.hh:618
│ │ │ │ +
unsigned int size() const
Definition monomialbasis.hh:632
│ │ │ │ +
FieldVector< Field, dimRange > RangeVector
Definition monomialbasis.hh:622
│ │ │ │ +
virtual ~VirtualMonomialBasis()
Definition monomialbasis.hh:628
│ │ │ │ +
virtual void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const =0
│ │ │ │ +
virtual void integrate(Field *const values) const =0
│ │ │ │ +
void evaluate(const DomainVector &x, Dune::FieldVector< Field, size > *const values) const
Definition monomialbasis.hh:656
│ │ │ │ +
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:689
│ │ │ │ +
GeometryType type() const
Definition monomialbasis.hh:642
│ │ │ │ +
void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, layout > *values) const
Definition monomialbasis.hh:662
│ │ │ │ +
VirtualMonomialBasis(const GeometryType &gt, unsigned int order)
Definition monomialbasis.hh:624
│ │ │ │ +
virtual const unsigned int * sizes() const =0
│ │ │ │ +
void integrate(Vector &values) const
Definition monomialbasis.hh:700
│ │ │ │ +
Definition monomialbasis.hh:712
│ │ │ │ +
void integrate(Field *const values) const
Definition monomialbasis.hh:736
│ │ │ │ +
const unsigned int * sizes() const
Definition monomialbasis.hh:725
│ │ │ │ +
Base::DomainVector DomainVector
Definition monomialbasis.hh:719
│ │ │ │ +
Base::Field Field
Definition monomialbasis.hh:718
│ │ │ │ +
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:730
│ │ │ │ +
VirtualMonomialBasisImpl(unsigned int order)
Definition monomialbasis.hh:721
│ │ │ │ +
Definition monomialbasis.hh:751
│ │ │ │ +
static void release(Object *object)
Definition monomialbasis.hh:769
│ │ │ │ +
const VirtualMonomialBasis< dimension, F > Object
Definition monomialbasis.hh:756
│ │ │ │ +
static Object * create(const Key &order)
Definition monomialbasis.hh:765
│ │ │ │ +
F StorageField
Definition monomialbasis.hh:753
│ │ │ │ +
static const unsigned int dimension
Definition monomialbasis.hh:752
│ │ │ │ +
unsigned int Key
Definition monomialbasis.hh:755
│ │ │ │ + │ │ │ │ +
MonomialBasisFactory< dd, FF > Type
Definition monomialbasis.hh:761
│ │ │ │ +
Definition monomialbasis.hh:780
│ │ │ │ +
static const unsigned int dimension
Definition monomialbasis.hh:781
│ │ │ │ +
SF StorageField
Definition monomialbasis.hh:782
│ │ │ │ + │ │ │ │ +
MonomialBasisProvider< dd, FF > Type
Definition monomialbasis.hh:786
│ │ │ │ +
Definition tensor.hh:180
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,922 +1,1112 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangesimplex.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +monomialbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ +5#ifndef DUNE_MONOMIALBASIS_HH │ │ │ │ │ +6#define DUNE_MONOMIALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ 15 │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -21 │ │ │ │ │ -22namespace _D_u_n_e { namespace Impl │ │ │ │ │ -23{ │ │ │ │ │ -34 template │ │ │ │ │ -35 class LagrangeSimplexLocalBasis │ │ │ │ │ -36 { │ │ │ │ │ -37 public: │ │ │ │ │ -38 using Traits = │ │ │ │ │ -LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ -39 │ │ │ │ │ -44 static constexpr unsigned int size () │ │ │ │ │ -45 { │ │ │ │ │ -46 return binomial(k+dim,dim); │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -50 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ -51 std::vector& out) const │ │ │ │ │ -52 { │ │ │ │ │ -53 out.resize(size()); │ │ │ │ │ -54 │ │ │ │ │ -55 // Specialization for zero-order case │ │ │ │ │ -56 if (k==0) │ │ │ │ │ -57 { │ │ │ │ │ -58 out[0] = 1; │ │ │ │ │ -59 return; │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -62 // Specialization for first-order case │ │ │ │ │ -63 if (k==1) │ │ │ │ │ -64 { │ │ │ │ │ -65 out[0] = 1.0; │ │ │ │ │ -66 for (size_t i=0; i │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +19 │ │ │ │ │ +20namespace _D_u_n_e │ │ │ │ │ +21{ │ │ │ │ │ +22 /************************************************ │ │ │ │ │ +23 * Classes for evaluating ''Monomials'' on any order │ │ │ │ │ +24 * for all reference element type. │ │ │ │ │ +25 * For a simplex topology these are the normal │ │ │ │ │ +26 * monomials for cube topologies the bimonomials. │ │ │ │ │ +27 * The construction follows the construction of the │ │ │ │ │ +28 * generic geometries using tensor products for │ │ │ │ │ +29 * prism generation and duffy transform for pyramid │ │ │ │ │ +30 * construction. │ │ │ │ │ +31 * A derivative argument can be applied, in which case │ │ │ │ │ +32 * all derivatives up to the desired order are │ │ │ │ │ +33 * evaluated. Note that for higher order derivatives │ │ │ │ │ +34 * only the ''lower'' part of the symmetric tensor │ │ │ │ │ +35 * is evaluated, e.g., passing derivative equal to 2 │ │ │ │ │ +36 * to the class will provide the vector │ │ │ │ │ +37 * (d/dxdx p, d/dxydx p, d/dydy p, │ │ │ │ │ +38 * d/dx p, d/dy p, p) │ │ │ │ │ +39 * Important: │ │ │ │ │ +40 * So far the computation of the derivatives has not │ │ │ │ │ +41 * been fully implemented for general pyramid │ │ │ │ │ +42 * construction, i.e., in the case where a pyramid is │ │ │ │ │ +43 * build over a non simplex base geometry. │ │ │ │ │ +44 * │ │ │ │ │ +45 * Central classes: │ │ │ │ │ +46 * 1) template< GeometryType::Id geometryId, class F > │ │ │ │ │ +47 * class MonomialBasisImpl; │ │ │ │ │ +48 * Implementation of the monomial evaluation for │ │ │ │ │ +49 * a given topology and field type. │ │ │ │ │ +50 * The method evaluate fills a F* vector │ │ │ │ │ +51 * 2) template< GeometryType::Id geometryId, class F > │ │ │ │ │ +52 * class MonomialBasis │ │ │ │ │ +53 * The base class for the static monomial evaluation │ │ │ │ │ +54 * providing additional evaluate methods including │ │ │ │ │ +55 * one taking std::vector. │ │ │ │ │ +56 * 3) template< int dim, class F > │ │ │ │ │ +57 * class VirtualMonomialBasis │ │ │ │ │ +58 * Virtualization of the MonomialBasis. │ │ │ │ │ +59 * 4) template< int dim, class F > │ │ │ │ │ +60 * struct MonomialBasisFactory; │ │ │ │ │ +61 * A factory class for the VirtualMonomialBasis │ │ │ │ │ +62 * 5) template< int dim, class F > │ │ │ │ │ +63 * struct MonomialBasisProvider │ │ │ │ │ +64 * A singleton container for the virtual monomial │ │ │ │ │ +65 * basis │ │ │ │ │ +66 ************************************************/ │ │ │ │ │ +67 │ │ │ │ │ +68 // Internal Forward Declarations │ │ │ │ │ +69 // ----------------------------- │ │ │ │ │ +70 │ │ │ │ │ +71 template< GeometryType::Id geometryId > │ │ │ │ │ +72 class MonomialBasisSize; │ │ │ │ │ 73 │ │ │ │ │ -74 assert(k>=2); │ │ │ │ │ -75 │ │ │ │ │ -76 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; }; │ │ │ │ │ +74 template< GeometryType::Id geometryId, class F > │ │ │ │ │ +75 class MonomialBasis; │ │ │ │ │ +76 │ │ │ │ │ 77 │ │ │ │ │ -78 if (dim==1) │ │ │ │ │ -79 { │ │ │ │ │ -80 for (unsigned int i=0; i │ │ │ │ │ +_8_3 class _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ +84 { │ │ │ │ │ +85 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_ _g_e_o_m_e_t_r_y_I_d_ _> _T_h_i_s; │ │ │ │ │ +86 │ │ │ │ │ +87 public: │ │ │ │ │ +_8_8 static _T_h_i_s &_i_n_s_t_a_n_c_e () │ │ │ │ │ +89 { │ │ │ │ │ +90 static _T_h_i_s _instance; │ │ │ │ │ +91 return _instance; │ │ │ │ │ +92 } │ │ │ │ │ +93 │ │ │ │ │ +_9_4 unsigned int _m_a_x_O_r_d_e_r__; │ │ │ │ │ +95 │ │ │ │ │ +96 // sizes_[ k ]: number of basis functions of exactly order k │ │ │ │ │ +_9_7 mutable unsigned int *_s_i_z_e_s__; │ │ │ │ │ +98 │ │ │ │ │ +99 // numBaseFunctions_[ k ] = sizes_[ 0 ] + ... + sizes_[ k ] │ │ │ │ │ +_1_0_0 mutable unsigned int *_n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ +101 │ │ │ │ │ +_1_0_2 _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e () │ │ │ │ │ +103 : _m_a_x_O_r_d_e_r__( 0 ), │ │ │ │ │ +104 _s_i_z_e_s__( 0 ), │ │ │ │ │ +105 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__( 0 ) │ │ │ │ │ +106 { │ │ │ │ │ +107 _c_o_m_p_u_t_e_S_i_z_e_s( 2 ); │ │ │ │ │ 108 } │ │ │ │ │ 109 │ │ │ │ │ -110 if (dim!=3) │ │ │ │ │ -111 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis for k>=2 only │ │ │ │ │ -implemented for dim==1 or dim==3"); │ │ │ │ │ -112 │ │ │ │ │ -113 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e kx = x; │ │ │ │ │ -114 kx *= k; │ │ │ │ │ -115 unsigned int n = 0; │ │ │ │ │ -116 unsigned int i[4]; │ │ │ │ │ -117 R factor[4]; │ │ │ │ │ -118 for (i[2] = 0; i[2] <= k; ++i[2]) │ │ │ │ │ -119 { │ │ │ │ │ -120 factor[2] = 1.0; │ │ │ │ │ -121 for (unsigned int j = 0; j < i[2]; ++j) │ │ │ │ │ -122 factor[2] *= (kx[2]-j) / (i[2]-j); │ │ │ │ │ -123 for (i[1] = 0; i[1] <= k - i[2]; ++i[1]) │ │ │ │ │ -124 { │ │ │ │ │ -125 factor[1] = 1.0; │ │ │ │ │ -126 for (unsigned int j = 0; j < i[1]; ++j) │ │ │ │ │ -127 factor[1] *= (kx[1]-j) / (i[1]-j); │ │ │ │ │ -128 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0]) │ │ │ │ │ -129 { │ │ │ │ │ -130 factor[0] = 1.0; │ │ │ │ │ -131 for (unsigned int j = 0; j < i[0]; ++j) │ │ │ │ │ -132 factor[0] *= (kx[0]-j) / (i[0]-j); │ │ │ │ │ -133 i[3] = k - i[0] - i[1] - i[2]; │ │ │ │ │ -134 D kx3 = k - kx[0] - kx[1] - kx[2]; │ │ │ │ │ -135 factor[3] = 1.0; │ │ │ │ │ -136 for (unsigned int j = 0; j < i[3]; ++j) │ │ │ │ │ -137 factor[3] *= (kx3-j) / (i[3]-j); │ │ │ │ │ -138 out[n++] = factor[0] * factor[1] * factor[2] * factor[3]; │ │ │ │ │ -139 } │ │ │ │ │ -140 } │ │ │ │ │ -141 } │ │ │ │ │ -142 } │ │ │ │ │ -143 │ │ │ │ │ -149 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ -150 std::vector& out) const │ │ │ │ │ -151 { │ │ │ │ │ -152 out.resize(size()); │ │ │ │ │ -153 │ │ │ │ │ -154 // Specialization for k==0 │ │ │ │ │ -155 if (k==0) │ │ │ │ │ -156 { │ │ │ │ │ -157 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ -158 return; │ │ │ │ │ -159 } │ │ │ │ │ -160 │ │ │ │ │ -161 // Specialization for k==1 │ │ │ │ │ -162 if (k==1) │ │ │ │ │ -163 { │ │ │ │ │ -164 std::fill(out[0][0].begin(), out[0][0].end(), -1); │ │ │ │ │ -165 │ │ │ │ │ -166 for (unsigned int i=0; i=0; codim--) │ │ │ │ │ +148 { │ │ │ │ │ +149 if (Impl::isPrism(geometry.id(),dim,codim)) │ │ │ │ │ +150 { │ │ │ │ │ +151 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ +152 { │ │ │ │ │ +153 _s_i_z_e_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] + k*_s_i_z_e_s__[ k ]; │ │ │ │ │ +154 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k-1 ] + _s_i_z_e_s__[ k ]; │ │ │ │ │ +155 } │ │ │ │ │ +156 } │ │ │ │ │ +157 else │ │ │ │ │ +158 { │ │ │ │ │ +159 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ +160 { │ │ │ │ │ +161 _s_i_z_e_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ]; │ │ │ │ │ +162 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k-1 ] + _s_i_z_e_s__[ k ]; │ │ │ │ │ +163 } │ │ │ │ │ +164 } │ │ │ │ │ +165 } │ │ │ │ │ +166 } │ │ │ │ │ +167 }; │ │ │ │ │ +168 │ │ │ │ │ 169 │ │ │ │ │ -170 return; │ │ │ │ │ -171 } │ │ │ │ │ -172 │ │ │ │ │ -173 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; }; │ │ │ │ │ +170 │ │ │ │ │ +171 // MonomialBasisHelper │ │ │ │ │ +172 // ------------------- │ │ │ │ │ +173 │ │ │ │ │ 174 │ │ │ │ │ -175 // Specialization for dim==1 │ │ │ │ │ -176 if (dim==1) │ │ │ │ │ +175 template< int mydim, int dim, class F > │ │ │ │ │ +_1_7_6 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r │ │ │ │ │ 177 { │ │ │ │ │ -178 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ -179 { │ │ │ │ │ -180 // x_0 derivative │ │ │ │ │ -181 out[i][0][0] = 0.0; │ │ │ │ │ -182 R factor=1.0; │ │ │ │ │ -183 for (unsigned int a=0; a _M_y_S_i_z_e; │ │ │ │ │ +_1_7_9 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(dim).toId() > _S_i_z_e; │ │ │ │ │ +180 │ │ │ │ │ +_1_8_1 static void _c_o_p_y ( const unsigned int deriv, F *&wit, F *&rit, │ │ │ │ │ +182 const unsigned int numBaseFunctions, const F &z ) │ │ │ │ │ +183 { │ │ │ │ │ +184 // n(d,k) = size[d]; │ │ │ │ │ +185 _M_y_S_i_z_e &mySize = _M_y_S_i_z_e_:_:_i_n_s_t_a_n_c_e(); │ │ │ │ │ +186 _S_i_z_e &size = _S_i_z_e_:_:_i_n_s_t_a_n_c_e(); │ │ │ │ │ +187 │ │ │ │ │ +188 const F *const rend = rit + size( deriv )*numBaseFunctions; │ │ │ │ │ +189 for( ; rit != rend; ) │ │ │ │ │ +190 { │ │ │ │ │ +191 F *prit = rit; │ │ │ │ │ +192 │ │ │ │ │ +193 *wit = z * *rit; │ │ │ │ │ +194 ++rit, ++wit; │ │ │ │ │ +195 │ │ │ │ │ +196 for( unsigned d = 1; d <= deriv; ++d ) │ │ │ │ │ +197 { │ │ │ │ │ +198 #ifndef NDEBUG │ │ │ │ │ +199 const F *const derivEnd = rit + mySize._s_i_z_e_s__[ d ]; │ │ │ │ │ +200 #endif │ │ │ │ │ +201 │ │ │ │ │ +202 { │ │ │ │ │ +203 const F *const drend = rit + mySize._s_i_z_e_s__[ d ] - mySize._s_i_z_e_s__[ d-1 ]; │ │ │ │ │ +204 for( ; rit != drend ; ++rit, ++wit ) │ │ │ │ │ +205 *wit = z * *rit; │ │ │ │ │ +206 } │ │ │ │ │ +207 │ │ │ │ │ +208 for (unsigned int j=1; j(); │ │ │ │ │ +222 } │ │ │ │ │ +223 } │ │ │ │ │ +224 } │ │ │ │ │ +225 }; │ │ │ │ │ +226 │ │ │ │ │ +227 │ │ │ │ │ +228 │ │ │ │ │ +229 // MonomialBasisImpl │ │ │ │ │ +230 // ----------------- │ │ │ │ │ +231 │ │ │ │ │ +232 template< GeometryType::Id geometryId, class F> │ │ │ │ │ +_2_3_3 class _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ +234 { │ │ │ │ │ +235 public: │ │ │ │ │ +_2_3_6 typedef F _F_i_e_l_d; │ │ │ │ │ +237 │ │ │ │ │ +_2_3_8 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ +239 │ │ │ │ │ +_2_4_0 static const unsigned int _d_i_m_D_o_m_a_i_n = _g_e_o_m_e_t_r_y.dim(); │ │ │ │ │ +241 │ │ │ │ │ +_2_4_2 typedef FieldVector< Field, dimDomain > _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +243 │ │ │ │ │ +244 private: │ │ │ │ │ +245 friend class _M_o_n_o_m_i_a_l_B_a_s_i_s< geometryId, _F_i_e_l_d >; │ │ │ │ │ +246 │ │ │ │ │ +247 _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l () │ │ │ │ │ +248 {} │ │ │ │ │ +249 │ │ │ │ │ +250 template< int dimD > │ │ │ │ │ +251 void evaluate ( const unsigned int deriv, const unsigned int order, │ │ │ │ │ +252 const FieldVector< Field, dimD > &x, │ │ │ │ │ +253 const unsigned int block, const unsigned int *const offsets, │ │ │ │ │ +254 _F_i_e_l_d *const values ) const │ │ │ │ │ +255 { │ │ │ │ │ +256 //start with vertex │ │ │ │ │ +257 *values = _U_n_i_t_y_<_ _F_ _>(); │ │ │ │ │ +258 F *const end = values + block; │ │ │ │ │ +259 for( _F_i_e_l_d *it = values+1 ; it != end; ++it ) │ │ │ │ │ +260 *it = _Z_e_r_o_<_ _F_ _>(); │ │ │ │ │ +261 │ │ │ │ │ +262 constexpr GeometryType gt = GeometryTypes::vertex; │ │ │ │ │ +263 │ │ │ │ │ +264 if constexpr ( _g_e_o_m_e_t_r_y == gt) │ │ │ │ │ +265 return; │ │ │ │ │ +266 else │ │ │ │ │ +267 evaluate(deriv, order, x, block, offsets, values ); │ │ │ │ │ +268 } │ │ │ │ │ +269 │ │ │ │ │ +270 template │ │ │ │ │ +271 void evaluate ( const unsigned int deriv, const unsigned int order, │ │ │ │ │ +272 const FieldVector< Field, dimD > &x, │ │ │ │ │ +273 const unsigned int block, const unsigned int *const offsets, │ │ │ │ │ +274 _F_i_e_l_d *const values ) const │ │ │ │ │ +275 { │ │ │ │ │ +276 │ │ │ │ │ +277 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ 278 │ │ │ │ │ -279 if (dim!=3) │ │ │ │ │ -280 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis only implemented for │ │ │ │ │ -dim==3!"); │ │ │ │ │ -281 │ │ │ │ │ -282 // Specialization for arbitrary order and dim==3 │ │ │ │ │ -283 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e kx = x; │ │ │ │ │ -284 kx *= k; │ │ │ │ │ -285 unsigned int n = 0; │ │ │ │ │ -286 unsigned int i[4]; │ │ │ │ │ -287 R factor[4]; │ │ │ │ │ -288 for (i[2] = 0; i[2] <= k; ++i[2]) │ │ │ │ │ -289 { │ │ │ │ │ -290 factor[2] = 1.0; │ │ │ │ │ -291 for (unsigned int j = 0; j < i[2]; ++j) │ │ │ │ │ -292 factor[2] *= (kx[2]-j) / (i[2]-j); │ │ │ │ │ -293 for (i[1] = 0; i[1] <= k - i[2]; ++i[1]) │ │ │ │ │ -294 { │ │ │ │ │ -295 factor[1] = 1.0; │ │ │ │ │ -296 for (unsigned int j = 0; j < i[1]; ++j) │ │ │ │ │ -297 factor[1] *= (kx[1]-j) / (i[1]-j); │ │ │ │ │ -298 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0]) │ │ │ │ │ -299 { │ │ │ │ │ -300 factor[0] = 1.0; │ │ │ │ │ -301 for (unsigned int j = 0; j < i[0]; ++j) │ │ │ │ │ -302 factor[0] *= (kx[0]-j) / (i[0]-j); │ │ │ │ │ -303 i[3] = k - i[0] - i[1] - i[2]; │ │ │ │ │ -304 D kx3 = k - kx[0] - kx[1] - kx[2]; │ │ │ │ │ -305 R sum3 = 0.0; │ │ │ │ │ -306 factor[3] = 1.0; │ │ │ │ │ -307 for (unsigned int j = 0; j < i[3]; ++j) │ │ │ │ │ -308 factor[3] /= i[3] - j; │ │ │ │ │ -309 R prod_all = factor[0] * factor[1] * factor[2] * factor[3]; │ │ │ │ │ -310 for (unsigned int j = 0; j < i[3]; ++j) │ │ │ │ │ -311 { │ │ │ │ │ -312 R prod = prod_all; │ │ │ │ │ -313 for (unsigned int l = 0; l < i[3]; ++l) │ │ │ │ │ -314 if (j == l) │ │ │ │ │ -315 prod *= -R(k); │ │ │ │ │ -316 else │ │ │ │ │ -317 prod *= kx3 - l; │ │ │ │ │ -318 sum3 += prod; │ │ │ │ │ -319 } │ │ │ │ │ -320 for (unsigned int j = 0; j < i[3]; ++j) │ │ │ │ │ -321 factor[3] *= kx3 - j; │ │ │ │ │ -322 for (unsigned int m = 0; m < 3; ++m) │ │ │ │ │ -323 { │ │ │ │ │ -324 out[n][0][m] = sum3; │ │ │ │ │ -325 for (unsigned int j = 0; j < i[m]; ++j) │ │ │ │ │ -326 { │ │ │ │ │ -327 R prod = factor[3]; │ │ │ │ │ -328 for (unsigned int p = 0; p < 3; ++p) │ │ │ │ │ -329 { │ │ │ │ │ -330 if (m == p) │ │ │ │ │ -331 for (unsigned int l = 0; l < i[p]; ++l) │ │ │ │ │ -332 prod *= (j==l) ? R(k) / (i[p]-l) : R(kx[p]-l) / (i[p]-l); │ │ │ │ │ -333 else │ │ │ │ │ -334 prod *= factor[p]; │ │ │ │ │ -335 } │ │ │ │ │ -336 out[n][0][m] += prod; │ │ │ │ │ -337 } │ │ │ │ │ -338 } │ │ │ │ │ -339 n++; │ │ │ │ │ -340 } │ │ │ │ │ -341 } │ │ │ │ │ -342 } │ │ │ │ │ -343 } │ │ │ │ │ -344 │ │ │ │ │ -351 void partial(const std::array& order, │ │ │ │ │ -352 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -353 std::vector& out) const │ │ │ │ │ -354 { │ │ │ │ │ -355 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -356 │ │ │ │ │ -357 out.resize(size()); │ │ │ │ │ -358 │ │ │ │ │ -359 if (totalOrder == 0) { │ │ │ │ │ -360 evaluateFunction(in, out); │ │ │ │ │ -361 return; │ │ │ │ │ -362 } │ │ │ │ │ +279 auto constexpr isPrismatic = _g_e_o_m_e_t_r_y.isPrismatic(baseGeometry.dim()); │ │ │ │ │ +280 │ │ │ │ │ +281 // compute │ │ │ │ │ +282 typedef MonomialBasisHelper< baseGeometry.dim() + 1, dimD, _F_i_e_l_d > Helper; │ │ │ │ │ +283 typedef MonomialBasisSize BaseSize; │ │ │ │ │ +284 │ │ │ │ │ +285 const BaseSize &size = BaseSize::instance(); │ │ │ │ │ +286 const_cast(size).computeSizes(order); │ │ │ │ │ +287 │ │ │ │ │ +288 const _F_i_e_l_d &z = x[ baseGeometry.dim() ]; │ │ │ │ │ +289 │ │ │ │ │ +290 _F_i_e_l_d *row0 = values; │ │ │ │ │ +291 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ +292 { │ │ │ │ │ +293 _F_i_e_l_d *row1 = values + block*offsets[ k-1 ]; │ │ │ │ │ +294 _F_i_e_l_d *wit = row1 + block*size.sizes_[ k ]; │ │ │ │ │ +295 if constexpr ( isPrismatic ) │ │ │ │ │ +296 Helper::copy( deriv, wit, row1, k*size.sizes_[ k ], z ); │ │ │ │ │ +297 Helper::copy( deriv, wit, row0, size( k-1 ), z ); │ │ │ │ │ +298 row0 = row1; │ │ │ │ │ +299 } │ │ │ │ │ +300 │ │ │ │ │ +301 // stop if desired dimension is reached │ │ │ │ │ +302 if constexpr( baseGeometry.dim() == _d_i_m_D_o_m_a_i_n-1) │ │ │ │ │ +303 return; │ │ │ │ │ +304 else │ │ │ │ │ +305 { │ │ │ │ │ +306 constexpr GeometryType nextGeometry = isPrismatic ? GeometryTypes:: │ │ │ │ │ +prismaticExtension(baseGeometry) │ │ │ │ │ +307 : GeometryTypes::conicalExtension(baseGeometry); │ │ │ │ │ +308 │ │ │ │ │ +309 evaluate(deriv, order, x, block, offsets, values │ │ │ │ │ +); │ │ │ │ │ +310 } │ │ │ │ │ +311 } │ │ │ │ │ +312 │ │ │ │ │ +313 void integrate ( const unsigned int order, │ │ │ │ │ +314 const unsigned int *const offsets, │ │ │ │ │ +315 _F_i_e_l_d *const values ) const │ │ │ │ │ +316 { │ │ │ │ │ +317 //start with vertex │ │ │ │ │ +318 values[ 0 ] = Unity< Field >(); │ │ │ │ │ +319 static constexpr GeometryType gt = GeometryTypes::vertex; │ │ │ │ │ +320 │ │ │ │ │ +321 if constexpr ( _g_e_o_m_e_t_r_y == gt) │ │ │ │ │ +322 return; │ │ │ │ │ +323 else │ │ │ │ │ +324 integrate(order, offsets, values); │ │ │ │ │ +325 } │ │ │ │ │ +326 │ │ │ │ │ +327 template │ │ │ │ │ +328 void integrate ( const unsigned int order, │ │ │ │ │ +329 const unsigned int *const offsets, │ │ │ │ │ +330 _F_i_e_l_d *const values) const │ │ │ │ │ +331 { │ │ │ │ │ +332 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ +333 │ │ │ │ │ +334 auto constexpr isPrismatic = _g_e_o_m_e_t_r_y.isPrismatic(baseGeometry.dim()); │ │ │ │ │ +335 │ │ │ │ │ +336 // decide which kind of integration should be performed │ │ │ │ │ +337 if constexpr ( isPrismatic ) │ │ │ │ │ +338 integratePrismatic(order, offsets, values); │ │ │ │ │ +339 else │ │ │ │ │ +340 integrateConical(order, offsets, values); │ │ │ │ │ +341 │ │ │ │ │ +342 // stop if the desired dimension is reached │ │ │ │ │ +343 if constexpr( baseGeometry.dim() == _d_i_m_D_o_m_a_i_n-1) │ │ │ │ │ +344 return; │ │ │ │ │ +345 else │ │ │ │ │ +346 { │ │ │ │ │ +347 static constexpr GeometryType nextGeometry = (isPrismatic ? GeometryTypes:: │ │ │ │ │ +prismaticExtension(baseGeometry) │ │ │ │ │ +348 : GeometryTypes::conicalExtension(baseGeometry)); │ │ │ │ │ +349 │ │ │ │ │ +350 integrate(order, offsets, values); │ │ │ │ │ +351 } │ │ │ │ │ +352 │ │ │ │ │ +353 } │ │ │ │ │ +354 │ │ │ │ │ +355 template │ │ │ │ │ +356 void integratePrismatic ( const unsigned int order, │ │ │ │ │ +357 const unsigned int *const offsets, │ │ │ │ │ +358 _F_i_e_l_d *const values ) const │ │ │ │ │ +359 { │ │ │ │ │ +360 typedef MonomialBasisSize BaseSize; │ │ │ │ │ +361 static const BaseSize &size = BaseSize::instance(); │ │ │ │ │ +362 const unsigned int *const baseSizes = size.sizes_; │ │ │ │ │ 363 │ │ │ │ │ -364 if (k==0) │ │ │ │ │ -365 { │ │ │ │ │ -366 out[0] = 0; │ │ │ │ │ -367 return; │ │ │ │ │ -368 } │ │ │ │ │ +364 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ +365 static constexpr GeometryType nextGeometry = GeometryTypes:: │ │ │ │ │ +prismaticExtension(baseGeometry); │ │ │ │ │ +366 │ │ │ │ │ +367 typedef MonomialBasisSize Size; │ │ │ │ │ +368 static const Size &mySize = Size::instance(); │ │ │ │ │ 369 │ │ │ │ │ -370 if (k==1) │ │ │ │ │ -371 { │ │ │ │ │ -372 if (totalOrder==1) │ │ │ │ │ -373 { │ │ │ │ │ -374 auto direction = std::find(order.begin(), order.end(), 1); │ │ │ │ │ -375 │ │ │ │ │ -376 out[0] = -1; │ │ │ │ │ -377 for (unsigned int i=0; i typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -393 { │ │ │ │ │ -394 if ( no < i) │ │ │ │ │ -395 return (x[0]-lagrangeNode(no))/(lagrangeNode(i)-lagrangeNode(no)); │ │ │ │ │ -396 if (no < i+j) │ │ │ │ │ -397 return (x[1]-lagrangeNode(no-i))/(lagrangeNode(j)-lagrangeNode(no-i)); │ │ │ │ │ -398 return (lagrangeNode(no+1)-x[0]-x[1])/(lagrangeNode(no+1)-lagrangeNode(i)- │ │ │ │ │ -lagrangeNode(j)); │ │ │ │ │ -399 }; │ │ │ │ │ -400 │ │ │ │ │ -401 // Helper method: Return the derivative of a single Lagrangian factor of │ │ │ │ │ -l_ij evaluated at x │ │ │ │ │ -402 // direction: Derive in x-direction if this is 0, otherwise derive in y │ │ │ │ │ -direction │ │ │ │ │ -403 auto lagrangianFactorDerivative = [&lagrangeNode] │ │ │ │ │ -404 (const int direction, const int no, const int i, const int j, const │ │ │ │ │ -typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&) │ │ │ │ │ -405 -> typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -406 { │ │ │ │ │ -407 using T = typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e; │ │ │ │ │ -408 if ( no < i) │ │ │ │ │ -409 return (direction == 0) ? T(1.0/(lagrangeNode(i)-lagrangeNode(no))) : T(0); │ │ │ │ │ -410 │ │ │ │ │ -411 if (no < i+j) │ │ │ │ │ -412 return (direction == 0) ? T(0) : T(1.0/(lagrangeNode(j)-lagrangeNode(no- │ │ │ │ │ -i))); │ │ │ │ │ -413 │ │ │ │ │ -414 return -1.0/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j)); │ │ │ │ │ -415 }; │ │ │ │ │ -416 │ │ │ │ │ -417 if (totalOrder==1) │ │ │ │ │ -418 { │ │ │ │ │ -419 int direction = std::find(order.begin(), order.end(), 1)-order.begin(); │ │ │ │ │ -420 │ │ │ │ │ -421 int n=0; │ │ │ │ │ -422 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -423 { │ │ │ │ │ -424 for (unsigned int i=0; i<=k-j; i++, n++) │ │ │ │ │ -425 { │ │ │ │ │ -426 out[n] = 0.0; │ │ │ │ │ -427 for (unsigned int no1=0; no1 < k; no1++) │ │ │ │ │ -428 { │ │ │ │ │ -429 R factor = lagrangianFactorDerivative(direction, no1, i, j, in); │ │ │ │ │ -430 for (unsigned int no2=0; no2 < k; no2++) │ │ │ │ │ -431 if (no1 != no2) │ │ │ │ │ -432 factor *= lagrangianFactor(no2, i, j, in); │ │ │ │ │ +370 _F_i_e_l_d *row0 = values; │ │ │ │ │ +371 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ +372 { │ │ │ │ │ +373 _F_i_e_l_d *const row1begin = values + offsets[ k-1 ]; │ │ │ │ │ +374 _F_i_e_l_d *const row1End = row1begin + mySize.sizes_[ k ]; │ │ │ │ │ +375 assert( (unsigned int)(row1End - values) <= offsets[ k ] ); │ │ │ │ │ +376 │ │ │ │ │ +377 _F_i_e_l_d *row1 = row1begin; │ │ │ │ │ +378 _F_i_e_l_d *it = row1begin + baseSizes[ k ]; │ │ │ │ │ +379 for( unsigned int j = 1; j <= k; ++j ) │ │ │ │ │ +380 { │ │ │ │ │ +381 _F_i_e_l_d *const end = it + baseSizes[ k ]; │ │ │ │ │ +382 assert( (unsigned int)(end - values) <= offsets[ k ] ); │ │ │ │ │ +383 for( ; it != end; ++row1, ++it ) │ │ │ │ │ +384 *it = (_F_i_e_l_d( j ) / _F_i_e_l_d( j+1 )) * (*row1); │ │ │ │ │ +385 } │ │ │ │ │ +386 for( ; it != row1End; ++row0, ++it ) │ │ │ │ │ +387 *it = (_F_i_e_l_d( k ) / _F_i_e_l_d( k+1 )) * (*row0); │ │ │ │ │ +388 row0 = row1; │ │ │ │ │ +389 } │ │ │ │ │ +390 } │ │ │ │ │ +391 │ │ │ │ │ +392 │ │ │ │ │ +393 template │ │ │ │ │ +394 void integrateConical ( const unsigned int order, │ │ │ │ │ +395 const unsigned int *const offsets, │ │ │ │ │ +396 _F_i_e_l_d *const values) const │ │ │ │ │ +397 { │ │ │ │ │ +398 typedef MonomialBasisSize BaseSize; │ │ │ │ │ +399 static const BaseSize &size = BaseSize::instance(); │ │ │ │ │ +400 const unsigned int *const baseSizes = size.sizes_; │ │ │ │ │ +401 │ │ │ │ │ +402 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ +403 │ │ │ │ │ +404 { │ │ │ │ │ +405 _F_i_e_l_d *const col0End = values + baseSizes[ 0 ]; │ │ │ │ │ +406 for( _F_i_e_l_d *it = values; it != col0End; ++it ) │ │ │ │ │ +407 *it *= _F_i_e_l_d( 1 ) / _F_i_e_l_d( int(baseGeometry.dim()+1) ); │ │ │ │ │ +408 } │ │ │ │ │ +409 │ │ │ │ │ +410 _F_i_e_l_d *row0 = values; │ │ │ │ │ +411 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ +412 { │ │ │ │ │ +413 const _F_i_e_l_d factor = (_F_i_e_l_d( 1 ) / _F_i_e_l_d( k + baseGeometry.dim()+1)); │ │ │ │ │ +414 │ │ │ │ │ +415 _F_i_e_l_d *const row1 = values+offsets[ k-1 ]; │ │ │ │ │ +416 _F_i_e_l_d *const col0End = row1 + baseSizes[ k ]; │ │ │ │ │ +417 _F_i_e_l_d *it = row1; │ │ │ │ │ +418 for( ; it != col0End; ++it ) │ │ │ │ │ +419 *it *= factor; │ │ │ │ │ +420 for( unsigned int i = 1; i <= k; ++i ) │ │ │ │ │ +421 { │ │ │ │ │ +422 _F_i_e_l_d *const end = it + baseSizes[ k-i ]; │ │ │ │ │ +423 assert( (unsigned int)(end - values) <= offsets[ k ] ); │ │ │ │ │ +424 for( ; it != end; ++row0, ++it ) │ │ │ │ │ +425 *it = (*row0) * (_F_i_e_l_d( i ) * factor); │ │ │ │ │ +426 } │ │ │ │ │ +427 row0 = row1; │ │ │ │ │ +428 } │ │ │ │ │ +429 } │ │ │ │ │ +430 │ │ │ │ │ +431 }; │ │ │ │ │ +432 │ │ │ │ │ 433 │ │ │ │ │ -434 out[n] += factor; │ │ │ │ │ -435 } │ │ │ │ │ -436 } │ │ │ │ │ -437 } │ │ │ │ │ -438 return; │ │ │ │ │ -439 } │ │ │ │ │ -440 │ │ │ │ │ -441 if (totalOrder==2) │ │ │ │ │ -442 { │ │ │ │ │ -443 std::array directions; │ │ │ │ │ -444 unsigned int counter = 0; │ │ │ │ │ -445 auto nonconstOrder = order; // need a copy that I can modify │ │ │ │ │ -446 for (int i=0; i<2; i++) │ │ │ │ │ -447 { │ │ │ │ │ -448 while (nonconstOrder[i]) │ │ │ │ │ -449 { │ │ │ │ │ -450 directions[counter++] = i; │ │ │ │ │ -451 nonconstOrder[i]--; │ │ │ │ │ -452 } │ │ │ │ │ -453 } │ │ │ │ │ +434 // MonomialBasis │ │ │ │ │ +435 // ------------- │ │ │ │ │ +436 │ │ │ │ │ +437 template< GeometryType::Id geometryId, class F > │ │ │ │ │ +_4_3_8 class _M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +439 : public _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l< geometryId, F > │ │ │ │ │ +440 { │ │ │ │ │ +441 static constexpr GeometryType geometry = geometryId; │ │ │ │ │ +442 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +443 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _B_a_s_e; │ │ │ │ │ +444 │ │ │ │ │ +445 public: │ │ │ │ │ +_4_4_6 static const unsigned int _d_i_m_e_n_s_i_o_n = _B_a_s_e_:_:_d_i_m_D_o_m_a_i_n; │ │ │ │ │ +_4_4_7 static const unsigned int _d_i_m_R_a_n_g_e = 1; │ │ │ │ │ +448 │ │ │ │ │ +_4_4_9 typedef typename _B_a_s_e_:_:_F_i_e_l_d _F_i_e_l_d; │ │ │ │ │ +450 │ │ │ │ │ +_4_5_1 typedef typename _B_a_s_e_:_:_D_o_m_a_i_n_V_e_c_t_o_r _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +452 │ │ │ │ │ +_4_5_3 typedef Dune::FieldVector _R_a_n_g_e_V_e_c_t_o_r; │ │ │ │ │ 454 │ │ │ │ │ -455 //f = prod_{i} f_i -> dxa dxb f = sum_{i} {dxa f_i sum_{k \neq i} dxb f_k │ │ │ │ │ -prod_{l \neq k,i} f_l │ │ │ │ │ -456 int n=0; │ │ │ │ │ -457 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -458 { │ │ │ │ │ -459 for (unsigned int i=0; i<=k-j; i++, n++) │ │ │ │ │ -460 { │ │ │ │ │ -461 R res = 0.0; │ │ │ │ │ -462 │ │ │ │ │ -463 for (unsigned int no1=0; no1 < k; no1++) │ │ │ │ │ -464 { │ │ │ │ │ -465 R factor1 = lagrangianFactorDerivative(directions[0], no1, i, j, in); │ │ │ │ │ -466 for (unsigned int no2=0; no2 < k; no2++) │ │ │ │ │ -467 { │ │ │ │ │ -468 if (no1 == no2) │ │ │ │ │ -469 continue; │ │ │ │ │ -470 R factor2 = factor1*lagrangianFactorDerivative(directions[1], no2, i, j, │ │ │ │ │ -in); │ │ │ │ │ -471 for (unsigned int no3=0; no3 < k; no3++) │ │ │ │ │ +_4_5_5 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_g_e_o_m_e_t_r_y_I_d_> _S_i_z_e; │ │ │ │ │ +456 │ │ │ │ │ +_4_5_7 _M_o_n_o_m_i_a_l_B_a_s_i_s (unsigned int _o_r_d_e_r) │ │ │ │ │ +458 : _B_a_s_e(), │ │ │ │ │ +459 order_(_o_r_d_e_r), │ │ │ │ │ +460 size_(_S_i_z_e::instance()) │ │ │ │ │ +461 { │ │ │ │ │ +462 assert(_o_r_d_e_r<=1024); // avoid wrapping of unsigned int (0-1) order=1024 is │ │ │ │ │ +quite high...) │ │ │ │ │ +463 } │ │ │ │ │ +464 │ │ │ │ │ +_4_6_5 const unsigned int *_s_i_z_e_s ( unsigned int _o_r_d_e_r ) const │ │ │ │ │ +466 { │ │ │ │ │ +467 size_._c_o_m_p_u_t_e_S_i_z_e_s( _o_r_d_e_r ); │ │ │ │ │ +468 return size_._n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ +469 } │ │ │ │ │ +470 │ │ │ │ │ +_4_7_1 const unsigned int *_s_i_z_e_s () const │ │ │ │ │ 472 { │ │ │ │ │ -473 if (no3 == no1 || no3 == no2) │ │ │ │ │ -474 continue; │ │ │ │ │ -475 factor2 *= lagrangianFactor(no3, i, j, in); │ │ │ │ │ -476 } │ │ │ │ │ -477 res += factor2; │ │ │ │ │ -478 } │ │ │ │ │ -479 } │ │ │ │ │ -480 out[n] = res; │ │ │ │ │ -481 } │ │ │ │ │ -482 } │ │ │ │ │ -483 │ │ │ │ │ -484 return; │ │ │ │ │ -485 } // totalOrder==2 │ │ │ │ │ -486 │ │ │ │ │ -487 } // dim==2 │ │ │ │ │ -488 │ │ │ │ │ -489 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -490 } │ │ │ │ │ -491 │ │ │ │ │ -493 static constexpr unsigned int order () │ │ │ │ │ +473 return _s_i_z_e_s( order_ ); │ │ │ │ │ +474 } │ │ │ │ │ +475 │ │ │ │ │ +_4_7_6 unsigned int _s_i_z_e () const │ │ │ │ │ +477 { │ │ │ │ │ +478 size_._c_o_m_p_u_t_e_S_i_z_e_s( order_ ); │ │ │ │ │ +479 return size_( order_ ); │ │ │ │ │ +480 } │ │ │ │ │ +481 │ │ │ │ │ +_4_8_2 unsigned int _d_e_r_i_v_S_i_z_e ( const unsigned int deriv ) const │ │ │ │ │ +483 { │ │ │ │ │ +484 _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(_d_i_m_e_n_s_i_o_n).toId() >::instance │ │ │ │ │ +()._c_o_m_p_u_t_e_S_i_z_e_s( deriv ); │ │ │ │ │ +485 return _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(_d_i_m_e_n_s_i_o_n).toId() >:: │ │ │ │ │ +instance() ( deriv ); │ │ │ │ │ +486 } │ │ │ │ │ +487 │ │ │ │ │ +_4_8_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ +489 { │ │ │ │ │ +490 return order_ ; │ │ │ │ │ +491 } │ │ │ │ │ +492 │ │ │ │ │ +_4_9_3 unsigned int _t_o_p_o_l_o_g_y_I_d ( ) const │ │ │ │ │ 494 { │ │ │ │ │ -495 return k; │ │ │ │ │ +495 return geometry.id(); │ │ │ │ │ 496 } │ │ │ │ │ -497 }; │ │ │ │ │ -498 │ │ │ │ │ -504 template │ │ │ │ │ -505 class LagrangeSimplexLocalCoefficients │ │ │ │ │ -506 { │ │ │ │ │ -507 public: │ │ │ │ │ -509 LagrangeSimplexLocalCoefficients () │ │ │ │ │ -510 : localKeys_(size()) │ │ │ │ │ -511 { │ │ │ │ │ -512 if (k==0) │ │ │ │ │ -513 { │ │ │ │ │ -514 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ -515 return; │ │ │ │ │ +497 │ │ │ │ │ +_4_9_8 void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +499 _F_i_e_l_d *const values ) const │ │ │ │ │ +500 { │ │ │ │ │ +501 Base::evaluate( deriv, order_, x, _d_e_r_i_v_S_i_z_e( deriv ), _s_i_z_e_s( order_ ), │ │ │ │ │ +values ); │ │ │ │ │ +502 } │ │ │ │ │ +503 │ │ │ │ │ +504 template │ │ │ │ │ +_5_0_5 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +506 _F_i_e_l_d *const values ) const │ │ │ │ │ +507 { │ │ │ │ │ +508 _e_v_a_l_u_a_t_e( deriv, x, values ); │ │ │ │ │ +509 } │ │ │ │ │ +510 │ │ │ │ │ +511 template │ │ │ │ │ +_5_1_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +513 Vector &values ) const │ │ │ │ │ +514 { │ │ │ │ │ +515 evaluate(x,&(values[0])); │ │ │ │ │ 516 } │ │ │ │ │ -517 │ │ │ │ │ -518 if (k==1) │ │ │ │ │ -519 { │ │ │ │ │ -520 for (std::size_t i=0; i │ │ │ │ │ +_5_1_8 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +519 _D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> *values ) const │ │ │ │ │ +520 { │ │ │ │ │ +521 evaluate(x,&(values->block())); │ │ │ │ │ +522 } │ │ │ │ │ +523 template< unsigned int deriv > │ │ │ │ │ +_5_2_4 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +525 FieldVector<_F_i_e_l_d,_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_>_:_:_s_i_z_e> *values ) const │ │ │ │ │ 526 { │ │ │ │ │ -527 // Order is at least 2 here │ │ │ │ │ -528 localKeys_[0] = LocalKey(0,1,0); // vertex dof │ │ │ │ │ -529 for (unsigned int i=1; i │ │ │ │ │ +_5_3_1 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +532 Vector &values ) const │ │ │ │ │ +533 { │ │ │ │ │ +534 evaluate<0>(x,&(values[0])); │ │ │ │ │ +535 } │ │ │ │ │ +536 │ │ │ │ │ +537 template< class DVector, class RVector > │ │ │ │ │ +_5_3_8 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ +539 { │ │ │ │ │ +540 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +541 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +542 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +543 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +544 evaluate<0>( bx, values ); │ │ │ │ │ +545 } │ │ │ │ │ +546 │ │ │ │ │ +_5_4_7 void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const │ │ │ │ │ 548 { │ │ │ │ │ -549 localKeys_[n++] = LocalKey(1,2,0); │ │ │ │ │ -550 continue; │ │ │ │ │ -551 } │ │ │ │ │ -552 if (i==0 && j==k) │ │ │ │ │ +549 Base::integrate( order_, _s_i_z_e_s( order_ ), values ); │ │ │ │ │ +550 } │ │ │ │ │ +551 template │ │ │ │ │ +_5_5_2 void _i_n_t_e_g_r_a_t_e ( Vector &values ) const │ │ │ │ │ 553 { │ │ │ │ │ -554 localKeys_[n++] = LocalKey(2,2,0); │ │ │ │ │ -555 continue; │ │ │ │ │ -556 } │ │ │ │ │ -557 if (j==0) │ │ │ │ │ -558 { │ │ │ │ │ -559 localKeys_[n++] = LocalKey(0,1,i-1); │ │ │ │ │ -560 continue; │ │ │ │ │ -561 } │ │ │ │ │ -562 if (i==0) │ │ │ │ │ -563 { │ │ │ │ │ -564 localKeys_[n++] = LocalKey(1,1,j-1); │ │ │ │ │ -565 continue; │ │ │ │ │ -566 } │ │ │ │ │ -567 if (i+j==k) │ │ │ │ │ -568 { │ │ │ │ │ -569 localKeys_[n++] = LocalKey(2,1,j-1); │ │ │ │ │ -570 continue; │ │ │ │ │ -571 } │ │ │ │ │ -572 localKeys_[n++] = LocalKey(0,0,c++); │ │ │ │ │ -573 } │ │ │ │ │ -574 return; │ │ │ │ │ -575 } │ │ │ │ │ -576 │ │ │ │ │ -577 if (dim==3) │ │ │ │ │ -578 { │ │ │ │ │ -579 std::array vertexMap; │ │ │ │ │ -580 for (unsigned int i=0; i<=dim; i++) │ │ │ │ │ -581 vertexMap[i] = i; │ │ │ │ │ -582 generateLocalKeys(vertexMap); │ │ │ │ │ -583 return; │ │ │ │ │ -584 } │ │ │ │ │ -585 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ -implemented for k<=1 or dim<=3!"); │ │ │ │ │ -586 } │ │ │ │ │ -587 │ │ │ │ │ -594 LagrangeSimplexLocalCoefficients (const std::array │ │ │ │ │ -vertexMap) │ │ │ │ │ -595 : localKeys_(size()) │ │ │ │ │ -596 { │ │ │ │ │ -597 if (dim!=2 && dim!=3) │ │ │ │ │ -598 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ -implemented for dim==2 and dim==3!"); │ │ │ │ │ +554 _i_n_t_e_g_r_a_t_e( &(values[ 0 ]) ); │ │ │ │ │ +555 } │ │ │ │ │ +556 private: │ │ │ │ │ +557 _M_o_n_o_m_i_a_l_B_a_s_i_s(const This&); │ │ │ │ │ +558 This& operator=(const This&); │ │ │ │ │ +559 unsigned int order_; │ │ │ │ │ +560 _S_i_z_e &size_; │ │ │ │ │ +561 }; │ │ │ │ │ +562 │ │ │ │ │ +563 │ │ │ │ │ +564 │ │ │ │ │ +565 // StdMonomialBasis │ │ │ │ │ +566 // ---------------- │ │ │ │ │ +567 │ │ │ │ │ +568 template< int dim,class F > │ │ │ │ │ +_5_6_9 class _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +570 : public _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::simplex(dim).toId() , F > │ │ │ │ │ +571 { │ │ │ │ │ +572 typedef _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +573 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::simplex(dim).toId(), F > _B_a_s_e; │ │ │ │ │ +574 │ │ │ │ │ +575 public: │ │ │ │ │ +_5_7_6 static constexpr GeometryType _g_e_o_m_e_t_r_y = GeometryTypes::simplex(dim); │ │ │ │ │ +_5_7_7 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +578 │ │ │ │ │ +_5_7_9 _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s ( unsigned int _o_r_d_e_r ) │ │ │ │ │ +580 : _B_a_s_e( _o_r_d_e_r ) │ │ │ │ │ +581 {} │ │ │ │ │ +582 }; │ │ │ │ │ +583 │ │ │ │ │ +584 │ │ │ │ │ +585 │ │ │ │ │ +586 // StandardBiMonomialBasis │ │ │ │ │ +587 // ----------------------- │ │ │ │ │ +588 │ │ │ │ │ +589 template< int dim, class F > │ │ │ │ │ +_5_9_0 class _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +591 : public _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::cube(dim).toId() , F > │ │ │ │ │ +592 { │ │ │ │ │ +593 typedef _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +594 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::cube(dim).toId() , F > _B_a_s_e; │ │ │ │ │ +595 │ │ │ │ │ +596 public: │ │ │ │ │ +_5_9_7 static constexpr GeometryType _g_e_o_m_e_t_r_y = GeometryTypes::cube(dim); │ │ │ │ │ +_5_9_8 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ 599 │ │ │ │ │ -600 generateLocalKeys(vertexMap); │ │ │ │ │ -601 } │ │ │ │ │ -602 │ │ │ │ │ -603 │ │ │ │ │ -604 template │ │ │ │ │ -605 LagrangeSimplexLocalCoefficients(const VertexMap &vertexmap) │ │ │ │ │ -606 : localKeys_(size()) │ │ │ │ │ -607 { │ │ │ │ │ -608 if (dim!=2 && dim!=3) │ │ │ │ │ -609 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ -implemented for dim==2 and dim==3!"); │ │ │ │ │ -610 │ │ │ │ │ -611 std::array vertexmap_array; │ │ │ │ │ -612 std::copy(vertexmap, vertexmap + dim + 1, vertexmap_array.begin()); │ │ │ │ │ -613 generateLocalKeys(vertexmap_array); │ │ │ │ │ -614 } │ │ │ │ │ -615 │ │ │ │ │ -617 static constexpr std::size_t size () │ │ │ │ │ -618 { │ │ │ │ │ -619 return binomial(k+dim,dim); │ │ │ │ │ -620 } │ │ │ │ │ -621 │ │ │ │ │ -623 const LocalKey& localKey (std::size_t i) const │ │ │ │ │ -624 { │ │ │ │ │ -625 return localKeys_[i]; │ │ │ │ │ -626 } │ │ │ │ │ +_6_0_0 _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s ( unsigned int _o_r_d_e_r ) │ │ │ │ │ +601 : _B_a_s_e( _o_r_d_e_r ) │ │ │ │ │ +602 {} │ │ │ │ │ +603 }; │ │ │ │ │ +604 │ │ │ │ │ +605 // ----------------------------------------------------------- │ │ │ │ │ +606 // ----------------------------------------------------------- │ │ │ │ │ +607 // VirtualMonomialBasis │ │ │ │ │ +608 // ------------------- │ │ │ │ │ +609 │ │ │ │ │ +610 template< int dim, class F > │ │ │ │ │ +_6_1_1 class _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +612 { │ │ │ │ │ +613 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +614 │ │ │ │ │ +615 public: │ │ │ │ │ +_6_1_6 typedef F _F_i_e_l_d; │ │ │ │ │ +_6_1_7 typedef F _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +_6_1_8 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_6_1_9 static const unsigned int _d_i_m_R_a_n_g_e = 1; │ │ │ │ │ +620 │ │ │ │ │ +_6_2_1 typedef FieldVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +_6_2_2 typedef FieldVector _R_a_n_g_e_V_e_c_t_o_r; │ │ │ │ │ +623 │ │ │ │ │ +_6_2_4 explicit _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s(const GeometryType& gt, │ │ │ │ │ +625 unsigned int _o_r_d_e_r) │ │ │ │ │ +626 : _o_r_d_e_r__(_o_r_d_e_r), _g_e_o_m_e_t_r_y__(gt) {} │ │ │ │ │ 627 │ │ │ │ │ -628 private: │ │ │ │ │ -629 std::vector localKeys_; │ │ │ │ │ -630 │ │ │ │ │ -631 void generateLocalKeys(const std::array vertexMap) │ │ │ │ │ -632 { │ │ │ │ │ -633 if (k==0) │ │ │ │ │ -634 { │ │ │ │ │ -635 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ -636 return; │ │ │ │ │ -637 } │ │ │ │ │ -638 │ │ │ │ │ -639 if (dim==2) │ │ │ │ │ -640 { │ │ │ │ │ -641 // Create default assignment │ │ │ │ │ -642 int n=0; │ │ │ │ │ -643 int c=0; │ │ │ │ │ -644 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -645 for (unsigned int i=0; i<=k-j; i++) │ │ │ │ │ -646 { │ │ │ │ │ -647 if (i==0 && j==0) │ │ │ │ │ -648 { │ │ │ │ │ -649 localKeys_[n++] = LocalKey(0,2,0); │ │ │ │ │ -650 continue; │ │ │ │ │ -651 } │ │ │ │ │ -652 if (i==k && j==0) │ │ │ │ │ -653 { │ │ │ │ │ -654 localKeys_[n++] = LocalKey(1,2,0); │ │ │ │ │ -655 continue; │ │ │ │ │ -656 } │ │ │ │ │ -657 if (i==0 && j==k) │ │ │ │ │ +_6_2_8 virtual _~_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s() {} │ │ │ │ │ +629 │ │ │ │ │ +_6_3_0 virtual const unsigned int *_s_i_z_e_s ( ) const = 0; │ │ │ │ │ +631 │ │ │ │ │ +_6_3_2 unsigned int _s_i_z_e ( ) const │ │ │ │ │ +633 { │ │ │ │ │ +634 return _s_i_z_e_s( )[ _o_r_d_e_r__ ]; │ │ │ │ │ +635 } │ │ │ │ │ +636 │ │ │ │ │ +_6_3_7 unsigned int _o_r_d_e_r () const │ │ │ │ │ +638 { │ │ │ │ │ +639 return _o_r_d_e_r__; │ │ │ │ │ +640 } │ │ │ │ │ +641 │ │ │ │ │ +_6_4_2 GeometryType _t_y_p_e() const │ │ │ │ │ +643 { │ │ │ │ │ +644 return _g_e_o_m_e_t_r_y__; │ │ │ │ │ +645 } │ │ │ │ │ +646 │ │ │ │ │ +_6_4_7 virtual void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +648 _F_i_e_l_d *const values ) const = 0; │ │ │ │ │ +649 template < unsigned int deriv > │ │ │ │ │ +_6_5_0 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +651 _F_i_e_l_d *const values ) const │ │ │ │ │ +652 { │ │ │ │ │ +653 _e_v_a_l_u_a_t_e( deriv, x, values ); │ │ │ │ │ +654 } │ │ │ │ │ +655 template < unsigned int deriv, int size > │ │ │ │ │ +_6_5_6 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +657 Dune::FieldVector *const values ) const │ │ │ │ │ 658 { │ │ │ │ │ -659 localKeys_[n++] = LocalKey(2,2,0); │ │ │ │ │ -660 continue; │ │ │ │ │ -661 } │ │ │ │ │ -662 if (j==0) │ │ │ │ │ -663 { │ │ │ │ │ -664 localKeys_[n++] = LocalKey(0,1,i-1); │ │ │ │ │ -665 continue; │ │ │ │ │ +659 _e_v_a_l_u_a_t_e( deriv, x, &(values[0][0]) ); │ │ │ │ │ +660 } │ │ │ │ │ +661 template │ │ │ │ │ +_6_6_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +663 _D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> *values ) const │ │ │ │ │ +664 { │ │ │ │ │ +665 evaluate(x,&(values->block())); │ │ │ │ │ 666 } │ │ │ │ │ -667 if (i==0) │ │ │ │ │ -668 { │ │ │ │ │ -669 localKeys_[n++] = LocalKey(1,1,j-1); │ │ │ │ │ -670 continue; │ │ │ │ │ -671 } │ │ │ │ │ -672 if (i+j==k) │ │ │ │ │ -673 { │ │ │ │ │ -674 localKeys_[n++] = LocalKey(2,1,j-1); │ │ │ │ │ -675 continue; │ │ │ │ │ -676 } │ │ │ │ │ -677 localKeys_[n++] = LocalKey(0,0,c++); │ │ │ │ │ +667 template │ │ │ │ │ +_6_6_8 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +669 Vector &values ) const │ │ │ │ │ +670 { │ │ │ │ │ +671 evaluate( x, &(values[ 0 ]) ); │ │ │ │ │ +672 } │ │ │ │ │ +673 template< class Vector > │ │ │ │ │ +_6_7_4 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +675 Vector &values ) const │ │ │ │ │ +676 { │ │ │ │ │ +677 evaluate<0>(x,values); │ │ │ │ │ 678 } │ │ │ │ │ -679 │ │ │ │ │ -680 // Flip edge orientations, if requested │ │ │ │ │ -681 bool flip[3]; │ │ │ │ │ -682 flip[0] = vertexMap[0] > vertexMap[1]; │ │ │ │ │ -683 flip[1] = vertexMap[0] > vertexMap[2]; │ │ │ │ │ -684 flip[2] = vertexMap[1] > vertexMap[2]; │ │ │ │ │ -685 for (std::size_t i=0; i │ │ │ │ │ -733 class LagrangeSimplexLocalInterpolation │ │ │ │ │ -734 { │ │ │ │ │ -735 static const int kdiv = (LocalBasis::order() == 0 ? 1 : LocalBasis::order │ │ │ │ │ -()); │ │ │ │ │ -736 public: │ │ │ │ │ -737 │ │ │ │ │ -745 template │ │ │ │ │ -746 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -747 { │ │ │ │ │ -748 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ -749 constexpr auto k = LocalBasis::order(); │ │ │ │ │ -750 using D = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ -751 │ │ │ │ │ -752 typename LocalBasis::Traits::DomainType x; │ │ │ │ │ -753 │ │ │ │ │ -754 out.resize(LocalBasis::size()); │ │ │ │ │ -755 │ │ │ │ │ -756 // Specialization for zero-order case │ │ │ │ │ -757 if (k==0) │ │ │ │ │ -758 { │ │ │ │ │ -759 auto center = ReferenceElements::simplex().position(0,0); │ │ │ │ │ -760 out[0] = f(center); │ │ │ │ │ -761 return; │ │ │ │ │ -762 } │ │ │ │ │ +679 template< class DVector, class RVector > │ │ │ │ │ +_6_8_0 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ +681 { │ │ │ │ │ +682 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +683 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +684 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +685 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +686 evaluate<0>( bx, values ); │ │ │ │ │ +687 } │ │ │ │ │ +688 template< unsigned int deriv, class DVector, class RVector > │ │ │ │ │ +_6_8_9 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ +690 { │ │ │ │ │ +691 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ +692 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ +693 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ +694 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ +695 evaluate( bx, values ); │ │ │ │ │ +696 } │ │ │ │ │ +697 │ │ │ │ │ +_6_9_8 virtual void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const = 0; │ │ │ │ │ +699 template │ │ │ │ │ +_7_0_0 void _i_n_t_e_g_r_a_t_e ( Vector &values ) const │ │ │ │ │ +701 { │ │ │ │ │ +702 _i_n_t_e_g_r_a_t_e( &(values[ 0 ]) ); │ │ │ │ │ +703 } │ │ │ │ │ +704 protected: │ │ │ │ │ +_7_0_5 unsigned int _o_r_d_e_r__; │ │ │ │ │ +_7_0_6 GeometryType _g_e_o_m_e_t_r_y__; │ │ │ │ │ +707 }; │ │ │ │ │ +708 │ │ │ │ │ +709 template< GeometryType::Id geometryId, class F > │ │ │ │ │ +_7_1_0 class _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ +711 : public _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< static_cast(geometryId).dim(), │ │ │ │ │ +F > │ │ │ │ │ +712 { │ │ │ │ │ +713 static constexpr GeometryType geometry = geometryId; │ │ │ │ │ +714 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< geometry.dim(), F > _B_a_s_e; │ │ │ │ │ +715 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +716 │ │ │ │ │ +717 public: │ │ │ │ │ +_7_1_8 typedef typename _B_a_s_e_:_:_F_i_e_l_d _F_i_e_l_d; │ │ │ │ │ +_7_1_9 typedef typename _B_a_s_e_:_:_D_o_m_a_i_n_V_e_c_t_o_r _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +720 │ │ │ │ │ +_7_2_1 _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l(unsigned int _o_r_d_e_r) │ │ │ │ │ +722 : _B_a_s_e(geometry,_o_r_d_e_r), basis_(_o_r_d_e_r) │ │ │ │ │ +723 {} │ │ │ │ │ +724 │ │ │ │ │ +_7_2_5 const unsigned int *_s_i_z_e_s ( ) const │ │ │ │ │ +726 { │ │ │ │ │ +727 return basis_._s_i_z_e_s(order_); │ │ │ │ │ +728 } │ │ │ │ │ +729 │ │ │ │ │ +_7_3_0 void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ +731 _F_i_e_l_d *const values ) const │ │ │ │ │ +732 { │ │ │ │ │ +733 basis_._e_v_a_l_u_a_t_e(deriv,x,values); │ │ │ │ │ +734 } │ │ │ │ │ +735 │ │ │ │ │ +_7_3_6 void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const │ │ │ │ │ +737 { │ │ │ │ │ +738 basis_._i_n_t_e_g_r_a_t_e(values); │ │ │ │ │ +739 } │ │ │ │ │ +740 │ │ │ │ │ +741 private: │ │ │ │ │ +742 _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> basis_; │ │ │ │ │ +743 using _B_a_s_e_:_:_o_r_d_e_r__; │ │ │ │ │ +744 }; │ │ │ │ │ +745 │ │ │ │ │ +746 // MonomialBasisFactory │ │ │ │ │ +747 // -------------------- │ │ │ │ │ +748 │ │ │ │ │ +749 template< int dim, class F > │ │ │ │ │ +_7_5_0 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +751 { │ │ │ │ │ +_7_5_2 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_7_5_3 typedef F _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +754 │ │ │ │ │ +_7_5_5 typedef unsigned int _K_e_y; │ │ │ │ │ +_7_5_6 typedef const _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _O_b_j_e_c_t; │ │ │ │ │ +757 │ │ │ │ │ +758 template < int dd, class FF > │ │ │ │ │ +_7_5_9 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +760 { │ │ │ │ │ +_7_6_1 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ +762 }; │ │ │ │ │ 763 │ │ │ │ │ -764 // Specialization for first-order case │ │ │ │ │ -765 if (k==1) │ │ │ │ │ +764 template< GeometryType::Id geometryId > │ │ │ │ │ +_7_6_5 static _O_b_j_e_c_t* _c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ 766 { │ │ │ │ │ -767 // vertex 0 │ │ │ │ │ -768 std::fill(x.begin(), x.end(), 0); │ │ │ │ │ -769 out[0] = f(x); │ │ │ │ │ -770 │ │ │ │ │ -771 // remaining vertices │ │ │ │ │ -772 for (int i=0; i( order ); │ │ │ │ │ +768 } │ │ │ │ │ +_7_6_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +770 }; │ │ │ │ │ +771 │ │ │ │ │ +772 │ │ │ │ │ +773 │ │ │ │ │ +774 // MonomialBasisProvider │ │ │ │ │ +775 // --------------------- │ │ │ │ │ 776 │ │ │ │ │ -777 out[i+1] = f(x); │ │ │ │ │ -778 } │ │ │ │ │ -779 return; │ │ │ │ │ -780 } │ │ │ │ │ -781 │ │ │ │ │ -782 if (dim==1) │ │ │ │ │ -783 { │ │ │ │ │ -784 for (unsigned int i=0; i │ │ │ │ │ +_7_7_8 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ +779 : public TopologySingletonFactory< MonomialBasisFactory< dim, SF > > │ │ │ │ │ +780 { │ │ │ │ │ +_7_8_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_7_8_2 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +783 template < int dd, class FF > │ │ │ │ │ +_7_8_4 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ 785 { │ │ │ │ │ -786 x[0] = ((D)i)/k; │ │ │ │ │ -787 out[i] = f(x); │ │ │ │ │ -788 } │ │ │ │ │ -789 return; │ │ │ │ │ -790 } │ │ │ │ │ +_7_8_6 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ +787 }; │ │ │ │ │ +788 }; │ │ │ │ │ +789 │ │ │ │ │ +790} │ │ │ │ │ 791 │ │ │ │ │ -792 if (dim==2) │ │ │ │ │ -793 { │ │ │ │ │ -794 int n=0; │ │ │ │ │ -795 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -796 for (unsigned int i=0; i<=k-j; i++) │ │ │ │ │ -797 { │ │ │ │ │ -798 x = { ((D)i)/k, ((D)j)/k }; │ │ │ │ │ -799 out[n] = f(x); │ │ │ │ │ -800 n++; │ │ │ │ │ -801 } │ │ │ │ │ -802 return; │ │ │ │ │ -803 } │ │ │ │ │ -804 │ │ │ │ │ -805 if (dim!=3) │ │ │ │ │ -806 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalInterpolation only │ │ │ │ │ -implemented for dim<=3!"); │ │ │ │ │ -807 │ │ │ │ │ -808 int n=0; │ │ │ │ │ -809 for (int i2 = 0; i2 <= (int)k; i2++) │ │ │ │ │ -810 for (int i1 = 0; i1 <= (int)k-i2; i1++) │ │ │ │ │ -811 for (int i0 = 0; i0 <= (int)k-i1-i2; i0++) │ │ │ │ │ -812 { │ │ │ │ │ -813 x[0] = ((D)i0)/((D)kdiv); │ │ │ │ │ -814 x[1] = ((D)i1)/((D)kdiv); │ │ │ │ │ -815 x[2] = ((D)i2)/((D)kdiv); │ │ │ │ │ -816 out[n] = f(x); │ │ │ │ │ -817 n++; │ │ │ │ │ -818 } │ │ │ │ │ -819 } │ │ │ │ │ -820 │ │ │ │ │ -821 }; │ │ │ │ │ -822 │ │ │ │ │ -823} } // namespace Dune::Impl │ │ │ │ │ -824 │ │ │ │ │ -825namespace _D_u_n_e │ │ │ │ │ -826{ │ │ │ │ │ -834 template │ │ │ │ │ -_8_3_5 class _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -836 { │ │ │ │ │ -837 public: │ │ │ │ │ -_8_4_0 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_k_>, │ │ │ │ │ -841 Impl::LagrangeSimplexLocalCoefficients, │ │ │ │ │ -842 Impl::LagrangeSimplexLocalInterpolation > >; │ │ │ │ │ -843 │ │ │ │ │ -_8_4_5 _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() {} │ │ │ │ │ -846 │ │ │ │ │ -851 template │ │ │ │ │ -_8_5_2 _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(const VertexMap& vertexmap) │ │ │ │ │ -853 : coefficients_(vertexmap) │ │ │ │ │ -854 {} │ │ │ │ │ -855 │ │ │ │ │ -_8_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -859 { │ │ │ │ │ -860 return basis_; │ │ │ │ │ -861 } │ │ │ │ │ -862 │ │ │ │ │ -_8_6_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -866 { │ │ │ │ │ -867 return coefficients_; │ │ │ │ │ -868 } │ │ │ │ │ -869 │ │ │ │ │ -_8_7_2 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -873 { │ │ │ │ │ -874 return interpolation_; │ │ │ │ │ -875 } │ │ │ │ │ -876 │ │ │ │ │ -_8_7_8 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ -879 { │ │ │ │ │ -880 return Impl::LagrangeSimplexLocalBasis::size(); │ │ │ │ │ -881 } │ │ │ │ │ -882 │ │ │ │ │ -_8_8_5 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -886 { │ │ │ │ │ -887 return GeometryTypes::simplex(d); │ │ │ │ │ -888 } │ │ │ │ │ -889 │ │ │ │ │ -890 private: │ │ │ │ │ -891 Impl::LagrangeSimplexLocalBasis basis_; │ │ │ │ │ -892 Impl::LagrangeSimplexLocalCoefficients coefficients_; │ │ │ │ │ -893 Impl::LagrangeSimplexLocalInterpolation > interpolation_; │ │ │ │ │ -894 }; │ │ │ │ │ -895 │ │ │ │ │ -896} // namespace Dune │ │ │ │ │ -897 │ │ │ │ │ -898#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +792#endif │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ +_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -R RangeType │ │ │ │ │ -range type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:872 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:858 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -LagrangeSimplexLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:845 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() │ │ │ │ │ -The number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:878 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -LagrangeSimplexLocalFiniteElement(const VertexMap &vertexmap) │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:852 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:865 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The reference element that the local finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:885 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ +A class representing the unit of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__ │ │ │ │ │ +unsigned int * numBaseFunctions_ │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:100 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_c_o_m_p_u_t_e_S_i_z_e_s │ │ │ │ │ +void computeSizes(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:126 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_s_i_z_e_s__ │ │ │ │ │ +unsigned int * sizes_ │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:97 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ +MonomialBasisSize() │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:102 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_~_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ +~MonomialBasisSize() │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ +unsigned int operator()(const unsigned int order) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:116 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_m_a_x_O_r_d_e_r__ │ │ │ │ │ +unsigned int maxOrder_ │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:94 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_m_a_x_O_r_d_e_r │ │ │ │ │ +unsigned int maxOrder() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:121 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_i_n_s_t_a_n_c_e │ │ │ │ │ +static This & instance() │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:446 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_R_a_n_g_e_V_e_c_t_o_r │ │ │ │ │ +Dune::FieldVector< Field, dimRange > RangeVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:453 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ +const unsigned int * sizes() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:471 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_t_o_p_o_l_o_g_y_I_d │ │ │ │ │ +unsigned int topologyId() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:493 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +void integrate(Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:552 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_F_i_e_l_d │ │ │ │ │ +Base::Field Field │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:449 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +void integrate(Field *const values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:547 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const unsigned int dimRange │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:447 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +Base::DomainVector DomainVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:451 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Field *const values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:505 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:531 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, FieldVector< Field, Derivatives< Field, │ │ │ │ │ +dimension, 1, deriv, DerivativeLayoutNS::value >::size > *values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:524 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, │ │ │ │ │ +layout > *values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:518 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:538 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_i_z_e │ │ │ │ │ +MonomialBasisSize< geometryId > Size │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:455 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:512 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +MonomialBasis(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:457 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_e_r_i_v_S_i_z_e │ │ │ │ │ +unsigned int derivSize(const unsigned int deriv) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:482 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ +const unsigned int * sizes(unsigned int order) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:488 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:177 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_S_i_z_e │ │ │ │ │ +MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:179 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_c_o_p_y │ │ │ │ │ +static void copy(const unsigned int deriv, F *&wit, F *&rit, const unsigned int │ │ │ │ │ +numBaseFunctions, const F &z) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:181 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_M_y_S_i_z_e │ │ │ │ │ +MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:178 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:234 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +FieldVector< Field, dimDomain > DomainVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:242 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:238 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:236 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ +static const unsigned int dimDomain │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:571 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:576 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +StandardMonomialBasis(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:579 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:577 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:592 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:598 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:597 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +StandardBiMonomialBasis(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:600 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y__ │ │ │ │ │ +GeometryType geometry_ │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:706 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +FieldVector< Field, dimension > DomainVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:621 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r__ │ │ │ │ │ +unsigned int order_ │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:705 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:674 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Field *const values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:650 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:616 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:668 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:680 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:637 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const unsigned int dimRange │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:619 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +F StorageField │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:617 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:618 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:632 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_R_a_n_g_e_V_e_c_t_o_r │ │ │ │ │ +FieldVector< Field, dimRange > RangeVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:622 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_~_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +virtual ~VirtualMonomialBasis() │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:628 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +virtual void evaluate(const unsigned int deriv, const DomainVector &x, Field │ │ │ │ │ +*const values) const =0 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +virtual void integrate(Field *const values) const =0 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Dune::FieldVector< Field, size > *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:656 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:689 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:642 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, │ │ │ │ │ +layout > *values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:662 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +VirtualMonomialBasis(const GeometryType >, unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:624 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ +virtual const unsigned int * sizes() const =0 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +void integrate(Vector &values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:700 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:712 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +void integrate(Field *const values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:736 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_s_i_z_e_s │ │ │ │ │ +const unsigned int * sizes() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:725 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +Base::DomainVector DomainVector │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:719 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_F_i_e_l_d │ │ │ │ │ +Base::Field Field │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:718 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:730 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ +VirtualMonomialBasisImpl(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:721 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:751 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:769 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const VirtualMonomialBasis< dimension, F > Object │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:756 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &order) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:765 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +F StorageField │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:753 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:752 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +unsigned int Key │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:755 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:760 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +MonomialBasisFactory< dd, FF > Type │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:761 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:781 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +SF StorageField │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:782 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:785 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +MonomialBasisProvider< dd, FF > Type │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:786 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pq22d.hh File Reference │ │ │ │ +dune-localfunctions: multiindex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,78 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
pq22d.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
multiindex.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementvariant.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <ostream>
│ │ │ │ +#include <dune/common/ftraits.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PQ22DLocalFiniteElement< D, R >
class  Dune::MultiIndex< dim, Field >
 
struct  Dune::FieldTraits< MultiIndex< dim, Field > >
 
struct  Dune::Unity< MultiIndex< dim, F > >
 
struct  Dune::Zero< MultiIndex< dim, F > >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<int dim, class Field >
std::ostream & Dune::operator<< (std::ostream &, const MultiIndex< dim, Field > &)
 
template<int dim, class Field , class F >
MultiIndex< dim, Field > Dune::operator* (const F &f, const MultiIndex< dim, Field > &m)
 
template<int dim, class Field , class F >
MultiIndex< dim, Field > Dune::operator/ (const F &f, const MultiIndex< dim, Field > &m)
 
template<int d, class F >
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< MultiIndex< d, F > > &y)
 
template<int d, class F , int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Dune::FieldVector< MultiIndex< d, F >, dimR > > &y)
 
template<int d, class F , int dimR1, int dimR2>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Dune::FieldMatrix< MultiIndex< d, F >, dimR1, dimR2 > > &y)
 
template<int d, class F >
std::ostream & Dune::operator<< (std::ostream &out, const MultiIndex< d, F > &val)
 
template<int dim, class Field >
bool Dune::operator< (const Zero< MultiIndex< dim, Field > > &, const MultiIndex< dim, Field > &)
 
template<int dim, class Field >
bool Dune::operator< (const MultiIndex< dim, Field > &f, const Zero< MultiIndex< dim, Field > > &)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,68 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pq22d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +multiindex.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ + class   _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_U_n_i_t_y_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_Z_e_r_o_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &, const _M_u_l_t_i_I_n_d_e_x< │ │ │ │ │ + dim, Field > &) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +_M_u_l_t_i_I_n_d_e_x< dim, Field >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (const F &f, const _M_u_l_t_i_I_n_d_e_x< dim, │ │ │ │ │ + Field > &m) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +_M_u_l_t_i_I_n_d_e_x< dim, Field >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (const F &f, const _M_u_l_t_i_I_n_d_e_x< dim, │ │ │ │ │ + Field > &m) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ + vector< _M_u_l_t_i_I_n_d_e_x< d, F > > &y) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ + vector< Dune::FieldVector< _M_u_l_t_i_I_n_d_e_x< d, F >, dimR > │ │ │ │ │ + > &y) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ + vector< Dune::FieldMatrix< _M_u_l_t_i_I_n_d_e_x< d, F >, dimR1, │ │ │ │ │ + dimR2 > > &y) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const │ │ │ │ │ + _M_u_l_t_i_I_n_d_e_x< d, F > &val) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim, Field > │ │ │ │ │ + > &, const _M_u_l_t_i_I_n_d_e_x< dim, Field > &) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ + bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _M_u_l_t_i_I_n_d_e_x< dim, Field > &f, │ │ │ │ │ + const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim, Field > > &) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00347_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pq22d.hh Source File │ │ │ │ +dune-localfunctions: multiindex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,132 +70,657 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pq22d.hh
│ │ │ │ +
multiindex.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_MULTIINDEX_HH
│ │ │ │ +
6#define DUNE_MULTIINDEX_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/common/fmatrix.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
19 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
22 public:
│ │ │ │ -
23 using Traits = typename LFEVariant::Traits;
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9#include <ostream>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/ftraits.hh>
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18 /****************************************************************
│ │ │ │ +
19 * Provide a Field class which can be used in evaluation methods
│ │ │ │ +
20 * to produce MultiIndex presentation of polynomials.
│ │ │ │ +
21 ****************************************************************/
│ │ │ │ +
22 // Internal Forward Declarations
│ │ │ │ +
23 // -----------------------------
│ │ │ │
24
│ │ │ │ -
│ │ │ │ -
25 PQ22DLocalFiniteElement ( const GeometryType &gt )
│ │ │ │ -
26 {
│ │ │ │ -
27 if ( gt.isTriangle() )
│ │ │ │ - │ │ │ │ -
29 else if ( gt.isQuadrilateral() )
│ │ │ │ - │ │ │ │ -
31 }
│ │ │ │ -
│ │ │ │ +
25 template< int dim, class Field >
│ │ │ │ +
26 class MultiIndex;
│ │ │ │ +
27
│ │ │ │ +
28 template< int dim, class Field >
│ │ │ │ +
29 std::ostream &operator<< ( std::ostream &, const MultiIndex< dim,Field > & );
│ │ │ │ +
30
│ │ │ │ +
31
│ │ │ │
32
│ │ │ │ -
│ │ │ │ -
33 PQ22DLocalFiniteElement ( const GeometryType &gt, const std::vector<unsigned int> vertexmap )
│ │ │ │ -
34 {
│ │ │ │ -
35 if ( gt.isTriangle() )
│ │ │ │ -
36 lfeVariant_ = LagrangeSimplexLocalFiniteElement<D,R,2,2>(vertexmap);
│ │ │ │ -
37 else if ( gt.isQuadrilateral() )
│ │ │ │ - │ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ +
33 // MultiIndex
│ │ │ │ +
34 // ----------
│ │ │ │ +
35
│ │ │ │ +
36 template< int dim,class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {
│ │ │ │ + │ │ │ │
40
│ │ │ │ -
│ │ │ │ -
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return lfeVariant_.localBasis();
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ +
41 friend std::ostream &operator<<<> ( std::ostream &, const This & );
│ │ │ │ +
42
│ │ │ │ +
43 public:
│ │ │ │ +
44 static const int dimension = dim;
│ │ │ │
45
│ │ │ │
│ │ │ │ -
46 const typename Traits::LocalCoefficientsType& localCoefficients () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return lfeVariant_.localCoefficients();
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ -
51 const typename Traits::LocalInterpolationType& localInterpolation () const
│ │ │ │ -
52 {
│ │ │ │ -
53 return lfeVariant_.localInterpolation();
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ -
57 unsigned int size () const
│ │ │ │ -
58 {
│ │ │ │ -
59 return lfeVariant_.size();
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
62 GeometryType type () const
│ │ │ │ -
63 {
│ │ │ │ -
64 return lfeVariant_.type();
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 private:
│ │ │ │ -
68
│ │ │ │ -
69 LFEVariant lfeVariant_;
│ │ │ │ -
70 };
│ │ │ │ + │ │ │ │ +
47 : vecZ_( 0 ),
│ │ │ │ +
48 vecOMZ_( 0 ),
│ │ │ │ +
49 factor_( 1. ),
│ │ │ │ +
50 next_( 0 )
│ │ │ │ +
51 {}
│ │ │ │ +
│ │ │ │ +
52 template <class F>
│ │ │ │ +
│ │ │ │ +
53 explicit MultiIndex (const F &f)
│ │ │ │ +
54 : vecZ_( 0 ),
│ │ │ │ +
55 vecOMZ_( 0 ),
│ │ │ │ +
56 factor_( field_cast<Field>(f) ),
│ │ │ │ +
57 next_( 0 )
│ │ │ │ +
58 {}
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
60 MultiIndex ( int, const This &other )
│ │ │ │ +
61 : vecZ_( other.vecOMZ_ ),
│ │ │ │ +
62 vecOMZ_( other.vecZ_ ),
│ │ │ │ +
63 factor_( other.factor_ )
│ │ │ │ +
64 {
│ │ │ │ +
65 assert(!other.next_);
│ │ │ │ +
66 if (other.next_)
│ │ │ │ +
67 {
│ │ │ │ +
68 next_ = new This( *(other.next_) );
│ │ │ │ +
69 }
│ │ │ │ +
70 else
│ │ │ │ +
71 next_ = 0;
│ │ │ │ +
72 }
│ │ │ │
│ │ │ │ -
71
│ │ │ │ -
72}
│ │ │ │
73
│ │ │ │ -
74#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
74 MultiIndex ( const This &other )
│ │ │ │ +
75 : vecZ_( other.vecZ_ ),
│ │ │ │ +
76 vecOMZ_( other.vecOMZ_ ),
│ │ │ │ +
77 factor_( other.factor_ )
│ │ │ │ +
78 {
│ │ │ │ +
79 if (other.next_)
│ │ │ │ +
80 {
│ │ │ │ +
81 next_ = new This( *(other.next_) );
│ │ │ │ +
82 }
│ │ │ │ +
83 else
│ │ │ │ +
84 next_ = 0;
│ │ │ │ +
85 }
│ │ │ │ +
│ │ │ │ +
86
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
88 {
│ │ │ │ +
89 remove();
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
│ │ │ │ +
92 int z(int i) const
│ │ │ │ +
93 {
│ │ │ │ +
94 return vecZ_[i];
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
96 int omz(int i) const
│ │ │ │ +
97 {
│ │ │ │ +
98 return vecOMZ_[i];
│ │ │ │ +
99 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
100 const Field &factor() const
│ │ │ │ +
101 {
│ │ │ │ +
102 return factor_;
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
│ │ │ │ +
105 This &operator= ( const This &other )
│ │ │ │ +
106 {
│ │ │ │ +
107 remove();
│ │ │ │ +
108 vecZ_ = other.vecZ_;
│ │ │ │ +
109 vecOMZ_ = other.vecOMZ_;
│ │ │ │ +
110 factor_ = other.factor_;
│ │ │ │ +
111 if (other.next_)
│ │ │ │ +
112 next_ = new This(*(other.next_));
│ │ │ │ +
113 return *this;
│ │ │ │ +
114 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
116 {
│ │ │ │ +
117 remove();
│ │ │ │ +
118 vecZ_ = 0;
│ │ │ │ +
119 vecOMZ_ = 0;
│ │ │ │ +
120 factor_ = 0.;
│ │ │ │ +
121 return *this;
│ │ │ │ +
122 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
124 {
│ │ │ │ +
125 remove();
│ │ │ │ +
126 vecZ_ = 0;
│ │ │ │ +
127 vecOMZ_ = 0;
│ │ │ │ +
128 factor_ = 1.;
│ │ │ │ +
129 return *this;
│ │ │ │ +
130 }
│ │ │ │ +
│ │ │ │ +
131 template <class F>
│ │ │ │ +
│ │ │ │ +
132 This &operator= ( const F &f )
│ │ │ │ +
133 {
│ │ │ │ +
134 remove();
│ │ │ │ +
135 vecZ_ = 0;
│ │ │ │ +
136 vecOMZ_ = 0;
│ │ │ │ +
137 factor_ = field_cast<Field>(f);
│ │ │ │ +
138 return *this;
│ │ │ │ +
139 }
│ │ │ │ +
│ │ │ │ +
140
│ │ │ │ +
│ │ │ │ +
141 bool operator== (const This &other) const
│ │ │ │ +
142 {
│ │ │ │ +
143 assert(!next_ && !other.next_);
│ │ │ │ +
144 return (vecZ_==other.vecZ_ && vecOMZ_==other.vecOMZ_ && factor_==other.factor_);
│ │ │ │ +
145 }
│ │ │ │ +
│ │ │ │ +
146
│ │ │ │ +
147 template <class F>
│ │ │ │ +
│ │ │ │ +
148 This &operator*= ( const F &f )
│ │ │ │ +
149 {
│ │ │ │ +
150 factor_ *= field_cast<Field>(f);
│ │ │ │ +
151 if (next_)
│ │ │ │ +
152 (*next_) *= f;
│ │ │ │ +
153 return *this;
│ │ │ │ +
154 }
│ │ │ │ +
│ │ │ │ +
155 template <class F>
│ │ │ │ +
│ │ │ │ +
156 This &operator/= ( const F &f )
│ │ │ │ +
157 {
│ │ │ │ +
158 factor_ /= field_cast<Field>(f);
│ │ │ │ +
159 if (next_)
│ │ │ │ +
160 (*next_) /= f;
│ │ │ │ +
161 return *this;
│ │ │ │ +
162 }
│ │ │ │ +
│ │ │ │ +
163
│ │ │ │ +
│ │ │ │ +
164 This &operator*= ( const This &other )
│ │ │ │ +
165 {
│ │ │ │ +
166 assert(!other.next_);
│ │ │ │ +
167 vecZ_ += other.vecZ_;
│ │ │ │ +
168 vecOMZ_ += other.vecOMZ_;
│ │ │ │ +
169 factor_ *= other.factor_;
│ │ │ │ +
170 if (next_)
│ │ │ │ +
171 (*next_) *= other;
│ │ │ │ +
172 return *this;
│ │ │ │ +
173 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
174 This &operator/= ( const This &other )
│ │ │ │ +
175 {
│ │ │ │ +
176 assert(!other.next_);
│ │ │ │ +
177 vecZ_ -= other.vecZ_;
│ │ │ │ +
178 vecOMZ_ -= other.vecOMZ_;
│ │ │ │ +
179 factor_ /= other.factor_;
│ │ │ │ +
180 if (next_)
│ │ │ │ +
181 (*next_) /= other;
│ │ │ │ +
182 return *this;
│ │ │ │ +
183 }
│ │ │ │ +
│ │ │ │ +
184
│ │ │ │ +
│ │ │ │ +
185 This &operator+= ( const This &other )
│ │ │ │ +
186 {
│ │ │ │ +
187 assert(!other.next_);
│ │ │ │ +
188 if (std::abs(other.factor_)<1e-10)
│ │ │ │ +
189 return *this;
│ │ │ │ +
190 if (std::abs(factor_)<1e-10)
│ │ │ │ +
191 {
│ │ │ │ +
192 *this = other;
│ │ │ │ +
193 return *this;
│ │ │ │ +
194 }
│ │ │ │ +
195 if (!sameMultiIndex(other))
│ │ │ │ +
196 {
│ │ │ │ +
197 if (next_)
│ │ │ │ +
198 (*next_)+=other;
│ │ │ │ +
199 else
│ │ │ │ +
200 {
│ │ │ │ +
201 next_ = new This(other);
│ │ │ │ +
202 }
│ │ │ │ +
203 }
│ │ │ │ +
204 else
│ │ │ │ +
205 factor_ += other.factor_;
│ │ │ │ +
206 return *this;
│ │ │ │ +
207 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
208 This &operator-= ( const This &other )
│ │ │ │ +
209 {
│ │ │ │ +
210 assert(!other.next_);
│ │ │ │ +
211 if (!sameMultiIndex(other))
│ │ │ │ +
212 {
│ │ │ │ +
213 if (next_)
│ │ │ │ +
214 next_-=other;
│ │ │ │ +
215 else
│ │ │ │ +
216 {
│ │ │ │ +
217 next_ = new This(other);
│ │ │ │ +
218 }
│ │ │ │ +
219 }
│ │ │ │ +
220 else
│ │ │ │ +
221 factor_ -= other.factor_;
│ │ │ │ +
222 return *this;
│ │ │ │ +
223 }
│ │ │ │ +
│ │ │ │ +
224
│ │ │ │ +
225 template <class F>
│ │ │ │ +
│ │ │ │ +
226 This operator* ( const F &f ) const
│ │ │ │ +
227 {
│ │ │ │ +
228 This z = *this;
│ │ │ │ +
229 return (z *= f);
│ │ │ │ +
230 }
│ │ │ │ +
│ │ │ │ +
231 template <class F>
│ │ │ │ +
│ │ │ │ +
232 This operator/ ( const F &f ) const
│ │ │ │ +
233 {
│ │ │ │ +
234 This z = *this;
│ │ │ │ +
235 return (z /= f);
│ │ │ │ +
236 }
│ │ │ │ +
│ │ │ │ +
237
│ │ │ │ +
│ │ │ │ +
238 This operator* ( const This &other ) const
│ │ │ │ +
239 {
│ │ │ │ +
240 This z = *this;
│ │ │ │ +
241 return (z *= other);
│ │ │ │ +
242 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
243 This operator/ ( const This &other ) const
│ │ │ │ +
244 {
│ │ │ │ +
245 This z = *this;
│ │ │ │ +
246 return (z /= other);
│ │ │ │ +
247 }
│ │ │ │ +
│ │ │ │ +
248
│ │ │ │ +
│ │ │ │ +
249 This operator+ ( const This &other ) const
│ │ │ │ +
250 {
│ │ │ │ +
251 This z = *this;
│ │ │ │ +
252 return (z += other);
│ │ │ │ +
253 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
254 This operator- ( const This &other ) const
│ │ │ │ +
255 {
│ │ │ │ +
256 This z = *this;
│ │ │ │ +
257 return (z -= other);
│ │ │ │ +
258 }
│ │ │ │ +
│ │ │ │ +
259
│ │ │ │ +
│ │ │ │ +
260 void set ( int d, int power = 1 )
│ │ │ │ +
261 {
│ │ │ │ +
262 vecZ_[ d ] = power;
│ │ │ │ +
263 }
│ │ │ │ +
│ │ │ │ +
264
│ │ │ │ +
│ │ │ │ +
265 int absZ () const
│ │ │ │ +
266 {
│ │ │ │ +
267 int ret = 0;
│ │ │ │ +
268 for( int i = 0; i < dimension; ++i )
│ │ │ │ +
269 ret += std::abs( vecZ_[ i ] );
│ │ │ │ +
270 return ret;
│ │ │ │ +
271 }
│ │ │ │ +
│ │ │ │ +
272
│ │ │ │ +
│ │ │ │ +
273 int absOMZ() const
│ │ │ │ +
274 {
│ │ │ │ +
275 int ret = 0;
│ │ │ │ +
276 for( int i = 0; i < dimension; ++i )
│ │ │ │ +
277 ret += std::abs( vecOMZ_[ i ] );
│ │ │ │ +
278 return ret;
│ │ │ │ +
279 }
│ │ │ │ +
│ │ │ │ +
280
│ │ │ │ +
│ │ │ │ +
281 bool sameMultiIndex(const This &ind)
│ │ │ │ +
282 {
│ │ │ │ +
283 for( int i = 0; i < dimension; ++i )
│ │ │ │ +
284 {
│ │ │ │ +
285 if ( vecZ_[i] != ind.vecZ_[i] ||
│ │ │ │ +
286 vecOMZ_[i] != vecOMZ_[i] )
│ │ │ │ +
287 return false;
│ │ │ │ +
288 }
│ │ │ │ +
289 return true;
│ │ │ │ +
290 }
│ │ │ │ +
│ │ │ │ +
291
│ │ │ │ +
292 private:
│ │ │ │ +
293 void remove()
│ │ │ │ +
294 {
│ │ │ │ +
295 if (next_)
│ │ │ │ +
296 {
│ │ │ │ +
297 next_->remove();
│ │ │ │ +
298 delete next_;
│ │ │ │ +
299 next_ = 0;
│ │ │ │ +
300 }
│ │ │ │ +
301 }
│ │ │ │ +
302
│ │ │ │ +
303 typedef Dune::FieldVector< int, dimension > Vector;
│ │ │ │ +
304
│ │ │ │ +
305 Vector vecZ_;
│ │ │ │ +
306 Vector vecOMZ_;
│ │ │ │ +
307 Field factor_;
│ │ │ │ +
308
│ │ │ │ +
309 This *next_;
│ │ │ │ +
310 };
│ │ │ │ +
│ │ │ │ +
311
│ │ │ │ +
312
│ │ │ │ +
313 template< int dim,class Field >
│ │ │ │ +
│ │ │ │ +
314 struct FieldTraits<MultiIndex<dim,Field>>
│ │ │ │ +
315 {
│ │ │ │ +
316 using field_type = Field;
│ │ │ │ +
317 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ +
318 };
│ │ │ │ +
│ │ │ │ +
319
│ │ │ │ +
320 template <int dim, class Field, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
322 const MultiIndex<dim,Field> &m)
│ │ │ │ +
323 {
│ │ │ │ + │ │ │ │ +
325 return (z *= f);
│ │ │ │ +
326 }
│ │ │ │ +
│ │ │ │ +
327 template <int dim, class Field, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
329 const MultiIndex<dim,Field> &m)
│ │ │ │ +
330 {
│ │ │ │ + │ │ │ │ +
332 return (z /= f);
│ │ │ │ +
333 }
│ │ │ │ +
│ │ │ │ +
334
│ │ │ │ +
335 template <int d, class F>
│ │ │ │ +
│ │ │ │ +
336 std::ostream &operator<<(std::ostream& out,const std::vector<MultiIndex<d,F> >& y) {
│ │ │ │ +
337 for (unsigned int r=0; r<y.size(); ++r) {
│ │ │ │ +
338 out << "f_{" << r << "}(" << char('a');
│ │ │ │ +
339 for (int i=1; i<d; ++i)
│ │ │ │ +
340 out << "," << char('a'+i);
│ │ │ │ +
341 out << ")=";
│ │ │ │ +
342 out << y[r] << std::endl;
│ │ │ │ +
343 }
│ │ │ │ +
344 return out;
│ │ │ │ +
345 }
│ │ │ │ +
│ │ │ │ +
346 template <int d,class F,int dimR>
│ │ │ │ +
│ │ │ │ +
347 std::ostream &operator<<(std::ostream& out,
│ │ │ │ +
348 const std::vector<Dune::FieldVector<MultiIndex<d,F>,dimR> >& y) {
│ │ │ │ +
349 out << "\\begin{eqnarray*}" << std::endl;
│ │ │ │ +
350 for (unsigned int k=0; k<y.size(); ++k) {
│ │ │ │ +
351 out << "f_{" << k << "}(" << char('a');
│ │ │ │ +
352 for (int i=1; i<d; ++i)
│ │ │ │ +
353 out << "," << char('a'+i);
│ │ │ │ +
354 out << ") &=& ( ";
│ │ │ │ +
355 out << y[k][0] ;
│ │ │ │ +
356 for (unsigned int r=1; r<dimR; ++r) {
│ │ │ │ +
357 out << " , " << y[k][r] ;
│ │ │ │ +
358 }
│ │ │ │ +
359 out << " ) \\\\" << std::endl;
│ │ │ │ +
360 }
│ │ │ │ +
361 out << "\\end{eqnarray*}" << std::endl;
│ │ │ │ +
362 return out;
│ │ │ │ +
363 }
│ │ │ │ +
│ │ │ │ +
364 template <int d,class F,int dimR1,int dimR2>
│ │ │ │ +
│ │ │ │ +
365 std::ostream &operator<<(std::ostream& out,
│ │ │ │ +
366 const std::vector<Dune::FieldMatrix<MultiIndex<d,F>,dimR1,dimR2> >& y) {
│ │ │ │ +
367 out << "\\begin{eqnarray*}" << std::endl;
│ │ │ │ +
368 for (unsigned int k=0; k<y.size(); ++k) {
│ │ │ │ +
369 for (int q=0; q<dimR2; q++) {
│ │ │ │ +
370 out << "d_{" << char('a'+q) << "}f_{" << k << "}(" << char('a');
│ │ │ │ +
371 for (int i=1; i<d; ++i)
│ │ │ │ +
372 out << "," << char('a'+i);
│ │ │ │ +
373 out << ") &=& ( ";
│ │ │ │ +
374 out << y[k][0][q] ;
│ │ │ │ +
375 for (unsigned int r=1; r<dimR1; ++r) {
│ │ │ │ +
376 out << " , " << y[k][r][q] ;
│ │ │ │ +
377 }
│ │ │ │ +
378 out << " ) \\\\" << std::endl;
│ │ │ │ +
379 }
│ │ │ │ +
380 }
│ │ │ │ +
381 out << "\\end{eqnarray*}" << std::endl;
│ │ │ │ +
382 return out;
│ │ │ │ +
383 }
│ │ │ │ +
│ │ │ │ +
384 template <int d, class F>
│ │ │ │ +
│ │ │ │ +
385 std::ostream &operator<<(std::ostream& out,const MultiIndex<d,F>& val)
│ │ │ │ +
386 {
│ │ │ │ +
387 bool first = true;
│ │ │ │ +
388 const MultiIndex<d,F> *m = &val;
│ │ │ │ +
389 do {
│ │ │ │ +
390 if (m->absZ()==0 && std::abs(m->factor())<1e-10)
│ │ │ │ +
391 {
│ │ │ │ +
392 if (!m->next_ || !first)
│ │ │ │ +
393 {
│ │ │ │ +
394 out << "0";
│ │ │ │ +
395 break;
│ │ │ │ +
396 }
│ │ │ │ +
397 else {
│ │ │ │ +
398 m = m->next_;
│ │ │ │ +
399 continue;
│ │ │ │ +
400 }
│ │ │ │ +
401 }
│ │ │ │ +
402 if (m->factor()>0 && !first)
│ │ │ │ +
403 out << " + ";
│ │ │ │ +
404 else if (m->factor()<0)
│ │ │ │ +
405 if (!first)
│ │ │ │ +
406 out << " - ";
│ │ │ │ +
407 else
│ │ │ │ +
408 out << "- ";
│ │ │ │ +
409 else
│ │ │ │ +
410 out << " ";
│ │ │ │ +
411 first = false;
│ │ │ │ +
412 F f = std::abs(m->factor());
│ │ │ │ +
413 if (m->absZ()==0)
│ │ │ │ +
414 out << f;
│ │ │ │ +
415 else {
│ │ │ │ +
416 if ( std::abs(f)<1e-10)
│ │ │ │ +
417 out << 0;
│ │ │ │ +
418 else
│ │ │ │ +
419 {
│ │ │ │ +
420 F f_1(f);
│ │ │ │ +
421 f_1 -= 1.; // better Unity<F>();
│ │ │ │ +
422 if ( std::abs(f_1)>1e-10)
│ │ │ │ +
423 out << f;
│ │ │ │ +
424 int absVal = 0;
│ │ │ │ +
425 for (int i=0; i<d; ++i) {
│ │ │ │ +
426 if (m->vecZ_[i]==0)
│ │ │ │ +
427 continue;
│ │ │ │ +
428 else if (m->vecZ_[i]==1)
│ │ │ │ +
429 out << char('a'+i);
│ │ │ │ +
430 else if (m->vecZ_[i]>0)
│ │ │ │ +
431 out << char('a'+i) << "^" << m->vecZ_[i] << "";
│ │ │ │ +
432 else if (m->vecZ_[i]<0)
│ │ │ │ +
433 out << char('a'+i) << "^" << m->vecZ_[i] << "";
│ │ │ │ +
434 absVal += m->vecZ_[i];
│ │ │ │ +
435 if (absVal<m->absZ()) out << "";
│ │ │ │ +
436 }
│ │ │ │ +
437 }
│ │ │ │ +
438 }
│ │ │ │ +
439 /*
│ │ │ │ +
440 if (mi.absOMZ()>0) {
│ │ │ │ +
441 for (int i=0;i<=mi.absZ();++i) {
│ │ │ │ +
442 if (mi.vecOMZ_[i]==0)
│ │ │ │ +
443 continue;
│ │ │ │ +
444 else if (mi.vecOMZ_[i]==1)
│ │ │ │ +
445 out << (1-char('a'+i));
│ │ │ │ +
446 else if (mi.vecOMZ_[i]>0)
│ │ │ │ +
447 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i];
│ │ │ │ +
448 else if (mi.vecOMZ_[i]<0)
│ │ │ │ +
449 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i];
│ │ │ │ +
450 if (i==mi.absZ()+1) out << "*";
│ │ │ │ +
451 }
│ │ │ │ +
452 }
│ │ │ │ +
453 */
│ │ │ │ +
454 m = m->next_;
│ │ │ │ +
455 } while (m);
│ │ │ │ +
456 return out;
│ │ │ │ +
457 }
│ │ │ │ +
│ │ │ │ +
458
│ │ │ │ +
459 template< int dim, class F>
│ │ │ │ +
│ │ │ │ +
460 struct Unity< MultiIndex< dim, F > >
│ │ │ │ +
461 {
│ │ │ │ + │ │ │ │ +
463
│ │ │ │ +
│ │ │ │ +
464 operator Field () const
│ │ │ │ +
465 {
│ │ │ │ +
466 return Field();
│ │ │ │ +
467 }
│ │ │ │ +
│ │ │ │ +
468
│ │ │ │ +
│ │ │ │ +
469 Field operator- ( const Field &other ) const
│ │ │ │ +
470 {
│ │ │ │ +
471 return Field( 1, other );
│ │ │ │ +
472 }
│ │ │ │ +
│ │ │ │ +
473
│ │ │ │ +
│ │ │ │ +
474 Field operator/ ( const Field &other ) const
│ │ │ │ +
475 {
│ │ │ │ +
476 return Field() / other;
│ │ │ │ +
477 }
│ │ │ │ +
│ │ │ │ +
478 };
│ │ │ │ +
│ │ │ │ +
479
│ │ │ │ +
480
│ │ │ │ +
481
│ │ │ │ +
482 template< int dim, class F >
│ │ │ │ +
│ │ │ │ +
483 struct Zero< MultiIndex< dim,F > >
│ │ │ │ +
484 {
│ │ │ │ + │ │ │ │ +
486
│ │ │ │ +
487 // zero does not actually exist
│ │ │ │ +
│ │ │ │ +
488 operator Field ()
│ │ │ │ +
489 {
│ │ │ │ +
490 return Field(0);
│ │ │ │ +
491 }
│ │ │ │ +
│ │ │ │ +
492 };
│ │ │ │ +
│ │ │ │ +
493
│ │ │ │ +
494 template< int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
496 {
│ │ │ │ +
497 return true;
│ │ │ │ +
498 }
│ │ │ │ +
│ │ │ │ +
499
│ │ │ │ +
500 template< int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
502 {
│ │ │ │ +
503 return true;
│ │ │ │ +
504 }
│ │ │ │ +
│ │ │ │ +
505
│ │ │ │ +
506}
│ │ │ │ +
507
│ │ │ │ +
508#endif // #ifndef DUNE_MULTIINDEX_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ - │ │ │ │ -
typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation > Traits
Export LocalFiniteElementTraits.
Definition localfiniteelementvariant.hh:269
│ │ │ │ -
unsigned int size() const
Number of shape functions.
Definition localfiniteelementvariant.hh:374
│ │ │ │ -
constexpr GeometryType type() const
Number of shape functions.
Definition localfiniteelementvariant.hh:382
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Provide access to LocalBasis implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:350
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Provide access to LocalCoefficients implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:358
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Provide access to LocalInterpolation implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:366
│ │ │ │ -
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ -
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ -
Definition pq22d.hh:19
│ │ │ │ -
typename LFEVariant::Traits Traits
Definition pq22d.hh:23
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition pq22d.hh:46
│ │ │ │ -
PQ22DLocalFiniteElement(const GeometryType &gt, const std::vector< unsigned int > vertexmap)
Definition pq22d.hh:33
│ │ │ │ -
PQ22DLocalFiniteElement(const GeometryType &gt)
Definition pq22d.hh:25
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition pq22d.hh:57
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition pq22d.hh:51
│ │ │ │ -
GeometryType type() const
Definition pq22d.hh:62
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition pq22d.hh:41
│ │ │ │ +
Field operator-(const Unity< Field > &u, const Field &f)
Definition field.hh:44
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
bool operator<(const Zero< Field > &, const Field &f)
Definition field.hh:119
│ │ │ │ +
Field operator/(const Unity< Field > &u, const Field &f)
Definition field.hh:56
│ │ │ │ +
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ +
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ +
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
This operator+(const This &other) const
Definition multiindex.hh:249
│ │ │ │ +
int absOMZ() const
Definition multiindex.hh:273
│ │ │ │ +
~MultiIndex()
Definition multiindex.hh:87
│ │ │ │ +
This & operator-=(const This &other)
Definition multiindex.hh:208
│ │ │ │ +
MultiIndex(int, const This &other)
Definition multiindex.hh:60
│ │ │ │ +
static const int dimension
Definition multiindex.hh:44
│ │ │ │ +
int absZ() const
Definition multiindex.hh:265
│ │ │ │ +
int omz(int i) const
Definition multiindex.hh:96
│ │ │ │ +
This & operator+=(const This &other)
Definition multiindex.hh:185
│ │ │ │ +
bool operator==(const This &other) const
Definition multiindex.hh:141
│ │ │ │ +
bool sameMultiIndex(const This &ind)
Definition multiindex.hh:281
│ │ │ │ +
This & operator=(const This &other)
Definition multiindex.hh:105
│ │ │ │ +
MultiIndex(const This &other)
Definition multiindex.hh:74
│ │ │ │ +
This & operator*=(const F &f)
Definition multiindex.hh:148
│ │ │ │ +
const Field & factor() const
Definition multiindex.hh:100
│ │ │ │ +
This operator/(const F &f) const
Definition multiindex.hh:232
│ │ │ │ +
MultiIndex(const F &f)
Definition multiindex.hh:53
│ │ │ │ +
This & operator/=(const F &f)
Definition multiindex.hh:156
│ │ │ │ +
This operator*(const F &f) const
Definition multiindex.hh:226
│ │ │ │ +
void set(int d, int power=1)
Definition multiindex.hh:260
│ │ │ │ +
This operator-(const This &other) const
Definition multiindex.hh:254
│ │ │ │ +
int z(int i) const
Definition multiindex.hh:92
│ │ │ │ +
MultiIndex()
Definition multiindex.hh:46
│ │ │ │ +
Field field_type
Definition multiindex.hh:316
│ │ │ │ +
typename FieldTraits< field_type >::real_type real_type
Definition multiindex.hh:317
│ │ │ │ +
MultiIndex< dim, F > Field
Definition multiindex.hh:462
│ │ │ │ +
MultiIndex< dim, F > Field
Definition multiindex.hh:485
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,156 +1,636 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pq22d.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +multiindex.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_MULTIINDEX_HH │ │ │ │ │ +6#define DUNE_MULTIINDEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 template │ │ │ │ │ -_1_8 class _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -19 { │ │ │ │ │ -20 using _L_F_E_V_a_r_i_a_n_t = │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>, │ │ │ │ │ -21 _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_> >; │ │ │ │ │ -22 public: │ │ │ │ │ -_2_3 using _T_r_a_i_t_s = typename _L_F_E_V_a_r_i_a_n_t_:_:_T_r_a_i_t_s; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 /**************************************************************** │ │ │ │ │ +19 * Provide a Field class which can be used in evaluation methods │ │ │ │ │ +20 * to produce MultiIndex presentation of polynomials. │ │ │ │ │ +21 ****************************************************************/ │ │ │ │ │ +22 // Internal Forward Declarations │ │ │ │ │ +23 // ----------------------------- │ │ │ │ │ 24 │ │ │ │ │ -_2_5 _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType > ) │ │ │ │ │ -26 { │ │ │ │ │ -27 if ( gt.isTriangle() ) │ │ │ │ │ -28 lfeVariant_ = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ -29 else if ( gt.isQuadrilateral() ) │ │ │ │ │ -30 lfeVariant_ = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ -31 } │ │ │ │ │ +25 template< int dim, class Field > │ │ │ │ │ +26 class MultiIndex; │ │ │ │ │ +27 │ │ │ │ │ +28 template< int dim, class Field > │ │ │ │ │ +_2_9 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &, const _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_i_e_l_d_ _> & │ │ │ │ │ +); │ │ │ │ │ +30 │ │ │ │ │ +31 │ │ │ │ │ 32 │ │ │ │ │ -_3_3 _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, const std::vector vertexmap ) │ │ │ │ │ -34 { │ │ │ │ │ -35 if ( gt.isTriangle() ) │ │ │ │ │ -36 lfeVariant_ = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(vertexmap); │ │ │ │ │ -37 else if ( gt.isQuadrilateral() ) │ │ │ │ │ -38 lfeVariant_ = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ -39 } │ │ │ │ │ +33 // MultiIndex │ │ │ │ │ +34 // ---------- │ │ │ │ │ +35 │ │ │ │ │ +36 template< int dim,class Field > │ │ │ │ │ +_3_7 class _M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +38 { │ │ │ │ │ +39 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> _T_h_i_s; │ │ │ │ │ 40 │ │ │ │ │ -_4_1 const typename Traits::LocalBasisType& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return lfeVariant_._l_o_c_a_l_B_a_s_i_s(); │ │ │ │ │ -44 } │ │ │ │ │ +_4_1 friend std::ostream &operator<<<> ( std::ostream &, const _T_h_i_s & ); │ │ │ │ │ +42 │ │ │ │ │ +43 public: │ │ │ │ │ +_4_4 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ 45 │ │ │ │ │ -_4_6 const typename Traits::LocalCoefficientsType& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return lfeVariant_._l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s(); │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_1 const typename Traits::LocalInterpolationType& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -52 { │ │ │ │ │ -53 return lfeVariant_._l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(); │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_7 unsigned int _s_i_z_e () const │ │ │ │ │ -58 { │ │ │ │ │ -59 return lfeVariant_._s_i_z_e(); │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_2 GeometryType _t_y_p_e () const │ │ │ │ │ -63 { │ │ │ │ │ -64 return lfeVariant_._t_y_p_e(); │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -67 private: │ │ │ │ │ -68 │ │ │ │ │ -69 LFEVariant lfeVariant_; │ │ │ │ │ -70 }; │ │ │ │ │ -71 │ │ │ │ │ -72} │ │ │ │ │ +_4_6 _M_u_l_t_i_I_n_d_e_x () │ │ │ │ │ +47 : vecZ_( 0 ), │ │ │ │ │ +48 vecOMZ_( 0 ), │ │ │ │ │ +49 factor_( 1. ), │ │ │ │ │ +50 next_( 0 ) │ │ │ │ │ +51 {} │ │ │ │ │ +52 template │ │ │ │ │ +_5_3 explicit _M_u_l_t_i_I_n_d_e_x (const F &f) │ │ │ │ │ +54 : vecZ_( 0 ), │ │ │ │ │ +55 vecOMZ_( 0 ), │ │ │ │ │ +56 factor_( _f_i_e_l_d___c_a_s_t(f) ), │ │ │ │ │ +57 next_( 0 ) │ │ │ │ │ +58 {} │ │ │ │ │ +59 │ │ │ │ │ +_6_0 _M_u_l_t_i_I_n_d_e_x ( int, const _T_h_i_s &other ) │ │ │ │ │ +61 : vecZ_( other.vecOMZ_ ), │ │ │ │ │ +62 vecOMZ_( other.vecZ_ ), │ │ │ │ │ +63 factor_( other.factor_ ) │ │ │ │ │ +64 { │ │ │ │ │ +65 assert(!other.next_); │ │ │ │ │ +66 if (other.next_) │ │ │ │ │ +67 { │ │ │ │ │ +68 next_ = new _T_h_i_s( *(other.next_) ); │ │ │ │ │ +69 } │ │ │ │ │ +70 else │ │ │ │ │ +71 next_ = 0; │ │ │ │ │ +72 } │ │ │ │ │ 73 │ │ │ │ │ -74#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_7_4 _M_u_l_t_i_I_n_d_e_x ( const _T_h_i_s &other ) │ │ │ │ │ +75 : vecZ_( other.vecZ_ ), │ │ │ │ │ +76 vecOMZ_( other.vecOMZ_ ), │ │ │ │ │ +77 factor_( other.factor_ ) │ │ │ │ │ +78 { │ │ │ │ │ +79 if (other.next_) │ │ │ │ │ +80 { │ │ │ │ │ +81 next_ = new _T_h_i_s( *(other.next_) ); │ │ │ │ │ +82 } │ │ │ │ │ +83 else │ │ │ │ │ +84 next_ = 0; │ │ │ │ │ +85 } │ │ │ │ │ +86 │ │ │ │ │ +_8_7 _~_M_u_l_t_i_I_n_d_e_x() │ │ │ │ │ +88 { │ │ │ │ │ +89 remove(); │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +_9_2 int _z(int i) const │ │ │ │ │ +93 { │ │ │ │ │ +94 return vecZ_[i]; │ │ │ │ │ +95 } │ │ │ │ │ +_9_6 int _o_m_z(int i) const │ │ │ │ │ +97 { │ │ │ │ │ +98 return vecOMZ_[i]; │ │ │ │ │ +99 } │ │ │ │ │ +_1_0_0 const Field &_f_a_c_t_o_r() const │ │ │ │ │ +101 { │ │ │ │ │ +102 return factor_; │ │ │ │ │ +103 } │ │ │ │ │ +104 │ │ │ │ │ +_1_0_5 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _T_h_i_s &other ) │ │ │ │ │ +106 { │ │ │ │ │ +107 remove(); │ │ │ │ │ +108 vecZ_ = other.vecZ_; │ │ │ │ │ +109 vecOMZ_ = other.vecOMZ_; │ │ │ │ │ +110 factor_ = other.factor_; │ │ │ │ │ +111 if (other.next_) │ │ │ │ │ +112 next_ = new _T_h_i_s(*(other.next_)); │ │ │ │ │ +113 return *this; │ │ │ │ │ +114 } │ │ │ │ │ +_1_1_5 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _Z_e_r_o_<_T_h_i_s_> &f ) │ │ │ │ │ +116 { │ │ │ │ │ +117 remove(); │ │ │ │ │ +118 vecZ_ = 0; │ │ │ │ │ +119 vecOMZ_ = 0; │ │ │ │ │ +120 factor_ = 0.; │ │ │ │ │ +121 return *this; │ │ │ │ │ +122 } │ │ │ │ │ +_1_2_3 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _U_n_i_t_y_<_T_h_i_s_> &f ) │ │ │ │ │ +124 { │ │ │ │ │ +125 remove(); │ │ │ │ │ +126 vecZ_ = 0; │ │ │ │ │ +127 vecOMZ_ = 0; │ │ │ │ │ +128 factor_ = 1.; │ │ │ │ │ +129 return *this; │ │ │ │ │ +130 } │ │ │ │ │ +131 template │ │ │ │ │ +_1_3_2 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const F &f ) │ │ │ │ │ +133 { │ │ │ │ │ +134 remove(); │ │ │ │ │ +135 vecZ_ = 0; │ │ │ │ │ +136 vecOMZ_ = 0; │ │ │ │ │ +137 factor_ = field_cast(f); │ │ │ │ │ +138 return *this; │ │ │ │ │ +139 } │ │ │ │ │ +140 │ │ │ │ │ +_1_4_1 bool _o_p_e_r_a_t_o_r_=_=_ (const _T_h_i_s &other) const │ │ │ │ │ +142 { │ │ │ │ │ +143 assert(!next_ && !other.next_); │ │ │ │ │ +144 return (vecZ_==other.vecZ_ && vecOMZ_==other.vecOMZ_ && │ │ │ │ │ +factor_==other.factor_); │ │ │ │ │ +145 } │ │ │ │ │ +146 │ │ │ │ │ +147 template │ │ │ │ │ +_1_4_8 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const F &f ) │ │ │ │ │ +149 { │ │ │ │ │ +150 factor_ *= field_cast(f); │ │ │ │ │ +151 if (next_) │ │ │ │ │ +152 (*next_) *= f; │ │ │ │ │ +153 return *this; │ │ │ │ │ +154 } │ │ │ │ │ +155 template │ │ │ │ │ +_1_5_6 _T_h_i_s &_o_p_e_r_a_t_o_r_/_=_ ( const F &f ) │ │ │ │ │ +157 { │ │ │ │ │ +158 factor_ /= field_cast(f); │ │ │ │ │ +159 if (next_) │ │ │ │ │ +160 (*next_) /= f; │ │ │ │ │ +161 return *this; │ │ │ │ │ +162 } │ │ │ │ │ +163 │ │ │ │ │ +_1_6_4 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _T_h_i_s &other ) │ │ │ │ │ +165 { │ │ │ │ │ +166 assert(!other.next_); │ │ │ │ │ +167 vecZ_ += other.vecZ_; │ │ │ │ │ +168 vecOMZ_ += other.vecOMZ_; │ │ │ │ │ +169 factor_ *= other.factor_; │ │ │ │ │ +170 if (next_) │ │ │ │ │ +171 (*next_) *= other; │ │ │ │ │ +172 return *this; │ │ │ │ │ +173 } │ │ │ │ │ +_1_7_4 _T_h_i_s &_o_p_e_r_a_t_o_r_/_=_ ( const _T_h_i_s &other ) │ │ │ │ │ +175 { │ │ │ │ │ +176 assert(!other.next_); │ │ │ │ │ +177 vecZ_ -= other.vecZ_; │ │ │ │ │ +178 vecOMZ_ -= other.vecOMZ_; │ │ │ │ │ +179 factor_ /= other.factor_; │ │ │ │ │ +180 if (next_) │ │ │ │ │ +181 (*next_) /= other; │ │ │ │ │ +182 return *this; │ │ │ │ │ +183 } │ │ │ │ │ +184 │ │ │ │ │ +_1_8_5 _T_h_i_s &_o_p_e_r_a_t_o_r_+_=_ ( const _T_h_i_s &other ) │ │ │ │ │ +186 { │ │ │ │ │ +187 assert(!other.next_); │ │ │ │ │ +188 if (std::abs(other.factor_)<1e-10) │ │ │ │ │ +189 return *this; │ │ │ │ │ +190 if (std::abs(factor_)<1e-10) │ │ │ │ │ +191 { │ │ │ │ │ +192 *this = other; │ │ │ │ │ +193 return *this; │ │ │ │ │ +194 } │ │ │ │ │ +195 if (!_s_a_m_e_M_u_l_t_i_I_n_d_e_x(other)) │ │ │ │ │ +196 { │ │ │ │ │ +197 if (next_) │ │ │ │ │ +198 (*next_)+=other; │ │ │ │ │ +199 else │ │ │ │ │ +200 { │ │ │ │ │ +201 next_ = new _T_h_i_s(other); │ │ │ │ │ +202 } │ │ │ │ │ +203 } │ │ │ │ │ +204 else │ │ │ │ │ +205 factor_ += other.factor_; │ │ │ │ │ +206 return *this; │ │ │ │ │ +207 } │ │ │ │ │ +_2_0_8 _T_h_i_s &_o_p_e_r_a_t_o_r_-_=_ ( const _T_h_i_s &other ) │ │ │ │ │ +209 { │ │ │ │ │ +210 assert(!other.next_); │ │ │ │ │ +211 if (!_s_a_m_e_M_u_l_t_i_I_n_d_e_x(other)) │ │ │ │ │ +212 { │ │ │ │ │ +213 if (next_) │ │ │ │ │ +214 next_-=other; │ │ │ │ │ +215 else │ │ │ │ │ +216 { │ │ │ │ │ +217 next_ = new _T_h_i_s(other); │ │ │ │ │ +218 } │ │ │ │ │ +219 } │ │ │ │ │ +220 else │ │ │ │ │ +221 factor_ -= other.factor_; │ │ │ │ │ +222 return *this; │ │ │ │ │ +223 } │ │ │ │ │ +224 │ │ │ │ │ +225 template │ │ │ │ │ +_2_2_6 _T_h_i_s _o_p_e_r_a_t_o_r_*_ ( const F &f ) const │ │ │ │ │ +227 { │ │ │ │ │ +228 _T_h_i_s _z = *this; │ │ │ │ │ +229 return (_z *= f); │ │ │ │ │ +230 } │ │ │ │ │ +231 template │ │ │ │ │ +_2_3_2 _T_h_i_s _o_p_e_r_a_t_o_r_/_ ( const F &f ) const │ │ │ │ │ +233 { │ │ │ │ │ +234 _T_h_i_s _z = *this; │ │ │ │ │ +235 return (_z /= f); │ │ │ │ │ +236 } │ │ │ │ │ +237 │ │ │ │ │ +_2_3_8 _T_h_i_s _o_p_e_r_a_t_o_r_*_ ( const _T_h_i_s &other ) const │ │ │ │ │ +239 { │ │ │ │ │ +240 _T_h_i_s _z = *this; │ │ │ │ │ +241 return (_z *= other); │ │ │ │ │ +242 } │ │ │ │ │ +_2_4_3 _T_h_i_s _o_p_e_r_a_t_o_r_/_ ( const _T_h_i_s &other ) const │ │ │ │ │ +244 { │ │ │ │ │ +245 _T_h_i_s _z = *this; │ │ │ │ │ +246 return (_z /= other); │ │ │ │ │ +247 } │ │ │ │ │ +248 │ │ │ │ │ +_2_4_9 _T_h_i_s _o_p_e_r_a_t_o_r_+_ ( const _T_h_i_s &other ) const │ │ │ │ │ +250 { │ │ │ │ │ +251 _T_h_i_s _z = *this; │ │ │ │ │ +252 return (_z += other); │ │ │ │ │ +253 } │ │ │ │ │ +_2_5_4 _T_h_i_s _o_p_e_r_a_t_o_r_-_ ( const _T_h_i_s &other ) const │ │ │ │ │ +255 { │ │ │ │ │ +256 _T_h_i_s _z = *this; │ │ │ │ │ +257 return (_z -= other); │ │ │ │ │ +258 } │ │ │ │ │ +259 │ │ │ │ │ +_2_6_0 void _s_e_t ( int d, int power = 1 ) │ │ │ │ │ +261 { │ │ │ │ │ +262 vecZ_[ d ] = power; │ │ │ │ │ +263 } │ │ │ │ │ +264 │ │ │ │ │ +_2_6_5 int _a_b_s_Z () const │ │ │ │ │ +266 { │ │ │ │ │ +267 int ret = 0; │ │ │ │ │ +268 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ +269 ret += std::abs( vecZ_[ i ] ); │ │ │ │ │ +270 return ret; │ │ │ │ │ +271 } │ │ │ │ │ +272 │ │ │ │ │ +_2_7_3 int _a_b_s_O_M_Z() const │ │ │ │ │ +274 { │ │ │ │ │ +275 int ret = 0; │ │ │ │ │ +276 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ +277 ret += std::abs( vecOMZ_[ i ] ); │ │ │ │ │ +278 return ret; │ │ │ │ │ +279 } │ │ │ │ │ +280 │ │ │ │ │ +_2_8_1 bool _s_a_m_e_M_u_l_t_i_I_n_d_e_x(const _T_h_i_s &ind) │ │ │ │ │ +282 { │ │ │ │ │ +283 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ +284 { │ │ │ │ │ +285 if ( vecZ_[i] != ind.vecZ_[i] || │ │ │ │ │ +286 vecOMZ_[i] != vecOMZ_[i] ) │ │ │ │ │ +287 return false; │ │ │ │ │ +288 } │ │ │ │ │ +289 return true; │ │ │ │ │ +290 } │ │ │ │ │ +291 │ │ │ │ │ +292 private: │ │ │ │ │ +293 void remove() │ │ │ │ │ +294 { │ │ │ │ │ +295 if (next_) │ │ │ │ │ +296 { │ │ │ │ │ +297 next_->remove(); │ │ │ │ │ +298 delete next_; │ │ │ │ │ +299 next_ = 0; │ │ │ │ │ +300 } │ │ │ │ │ +301 } │ │ │ │ │ +302 │ │ │ │ │ +303 typedef Dune::FieldVector< int, dimension > Vector; │ │ │ │ │ +304 │ │ │ │ │ +305 Vector vecZ_; │ │ │ │ │ +306 Vector vecOMZ_; │ │ │ │ │ +307 Field factor_; │ │ │ │ │ +308 │ │ │ │ │ +309 This *next_; │ │ │ │ │ +310 }; │ │ │ │ │ +311 │ │ │ │ │ +312 │ │ │ │ │ +313 template< int dim,class Field > │ │ │ │ │ +_3_1_4 struct FieldTraits<_M_u_l_t_i_I_n_d_e_x> │ │ │ │ │ +315 { │ │ │ │ │ +_3_1_6 using _f_i_e_l_d___t_y_p_e = Field; │ │ │ │ │ +_3_1_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ +318 }; │ │ │ │ │ +319 │ │ │ │ │ +320 template │ │ │ │ │ +_3_2_1 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _o_p_e_r_a_t_o_r_*_ ( const F &f, │ │ │ │ │ +322 const _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> &m) │ │ │ │ │ +323 { │ │ │ │ │ +324 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> z = m; │ │ │ │ │ +325 return (z *= f); │ │ │ │ │ +326 } │ │ │ │ │ +327 template │ │ │ │ │ +_3_2_8 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _o_p_e_r_a_t_o_r_/_ ( const F &f, │ │ │ │ │ +329 const _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> &m) │ │ │ │ │ +330 { │ │ │ │ │ +331 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> z = m; │ │ │ │ │ +332 return (z /= f); │ │ │ │ │ +333 } │ │ │ │ │ +334 │ │ │ │ │ +335 template │ │ │ │ │ +_3_3_6 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out,const std:: │ │ │ │ │ +vector<_M_u_l_t_i_I_n_d_e_x_<_d_,_F_> >& y) { │ │ │ │ │ +337 for (unsigned int r=0; r │ │ │ │ │ +_3_6_5 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out, │ │ │ │ │ +366 const std::vector,dimR1,dimR2> >& y) { │ │ │ │ │ +367 out << "\\begin{eqnarray*}" << std::endl; │ │ │ │ │ +368 for (unsigned int k=0; k │ │ │ │ │ +_3_8_5 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out,const _M_u_l_t_i_I_n_d_e_x_<_d_,_F_>& val) │ │ │ │ │ +386 { │ │ │ │ │ +387 bool first = true; │ │ │ │ │ +388 const _M_u_l_t_i_I_n_d_e_x_<_d_,_F_> *m = &val; │ │ │ │ │ +389 do { │ │ │ │ │ +390 if (m->_a_b_s_Z()==0 && std::abs(m->_f_a_c_t_o_r())<1e-10) │ │ │ │ │ +391 { │ │ │ │ │ +392 if (!m->next_ || !first) │ │ │ │ │ +393 { │ │ │ │ │ +394 out << "0"; │ │ │ │ │ +395 break; │ │ │ │ │ +396 } │ │ │ │ │ +397 else { │ │ │ │ │ +398 m = m->next_; │ │ │ │ │ +399 continue; │ │ │ │ │ +400 } │ │ │ │ │ +401 } │ │ │ │ │ +402 if (m->_f_a_c_t_o_r()>0 && !first) │ │ │ │ │ +403 out << " + "; │ │ │ │ │ +404 else if (m->_f_a_c_t_o_r()<0) │ │ │ │ │ +405 if (!first) │ │ │ │ │ +406 out << " - "; │ │ │ │ │ +407 else │ │ │ │ │ +408 out << "- "; │ │ │ │ │ +409 else │ │ │ │ │ +410 out << " "; │ │ │ │ │ +411 first = false; │ │ │ │ │ +412 F f = std::abs(m->_f_a_c_t_o_r()); │ │ │ │ │ +413 if (m->_a_b_s_Z()==0) │ │ │ │ │ +414 out << f; │ │ │ │ │ +415 else { │ │ │ │ │ +416 if ( std::abs(f)<1e-10) │ │ │ │ │ +417 out << 0; │ │ │ │ │ +418 else │ │ │ │ │ +419 { │ │ │ │ │ +420 F f_1(f); │ │ │ │ │ +421 f_1 -= 1.; // better Unity(); │ │ │ │ │ +422 if ( std::abs(f_1)>1e-10) │ │ │ │ │ +423 out << f; │ │ │ │ │ +424 int absVal = 0; │ │ │ │ │ +425 for (int i=0; ivecZ_[i]==0) │ │ │ │ │ +427 continue; │ │ │ │ │ +428 else if (m->vecZ_[i]==1) │ │ │ │ │ +429 out << char('a'+i); │ │ │ │ │ +430 else if (m->vecZ_[i]>0) │ │ │ │ │ +431 out << char('a'+i) << "^" << m->vecZ_[i] << ""; │ │ │ │ │ +432 else if (m->vecZ_[i]<0) │ │ │ │ │ +433 out << char('a'+i) << "^" << m->vecZ_[i] << ""; │ │ │ │ │ +434 absVal += m->vecZ_[i]; │ │ │ │ │ +435 if (absValabsZ()) out << ""; │ │ │ │ │ +436 } │ │ │ │ │ +437 } │ │ │ │ │ +438 } │ │ │ │ │ +439 /* │ │ │ │ │ +440 if (mi.absOMZ()>0) { │ │ │ │ │ +441 for (int i=0;i<=mi.absZ();++i) { │ │ │ │ │ +442 if (mi.vecOMZ_[i]==0) │ │ │ │ │ +443 continue; │ │ │ │ │ +444 else if (mi.vecOMZ_[i]==1) │ │ │ │ │ +445 out << (1-char('a'+i)); │ │ │ │ │ +446 else if (mi.vecOMZ_[i]>0) │ │ │ │ │ +447 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i]; │ │ │ │ │ +448 else if (mi.vecOMZ_[i]<0) │ │ │ │ │ +449 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i]; │ │ │ │ │ +450 if (i==mi.absZ()+1) out << "*"; │ │ │ │ │ +451 } │ │ │ │ │ +452 } │ │ │ │ │ +453 */ │ │ │ │ │ +454 m = m->next_; │ │ │ │ │ +455 } while (m); │ │ │ │ │ +456 return out; │ │ │ │ │ +457 } │ │ │ │ │ +458 │ │ │ │ │ +459 template< int dim, class F> │ │ │ │ │ +_4_6_0 struct _U_n_i_t_y< _M_u_l_t_i_I_n_d_e_x< dim, F > > │ │ │ │ │ +461 { │ │ │ │ │ +_4_6_2 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _> _F_i_e_l_d; │ │ │ │ │ +463 │ │ │ │ │ +_4_6_4 operator _F_i_e_l_d () const │ │ │ │ │ +465 { │ │ │ │ │ +466 return _F_i_e_l_d(); │ │ │ │ │ +467 } │ │ │ │ │ +468 │ │ │ │ │ +_4_6_9 _F_i_e_l_d _o_p_e_r_a_t_o_r_-_ ( const _F_i_e_l_d &other ) const │ │ │ │ │ +470 { │ │ │ │ │ +471 return _F_i_e_l_d( 1, other ); │ │ │ │ │ +472 } │ │ │ │ │ +473 │ │ │ │ │ +_4_7_4 _F_i_e_l_d _o_p_e_r_a_t_o_r_/_ ( const _F_i_e_l_d &other ) const │ │ │ │ │ +475 { │ │ │ │ │ +476 return _F_i_e_l_d() / other; │ │ │ │ │ +477 } │ │ │ │ │ +478 }; │ │ │ │ │ +479 │ │ │ │ │ +480 │ │ │ │ │ +481 │ │ │ │ │ +482 template< int dim, class F > │ │ │ │ │ +_4_8_3 struct _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim,F > > │ │ │ │ │ +484 { │ │ │ │ │ +_4_8_5 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_ _> _F_i_e_l_d; │ │ │ │ │ +486 │ │ │ │ │ +487 // zero does not actually exist │ │ │ │ │ +_4_8_8 operator _F_i_e_l_d () │ │ │ │ │ +489 { │ │ │ │ │ +490 return _F_i_e_l_d(0); │ │ │ │ │ +491 } │ │ │ │ │ +492 }; │ │ │ │ │ +493 │ │ │ │ │ +494 template< int dim, class Field > │ │ │ │ │ +_4_9_5 bool _o_p_e_r_a_t_o_r_<_ ( const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_i_e_l_d_ _> > &, const _M_u_l_t_i_I_n_d_e_x_< │ │ │ │ │ +_d_i_m_,_F_i_e_l_d_ _> & ) │ │ │ │ │ +496 { │ │ │ │ │ +497 return true; │ │ │ │ │ +498 } │ │ │ │ │ +499 │ │ │ │ │ +500 template< int dim, class Field > │ │ │ │ │ +_5_0_1 bool _o_p_e_r_a_t_o_r_<_ ( const _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> &f, const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x_< │ │ │ │ │ +_d_i_m_,_F_i_e_l_d_ _> > & ) │ │ │ │ │ +502 { │ │ │ │ │ +503 return true; │ │ │ │ │ +504 } │ │ │ │ │ +505 │ │ │ │ │ +506} │ │ │ │ │ +507 │ │ │ │ │ +508#endif // #ifndef DUNE_MULTIINDEX_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2 │ │ │ │ │ -_>_,_ _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_ _> │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2 │ │ │ │ │ -_>_,_ _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, │ │ │ │ │ -LocalInterpolation > Traits │ │ │ │ │ -Export LocalFiniteElementTraits. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:269 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:374 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_t_y_p_e │ │ │ │ │ -constexpr GeometryType type() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:382 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Provide access to LocalBasis implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:350 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Provide access to LocalCoefficients implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:358 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Provide access to LocalInterpolation implementation of this LocalFiniteElement. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariant.hh:366 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:19 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -typename LFEVariant::Traits Traits │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -PQ22DLocalFiniteElement(const GeometryType >, const std::vector< unsigned int │ │ │ │ │ -> vertexmap) │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -PQ22DLocalFiniteElement(const GeometryType >) │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn pq22d.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ +Field operator-(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ +bool operator<(const Zero< Field > &, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ +Field operator/(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ +std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat) │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ +Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ +A class representing the unit of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ │ +This operator+(const This &other) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:249 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_a_b_s_O_M_Z │ │ │ │ │ +int absOMZ() const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:273 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_~_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +~MultiIndex() │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_-_= │ │ │ │ │ +This & operator-=(const This &other) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:208 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +MultiIndex(int, const This &other) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_a_b_s_Z │ │ │ │ │ +int absZ() const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:265 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_m_z │ │ │ │ │ +int omz(int i) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_+_= │ │ │ │ │ +This & operator+=(const This &other) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:185 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ +bool operator==(const This &other) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:141 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_s_a_m_e_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +bool sameMultiIndex(const This &ind) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:281 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const This &other) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +MultiIndex(const This &other) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ │ +This & operator*=(const F &f) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:148 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_f_a_c_t_o_r │ │ │ │ │ +const Field & factor() const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:100 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ +This operator/(const F &f) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:232 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +MultiIndex(const F &f) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_/_= │ │ │ │ │ +This & operator/=(const F &f) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:156 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ +This operator*(const F &f) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:226 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_s_e_t │ │ │ │ │ +void set(int d, int power=1) │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:260 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ +This operator-(const This &other) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:254 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ +int z(int i) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +MultiIndex() │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +Field field_type │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:316 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ +typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:317 │ │ │ │ │ +_D_u_n_e_:_:_U_n_i_t_y_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _>_:_:_F_i_e_l_d │ │ │ │ │ +MultiIndex< dim, F > Field │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:462 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _>_:_:_F_i_e_l_d │ │ │ │ │ +MultiIndex< dim, F > Field │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:485 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: equidistantpoints.hh File Reference │ │ │ │ +dune-localfunctions: l2interpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,52 +65,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
equidistantpoints.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
l2interpolation.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <algorithm>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/emptypoints.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +
#include <dune/common/concept.hh>
│ │ │ │ +#include <dune/common/dynmatrix.hh>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::EquidistantPointSet< F, dim >
class  Dune::LocalL2InterpolationBase< B, Q >
 
struct  Dune::LocalL2Interpolation< B, Q, true >
 
struct  Dune::LocalL2Interpolation< B, Q, false >
 
struct  Dune::LocalL2InterpolationFactory< BasisFactory, onb >
 A factory class for the local l2 interpolations taking a basis factory. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

std::size_t Dune::numLagrangePoints (const GeometryType &gt, std::size_t order)
 
template<class ct , unsigned int cdim>
static unsigned int Dune::equidistantLagrangePoints (const GeometryType &gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,34 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -equidistantpoints.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_m_p_t_y_p_o_i_n_t_s_._h_h> │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +l2interpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_ _B_,_ _Q_ _> │ │ │ │ │   │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _t_r_u_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _> │ │ │ │ │   │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ - std::size_t  _D_u_n_e_:_:_n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s (const GeometryType >, std:: │ │ │ │ │ - size_t order) │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _B_a_s_i_s_F_a_c_t_o_r_y_,_ _o_n_b_ _> │ │ │ │ │ +  A factory class for the local l2 interpolations taking a basis │ │ │ │ │ + factory. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -template │ │ │ │ │ -static unsigned int  _D_u_n_e_:_:_e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s (const GeometryType >, │ │ │ │ │ - unsigned int codim, std::size_t order, unsigned int │ │ │ │ │ - *count, _L_a_g_r_a_n_g_e_P_o_i_n_t< ct, cdim > *points) │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00350_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: equidistantpoints.hh Source File │ │ │ │ +dune-localfunctions: l2interpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,259 +70,242 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
equidistantpoints.hh
│ │ │ │ +
l2interpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ -Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ -
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
3#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ -
4#define DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ -
5
│ │ │ │ -
6#include <cstddef>
│ │ │ │ +Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │ +
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │ +
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ +
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ +
5#ifndef DUNE_L2INTERPOLATION_HH
│ │ │ │ +
6#define DUNE_L2INTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <algorithm>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <dune/common/concept.hh>
│ │ │ │ +
9#include <dune/common/dynmatrix.hh>
│ │ │ │
10
│ │ │ │ -
11#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
12#include <dune/geometry/type.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
19
│ │ │ │ -
20 // numLagrangePoints
│ │ │ │ -
21 // -----------------
│ │ │ │ -
22
│ │ │ │ -
│ │ │ │ -
23 inline std::size_t numLagrangePoints ( const GeometryType& gt, std::size_t order )
│ │ │ │ -
24 {
│ │ │ │ -
25 const int dim = gt.dim();
│ │ │ │ -
26 if( dim > 0 )
│ │ │ │ -
27 {
│ │ │ │ -
28 const GeometryType baseGeometryType = Impl::getBase( gt );
│ │ │ │ -
29 if( gt.isConical() )
│ │ │ │ -
30 {
│ │ │ │ -
31 std::size_t size = 0;
│ │ │ │ -
32 for( unsigned int o = 0; o <= order; ++o )
│ │ │ │ -
33 size += numLagrangePoints( baseGeometryType, o );
│ │ │ │ -
34 return size;
│ │ │ │ -
35 }
│ │ │ │ -
36 else
│ │ │ │ -
37 return numLagrangePoints( baseGeometryType, order ) * (order+1);
│ │ │ │ -
38 }
│ │ │ │ -
39 else
│ │ │ │ -
40 return 1;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ +
11#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
32 template< class B, class Q, bool onb >
│ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
35 template< class B, class Q >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {
│ │ │ │ + │ │ │ │ +
39
│ │ │ │ +
40 public:
│ │ │ │ +
41 typedef B Basis;
│ │ │ │ +
42 typedef Q Quadrature;
│ │ │ │
43
│ │ │ │ -
44
│ │ │ │ -
45 // equidistantLagrangePoints
│ │ │ │ -
46 // -------------------------
│ │ │ │ -
47
│ │ │ │ -
48 template< class ct, unsigned int cdim >
│ │ │ │ -
│ │ │ │ -
49 inline static unsigned int equidistantLagrangePoints ( const GeometryType& gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points )
│ │ │ │ -
50 {
│ │ │ │ -
51 const unsigned int dim = gt.dim();
│ │ │ │ -
52 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );
│ │ │ │ -
53
│ │ │ │ -
54 if( dim > 0 )
│ │ │ │ -
55 {
│ │ │ │ -
56 const GeometryType baseGeometryType = Impl::getBase( gt );
│ │ │ │ -
57 const unsigned int numBaseN = (codim < dim ? Geo::Impl::size( baseGeometryType.id(), baseGeometryType.dim(), codim ) : 0);
│ │ │ │ -
58 const unsigned int numBaseM = (codim > 0 ? Geo::Impl::size( baseGeometryType.id(), baseGeometryType.dim(), codim-1 ) : 0);
│ │ │ │ +
44 static const unsigned int dimension = Basis::dimension;
│ │ │ │ +
45
│ │ │ │ +
47 template< class Function, class DofField>
│ │ │ │ +
│ │ │ │ +
48 void interpolate ( const Function &function, std::vector< DofField > &coefficients ) const
│ │ │ │ +
49 {
│ │ │ │ +
50 typedef FieldVector< DofField, Basis::dimRange > RangeVector;
│ │ │ │ +
51
│ │ │ │ +
52 const unsigned int size = basis().size();
│ │ │ │ +
53 static std::vector< RangeVector > basisValues( size );
│ │ │ │ +
54
│ │ │ │ +
55 coefficients.resize( size );
│ │ │ │ +
56 basisValues.resize( size );
│ │ │ │ +
57 for( unsigned int i = 0; i < size; ++i )
│ │ │ │ +
58 coefficients[ i ] = Zero< DofField >();
│ │ │ │
59
│ │ │ │ -
60 if( gt.isPrismatic() )
│ │ │ │ +
60 for (auto&& qp : quadrature())
│ │ │ │
61 {
│ │ │ │ -
62 unsigned int size = 0;
│ │ │ │ -
63 if( codim < dim )
│ │ │ │ -
64 {
│ │ │ │ -
65 for( unsigned int i = 1; i < order; ++i )
│ │ │ │ -
66 {
│ │ │ │ -
67 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim, order, count, points );
│ │ │ │ -
68 for( unsigned int j = 0; j < n; ++j )
│ │ │ │ -
69 {
│ │ │ │ -
70 LocalKey &key = points->localKey_;
│ │ │ │ -
71 key = LocalKey( key.subEntity(), codim, key.index() );
│ │ │ │ -
72 points->point_[ dim-1 ] = ct( i ) / ct( order );
│ │ │ │ -
73 ++points;
│ │ │ │ -
74 }
│ │ │ │ -
75 size += n;
│ │ │ │ -
76 }
│ │ │ │ -
77 }
│ │ │ │ -
78
│ │ │ │ -
79 if( codim > 0 )
│ │ │ │ -
80 {
│ │ │ │ -
81 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim-1, order, count+numBaseN, points );
│ │ │ │ -
82 for( unsigned int j = 0; j < n; ++j )
│ │ │ │ -
83 {
│ │ │ │ -
84 LocalKey &key = points[ j ].localKey_;
│ │ │ │ -
85 key = LocalKey( key.subEntity() + numBaseN, codim, key.index() );
│ │ │ │ +
62 basis().evaluate( qp.position(), basisValues );
│ │ │ │ +
63 auto val = function( qp.position() );
│ │ │ │ +
64 RangeVector factor = field_cast< DofField >( val );
│ │ │ │ +
65 factor *= field_cast< DofField >( qp.weight() );
│ │ │ │ +
66 for( unsigned int i = 0; i < size; ++i )
│ │ │ │ +
67 coefficients[ i ] += factor * basisValues[ i ];
│ │ │ │ +
68 }
│ │ │ │ +
69 }
│ │ │ │ +
│ │ │ │ +
70
│ │ │ │ +
│ │ │ │ +
71 const Basis &basis () const
│ │ │ │ +
72 {
│ │ │ │ +
73 return basis_;
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
│ │ │ │ +
76 const Quadrature &quadrature () const
│ │ │ │ +
77 {
│ │ │ │ +
78 return quadrature_;
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
81 protected:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
83 : basis_( basis ),
│ │ │ │ + │ │ │ │ +
85 {}
│ │ │ │ +
│ │ │ │
86
│ │ │ │ -
87 points[ j + n ].point_ = points[ j ].point_;
│ │ │ │ -
88 points[ j + n ].point_[ dim-1 ] = ct( 1 );
│ │ │ │ -
89 points[ j + n ].localKey_ = LocalKey( key.subEntity() + numBaseM, codim, key.index() );
│ │ │ │ -
90 ++count[ key.subEntity() + numBaseM ];
│ │ │ │ -
91 }
│ │ │ │ -
92 size += 2*n;
│ │ │ │ -
93 }
│ │ │ │ -
94
│ │ │ │ -
95 return size;
│ │ │ │ -
96 }
│ │ │ │ -
97 else
│ │ │ │ -
98 {
│ │ │ │ -
99 unsigned int size = (codim > 0 ? equidistantLagrangePoints( baseGeometryType, codim-1, order, count, points ) : 0);
│ │ │ │ -
100 LagrangePoint< ct, cdim > *const end = points + size;
│ │ │ │ -
101 for( ; points != end; ++points )
│ │ │ │ -
102 points->localKey_ = LocalKey( points->localKey_.subEntity(), codim, points->localKey_.index() );
│ │ │ │ -
103
│ │ │ │ -
104 if( codim < dim )
│ │ │ │ -
105 {
│ │ │ │ -
106 for( unsigned int i = order-1; i > 0; --i )
│ │ │ │ -
107 {
│ │ │ │ -
108 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim, i, count+numBaseM, points );
│ │ │ │ -
109 LagrangePoint< ct, cdim > *const end = points + n;
│ │ │ │ -
110 for( ; points != end; ++points )
│ │ │ │ -
111 {
│ │ │ │ -
112 points->localKey_ = LocalKey( points->localKey_.subEntity()+numBaseM, codim, points->localKey_.index() );
│ │ │ │ -
113 for( unsigned int j = 0; j < dim-1; ++j )
│ │ │ │ -
114 points->point_[ j ] *= ct( i ) / ct( order );
│ │ │ │ -
115 points->point_[ dim-1 ] = ct( order - i ) / ct( order );
│ │ │ │ -
116 }
│ │ │ │ -
117 size += n;
│ │ │ │ -
118 }
│ │ │ │ -
119 }
│ │ │ │ -
120 else
│ │ │ │ -
121 {
│ │ │ │ -
122 points->localKey_ = LocalKey( numBaseM, dim, count[ numBaseM ]++ );
│ │ │ │ -
123 points->point_ = 0;
│ │ │ │ -
124 points->point_[ dim-1 ] = ct( 1 );
│ │ │ │ -
125 ++size;
│ │ │ │ +
87 const Basis &basis_;
│ │ │ │ + │ │ │ │ +
89 };
│ │ │ │ +
│ │ │ │ +
90
│ │ │ │ +
91 template< class B, class Q >
│ │ │ │ +
│ │ │ │ +
92 struct LocalL2Interpolation<B,Q,true>
│ │ │ │ +
93 : public LocalL2InterpolationBase<B,Q>
│ │ │ │ +
94 {
│ │ │ │ + │ │ │ │ +
96 template< class BasisFactory, bool onb >
│ │ │ │ + │ │ │ │ +
98 using typename Base::Basis;
│ │ │ │ +
99 using typename Base::Quadrature;
│ │ │ │ +
100 private:
│ │ │ │ +
101 LocalL2Interpolation ( const typename Base::Basis &basis, const typename Base::Quadrature &quadrature )
│ │ │ │ +
102 : Base(basis,quadrature)
│ │ │ │ +
103 {}
│ │ │ │ +
104 };
│ │ │ │ +
│ │ │ │ +
105 template< class B, class Q >
│ │ │ │ +
│ │ │ │ +
106 struct LocalL2Interpolation<B,Q,false>
│ │ │ │ +
107 : public LocalL2InterpolationBase<B,Q>
│ │ │ │ +
108 {
│ │ │ │ + │ │ │ │ +
110 template< class BasisFactory, bool onb >
│ │ │ │ + │ │ │ │ +
112 using typename Base::Basis;
│ │ │ │ +
113 using typename Base::Quadrature;
│ │ │ │ +
114 template< class Function, class DofField >
│ │ │ │ +
│ │ │ │ +
115 void interpolate ( const Function &function, std::vector< DofField > &coefficients ) const
│ │ │ │ +
116 {
│ │ │ │ +
117 const unsigned size = Base::basis().size();
│ │ │ │ +
118 Base::interpolate(function,val_);
│ │ │ │ +
119 coefficients.resize( size );
│ │ │ │ +
120 for (unsigned int i=0; i<size; ++i)
│ │ │ │ +
121 {
│ │ │ │ +
122 coefficients[i] = 0;
│ │ │ │ +
123 for (unsigned int j=0; j<size; ++j)
│ │ │ │ +
124 {
│ │ │ │ +
125 coefficients[i] += field_cast<DofField>(massMatrix_[i][j]*val_[j]);
│ │ │ │
126 }
│ │ │ │ -
127
│ │ │ │ -
128 return size;
│ │ │ │ -
129 }
│ │ │ │ -
130 }
│ │ │ │ -
131 else
│ │ │ │ -
132 {
│ │ │ │ -
133 points->localKey_ = LocalKey( 0, 0, count[ 0 ]++ );
│ │ │ │ -
134 points->point_ = 0;
│ │ │ │ -
135 return 1;
│ │ │ │ -
136 }
│ │ │ │ -
137 }
│ │ │ │ +
127 }
│ │ │ │ +
128 }
│ │ │ │
│ │ │ │ -
138
│ │ │ │ +
129 private:
│ │ │ │ +
130 LocalL2Interpolation ( const typename Base::Basis &basis, const typename Base::Quadrature &quadrature )
│ │ │ │ +
131 : Base(basis,quadrature),
│ │ │ │ +
132 val_(basis.size()),
│ │ │ │ +
133 massMatrix_(basis.size(),basis.size(),Field(0))
│ │ │ │ +
134 {
│ │ │ │ +
135 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector;
│ │ │ │ +
136 typedef typename Base::Quadrature::iterator Iterator;
│ │ │ │ +
137 const unsigned size = basis.size();
│ │ │ │ +
138 std::vector< RangeVector > basisValues( size );
│ │ │ │
139
│ │ │ │ -
140
│ │ │ │ -
141 // EquidistantPointSet
│ │ │ │ -
142 // -------------------
│ │ │ │ -
143
│ │ │ │ -
144 template< class F, unsigned int dim >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
146 : public EmptyPointSet< F, dim >
│ │ │ │ -
147 {
│ │ │ │ - │ │ │ │ -
149
│ │ │ │ -
150 public:
│ │ │ │ -
151 static const unsigned int dimension = dim;
│ │ │ │ -
152
│ │ │ │ -
153 using Base::order;
│ │ │ │ -
154
│ │ │ │ -
155 EquidistantPointSet ( std::size_t order ) : Base( order ) {}
│ │ │ │ +
140 const Iterator end = Base::quadrature().end();
│ │ │ │ +
141 for( Iterator it = Base::quadrature().begin(); it != end; ++it )
│ │ │ │ +
142 {
│ │ │ │ +
143 Base::basis().evaluate( it->position(), basisValues );
│ │ │ │ +
144 for (unsigned int i=0; i<size; ++i)
│ │ │ │ +
145 for (unsigned int j=0; j<size; ++j)
│ │ │ │ +
146 massMatrix_[i][j] += (basisValues[i]*basisValues[j])*it->weight();
│ │ │ │ +
147 }
│ │ │ │ +
148 massMatrix_.invert();
│ │ │ │ +
149 }
│ │ │ │ +
150 typedef typename Base::Basis::StorageField Field;
│ │ │ │ +
151 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector;
│ │ │ │ +
152 typedef DynamicMatrix<Field> MassMatrix;
│ │ │ │ +
153 mutable std::vector<Field> val_;
│ │ │ │ +
154 MassMatrix massMatrix_;
│ │ │ │ +
155 };
│ │ │ │ +
│ │ │ │
156
│ │ │ │ -
│ │ │ │ -
157 void build ( GeometryType gt )
│ │ │ │ -
158 {
│ │ │ │ -
159 assert( gt.dim() == dimension );
│ │ │ │ -
160 points_.resize( numLagrangePoints( gt, order() ) );
│ │ │ │ -
161
│ │ │ │ -
162 typename Base::LagrangePoint *p = points_.data();
│ │ │ │ -
163 std::vector< unsigned int > count;
│ │ │ │ -
164 for( unsigned int mydim = 0; mydim <= dimension; ++mydim )
│ │ │ │ -
165 {
│ │ │ │ -
166 count.resize( Geo::Impl::size( gt.id(), dimension, dimension-mydim ) );
│ │ │ │ -
167 std::fill( count.begin(), count.end(), 0u );
│ │ │ │ -
168 p += equidistantLagrangePoints( gt, dimension-mydim, order(), count.data(), p );
│ │ │ │ -
169 }
│ │ │ │ -
170 const auto &refElement = referenceElement<F,dimension>(gt);
│ │ │ │ -
171 F weight = refElement.volume()/F(double(points_.size()));
│ │ │ │ -
172 for (auto &p : points_)
│ │ │ │ -
173 p.weight_ = weight;
│ │ │ │ -
174 }
│ │ │ │ -
│ │ │ │ -
175
│ │ │ │ -
176 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
177 bool build ()
│ │ │ │ -
178 {
│ │ │ │ -
179 build( GeometryType( geometryId ) );
│ │ │ │ -
180 return true;
│ │ │ │ -
181 }
│ │ │ │ -
│ │ │ │ -
182
│ │ │ │ -
│ │ │ │ -
183 bool buildCube ()
│ │ │ │ -
184 {
│ │ │ │ -
185 return build< GeometryTypes::cube(dim) > ();
│ │ │ │ +
161 template< class BasisFactory, bool onb >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
163 {
│ │ │ │ +
164 static const unsigned int dimension = BasisFactory::dimension;
│ │ │ │ +
165 typedef typename BasisFactory::Key Key;
│ │ │ │ +
166 typedef typename BasisFactory::Object Basis;
│ │ │ │ +
167 typedef double Field;
│ │ │ │ +
168 typedef QuadratureRule<Field,dimension> Quadrature;
│ │ │ │ +
169 typedef QuadratureRules<Field,dimension> QuadratureProvider;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
172
│ │ │ │ +
173 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
174 static Object *create ( const Key &key )
│ │ │ │ +
175 {
│ │ │ │ +
176 constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ +
177 const Basis *basis = BasisFactory::template create< geometry >( key );
│ │ │ │ +
178 const Quadrature & quadrature = QuadratureProvider::rule(geometry, 2*basis->order()+1);
│ │ │ │ +
179 return new Object( *basis, quadrature );
│ │ │ │ +
180 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
181 static void release ( Object *object )
│ │ │ │ +
182 {
│ │ │ │ +
183 const Basis &basis = object->basis();
│ │ │ │ +
184 BasisFactory::release( &basis );
│ │ │ │ +
185 delete object;
│ │ │ │
186 }
│ │ │ │
│ │ │ │ -
187
│ │ │ │ -
188 static bool supports ( GeometryType, std::size_t /*order*/ ) { return true; }
│ │ │ │ -
189 template< GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
190 static bool supports ( std::size_t order ) {
│ │ │ │ -
191 return supports( GeometryType( geometryId ), order );
│ │ │ │ -
192 }
│ │ │ │ -
│ │ │ │ -
193
│ │ │ │ -
194 private:
│ │ │ │ -
195 using Base::points_;
│ │ │ │ -
196 };
│ │ │ │ -
│ │ │ │ -
197
│ │ │ │ -
198} // namespace Dune
│ │ │ │ -
199
│ │ │ │ -
200#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
187 };
│ │ │ │ +
│ │ │ │ +
188
│ │ │ │ +
189}
│ │ │ │ +
190
│ │ │ │ +
191#endif // #ifndef DUNE_L2INTERPOLATION_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
std::size_t numLagrangePoints(const GeometryType &gt, std::size_t order)
Definition equidistantpoints.hh:23
│ │ │ │ -
static unsigned int equidistantLagrangePoints(const GeometryType &gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points)
Definition equidistantpoints.hh:49
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ -
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ -
Definition emptypoints.hh:18
│ │ │ │ -
Field weight_
Definition emptypoints.hh:48
│ │ │ │ -
Vector point_
Definition emptypoints.hh:46
│ │ │ │ -
LocalKey localKey_
Definition emptypoints.hh:47
│ │ │ │ -
Definition emptypoints.hh:56
│ │ │ │ -
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ -
std::vector< LagrangePoint > points_
Definition emptypoints.hh:107
│ │ │ │ -
Definition equidistantpoints.hh:147
│ │ │ │ -
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ -
bool build()
Definition equidistantpoints.hh:177
│ │ │ │ -
static bool supports(std::size_t order)
Definition equidistantpoints.hh:190
│ │ │ │ -
static const unsigned int dimension
Definition equidistantpoints.hh:151
│ │ │ │ -
static bool supports(GeometryType, std::size_t)
Definition equidistantpoints.hh:188
│ │ │ │ -
void build(GeometryType gt)
Definition equidistantpoints.hh:157
│ │ │ │ -
bool buildCube()
Definition equidistantpoints.hh:183
│ │ │ │ -
EquidistantPointSet(std::size_t order)
Definition equidistantpoints.hh:155
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
A local L2 interpolation taking a test basis and a quadrature rule.
Definition l2interpolation.hh:33
│ │ │ │ +
Definition l2interpolation.hh:37
│ │ │ │ +
LocalL2InterpolationBase(const Basis &basis, const Quadrature &quadrature)
Definition l2interpolation.hh:82
│ │ │ │ +
const Basis & basis() const
Definition l2interpolation.hh:71
│ │ │ │ +
const Quadrature & quadrature_
Definition l2interpolation.hh:88
│ │ │ │ +
void interpolate(const Function &function, std::vector< DofField > &coefficients) const
Interpolate a function that implements Range operator()(Domain)
Definition l2interpolation.hh:48
│ │ │ │ +
const Basis & basis_
Definition l2interpolation.hh:87
│ │ │ │ +
static const unsigned int dimension
Definition l2interpolation.hh:44
│ │ │ │ +
const Quadrature & quadrature() const
Definition l2interpolation.hh:76
│ │ │ │ +
Q Quadrature
Definition l2interpolation.hh:42
│ │ │ │ +
B Basis
Definition l2interpolation.hh:41
│ │ │ │ +
LocalL2InterpolationBase< B, Q > Base
Definition l2interpolation.hh:95
│ │ │ │ +
void interpolate(const Function &function, std::vector< DofField > &coefficients) const
Definition l2interpolation.hh:115
│ │ │ │ +
LocalL2InterpolationBase< B, Q > Base
Definition l2interpolation.hh:109
│ │ │ │ +
A factory class for the local l2 interpolations taking a basis factory.
Definition l2interpolation.hh:163
│ │ │ │ +
static const unsigned int dimension
Definition l2interpolation.hh:164
│ │ │ │ +
static void release(Object *object)
Definition l2interpolation.hh:181
│ │ │ │ +
BasisFactory::Object Basis
Definition l2interpolation.hh:166
│ │ │ │ +
double Field
Definition l2interpolation.hh:167
│ │ │ │ +
QuadratureRules< Field, dimension > QuadratureProvider
Definition l2interpolation.hh:169
│ │ │ │ +
QuadratureRule< Field, dimension > Quadrature
Definition l2interpolation.hh:168
│ │ │ │ +
static Object * create(const Key &key)
Definition l2interpolation.hh:174
│ │ │ │ +
BasisFactory::Key Key
Definition l2interpolation.hh:165
│ │ │ │ +
const LocalInterpolation Object
Definition l2interpolation.hh:171
│ │ │ │ +
LocalL2Interpolation< Basis, Quadrature, onb > LocalInterpolation
Definition l2interpolation.hh:170
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,294 +1,272 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -equidistantpoints.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +l2interpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file │ │ │ │ │ +1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ +2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ +3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ -2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -3#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ -4#define DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ -5 │ │ │ │ │ -6#include │ │ │ │ │ +4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ +5#ifndef DUNE_L2INTERPOLATION_HH │ │ │ │ │ +6#define DUNE_L2INTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_m_p_t_y_p_o_i_n_t_s_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -19 │ │ │ │ │ -20 // numLagrangePoints │ │ │ │ │ -21 // ----------------- │ │ │ │ │ -22 │ │ │ │ │ -_2_3 inline std::size_t _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s ( const GeometryType& gt, std::size_t │ │ │ │ │ -order ) │ │ │ │ │ -24 { │ │ │ │ │ -25 const int dim = gt.dim(); │ │ │ │ │ -26 if( dim > 0 ) │ │ │ │ │ -27 { │ │ │ │ │ -28 const GeometryType baseGeometryType = Impl::getBase( gt ); │ │ │ │ │ -29 if( gt.isConical() ) │ │ │ │ │ -30 { │ │ │ │ │ -31 std::size_t size = 0; │ │ │ │ │ -32 for( unsigned int o = 0; o <= order; ++o ) │ │ │ │ │ -33 size += _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, o ); │ │ │ │ │ -34 return size; │ │ │ │ │ -35 } │ │ │ │ │ -36 else │ │ │ │ │ -37 return _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, order ) * (order+1); │ │ │ │ │ -38 } │ │ │ │ │ -39 else │ │ │ │ │ -40 return 1; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +32 template< class B, class Q, bool onb > │ │ │ │ │ +_3_3 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +34 │ │ │ │ │ +35 template< class B, class Q > │ │ │ │ │ +_3_6 class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ +37 { │ │ │ │ │ +38 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_ _B_,_ _Q_ _> _T_h_i_s; │ │ │ │ │ +39 │ │ │ │ │ +40 public: │ │ │ │ │ +_4_1 typedef B _B_a_s_i_s; │ │ │ │ │ +_4_2 typedef Q _Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ 43 │ │ │ │ │ -44 │ │ │ │ │ -45 // equidistantLagrangePoints │ │ │ │ │ -46 // ------------------------- │ │ │ │ │ -47 │ │ │ │ │ -48 template< class ct, unsigned int cdim > │ │ │ │ │ -_4_9 inline static unsigned int _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s ( const GeometryType& │ │ │ │ │ -gt, unsigned int codim, std::size_t order, unsigned int *count, _L_a_g_r_a_n_g_e_P_o_i_n_t_< │ │ │ │ │ -_c_t_,_ _c_d_i_m_ _> *points ) │ │ │ │ │ -50 { │ │ │ │ │ -51 const unsigned int dim = gt.dim(); │ │ │ │ │ -52 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) ); │ │ │ │ │ -53 │ │ │ │ │ -54 if( dim > 0 ) │ │ │ │ │ -55 { │ │ │ │ │ -56 const GeometryType baseGeometryType = Impl::getBase( gt ); │ │ │ │ │ -57 const unsigned int numBaseN = (codim < dim ? Geo::Impl::size │ │ │ │ │ -( baseGeometryType.id(), baseGeometryType.dim(), codim ) : 0); │ │ │ │ │ -58 const unsigned int numBaseM = (codim > 0 ? Geo::Impl::size │ │ │ │ │ -( baseGeometryType.id(), baseGeometryType.dim(), codim-1 ) : 0); │ │ │ │ │ +_4_4 static const unsigned int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ +45 │ │ │ │ │ +47 template< class Function, class DofField> │ │ │ │ │ +_4_8 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, std::vector< DofField > │ │ │ │ │ +&coefficients ) const │ │ │ │ │ +49 { │ │ │ │ │ +50 typedef FieldVector< DofField, Basis::dimRange > RangeVector; │ │ │ │ │ +51 │ │ │ │ │ +52 const unsigned int size = _b_a_s_i_s().size(); │ │ │ │ │ +53 static std::vector< RangeVector > basisValues( size ); │ │ │ │ │ +54 │ │ │ │ │ +55 coefficients.resize( size ); │ │ │ │ │ +56 basisValues.resize( size ); │ │ │ │ │ +57 for( unsigned int i = 0; i < size; ++i ) │ │ │ │ │ +58 coefficients[ i ] = _Z_e_r_o_<_ _D_o_f_F_i_e_l_d_ _>(); │ │ │ │ │ 59 │ │ │ │ │ -60 if( gt.isPrismatic() ) │ │ │ │ │ +60 for (auto&& qp : _q_u_a_d_r_a_t_u_r_e()) │ │ │ │ │ 61 { │ │ │ │ │ -62 unsigned int size = 0; │ │ │ │ │ -63 if( codim < dim ) │ │ │ │ │ -64 { │ │ │ │ │ -65 for( unsigned int i = 1; i < order; ++i ) │ │ │ │ │ -66 { │ │ │ │ │ -67 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim, │ │ │ │ │ -order, count, points ); │ │ │ │ │ -68 for( unsigned int j = 0; j < n; ++j ) │ │ │ │ │ -69 { │ │ │ │ │ -70 _L_o_c_a_l_K_e_y &key = points->_l_o_c_a_l_K_e_y__; │ │ │ │ │ -71 key = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y(), codim, key._i_n_d_e_x() ); │ │ │ │ │ -72 points->_p_o_i_n_t__[ dim-1 ] = ct( i ) / ct( order ); │ │ │ │ │ -73 ++points; │ │ │ │ │ +62 _b_a_s_i_s().evaluate( qp.position(), basisValues ); │ │ │ │ │ +63 auto val = function( qp.position() ); │ │ │ │ │ +64 RangeVector factor = field_cast< DofField >( val ); │ │ │ │ │ +65 factor *= field_cast< DofField >( qp.weight() ); │ │ │ │ │ +66 for( unsigned int i = 0; i < size; ++i ) │ │ │ │ │ +67 coefficients[ i ] += factor * basisValues[ i ]; │ │ │ │ │ +68 } │ │ │ │ │ +69 } │ │ │ │ │ +70 │ │ │ │ │ +_7_1 const _B_a_s_i_s &_b_a_s_i_s () const │ │ │ │ │ +72 { │ │ │ │ │ +73 return _b_a_s_i_s__; │ │ │ │ │ 74 } │ │ │ │ │ -75 size += n; │ │ │ │ │ -76 } │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -79 if( codim > 0 ) │ │ │ │ │ -80 { │ │ │ │ │ -81 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim-1, │ │ │ │ │ -order, count+numBaseN, points ); │ │ │ │ │ -82 for( unsigned int j = 0; j < n; ++j ) │ │ │ │ │ -83 { │ │ │ │ │ -84 _L_o_c_a_l_K_e_y &key = points[ j ]._l_o_c_a_l_K_e_y__; │ │ │ │ │ -85 key = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y() + numBaseN, codim, key._i_n_d_e_x() ); │ │ │ │ │ +75 │ │ │ │ │ +_7_6 const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e () const │ │ │ │ │ +77 { │ │ │ │ │ +78 return _q_u_a_d_r_a_t_u_r_e__; │ │ │ │ │ +79 } │ │ │ │ │ +80 │ │ │ │ │ +81 protected: │ │ │ │ │ +_8_2 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e ( const _B_a_s_i_s &_b_a_s_i_s, const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e │ │ │ │ │ +) │ │ │ │ │ +83 : _b_a_s_i_s__( _b_a_s_i_s ), │ │ │ │ │ +84 _q_u_a_d_r_a_t_u_r_e__( _q_u_a_d_r_a_t_u_r_e ) │ │ │ │ │ +85 {} │ │ │ │ │ 86 │ │ │ │ │ -87 points[ j + n ]._p_o_i_n_t__ = points[ j ]._p_o_i_n_t__; │ │ │ │ │ -88 points[ j + n ]._p_o_i_n_t__[ dim-1 ] = ct( 1 ); │ │ │ │ │ -89 points[ j + n ]._l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y() + numBaseM, codim, │ │ │ │ │ -key._i_n_d_e_x() ); │ │ │ │ │ -90 ++count[ key._s_u_b_E_n_t_i_t_y() + numBaseM ]; │ │ │ │ │ -91 } │ │ │ │ │ -92 size += 2*n; │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -95 return size; │ │ │ │ │ -96 } │ │ │ │ │ -97 else │ │ │ │ │ -98 { │ │ │ │ │ -99 unsigned int size = (codim > 0 ? _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ -( baseGeometryType, codim-1, order, count, points ) : 0); │ │ │ │ │ -100 _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _c_t_,_ _c_d_i_m_ _> *const end = points + size; │ │ │ │ │ -101 for( ; points != end; ++points ) │ │ │ │ │ -102 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( points->_l_o_c_a_l_K_e_y__._s_u_b_E_n_t_i_t_y(), codim, points- │ │ │ │ │ ->_l_o_c_a_l_K_e_y__._i_n_d_e_x() ); │ │ │ │ │ -103 │ │ │ │ │ -104 if( codim < dim ) │ │ │ │ │ -105 { │ │ │ │ │ -106 for( unsigned int i = order-1; i > 0; --i ) │ │ │ │ │ -107 { │ │ │ │ │ -108 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim, │ │ │ │ │ -i, count+numBaseM, points ); │ │ │ │ │ -109 _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _c_t_,_ _c_d_i_m_ _> *const end = points + n; │ │ │ │ │ -110 for( ; points != end; ++points ) │ │ │ │ │ -111 { │ │ │ │ │ -112 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( points->_l_o_c_a_l_K_e_y__._s_u_b_E_n_t_i_t_y()+numBaseM, │ │ │ │ │ -codim, points->_l_o_c_a_l_K_e_y__._i_n_d_e_x() ); │ │ │ │ │ -113 for( unsigned int j = 0; j < dim-1; ++j ) │ │ │ │ │ -114 points->_p_o_i_n_t__[ j ] *= ct( i ) / ct( order ); │ │ │ │ │ -115 points->_p_o_i_n_t__[ dim-1 ] = ct( order - i ) / ct( order ); │ │ │ │ │ -116 } │ │ │ │ │ -117 size += n; │ │ │ │ │ -118 } │ │ │ │ │ -119 } │ │ │ │ │ -120 else │ │ │ │ │ +_8_7 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ +_8_8 const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e__; │ │ │ │ │ +89 }; │ │ │ │ │ +90 │ │ │ │ │ +91 template< class B, class Q > │ │ │ │ │ +_9_2 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +93 : public _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ +94 { │ │ │ │ │ +_9_5 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_B_,_Q_> _B_a_s_e; │ │ │ │ │ +96 template< class BasisFactory, bool onb > │ │ │ │ │ +_9_7 friend class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ +98 using typename _B_a_s_e_:_:_B_a_s_i_s; │ │ │ │ │ +99 using typename _B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ +100 private: │ │ │ │ │ +101 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n ( const typename _B_a_s_e_:_:_B_a_s_i_s &basis, const typename │ │ │ │ │ +_B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e &quadrature ) │ │ │ │ │ +102 : _B_a_s_e(basis,quadrature) │ │ │ │ │ +103 {} │ │ │ │ │ +104 }; │ │ │ │ │ +105 template< class B, class Q > │ │ │ │ │ +_1_0_6 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +107 : public _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ +108 { │ │ │ │ │ +_1_0_9 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_B_,_Q_> _B_a_s_e; │ │ │ │ │ +110 template< class BasisFactory, bool onb > │ │ │ │ │ +_1_1_1 friend class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ +112 using typename _B_a_s_e_:_:_B_a_s_i_s; │ │ │ │ │ +113 using typename _B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ +114 template< class Function, class DofField > │ │ │ │ │ +_1_1_5 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, std::vector< DofField > │ │ │ │ │ +&coefficients ) const │ │ │ │ │ +116 { │ │ │ │ │ +117 const unsigned size = Base::basis().size(); │ │ │ │ │ +118 Base::interpolate(function,val_); │ │ │ │ │ +119 coefficients.resize( size ); │ │ │ │ │ +120 for (unsigned int i=0; i_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( numBaseM, dim, count[ numBaseM ]++ ); │ │ │ │ │ -123 points->_p_o_i_n_t__ = 0; │ │ │ │ │ -124 points->_p_o_i_n_t__[ dim-1 ] = ct( 1 ); │ │ │ │ │ -125 ++size; │ │ │ │ │ +122 coefficients[i] = 0; │ │ │ │ │ +123 for (unsigned int j=0; j(massMatrix_[i][j]*val_[j]); │ │ │ │ │ 126 } │ │ │ │ │ -127 │ │ │ │ │ -128 return size; │ │ │ │ │ -129 } │ │ │ │ │ -130 } │ │ │ │ │ -131 else │ │ │ │ │ -132 { │ │ │ │ │ -133 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( 0, 0, count[ 0 ]++ ); │ │ │ │ │ -134 points->_p_o_i_n_t__ = 0; │ │ │ │ │ -135 return 1; │ │ │ │ │ -136 } │ │ │ │ │ -137 } │ │ │ │ │ -138 │ │ │ │ │ +127 } │ │ │ │ │ +128 } │ │ │ │ │ +129 private: │ │ │ │ │ +130 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n ( const typename Base::Basis &basis, const typename │ │ │ │ │ +Base::Quadrature &quadrature ) │ │ │ │ │ +131 : Base(basis,quadrature), │ │ │ │ │ +132 val_(basis.size()), │ │ │ │ │ +133 massMatrix_(basis.size(),basis.size(),Field(0)) │ │ │ │ │ +134 { │ │ │ │ │ +135 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector; │ │ │ │ │ +136 typedef typename Base::Quadrature::iterator Iterator; │ │ │ │ │ +137 const unsigned size = basis.size(); │ │ │ │ │ +138 std::vector< RangeVector > basisValues( size ); │ │ │ │ │ 139 │ │ │ │ │ -140 │ │ │ │ │ -141 // EquidistantPointSet │ │ │ │ │ -142 // ------------------- │ │ │ │ │ -143 │ │ │ │ │ -144 template< class F, unsigned int dim > │ │ │ │ │ -_1_4_5 class _E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ -146 : public _E_m_p_t_y_P_o_i_n_t_S_e_t< F, dim > │ │ │ │ │ -147 { │ │ │ │ │ -148 typedef _E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> _B_a_s_e; │ │ │ │ │ -149 │ │ │ │ │ -150 public: │ │ │ │ │ -_1_5_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -152 │ │ │ │ │ -153 using _B_a_s_e_:_:_o_r_d_e_r; │ │ │ │ │ -154 │ │ │ │ │ -_1_5_5 _E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t ( std::size_t _o_r_d_e_r ) : _B_a_s_e( _o_r_d_e_r ) {} │ │ │ │ │ +140 const Iterator end = Base::quadrature().end(); │ │ │ │ │ +141 for( Iterator it = Base::quadrature().begin(); it != end; ++it ) │ │ │ │ │ +142 { │ │ │ │ │ +143 Base::basis().evaluate( it->position(), basisValues ); │ │ │ │ │ +144 for (unsigned int i=0; iweight(); │ │ │ │ │ +147 } │ │ │ │ │ +148 massMatrix_.invert(); │ │ │ │ │ +149 } │ │ │ │ │ +150 typedef typename Base::Basis::StorageField Field; │ │ │ │ │ +151 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector; │ │ │ │ │ +152 typedef DynamicMatrix MassMatrix; │ │ │ │ │ +153 mutable std::vector val_; │ │ │ │ │ +154 MassMatrix massMatrix_; │ │ │ │ │ +155 }; │ │ │ │ │ 156 │ │ │ │ │ -_1_5_7 void _b_u_i_l_d ( GeometryType gt ) │ │ │ │ │ -158 { │ │ │ │ │ -159 assert( gt.dim() == _d_i_m_e_n_s_i_o_n ); │ │ │ │ │ -160 points_.resize( _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( gt, _o_r_d_e_r() ) ); │ │ │ │ │ -161 │ │ │ │ │ -162 typename _B_a_s_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t *p = points_.data(); │ │ │ │ │ -163 std::vector< unsigned int > count; │ │ │ │ │ -164 for( unsigned int mydim = 0; mydim <= _d_i_m_e_n_s_i_o_n; ++mydim ) │ │ │ │ │ -165 { │ │ │ │ │ -166 count.resize( Geo::Impl::size( gt.id(), _d_i_m_e_n_s_i_o_n, _d_i_m_e_n_s_i_o_n-mydim ) ); │ │ │ │ │ -167 std::fill( count.begin(), count.end(), 0u ); │ │ │ │ │ -168 p += _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( gt, _d_i_m_e_n_s_i_o_n-mydim, _o_r_d_e_r(), count.data(), │ │ │ │ │ -p ); │ │ │ │ │ -169 } │ │ │ │ │ -170 const auto &refElement = referenceElement(gt); │ │ │ │ │ -171 F weight = refElement.volume()/F(double(points_.size())); │ │ │ │ │ -172 for (auto &p : points_) │ │ │ │ │ -173 p._w_e_i_g_h_t__ = weight; │ │ │ │ │ -174 } │ │ │ │ │ -175 │ │ │ │ │ -176 template< GeometryType::Id geometryId > │ │ │ │ │ -_1_7_7 bool _b_u_i_l_d () │ │ │ │ │ -178 { │ │ │ │ │ -179 _b_u_i_l_d( GeometryType( geometryId ) ); │ │ │ │ │ -180 return true; │ │ │ │ │ -181 } │ │ │ │ │ -182 │ │ │ │ │ -_1_8_3 bool _b_u_i_l_d_C_u_b_e () │ │ │ │ │ -184 { │ │ │ │ │ -185 return build< GeometryTypes::cube(dim) > (); │ │ │ │ │ +161 template< class BasisFactory, bool onb > │ │ │ │ │ +_1_6_2 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +163 { │ │ │ │ │ +_1_6_4 static const unsigned int _d_i_m_e_n_s_i_o_n = BasisFactory::dimension; │ │ │ │ │ +_1_6_5 typedef typename BasisFactory::Key _K_e_y; │ │ │ │ │ +_1_6_6 typedef typename BasisFactory::Object _B_a_s_i_s; │ │ │ │ │ +_1_6_7 typedef double _F_i_e_l_d; │ │ │ │ │ +_1_6_8 typedef QuadratureRule _Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ +_1_6_9 typedef QuadratureRules _Q_u_a_d_r_a_t_u_r_e_P_r_o_v_i_d_e_r; │ │ │ │ │ +_1_7_0 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_a_s_i_s_,_ _Q_u_a_d_r_a_t_u_r_e_,_ _o_n_b_ _> _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_1_7_1 typedef const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n _O_b_j_e_c_t; │ │ │ │ │ +172 │ │ │ │ │ +173 template< GeometryType::Id geometryId > │ │ │ │ │ +_1_7_4 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ +175 { │ │ │ │ │ +176 constexpr Dune::GeometryType geometry = geometryId; │ │ │ │ │ +177 const _B_a_s_i_s *basis = BasisFactory::template create< geometry >( key ); │ │ │ │ │ +178 const _Q_u_a_d_r_a_t_u_r_e & quadrature = QuadratureProvider::rule(geometry, 2*basis- │ │ │ │ │ +>order()+1); │ │ │ │ │ +179 return new _O_b_j_e_c_t( *basis, quadrature ); │ │ │ │ │ +180 } │ │ │ │ │ +_1_8_1 static void _r_e_l_e_a_s_e ( _O_b_j_e_c_t *object ) │ │ │ │ │ +182 { │ │ │ │ │ +183 const _B_a_s_i_s &basis = object->basis(); │ │ │ │ │ +184 BasisFactory::release( &basis ); │ │ │ │ │ +185 delete object; │ │ │ │ │ 186 } │ │ │ │ │ -187 │ │ │ │ │ -_1_8_8 static bool _s_u_p_p_o_r_t_s ( GeometryType, std::size_t /*order*/ ) { return true; │ │ │ │ │ -} │ │ │ │ │ -189 template< GeometryType::Id geometryId> │ │ │ │ │ -_1_9_0 static bool _s_u_p_p_o_r_t_s ( std::size_t _o_r_d_e_r ) { │ │ │ │ │ -191 return _s_u_p_p_o_r_t_s( GeometryType( geometryId ), _o_r_d_e_r ); │ │ │ │ │ -192 } │ │ │ │ │ -193 │ │ │ │ │ -194 private: │ │ │ │ │ -195 using _B_a_s_e_:_:_p_o_i_n_t_s__; │ │ │ │ │ -196 }; │ │ │ │ │ -197 │ │ │ │ │ -198} // namespace Dune │ │ │ │ │ -199 │ │ │ │ │ -200#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ -_e_m_p_t_y_p_o_i_n_t_s_._h_h │ │ │ │ │ +187 }; │ │ │ │ │ +188 │ │ │ │ │ +189} │ │ │ │ │ +190 │ │ │ │ │ +191#endif // #ifndef DUNE_L2INTERPOLATION_HH │ │ │ │ │ _f_i_e_l_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ -std::size_t numLagrangePoints(const GeometryType >, std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ -static unsigned int equidistantLagrangePoints(const GeometryType >, unsigned │ │ │ │ │ -int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > │ │ │ │ │ -*points) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ -constexpr unsigned int index() const noexcept │ │ │ │ │ -Return offset within subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ -constexpr unsigned int subEntity() const noexcept │ │ │ │ │ -Return number of associated subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t__ │ │ │ │ │ -Field weight_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t__ │ │ │ │ │ -Vector point_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y__ │ │ │ │ │ -LocalKey localKey_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_p_o_i_n_t_s__ │ │ │ │ │ -std::vector< LagrangePoint > points_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:147 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d │ │ │ │ │ -bool build() │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:177 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:190 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +A local L2 interpolation taking a test basis and a quadrature rule. │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ +LocalL2InterpolationBase(const Basis &basis, const Quadrature &quadrature) │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:82 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_b_a_s_i_s │ │ │ │ │ +const Basis & basis() const │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_q_u_a_d_r_a_t_u_r_e__ │ │ │ │ │ +const Quadrature & quadrature_ │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const Function &function, std::vector< DofField > │ │ │ │ │ +&coefficients) const │ │ │ │ │ +Interpolate a function that implements Range operator()(Domain) │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_b_a_s_i_s__ │ │ │ │ │ +const Basis & basis_ │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:151 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(GeometryType, std::size_t) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:188 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d │ │ │ │ │ -void build(GeometryType gt) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:157 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d_C_u_b_e │ │ │ │ │ -bool buildCube() │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:183 │ │ │ │ │ -_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ -EquidistantPointSet(std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn equidistantpoints.hh:155 │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_q_u_a_d_r_a_t_u_r_e │ │ │ │ │ +const Quadrature & quadrature() const │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e │ │ │ │ │ +Q Quadrature │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_B_a_s_i_s │ │ │ │ │ +B Basis │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _t_r_u_e_ _>_:_:_B_a_s_e │ │ │ │ │ +LocalL2InterpolationBase< B, Q > Base │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _>_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const Function &function, std::vector< DofField > │ │ │ │ │ +&coefficients) const │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _>_:_:_B_a_s_e │ │ │ │ │ +LocalL2InterpolationBase< B, Q > Base │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:109 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +A factory class for the local l2 interpolations taking a basis factory. │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:164 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:181 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ +BasisFactory::Object Basis │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:166 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_F_i_e_l_d │ │ │ │ │ +double Field │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:167 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_Q_u_a_d_r_a_t_u_r_e_P_r_o_v_i_d_e_r │ │ │ │ │ +QuadratureRules< Field, dimension > QuadratureProvider │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:169 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_Q_u_a_d_r_a_t_u_r_e │ │ │ │ │ +QuadratureRule< Field, dimension > Quadrature │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:168 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:174 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +BasisFactory::Key Key │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:165 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const LocalInterpolation Object │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:171 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +LocalL2Interpolation< Basis, Quadrature, onb > LocalInterpolation │ │ │ │ │ +DDeeffiinniittiioonn l2interpolation.hh:170 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangepyramid.hh File Reference │ │ │ │ +dune-localfunctions: defaultbasisfactory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,37 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangepyramid.hh File Reference
│ │ │ │ +
defaultbasisfactory.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/utility/basismatrix.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LagrangePyramidLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d pyramids with compile-time polynomial order. More...
struct  Dune::Identity
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >::EvaluationBasisFactory< dd, FF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangepyramid.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +defaultbasisfactory.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_m_a_t_r_i_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _k_ _> │ │ │ │ │ -  Lagrange finite element for 3d pyramids with compile-time polynomial │ │ │ │ │ - order. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_I_d_e_n_t_i_t_y │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_<_ _P_r_e_B_F_a_c_t_o_r_y_,_ _I_n_t_e_r_p_o_l_F_a_c_t_o_r_y_,_ _d_i_m_,_ _d_i_m_R_, │ │ │ │ │ + _S_F_,_ _C_F_,_ _P_r_e_B_a_s_i_s_K_e_y_E_x_t_r_a_c_t_o_r_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_<_ _P_r_e_B_F_a_c_t_o_r_y_,_ _I_n_t_e_r_p_o_l_F_a_c_t_o_r_y_,_ _d_i_m_,_ _d_i_m_R_, │ │ │ │ │ + _S_F_,_ _C_F_,_ _P_r_e_B_a_s_i_s_K_e_y_E_x_t_r_a_c_t_o_r_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00353_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangepyramid.hh Source File │ │ │ │ +dune-localfunctions: defaultbasisfactory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,824 +70,151 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangepyramid.hh
│ │ │ │ +
defaultbasisfactory.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ +
5#ifndef DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ +
6#define DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.hh>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13#include <dune/common/math.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune { namespace Impl
│ │ │ │ -
22{
│ │ │ │ -
32 template<class D, class R, unsigned int k>
│ │ │ │ -
33 class LagrangePyramidLocalBasis
│ │ │ │ -
34 {
│ │ │ │ -
35 public:
│ │ │ │ -
36 using Traits = LocalBasisTraits<D,3,FieldVector<D,3>,R,1,FieldVector<R,1>,FieldMatrix<R,1,3> >;
│ │ │ │ -
37
│ │ │ │ -
40 static constexpr std::size_t size ()
│ │ │ │ -
41 {
│ │ │ │ -
42 std::size_t result = 0;
│ │ │ │ -
43 for (unsigned int i=0; i<=k; i++)
│ │ │ │ -
44 result += power(i+1,2);
│ │ │ │ -
45 return result;
│ │ │ │ -
46 }
│ │ │ │ -
47
│ │ │ │ -
49 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
50 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
51 {
│ │ │ │ -
52 out.resize(size());
│ │ │ │ -
53
│ │ │ │ -
54 // Specialization for zero-order case
│ │ │ │ -
55 if (k==0)
│ │ │ │ -
56 {
│ │ │ │ -
57 out[0] = 1;
│ │ │ │ -
58 return;
│ │ │ │ -
59 }
│ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
│ │ │ │ +
15 struct Identity
│ │ │ │ +
16 {
│ │ │ │ +
17 template <class T>
│ │ │ │ +
│ │ │ │ +
18 static T apply( const T &t )
│ │ │ │ +
19 {
│ │ │ │ +
20 return t;
│ │ │ │ +
21 }
│ │ │ │ +
│ │ │ │ +
22 };
│ │ │ │ +
│ │ │ │ +
23 /************************************************
│ │ │ │ +
24 * Class for providing a factory for basis
│ │ │ │ +
25 * functions over the set of reference elements.
│ │ │ │ +
26 * Is based on the TopologyFactory but additionally
│ │ │ │ +
27 * provides rebindes of the field type.
│ │ │ │ +
28 * The user provides factories for the pre basis and the
│ │ │ │ +
29 * interpolations. The default construction process of
│ │ │ │ +
30 * the basis is performed in this class.
│ │ │ │ +
31 ************************************************/
│ │ │ │ +
32 template< class PreBFactory,
│ │ │ │ +
33 class InterpolFactory,
│ │ │ │ +
34 unsigned int dim, unsigned int dimR,
│ │ │ │ +
35 class SF, class CF,
│ │ │ │ +
36 class PreBasisKeyExtractor = Identity >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {
│ │ │ │ +
39 static const unsigned int dimension = dim;
│ │ │ │ +
40 static const unsigned int dimRange = dimR;
│ │ │ │ +
41 typedef SF StorageField;
│ │ │ │ +
42 typedef CF ComputeField;
│ │ │ │ +
43 typedef PreBFactory PreBasisFactory;
│ │ │ │ +
44 typedef typename PreBasisFactory::Object PreBasis;
│ │ │ │ +
45 typedef InterpolFactory InterpolationFactory;
│ │ │ │ +
46 typedef typename InterpolationFactory::Object Interpolation;
│ │ │ │ +
47 typedef typename PreBasisFactory::template EvaluationBasisFactory<dim,SF>::Type MonomialBasisFactory;
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
51
│ │ │ │ +
52 typedef const Basis Object;
│ │ │ │ +
53 typedef typename InterpolationFactory::Key Key;
│ │ │ │ +
54 template <unsigned int dd, class FF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ +
57 typedef typename PreBasisFactory::template EvaluationBasisFactory<dd,FF>::Type
│ │ │ │ + │ │ │ │ +
59 };
│ │ │ │ +
│ │ │ │
60
│ │ │ │ -
61 if (k==1)
│ │ │ │ -
62 {
│ │ │ │ -
63 if(in[0] > in[1])
│ │ │ │ -
64 {
│ │ │ │ -
65 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[1]);
│ │ │ │ -
66 out[1] = in[0]*(1-in[1])-in[2]*in[1];
│ │ │ │ -
67 out[2] = (1-in[0])*in[1]-in[2]*in[1];
│ │ │ │ -
68 out[3] = in[0]*in[1]+in[2]*in[1];
│ │ │ │ -
69 }
│ │ │ │ -
70 else
│ │ │ │ -
71 {
│ │ │ │ -
72 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[0]);
│ │ │ │ -
73 out[1] = in[0]*(1-in[1])-in[2]*in[0];
│ │ │ │ -
74 out[2] = (1-in[0])*in[1]-in[2]*in[0];
│ │ │ │ -
75 out[3] = in[0]*in[1]+in[2]*in[0];
│ │ │ │ -
76 }
│ │ │ │ +
61 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
62 static Object *create ( const Key &key )
│ │ │ │ +
63 {
│ │ │ │ +
64 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor::apply(key);
│ │ │ │ +
65 const PreBasis *preBasis = PreBasisFactory::template create<geometryId>( preBasisKey );
│ │ │ │ +
66 const Interpolation *interpol = InterpolationFactory::template create<geometryId>( key );
│ │ │ │ +
67 BasisMatrix< PreBasis, Interpolation, ComputeField > matrix( *preBasis, *interpol );
│ │ │ │ +
68
│ │ │ │ +
69 const MonomialBasis *monomialBasis = MonomialBasisFactory::template create< geometryId >( preBasis->order() );
│ │ │ │ +
70
│ │ │ │ +
71 Basis *basis = new Basis( *monomialBasis );
│ │ │ │ +
72
│ │ │ │ +
73 basis->fill( matrix );
│ │ │ │ +
74
│ │ │ │ +
75 InterpolationFactory::release(interpol);
│ │ │ │ +
76 PreBasisFactory::release(preBasis);
│ │ │ │
77
│ │ │ │ -
78 out[4] = in[2];
│ │ │ │ -
79
│ │ │ │ -
80 return;
│ │ │ │ -
81 }
│ │ │ │ -
82
│ │ │ │ -
83 if (k==2)
│ │ │ │ -
84 {
│ │ │ │ -
85 // transform to reference element with base [-1,1]^2
│ │ │ │ -
86 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ -
87 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ -
88 const R z = in[2];
│ │ │ │ +
78 return basis;
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
81 static void release( Object *object)
│ │ │ │ +
82 {
│ │ │ │ +
83 const MonomialBasis *monomialBasis = &(object->basis());
│ │ │ │ +
84 delete object;
│ │ │ │ +
85 MonomialBasisFactory::release( monomialBasis );
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87 };
│ │ │ │ +
│ │ │ │ +
88}
│ │ │ │
89
│ │ │ │ -
90 if (x > y)
│ │ │ │ -
91 {
│ │ │ │ -
92 // vertices
│ │ │ │ -
93 out[0] = 0.25*(x + z)*(x + z - 1)*(y - z - 1)*(y - z);
│ │ │ │ -
94 out[1] = -0.25*(x + z)*(y - z)*((x + z + 1)*(-y + z + 1) - 4*z) - z*(x - y);
│ │ │ │ -
95 out[2] = 0.25*(x + z)*(y - z)*(y - z + 1)*(x + z - 1);
│ │ │ │ -
96 out[3] = 0.25*(y - z)*(x + z)*(y - z + 1)*(x + z + 1);
│ │ │ │ -
97 out[4] = z*(2*z - 1);
│ │ │ │ -
98
│ │ │ │ -
99 // lower edges
│ │ │ │ -
100 out[5] = -0.5*(y - z + 1)*(x + z - 1)*(y - 1)*x;
│ │ │ │ -
101 out[6] = -0.5*(y - z + 1)*(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1));
│ │ │ │ -
102 out[7] = -0.5*(x + z - 1)*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1));
│ │ │ │ -
103 out[8] = -0.5*(y - z + 1)*(x + z - 1)*(x + 1)*y;
│ │ │ │ -
104
│ │ │ │ -
105 // upper edges
│ │ │ │ -
106 out[9] = z*(x + z - 1)*(y - z - 1);
│ │ │ │ -
107 out[10] = -z*((x + z + 1)*(y - z - 1) + 4*z);
│ │ │ │ -
108 out[11] = -z*(y - z + 1)*(x + z - 1);
│ │ │ │ -
109 out[12] = z*(y - z + 1)*(x + z + 1);
│ │ │ │ -
110
│ │ │ │ -
111 // base face
│ │ │ │ -
112 out[13] = (y - z + 1)*(x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1));
│ │ │ │ -
113 }
│ │ │ │ -
114 else
│ │ │ │ -
115 {
│ │ │ │ -
116 // vertices
│ │ │ │ -
117 out[0] = 0.25*(y + z)*(y + z - 1)*(x - z - 1)*(x - z);
│ │ │ │ -
118 out[1] = -0.25*(x - z)*(y + z)*(x - z + 1)*(-y - z + 1);
│ │ │ │ -
119 out[2] = 0.25*(x - z)*(y + z)*((x - z - 1)*(y + z + 1) + 4*z) + z*(x - y);
│ │ │ │ -
120 out[3] = 0.25*(y + z)*(x - z)*(x - z + 1)*(y + z + 1);
│ │ │ │ -
121 out[4] = z*(2*z - 1);
│ │ │ │ -
122
│ │ │ │ -
123 // lower edges
│ │ │ │ -
124 out[5] = -0.5*(y + z - 1)*(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1));
│ │ │ │ -
125 out[6] = -0.5*(x - z + 1)*(y + z - 1)*(y + 1)*x;
│ │ │ │ -
126 out[7] = -0.5*(x - z + 1)*(y + z - 1)*(x - 1)*y;
│ │ │ │ -
127 out[8] = -0.5*(x - z + 1)*(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1));
│ │ │ │ -
128
│ │ │ │ -
129 // upper edges
│ │ │ │ -
130 out[9] = z*(y + z - 1)*(x - z - 1);
│ │ │ │ -
131 out[10] = -z*(x - z + 1)*(y + z - 1);
│ │ │ │ -
132 out[11] = -z*((y + z + 1)*(x - z - 1) + 4*z);
│ │ │ │ -
133 out[12] = z*(x - z + 1)*(y + z + 1);
│ │ │ │ -
134
│ │ │ │ -
135 // base face
│ │ │ │ -
136 out[13] = (x - z + 1)*(y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1));
│ │ │ │ -
137 }
│ │ │ │ -
138
│ │ │ │ -
139 return;
│ │ │ │ -
140 }
│ │ │ │ -
141
│ │ │ │ -
142 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateFunction for order " << k);
│ │ │ │ -
143 }
│ │ │ │ -
144
│ │ │ │ -
150 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
151 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
152 {
│ │ │ │ -
153 out.resize(size());
│ │ │ │ -
154
│ │ │ │ -
155 // Specialization for k==0
│ │ │ │ -
156 if (k==0)
│ │ │ │ -
157 {
│ │ │ │ -
158 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ -
159 return;
│ │ │ │ -
160 }
│ │ │ │ -
161
│ │ │ │ -
162 if (k==1)
│ │ │ │ -
163 {
│ │ │ │ -
164 if(in[0] > in[1])
│ │ │ │ -
165 {
│ │ │ │ -
166 out[0][0] = {-1 + in[1], -1 + in[0] + in[2], -1 + in[1]};
│ │ │ │ -
167 out[1][0] = { 1 - in[1], -in[0] - in[2], -in[1]};
│ │ │ │ -
168 out[2][0] = { -in[1], 1 - in[0] - in[2], -in[1]};
│ │ │ │ -
169 out[3][0] = { in[1], in[0] + in[2], in[1]};
│ │ │ │ -
170 }
│ │ │ │ -
171 else
│ │ │ │ -
172 {
│ │ │ │ -
173 out[0][0] = {-1 + in[1] + in[2], -1 + in[0], -1 + in[0]};
│ │ │ │ -
174 out[1][0] = { 1 - in[1] - in[2], -in[0], -in[0]};
│ │ │ │ -
175 out[2][0] = { -in[1] - in[2], 1 - in[0], -in[0]};
│ │ │ │ -
176 out[3][0] = { in[1] + in[2], in[0], in[0]};
│ │ │ │ -
177 }
│ │ │ │ -
178
│ │ │ │ -
179 out[4][0] = {0, 0, 1};
│ │ │ │ -
180 return;
│ │ │ │ -
181 }
│ │ │ │ -
182
│ │ │ │ -
183 if (k==2)
│ │ │ │ -
184 {
│ │ │ │ -
185 // transform to reference element with base [-1,1]^2
│ │ │ │ -
186 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ -
187 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ -
188 const R z = in[2];
│ │ │ │ -
189
│ │ │ │ -
190 // transformation of the gradient leads to a multiplication
│ │ │ │ -
191 // with the Jacobian [2 0 0; 0 2 0; 1 1 1]
│ │ │ │ -
192 if (x > y)
│ │ │ │ -
193 {
│ │ │ │ -
194 // vertices
│ │ │ │ -
195 out[0][0][0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1);
│ │ │ │ -
196 out[0][0][1] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1);
│ │ │ │ -
197 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1])
│ │ │ │ -
198 + 0.25*((2*x + 2*z - 1)*(y - z - 1)*(y - z)
│ │ │ │ -
199 + (x + z)*(x + z - 1)*(-2*y + 2*z + 1));
│ │ │ │ -
200
│ │ │ │ -
201 out[1][0][0] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ -
202 + (x + z)*(y - z)*(-y + z + 1)) - z);
│ │ │ │ -
203 out[1][0][1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ -
204 + (x + z)*(y - z)*(-(x + z + 1))) + z);
│ │ │ │ -
205 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1])
│ │ │ │ -
206 - 0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ -
207 - (x + z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ -
208 + (x + z)*(y - z)*(x - y + 2*z - 2))
│ │ │ │ -
209 - (x - y);
│ │ │ │ -
210
│ │ │ │ -
211 out[2][0][0] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1);
│ │ │ │ -
212 out[2][0][1] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1);
│ │ │ │ -
213 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1])
│ │ │ │ -
214 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z - 1)
│ │ │ │ -
215 + (x + z)*(y - z)*(y - x - 2*z + 2));
│ │ │ │ -
216
│ │ │ │ -
217 out[3][0][0] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1);
│ │ │ │ -
218 out[3][0][1] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1);
│ │ │ │ -
219 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1])
│ │ │ │ -
220 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z + 1)
│ │ │ │ -
221 + (y - z)*(x + z)*(y - x - 2*z));
│ │ │ │ -
222
│ │ │ │ -
223 out[4][0][0] = 0;
│ │ │ │ -
224 out[4][0][1] = 0;
│ │ │ │ -
225 out[4][0][2] = 4*z - 1;
│ │ │ │ -
226
│ │ │ │ -
227 // lower edges
│ │ │ │ -
228 out[5][0][0] = -(y - z + 1)*(y - 1)*(2*x + z - 1);
│ │ │ │ -
229 out[5][0][1] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x;
│ │ │ │ -
230 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1])
│ │ │ │ -
231 + 0.5*(x + z - 1)*(y - 1)*x - 0.5*(y - z + 1)*(y - 1)*x;
│ │ │ │ -
232
│ │ │ │ -
233 out[6][0][0] = -(y - z + 1)*(2*x + z + 1)*(y - 1);
│ │ │ │ -
234 out[6][0][1] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)
│ │ │ │ -
235 + (y - z + 1)*((x + z + 1)*x + 2*z));
│ │ │ │ -
236 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1])
│ │ │ │ -
237 - 0.5*(-(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1))
│ │ │ │ -
238 + (y - z + 1)*(((y - 1)*x - 1) + 2*y + 1));
│ │ │ │ -
239
│ │ │ │ -
240 out[7][0][0] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)
│ │ │ │ -
241 + (x + z - 1)*((y - z - 1)*y + 2*z));
│ │ │ │ -
242 out[7][0][1] = -(x + z - 1)*(2*y - z - 1)*(x + 1);
│ │ │ │ -
243 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1])
│ │ │ │ -
244 - 0.5*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)
│ │ │ │ -
245 + (x + z - 1)*((-(x + 1)*y - 1) + 2*x + 1));
│ │ │ │ -
246
│ │ │ │ -
247 out[8][0][0] = -(y - z + 1)*(2*x + z)*y;
│ │ │ │ -
248 out[8][0][1] = -(2*y - z + 1)*(x + z - 1)*(x + 1);
│ │ │ │ -
249 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1])
│ │ │ │ -
250 - 0.5*(-x + y - 2*z + 2)*(x + 1)*y;
│ │ │ │ -
251
│ │ │ │ -
252 // upper edges
│ │ │ │ -
253 out[9][0][0] = 2*z*(y - z - 1);
│ │ │ │ -
254 out[9][0][1] = 2*z*(x + z - 1);
│ │ │ │ -
255 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1])
│ │ │ │ -
256 + (x + z - 1)*(y - z - 1) + z*(-x + y - 2*z);
│ │ │ │ -
257
│ │ │ │ -
258 out[10][0][0] = -2*z*(y - z - 1);
│ │ │ │ -
259 out[10][0][1] = -2*z*(x + z + 1);
│ │ │ │ -
260 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1])
│ │ │ │ -
261 - ((x + z + 1)*(y - z - 1) + 4*z)
│ │ │ │ -
262 - z*(-x + y - 2*z + 2);
│ │ │ │ -
263
│ │ │ │ -
264 out[11][0][0] = -2*z*(y - z + 1);
│ │ │ │ -
265 out[11][0][1] = -2*z*(x + z - 1);
│ │ │ │ -
266 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1])
│ │ │ │ -
267 - (y - z + 1)*(x + z - 1) - z*(-x + y - 2*z + 2);
│ │ │ │ -
268
│ │ │ │ -
269 out[12][0][0] = 2*z*(y - z + 1);
│ │ │ │ -
270 out[12][0][1] = 2*z*(x + z + 1);
│ │ │ │ -
271 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1])
│ │ │ │ -
272 + (y - z + 1)*(x + z + 1) + z*(-x + y - 2*z);
│ │ │ │ -
273
│ │ │ │ -
274 // base face
│ │ │ │ -
275 out[13][0][0] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ -
276 + (y - z + 1)*(x + z - 1)*(y - 1 + z));
│ │ │ │ -
277 out[13][0][1] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ -
278 + (y - z + 1)*(x + z - 1)*(x + 1 - z));
│ │ │ │ -
279 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1])
│ │ │ │ -
280 + ((-x + y - 2*z + 2)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ -
281 + (y - z + 1)*(x + z - 1)*(x - y + 2*z + 1));
│ │ │ │ -
282 }
│ │ │ │ -
283 else
│ │ │ │ -
284 {
│ │ │ │ -
285 // vertices
│ │ │ │ -
286 out[0][0][0] = 0.5*(y + z)*(y + z - 1)*(2*x - 2*z - 1);
│ │ │ │ -
287 out[0][0][1] = 0.5*(2*y + 2*z - 1)*(x - z - 1)*(x - z);
│ │ │ │ -
288 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1])
│ │ │ │ -
289 + 0.25*((2*y + 2*z - 1)*(x - z - 1)*(x - z)
│ │ │ │ -
290 + (y + z)*(y + z - 1)*(-2*x + 2*z + 1));
│ │ │ │ -
291
│ │ │ │ -
292 out[1][0][0] = -0.5*(y + z)*(2*x - 2*z + 1)*(-y - z + 1);
│ │ │ │ -
293 out[1][0][1] = -0.5*(x - z)*(x - z + 1)*(-2*y - 2*z + 1);
│ │ │ │ -
294 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1])
│ │ │ │ -
295 - 0.25*((x - y - 2*z)*(x - z + 1)*(-y - z + 1)
│ │ │ │ -
296 + (x - z)*(y + z)*(-x + y + 2*z - 2));
│ │ │ │ -
297
│ │ │ │ -
298 out[2][0][0] = 0.5*((y + z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ -
299 + (x - z)*(y + z)*(y + z + 1) + 4*z);
│ │ │ │ -
300 out[2][0][1] = 0.5*((x - z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ -
301 + (x - z)*(y + z)*(x - z - 1) - 4*z);
│ │ │ │ -
302 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1])
│ │ │ │ -
303 + 0.25*((x - y - 2*z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ -
304 + (x - z)*(y + z)*(x - y - 2*z + 2) + 4*(x - y));
│ │ │ │ -
305
│ │ │ │ -
306 out[3][0][0] = 0.5*(y + z)*(2*x - 2*z + 1)*(y + z + 1);
│ │ │ │ -
307 out[3][0][1] = 0.5*(x - z)*(x - z + 1)*(2*y + 2*z + 1);
│ │ │ │ -
308 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1])
│ │ │ │ -
309 + 0.25*((x - y - 2*z)*(x - z + 1)*(y + z + 1)
│ │ │ │ -
310 + (y + z)*(x - z)*(x - y - 2*z));
│ │ │ │ -
311
│ │ │ │ -
312 out[4][0][0] = 0;
│ │ │ │ -
313 out[4][0][1] = 0;
│ │ │ │ -
314 out[4][0][2] = 4*z - 1;
│ │ │ │ -
315
│ │ │ │ -
316 // lower edges
│ │ │ │ -
317 out[5][0][0] = -(y + z - 1)*(2*x - z - 1)*(y + 1);
│ │ │ │ -
318 out[5][0][1] = -(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)
│ │ │ │ -
319 + (y + z - 1)*((x - z - 1)*x + 2*z));
│ │ │ │ -
320 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1])
│ │ │ │ -
321 - 0.5*((((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1))
│ │ │ │ -
322 + (y + z - 1)*((-(y + 1)*x - 1) + 2*y + 1));
│ │ │ │ -
323
│ │ │ │ -
324 out[6][0][0] = -(2*x - z + 1)*(y + z - 1)*(y + 1);
│ │ │ │ -
325 out[6][0][1] = -(x - z + 1)*(2*y + z)*x;
│ │ │ │ -
326 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1])
│ │ │ │ -
327 - 0.5*(x - y - 2*z + 2)*(y + 1)*x;
│ │ │ │ -
328
│ │ │ │ -
329 out[7][0][0] = -(2*x - z)*(y + z - 1)*y;
│ │ │ │ -
330 out[7][0][1] = -(x - z + 1)*(2*y + z - 1)*(x - 1);
│ │ │ │ -
331 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1])
│ │ │ │ -
332 - 0.5*(x - y - 2*z + 2)*(x - 1)*y;
│ │ │ │ -
333
│ │ │ │ -
334 out[8][0][0] = -(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)
│ │ │ │ -
335 + (x - z + 1)*((y + z + 1)*y + 2*z));
│ │ │ │ -
336 out[8][0][1] = -(x - z + 1)*(2*y + z + 1)*(x - 1);
│ │ │ │ -
337 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1])
│ │ │ │ -
338 - 0.5*(-(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1))
│ │ │ │ -
339 + (x - z + 1)*(((x - 1)*y - 1) + 2*x + 1));
│ │ │ │ -
340
│ │ │ │ -
341 // upper edges
│ │ │ │ -
342 out[9][0][0] = 2*z*(y + z - 1);
│ │ │ │ -
343 out[9][0][1] = 2*z*(x - z - 1);
│ │ │ │ -
344 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1])
│ │ │ │ -
345 + (y + z - 1)*(x - z - 1) + z*(x - y - 2*z);
│ │ │ │ -
346
│ │ │ │ -
347 out[10][0][0] = -2*z*(y + z - 1);
│ │ │ │ -
348 out[10][0][1] = -2*z*(x - z + 1);
│ │ │ │ -
349 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1])
│ │ │ │ -
350 - (x - z + 1)*(y + z - 1) - z*(x - y - 2*z + 2);
│ │ │ │ -
351
│ │ │ │ -
352 out[11][0][0] = -2*z*(y + z + 1);
│ │ │ │ -
353 out[11][0][1] = -2*z*(x - z - 1);
│ │ │ │ -
354 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1])
│ │ │ │ -
355 - ((y + z + 1)*(x - z - 1) + 4*z) - z*(x - y - 2*z + 2);
│ │ │ │ -
356
│ │ │ │ -
357 out[12][0][0] = 2*z*(y + z + 1);
│ │ │ │ -
358 out[12][0][1] = 2*z*(x - z + 1);
│ │ │ │ -
359 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1])
│ │ │ │ -
360 + (x - z + 1)*(y + z + 1) + z*(x - y - 2*z);
│ │ │ │ -
361
│ │ │ │ -
362 // base face
│ │ │ │ -
363 out[13][0][0] = 2*((y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ -
364 + (x - z + 1)*(y + z - 1)*(y + 1 - z));
│ │ │ │ -
365 out[13][0][1] = 2*((x - z + 1)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ -
366 + (x - z + 1)*(y + z - 1)*(x - 1 + z));
│ │ │ │ -
367 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1])
│ │ │ │ -
368 + (x - y - 2*z + 2)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ -
369 + (x - z + 1)*(y + z - 1)*(-(x - y - 2*z - 1));
│ │ │ │ -
370 }
│ │ │ │ -
371
│ │ │ │ -
372 return;
│ │ │ │ -
373 }
│ │ │ │ -
374
│ │ │ │ -
375 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateJacobian for order " << k);
│ │ │ │ -
376 }
│ │ │ │ -
377
│ │ │ │ -
384 void partial(const std::array<unsigned int,3>& order,
│ │ │ │ -
385 const typename Traits::DomainType& in,
│ │ │ │ -
386 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
387 {
│ │ │ │ -
388 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
389
│ │ │ │ -
390 out.resize(size());
│ │ │ │ -
391
│ │ │ │ -
392 if (totalOrder == 0)
│ │ │ │ -
393 {
│ │ │ │ -
394 evaluateFunction(in, out);
│ │ │ │ -
395 return;
│ │ │ │ -
396 }
│ │ │ │ -
397
│ │ │ │ -
398 if (k==0)
│ │ │ │ -
399 {
│ │ │ │ -
400 out[0] = 0;
│ │ │ │ -
401 return;
│ │ │ │ -
402 }
│ │ │ │ -
403
│ │ │ │ -
404 if (k==1)
│ │ │ │ -
405 {
│ │ │ │ -
406 if (totalOrder == 1)
│ │ │ │ -
407 {
│ │ │ │ -
408 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
409 if (in[0] > in[1])
│ │ │ │ -
410 {
│ │ │ │ -
411 switch (direction)
│ │ │ │ -
412 {
│ │ │ │ -
413 case 0:
│ │ │ │ -
414 out[0] = -1 + in[1];
│ │ │ │ -
415 out[1] = 1 - in[1];
│ │ │ │ -
416 out[2] = -in[1];
│ │ │ │ -
417 out[3] = in[1];
│ │ │ │ -
418 out[4] = 0;
│ │ │ │ -
419 break;
│ │ │ │ -
420 case 1:
│ │ │ │ -
421 out[0] = -1 + in[0] + in[2];
│ │ │ │ -
422 out[1] = -in[0] - in[2];
│ │ │ │ -
423 out[2] = 1 - in[0] - in[2];
│ │ │ │ -
424 out[3] = in[0]+in[2];
│ │ │ │ -
425 out[4] = 0;
│ │ │ │ -
426 break;
│ │ │ │ -
427 case 2:
│ │ │ │ -
428 out[0] = -1 + in[1];
│ │ │ │ -
429 out[1] = -in[1];
│ │ │ │ -
430 out[2] = -in[1];
│ │ │ │ -
431 out[3] = in[1];
│ │ │ │ -
432 out[4] = 1;
│ │ │ │ -
433 break;
│ │ │ │ -
434 default:
│ │ │ │ -
435 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
436 }
│ │ │ │ -
437 }
│ │ │ │ -
438 else /* (in[0] <= in[1]) */
│ │ │ │ -
439 {
│ │ │ │ -
440 switch (direction)
│ │ │ │ -
441 {
│ │ │ │ -
442 case 0:
│ │ │ │ -
443 out[0] = -1 + in[1] + in[2];
│ │ │ │ -
444 out[1] = 1 - in[1] - in[2];
│ │ │ │ -
445 out[2] = -in[1] - in[2];
│ │ │ │ -
446 out[3] = in[1] + in[2];
│ │ │ │ -
447 out[4] = 0;
│ │ │ │ -
448 break;
│ │ │ │ -
449 case 1:
│ │ │ │ -
450 out[0] = -1 + in[0];
│ │ │ │ -
451 out[1] = -in[0];
│ │ │ │ -
452 out[2] = 1 - in[0];
│ │ │ │ -
453 out[3] = in[0];
│ │ │ │ -
454 out[4] = 0;
│ │ │ │ -
455 break;
│ │ │ │ -
456 case 2:
│ │ │ │ -
457 out[0] = -1 + in[0];
│ │ │ │ -
458 out[1] = -in[0];
│ │ │ │ -
459 out[2] = -in[0];
│ │ │ │ -
460 out[3] = in[0];
│ │ │ │ -
461 out[4] = 1;
│ │ │ │ -
462 break;
│ │ │ │ -
463 default:
│ │ │ │ -
464 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
465 }
│ │ │ │ -
466 }
│ │ │ │ -
467 } else if (totalOrder == 2)
│ │ │ │ -
468 {
│ │ │ │ -
469 if ((order[0] == 1 && order[1] == 1) ||
│ │ │ │ -
470 (order[1] == 1 && order[2] == 1 && in[0] > in[1]) ||
│ │ │ │ -
471 (order[0] == 1 && order[2] == 1 && in[0] <=in[1]))
│ │ │ │ -
472 {
│ │ │ │ -
473 out = {1, -1, -1, 1, 0};
│ │ │ │ -
474 } else
│ │ │ │ -
475 {
│ │ │ │ -
476 out = {0, 0, 0, 0, 0};
│ │ │ │ -
477 }
│ │ │ │ -
478
│ │ │ │ -
479 } else
│ │ │ │ -
480 {
│ │ │ │ -
481 out = {0, 0, 0, 0, 0};
│ │ │ │ -
482 }
│ │ │ │ -
483
│ │ │ │ -
484 return;
│ │ │ │ -
485 }
│ │ │ │ -
486
│ │ │ │ -
487 if (k==2)
│ │ │ │ -
488 {
│ │ │ │ -
489 if (totalOrder == 1)
│ │ │ │ -
490 {
│ │ │ │ -
491 // transform to reference element with base [-1,1]^2
│ │ │ │ -
492 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ -
493 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ -
494 const R z = in[2];
│ │ │ │ -
495
│ │ │ │ -
496 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
497
│ │ │ │ -
498 // transformation of the gradient leads to a multiplication
│ │ │ │ -
499 // with the Jacobian [2 0 0; 0 2 0; 1 1 1]
│ │ │ │ -
500 if (x > y)
│ │ │ │ -
501 {
│ │ │ │ -
502 switch (direction)
│ │ │ │ -
503 {
│ │ │ │ -
504 case 0:
│ │ │ │ -
505 out[0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1);
│ │ │ │ -
506 out[1] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - z)*(-y + z + 1)) - z);
│ │ │ │ -
507 out[2] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1);
│ │ │ │ -
508 out[3] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1);
│ │ │ │ -
509 out[4] = 0;
│ │ │ │ -
510 out[5] = -(y - z + 1)*(2*x + z - 1)*(y - 1);
│ │ │ │ -
511 out[6] = -(y - z + 1)*(2*x + z + 1)*(y - 1);
│ │ │ │ -
512 out[7] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) + (x + z - 1)*((y - z - 1)*y + 2*z));
│ │ │ │ -
513 out[8] = -(y - z + 1)*(2*x + z)*y;
│ │ │ │ -
514 out[9] = 2*z*(y - z - 1);
│ │ │ │ -
515 out[10] = -2*z*(y - z - 1);
│ │ │ │ -
516 out[11] = -2*z*(y - z + 1);
│ │ │ │ -
517 out[12] = 2*z*(y - z + 1);
│ │ │ │ -
518 out[13] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + 1)*(x + z - 1)*(y - 1 + z));
│ │ │ │ -
519 break;
│ │ │ │ -
520 case 1:
│ │ │ │ -
521 out[0] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1);
│ │ │ │ -
522 out[1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - z)*(-(x + z + 1))) + z);
│ │ │ │ -
523 out[2] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1);
│ │ │ │ -
524 out[3] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1);
│ │ │ │ -
525 out[4] = 0;
│ │ │ │ -
526 out[5] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x;
│ │ │ │ -
527 out[6] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) + (y - z + 1)*((x + z + 1)*x + 2*z));
│ │ │ │ -
528 out[7] = -(x + z - 1)*(2*y - z - 1)*(x + 1);
│ │ │ │ -
529 out[8] = -(2*y - z + 1)*(x + z - 1)*(x + 1);
│ │ │ │ -
530 out[9] = 2*z*(x + z - 1);
│ │ │ │ -
531 out[10] = -2*z*(x + z + 1);
│ │ │ │ -
532 out[11] = -2*z*(x + z - 1);
│ │ │ │ -
533 out[12] = 2*z*(x + z + 1);
│ │ │ │ -
534 out[13] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + 1)*(x + z - 1)*(x + 1 - z));
│ │ │ │ -
535 break;
│ │ │ │ -
536 case 2:
│ │ │ │ -
537 out[0] = -((y - z)*(2*x + 2*z - 1)*(z - y + 1))/2;
│ │ │ │ -
538 out[1] = ((y - z + 1)*(y - 2*x + z + 2*x*y - 2*x*z + 2*y*z - 2*z*z))/2;
│ │ │ │ -
539 out[2] = ((y - z)*(2*x + 2*z - 1)*(y - z + 1))/2;
│ │ │ │ -
540 out[3] = ((y - z)*(2*x + 2*z + 1)*(y - z + 1))/2;
│ │ │ │ -
541 out[4] = 4*z - 1;
│ │ │ │ -
542 out[5] = (-(y - z + 1)*(2*x + z - 1)*(y - 1) - (x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x + (x + z - 1)*(y - 1)*x - (y - z + 1)*(y - 1)*x)/2;
│ │ │ │ -
543 out[6] = -((y - z + 1)*(3*y - 2*x + z + 3*x*y + x*z + y*z + x*x - 1))/2;
│ │ │ │ -
544 out[7] = z - z*(2*x + 1) - ((2*z - y*(z - y + 1))*(x + z - 1))/2 - ((2*x - y*(x + 1))*(x + z - 1))/2 + ((x + 1)*(x + z - 1)*(z - 2*y + 1))/2 + y*(x + 1)*(z - y + 1);
│ │ │ │ -
545 out[8] = -((y - z + 1)*(y + z + 3*x*y + x*z + y*z + x*x - 1))/2;
│ │ │ │ -
546 out[9] = -(x + 3*z - 1)*(z - y + 1);
│ │ │ │ -
547 out[10] = (x + z + 1)*(z - y + 1) - 2*y*z - 6*z + 2*z*z;
│ │ │ │ -
548 out[11] = -(x + 3*z - 1)*(y - z + 1);
│ │ │ │ -
549 out[12] = (x + 3*z + 1)*(y - z + 1);
│ │ │ │ -
550 out[13] = (y - z + 1)*(2*y - 3*x + z + 2*x*y + 6*x*z - 2*y*z + 2*x*x + 4*z*z - 3);
│ │ │ │ -
551 break;
│ │ │ │ -
552 default:
│ │ │ │ -
553 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
554 }
│ │ │ │ -
555 }
│ │ │ │ -
556 else // x <= y
│ │ │ │ -
557 {
│ │ │ │ -
558 switch (direction)
│ │ │ │ -
559 {
│ │ │ │ -
560 case 0:
│ │ │ │ -
561 out[0] = -((y + z)*(2*z - 2*x + 1)*(y + z - 1))/2;
│ │ │ │ -
562 out[1] = ((y + z)*(2*x - 2*z + 1)*(y + z - 1))/2;
│ │ │ │ -
563 out[2] = -((y + z + 1)*(y - 3*z - 2*x*y - 2*x*z + 2*y*z + 2*z*z))/2;
│ │ │ │ -
564 out[3] = ((y + z)*(2*x - 2*z + 1)*(y + z + 1))/2;
│ │ │ │ -
565 out[4] = 0;
│ │ │ │ -
566 out[5] = (y + 1)*(y + z - 1)*(z - 2*x + 1);
│ │ │ │ -
567 out[6] = -(y + 1)*(2*x - z + 1)*(y + z - 1);
│ │ │ │ -
568 out[7] = -y*(2*x - z)*(y + z - 1);
│ │ │ │ -
569 out[8] = z - z*(2*x + 1) - (2*z + y*(y + z + 1))*(x - z + 1) - y*(x - 1)*(y + z + 1);
│ │ │ │ -
570 out[9] = 2*z*(y + z - 1);
│ │ │ │ -
571 out[10] = -2*z*(y + z - 1);
│ │ │ │ -
572 out[11] = -2*z*(y + z + 1);
│ │ │ │ -
573 out[12] = 2*z*(y + z + 1);
│ │ │ │ -
574 out[13] = 2*(y + z - 1)*(2*x - z + 2*x*y - 2*x*z + 2*z*z);
│ │ │ │ -
575 break;
│ │ │ │ -
576 case 1:
│ │ │ │ -
577 out[0] = -(x - z)*(y + z - 0.5)*(z - x + 1);
│ │ │ │ -
578 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2;
│ │ │ │ -
579 out[2] = -((z - x + 1)*(x + 3*z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2;
│ │ │ │ -
580 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2;
│ │ │ │ -
581 out[4] = 0;
│ │ │ │ -
582 out[5] = z - z*(2*y + 1) - (2*z - x*(z - x + 1))*(y + z - 1) + x*(y + 1)*(z - x + 1);
│ │ │ │ -
583 out[6] = -x*(2*y + z)*(x - z + 1);
│ │ │ │ -
584 out[7] = -(x - 1)*(x - z + 1)*(2*y + z - 1);
│ │ │ │ -
585 out[8] = -(x - 1)*(x - z + 1)*(2*y + z + 1);
│ │ │ │ -
586 out[9] = -2*z*(z - x + 1);
│ │ │ │ -
587 out[10] = -2*z*(x - z + 1);
│ │ │ │ -
588 out[11] = 2*z*(z - x + 1);
│ │ │ │ -
589 out[12] = 2*z*(x - z + 1);
│ │ │ │ -
590 out[13] = 2*(x - z + 1)*(2*x*y - z - 2*y + 2*y*z + 2*z*z);
│ │ │ │ -
591 break;
│ │ │ │ -
592 case 2:
│ │ │ │ -
593 out[0] = -((x - z)*(2*y + 2*z - 1)*(z - x + 1))/2;
│ │ │ │ -
594 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2;
│ │ │ │ -
595 out[2] = ((x - z + 1)*(x - 2*y + z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2;
│ │ │ │ -
596 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2;
│ │ │ │ -
597 out[4] = 4*z - 1;
│ │ │ │ -
598 out[5] = z - z*(2*y + 1) - ((2*z - x*(z - x + 1))*(y + z - 1))/2 - ((2*y - x*(y + 1))*(y + z - 1))/2 + ((y + 1)*(y + z - 1)*(z - 2*x + 1))/2 + x*(y + 1)*(z - x + 1);
│ │ │ │ -
599 out[6] = -((x - z + 1)*(x + z + 3*x*y + x*z + y*z + y*y - 1))/2;
│ │ │ │ -
600 out[7] = -((x - z + 1)*(3*x*y - 4*y - z - x + x*z + y*z + y*y + 1))/2;
│ │ │ │ -
601 out[8] = -((x - z + 1)*(3*x - 2*y + z + 3*x*y + x*z + y*z + y*y - 1))/2;
│ │ │ │ -
602 out[9] = -(z - x + 1)*(y + 3*z - 1);
│ │ │ │ -
603 out[10] = -(x - z + 1)*(y + 3*z - 1);
│ │ │ │ -
604 out[11] = (y + z + 1)*(z - x + 1) - 2*x*z - 6*z + 2*z*z;
│ │ │ │ -
605 out[12] = (x - z + 1)*(y + 3*z + 1);
│ │ │ │ -
606 out[13] = (x - z + 1)*(2*x - 3*y + z + 2*x*y - 2*x*z + 6*y*z + 2*y*y + 4*z*z - 3);
│ │ │ │ -
607 break;
│ │ │ │ -
608 default:
│ │ │ │ -
609 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
610 }
│ │ │ │ -
611 }
│ │ │ │ -
612 } else {
│ │ │ │ -
613 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
614 }
│ │ │ │ -
615
│ │ │ │ -
616 return;
│ │ │ │ -
617 }
│ │ │ │ -
618
│ │ │ │ -
619 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::partial for order " << k);
│ │ │ │ -
620 }
│ │ │ │ -
621
│ │ │ │ -
623 static constexpr unsigned int order ()
│ │ │ │ -
624 {
│ │ │ │ -
625 return k;
│ │ │ │ -
626 }
│ │ │ │ -
627 };
│ │ │ │ -
628
│ │ │ │ -
633 template<unsigned int k>
│ │ │ │ -
634 class LagrangePyramidLocalCoefficients
│ │ │ │ -
635 {
│ │ │ │ -
636 public:
│ │ │ │ -
638 LagrangePyramidLocalCoefficients ()
│ │ │ │ -
639 : localKeys_(size())
│ │ │ │ -
640 {
│ │ │ │ -
641 if (k==0)
│ │ │ │ -
642 {
│ │ │ │ -
643 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ -
644 return;
│ │ │ │ -
645 }
│ │ │ │ -
646
│ │ │ │ -
647 if (k==1)
│ │ │ │ -
648 {
│ │ │ │ -
649 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
650 localKeys_[i] = LocalKey(i,3,0);
│ │ │ │ -
651 return;
│ │ │ │ -
652 }
│ │ │ │ -
653
│ │ │ │ -
654 if (k==2)
│ │ │ │ -
655 {
│ │ │ │ -
656 // Vertex shape functions
│ │ │ │ -
657 localKeys_[0] = LocalKey(0,3,0);
│ │ │ │ -
658 localKeys_[1] = LocalKey(1,3,0);
│ │ │ │ -
659 localKeys_[2] = LocalKey(2,3,0);
│ │ │ │ -
660 localKeys_[3] = LocalKey(3,3,0);
│ │ │ │ -
661 localKeys_[4] = LocalKey(4,3,0);
│ │ │ │ -
662
│ │ │ │ -
663 // Edge shape functions
│ │ │ │ -
664 localKeys_[5] = LocalKey(0,2,0);
│ │ │ │ -
665 localKeys_[6] = LocalKey(1,2,0);
│ │ │ │ -
666 localKeys_[7] = LocalKey(2,2,0);
│ │ │ │ -
667 localKeys_[8] = LocalKey(3,2,0);
│ │ │ │ -
668 localKeys_[9] = LocalKey(4,2,0);
│ │ │ │ -
669 localKeys_[10] = LocalKey(5,2,0);
│ │ │ │ -
670 localKeys_[11] = LocalKey(6,2,0);
│ │ │ │ -
671 localKeys_[12] = LocalKey(7,2,0);
│ │ │ │ -
672
│ │ │ │ -
673 // base face shape function
│ │ │ │ -
674 localKeys_[13] = LocalKey(0,1,0);
│ │ │ │ -
675
│ │ │ │ -
676 return;
│ │ │ │ -
677 }
│ │ │ │ -
678
│ │ │ │ -
679 // No general case
│ │ │ │ -
680 DUNE_THROW(NotImplemented, "LagrangePyramidLocalCoefficients for order " << k);
│ │ │ │ -
681
│ │ │ │ -
682 }
│ │ │ │ -
683
│ │ │ │ -
685 static constexpr std::size_t size ()
│ │ │ │ -
686 {
│ │ │ │ -
687 std::size_t result = 0;
│ │ │ │ -
688 for (unsigned int i=0; i<=k; i++)
│ │ │ │ -
689 result += power(i+1,2);
│ │ │ │ -
690 return result;
│ │ │ │ -
691 }
│ │ │ │ -
692
│ │ │ │ -
694 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
695 {
│ │ │ │ -
696 return localKeys_[i];
│ │ │ │ -
697 }
│ │ │ │ -
698
│ │ │ │ -
699 private:
│ │ │ │ -
700 std::vector<LocalKey> localKeys_;
│ │ │ │ -
701 };
│ │ │ │ -
702
│ │ │ │ -
707 template<class LocalBasis>
│ │ │ │ -
708 class LagrangePyramidLocalInterpolation
│ │ │ │ -
709 {
│ │ │ │ -
710 public:
│ │ │ │ -
711
│ │ │ │ -
719 template<typename F, typename C>
│ │ │ │ -
720 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
721 {
│ │ │ │ -
722 constexpr auto k = LocalBasis::order();
│ │ │ │ -
723 using D = typename LocalBasis::Traits::DomainType;
│ │ │ │ -
724 using DF = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ -
725
│ │ │ │ -
726 out.resize(LocalBasis::size());
│ │ │ │ -
727
│ │ │ │ -
728 // Specialization for zero-order case
│ │ │ │ -
729 if (k==0)
│ │ │ │ -
730 {
│ │ │ │ -
731 auto center = ReferenceElements<DF,3>::general(GeometryTypes::pyramid).position(0,0);
│ │ │ │ -
732 out[0] = f(center);
│ │ │ │ -
733 return;
│ │ │ │ -
734 }
│ │ │ │ -
735
│ │ │ │ -
736 // Specialization for first-order case
│ │ │ │ -
737 if (k==1)
│ │ │ │ -
738 {
│ │ │ │ -
739 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ -
740 {
│ │ │ │ -
741 auto vertex = ReferenceElements<DF,3>::general(GeometryTypes::pyramid).position(i,3);
│ │ │ │ -
742 out[i] = f(vertex);
│ │ │ │ -
743 }
│ │ │ │ -
744 return;
│ │ │ │ -
745 }
│ │ │ │ -
746
│ │ │ │ -
747 // Specialization for second-order case
│ │ │ │ -
748 if (k==2)
│ │ │ │ -
749 {
│ │ │ │ -
750 out[0] = f( D( {0.0, 0.0, 0.0} ) );
│ │ │ │ -
751 out[1] = f( D( {1.0, 0.0, 0.0} ) );
│ │ │ │ -
752 out[2] = f( D( {0.0, 1.0, 0.0} ) );
│ │ │ │ -
753 out[3] = f( D( {1.0, 1.0, 0.0} ) );
│ │ │ │ -
754 out[4] = f( D( {0.0, 0.0, 1.0} ) );
│ │ │ │ -
755 out[5] = f( D( {0.0, 0.5, 0.0} ) );
│ │ │ │ -
756 out[6] = f( D( {1.0, 0.5, 0.0} ) );
│ │ │ │ -
757 out[7] = f( D( {0.5, 0.0, 0.0} ) );
│ │ │ │ -
758 out[8] = f( D( {0.5, 1.0, 0.0} ) );
│ │ │ │ -
759 out[9] = f( D( {0.0, 0.0, 0.5} ) );
│ │ │ │ -
760 out[10] = f( D( {0.5, 0.0, 0.5} ) );
│ │ │ │ -
761 out[11] = f( D( {0.0, 0.5, 0.5} ) );
│ │ │ │ -
762 out[12] = f( D( {0.5, 0.5, 0.5} ) );
│ │ │ │ -
763 out[13] = f( D( {0.5, 0.5, 0.0} ) );
│ │ │ │ -
764
│ │ │ │ -
765 return;
│ │ │ │ -
766 }
│ │ │ │ -
767
│ │ │ │ -
768 DUNE_THROW(NotImplemented, "LagrangePyramidLocalInterpolation not implemented for order " << k);
│ │ │ │ -
769 }
│ │ │ │ -
770
│ │ │ │ -
771 };
│ │ │ │ -
772
│ │ │ │ -
773} } // namespace Dune::Impl
│ │ │ │ -
774
│ │ │ │ -
775namespace Dune
│ │ │ │ -
776{
│ │ │ │ -
807 template<class D, class R, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
809 {
│ │ │ │ -
810 public:
│ │ │ │ - │ │ │ │ -
814 Impl::LagrangePyramidLocalCoefficients<k>,
│ │ │ │ -
815 Impl::LagrangePyramidLocalInterpolation<Impl::LagrangePyramidLocalBasis<D,R,k> > >;
│ │ │ │ -
816
│ │ │ │ -
│ │ │ │ -
819 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
820 {
│ │ │ │ -
821 return basis_;
│ │ │ │ -
822 }
│ │ │ │ -
│ │ │ │ -
823
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
827 {
│ │ │ │ -
828 return coefficients_;
│ │ │ │ -
829 }
│ │ │ │ -
│ │ │ │ -
830
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
834 {
│ │ │ │ -
835 return interpolation_;
│ │ │ │ -
836 }
│ │ │ │ -
│ │ │ │ -
837
│ │ │ │ -
│ │ │ │ -
839 static constexpr std::size_t size ()
│ │ │ │ -
840 {
│ │ │ │ -
841 return Impl::LagrangePyramidLocalBasis<D,R,k>::size();
│ │ │ │ -
842 }
│ │ │ │ -
│ │ │ │ -
843
│ │ │ │ -
│ │ │ │ -
846 static constexpr GeometryType type ()
│ │ │ │ -
847 {
│ │ │ │ -
848 return GeometryTypes::pyramid;
│ │ │ │ -
849 }
│ │ │ │ -
│ │ │ │ -
850
│ │ │ │ -
851 private:
│ │ │ │ -
852 Impl::LagrangePyramidLocalBasis<D,R,k> basis_;
│ │ │ │ -
853 Impl::LagrangePyramidLocalCoefficients<k> coefficients_;
│ │ │ │ -
854 Impl::LagrangePyramidLocalInterpolation<Impl::LagrangePyramidLocalBasis<D,R,k> > interpolation_;
│ │ │ │ -
855 };
│ │ │ │ -
│ │ │ │ -
856
│ │ │ │ -
857} // namespace Dune
│ │ │ │ -
858
│ │ │ │ -
859#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
90#endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Lagrange finite element for 3d pyramids with compile-time polynomial order.
Definition lagrangepyramid.hh:809
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangepyramid.hh:826
│ │ │ │ -
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangepyramid.hh:839
│ │ │ │ -
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangepyramid.hh:846
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangepyramid.hh:819
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangepyramid.hh:833
│ │ │ │ - │ │ │ │ +
Definition basisevaluator.hh:131
│ │ │ │ +
Definition basismatrix.hh:27
│ │ │ │ +
Definition defaultbasisfactory.hh:16
│ │ │ │ +
static T apply(const T &t)
Definition defaultbasisfactory.hh:18
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │ +
InterpolationFactory::Object Interpolation
Definition defaultbasisfactory.hh:46
│ │ │ │ +
static const unsigned int dimRange
Definition defaultbasisfactory.hh:40
│ │ │ │ +
static void release(Object *object)
release the object returned by the create methods
Definition defaultbasisfactory.hh:81
│ │ │ │ +
CF ComputeField
Definition defaultbasisfactory.hh:42
│ │ │ │ +
PreBFactory PreBasisFactory
Definition defaultbasisfactory.hh:43
│ │ │ │ +
InterpolationFactory::Key Key
Definition defaultbasisfactory.hh:53
│ │ │ │ +
static const unsigned int dimension
Definition defaultbasisfactory.hh:39
│ │ │ │ +
static Object * create(const Key &key)
Definition defaultbasisfactory.hh:62
│ │ │ │ +
SF StorageField
Definition defaultbasisfactory.hh:41
│ │ │ │ +
MonomialBasisFactory::Object MonomialBasis
Definition defaultbasisfactory.hh:48
│ │ │ │ +
PreBasisFactory::Object PreBasis
Definition defaultbasisfactory.hh:44
│ │ │ │ +
const Basis Object
Definition defaultbasisfactory.hh:52
│ │ │ │ +
StandardEvaluator< MonomialBasis > Evaluator
Definition defaultbasisfactory.hh:49
│ │ │ │ +
InterpolFactory InterpolationFactory
Definition defaultbasisfactory.hh:45
│ │ │ │ +
PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type MonomialBasisFactory
Definition defaultbasisfactory.hh:47
│ │ │ │ +
PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis
Definition defaultbasisfactory.hh:50
│ │ │ │ +
Definition defaultbasisfactory.hh:56
│ │ │ │ +
PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type
Definition defaultbasisfactory.hh:58
│ │ │ │ +
Definition monomialbasis.hh:612
│ │ │ │ +
static void release(Object *object)
Definition monomialbasis.hh:769
│ │ │ │ +
Definition polynomialbasis.hh:348
│ │ │ │ +
void fill(const Matrix &matrix)
Definition polynomialbasis.hh:366
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,861 +1,188 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangepyramid.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +defaultbasisfactory.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ +5#ifndef DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ +6#define DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e { namespace Impl │ │ │ │ │ -22{ │ │ │ │ │ -32 template │ │ │ │ │ -33 class LagrangePyramidLocalBasis │ │ │ │ │ -34 { │ │ │ │ │ -35 public: │ │ │ │ │ -36 using Traits = │ │ │ │ │ -LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ -37 │ │ │ │ │ -40 static constexpr std::size_t size () │ │ │ │ │ -41 { │ │ │ │ │ -42 std::size_t result = 0; │ │ │ │ │ -43 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ -44 result += power(i+1,2); │ │ │ │ │ -45 return result; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -49 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -50 std::vector& out) const │ │ │ │ │ -51 { │ │ │ │ │ -52 out.resize(size()); │ │ │ │ │ -53 │ │ │ │ │ -54 // Specialization for zero-order case │ │ │ │ │ -55 if (k==0) │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_m_a_t_r_i_x_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +_1_5 struct _I_d_e_n_t_i_t_y │ │ │ │ │ +16 { │ │ │ │ │ +17 template │ │ │ │ │ +_1_8 static T _a_p_p_l_y( const T &t ) │ │ │ │ │ +19 { │ │ │ │ │ +20 return t; │ │ │ │ │ +21 } │ │ │ │ │ +22 }; │ │ │ │ │ +23 /************************************************ │ │ │ │ │ +24 * Class for providing a factory for basis │ │ │ │ │ +25 * functions over the set of reference elements. │ │ │ │ │ +26 * Is based on the TopologyFactory but additionally │ │ │ │ │ +27 * provides rebindes of the field type. │ │ │ │ │ +28 * The user provides factories for the pre basis and the │ │ │ │ │ +29 * interpolations. The default construction process of │ │ │ │ │ +30 * the basis is performed in this class. │ │ │ │ │ +31 ************************************************/ │ │ │ │ │ +32 template< class PreBFactory, │ │ │ │ │ +33 class InterpolFactory, │ │ │ │ │ +34 unsigned int dim, unsigned int dimR, │ │ │ │ │ +35 class SF, class CF, │ │ │ │ │ +36 class PreBasisKeyExtractor = Identity > │ │ │ │ │ +_3_7 struct _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +38 { │ │ │ │ │ +_3_9 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_4_0 static const unsigned int _d_i_m_R_a_n_g_e = dimR; │ │ │ │ │ +_4_1 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +_4_2 typedef CF _C_o_m_p_u_t_e_F_i_e_l_d; │ │ │ │ │ +_4_3 typedef PreBFactory _P_r_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_4_4 typedef typename PreBasisFactory::Object _P_r_e_B_a_s_i_s; │ │ │ │ │ +_4_5 typedef InterpolFactory _I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ +_4_6 typedef typename InterpolationFactory::Object _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_4_7 typedef typename PreBasisFactory::template _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_d_i_m_,_S_F_>_:_: │ │ │ │ │ +_T_y_p_e _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_4_8 typedef typename _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _M_o_n_o_m_i_a_l_B_a_s_i_s; │ │ │ │ │ +_4_9 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _M_o_n_o_m_i_a_l_B_a_s_i_s_ _> _E_v_a_l_u_a_t_o_r; │ │ │ │ │ +_5_0 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_u_a_t_o_r_,_ _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _S_F_, │ │ │ │ │ +_d_i_m_R_a_n_g_e_ _> > _B_a_s_i_s; │ │ │ │ │ +51 │ │ │ │ │ +_5_2 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ +_5_3 typedef typename InterpolationFactory::Key _K_e_y; │ │ │ │ │ +54 template │ │ │ │ │ +_5_5 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ 56 { │ │ │ │ │ -57 out[0] = 1; │ │ │ │ │ -58 return; │ │ │ │ │ -59 } │ │ │ │ │ +57 typedef typename PreBasisFactory::template _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_d_d_,_F_F_>_:_: │ │ │ │ │ +_T_y_p_e │ │ │ │ │ +_5_8 _T_y_p_e; │ │ │ │ │ +59 }; │ │ │ │ │ 60 │ │ │ │ │ -61 if (k==1) │ │ │ │ │ -62 { │ │ │ │ │ -63 if(in[0] > in[1]) │ │ │ │ │ -64 { │ │ │ │ │ -65 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[1]); │ │ │ │ │ -66 out[1] = in[0]*(1-in[1])-in[2]*in[1]; │ │ │ │ │ -67 out[2] = (1-in[0])*in[1]-in[2]*in[1]; │ │ │ │ │ -68 out[3] = in[0]*in[1]+in[2]*in[1]; │ │ │ │ │ -69 } │ │ │ │ │ -70 else │ │ │ │ │ -71 { │ │ │ │ │ -72 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[0]); │ │ │ │ │ -73 out[1] = in[0]*(1-in[1])-in[2]*in[0]; │ │ │ │ │ -74 out[2] = (1-in[0])*in[1]-in[2]*in[0]; │ │ │ │ │ -75 out[3] = in[0]*in[1]+in[2]*in[0]; │ │ │ │ │ -76 } │ │ │ │ │ +61 template< GeometryType::Id geometryId > │ │ │ │ │ +_6_2 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ +63 { │ │ │ │ │ +64 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor:: │ │ │ │ │ +apply(key); │ │ │ │ │ +65 const _P_r_e_B_a_s_i_s *preBasis = PreBasisFactory::template create │ │ │ │ │ +( preBasisKey ); │ │ │ │ │ +66 const _I_n_t_e_r_p_o_l_a_t_i_o_n *interpol = InterpolationFactory::template │ │ │ │ │ +create( key ); │ │ │ │ │ +67 _B_a_s_i_s_M_a_t_r_i_x_<_ _P_r_e_B_a_s_i_s_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _C_o_m_p_u_t_e_F_i_e_l_d_ _> matrix( *preBasis, │ │ │ │ │ +*interpol ); │ │ │ │ │ +68 │ │ │ │ │ +69 const _M_o_n_o_m_i_a_l_B_a_s_i_s *monomialBasis = MonomialBasisFactory::template create< │ │ │ │ │ +geometryId >( preBasis->order() ); │ │ │ │ │ +70 │ │ │ │ │ +71 _B_a_s_i_s *basis = new _B_a_s_i_s( *monomialBasis ); │ │ │ │ │ +72 │ │ │ │ │ +73 basis->_f_i_l_l( matrix ); │ │ │ │ │ +74 │ │ │ │ │ +75 InterpolationFactory::release(interpol); │ │ │ │ │ +76 PreBasisFactory::release(preBasis); │ │ │ │ │ 77 │ │ │ │ │ -78 out[4] = in[2]; │ │ │ │ │ -79 │ │ │ │ │ -80 return; │ │ │ │ │ -81 } │ │ │ │ │ -82 │ │ │ │ │ -83 if (k==2) │ │ │ │ │ -84 { │ │ │ │ │ -85 // transform to reference element with base [-1,1]^2 │ │ │ │ │ -86 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ -87 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ -88 const R z = in[2]; │ │ │ │ │ +78 return basis; │ │ │ │ │ +79 } │ │ │ │ │ +_8_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object) │ │ │ │ │ +82 { │ │ │ │ │ +83 const _M_o_n_o_m_i_a_l_B_a_s_i_s *monomialBasis = &(object->basis()); │ │ │ │ │ +84 delete object; │ │ │ │ │ +85 _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( monomialBasis ); │ │ │ │ │ +86 } │ │ │ │ │ +87 }; │ │ │ │ │ +88} │ │ │ │ │ 89 │ │ │ │ │ -90 if (x > y) │ │ │ │ │ -91 { │ │ │ │ │ -92 // vertices │ │ │ │ │ -93 out[0] = 0.25*(x + z)*(x + z - 1)*(y - z - 1)*(y - z); │ │ │ │ │ -94 out[1] = -0.25*(x + z)*(y - z)*((x + z + 1)*(-y + z + 1) - 4*z) - z*(x - y); │ │ │ │ │ -95 out[2] = 0.25*(x + z)*(y - z)*(y - z + 1)*(x + z - 1); │ │ │ │ │ -96 out[3] = 0.25*(y - z)*(x + z)*(y - z + 1)*(x + z + 1); │ │ │ │ │ -97 out[4] = z*(2*z - 1); │ │ │ │ │ -98 │ │ │ │ │ -99 // lower edges │ │ │ │ │ -100 out[5] = -0.5*(y - z + 1)*(x + z - 1)*(y - 1)*x; │ │ │ │ │ -101 out[6] = -0.5*(y - z + 1)*(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)); │ │ │ │ │ -102 out[7] = -0.5*(x + z - 1)*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)); │ │ │ │ │ -103 out[8] = -0.5*(y - z + 1)*(x + z - 1)*(x + 1)*y; │ │ │ │ │ -104 │ │ │ │ │ -105 // upper edges │ │ │ │ │ -106 out[9] = z*(x + z - 1)*(y - z - 1); │ │ │ │ │ -107 out[10] = -z*((x + z + 1)*(y - z - 1) + 4*z); │ │ │ │ │ -108 out[11] = -z*(y - z + 1)*(x + z - 1); │ │ │ │ │ -109 out[12] = z*(y - z + 1)*(x + z + 1); │ │ │ │ │ -110 │ │ │ │ │ -111 // base face │ │ │ │ │ -112 out[13] = (y - z + 1)*(x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)); │ │ │ │ │ -113 } │ │ │ │ │ -114 else │ │ │ │ │ -115 { │ │ │ │ │ -116 // vertices │ │ │ │ │ -117 out[0] = 0.25*(y + z)*(y + z - 1)*(x - z - 1)*(x - z); │ │ │ │ │ -118 out[1] = -0.25*(x - z)*(y + z)*(x - z + 1)*(-y - z + 1); │ │ │ │ │ -119 out[2] = 0.25*(x - z)*(y + z)*((x - z - 1)*(y + z + 1) + 4*z) + z*(x - y); │ │ │ │ │ -120 out[3] = 0.25*(y + z)*(x - z)*(x - z + 1)*(y + z + 1); │ │ │ │ │ -121 out[4] = z*(2*z - 1); │ │ │ │ │ -122 │ │ │ │ │ -123 // lower edges │ │ │ │ │ -124 out[5] = -0.5*(y + z - 1)*(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)); │ │ │ │ │ -125 out[6] = -0.5*(x - z + 1)*(y + z - 1)*(y + 1)*x; │ │ │ │ │ -126 out[7] = -0.5*(x - z + 1)*(y + z - 1)*(x - 1)*y; │ │ │ │ │ -127 out[8] = -0.5*(x - z + 1)*(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)); │ │ │ │ │ -128 │ │ │ │ │ -129 // upper edges │ │ │ │ │ -130 out[9] = z*(y + z - 1)*(x - z - 1); │ │ │ │ │ -131 out[10] = -z*(x - z + 1)*(y + z - 1); │ │ │ │ │ -132 out[11] = -z*((y + z + 1)*(x - z - 1) + 4*z); │ │ │ │ │ -133 out[12] = z*(x - z + 1)*(y + z + 1); │ │ │ │ │ -134 │ │ │ │ │ -135 // base face │ │ │ │ │ -136 out[13] = (x - z + 1)*(y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)); │ │ │ │ │ -137 } │ │ │ │ │ -138 │ │ │ │ │ -139 return; │ │ │ │ │ -140 } │ │ │ │ │ -141 │ │ │ │ │ -142 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateFunction for │ │ │ │ │ -order " << k); │ │ │ │ │ -143 } │ │ │ │ │ -144 │ │ │ │ │ -150 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -151 std::vector& out) const │ │ │ │ │ -152 { │ │ │ │ │ -153 out.resize(size()); │ │ │ │ │ -154 │ │ │ │ │ -155 // Specialization for k==0 │ │ │ │ │ -156 if (k==0) │ │ │ │ │ -157 { │ │ │ │ │ -158 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ -159 return; │ │ │ │ │ -160 } │ │ │ │ │ -161 │ │ │ │ │ -162 if (k==1) │ │ │ │ │ -163 { │ │ │ │ │ -164 if(in[0] > in[1]) │ │ │ │ │ -165 { │ │ │ │ │ -166 out[0][0] = {-1 + in[1], -1 + in[0] + in[2], -1 + in[1]}; │ │ │ │ │ -167 out[1][0] = { 1 - in[1], -in[0] - in[2], -in[1]}; │ │ │ │ │ -168 out[2][0] = { -in[1], 1 - in[0] - in[2], -in[1]}; │ │ │ │ │ -169 out[3][0] = { in[1], in[0] + in[2], in[1]}; │ │ │ │ │ -170 } │ │ │ │ │ -171 else │ │ │ │ │ -172 { │ │ │ │ │ -173 out[0][0] = {-1 + in[1] + in[2], -1 + in[0], -1 + in[0]}; │ │ │ │ │ -174 out[1][0] = { 1 - in[1] - in[2], -in[0], -in[0]}; │ │ │ │ │ -175 out[2][0] = { -in[1] - in[2], 1 - in[0], -in[0]}; │ │ │ │ │ -176 out[3][0] = { in[1] + in[2], in[0], in[0]}; │ │ │ │ │ -177 } │ │ │ │ │ -178 │ │ │ │ │ -179 out[4][0] = {0, 0, 1}; │ │ │ │ │ -180 return; │ │ │ │ │ -181 } │ │ │ │ │ -182 │ │ │ │ │ -183 if (k==2) │ │ │ │ │ -184 { │ │ │ │ │ -185 // transform to reference element with base [-1,1]^2 │ │ │ │ │ -186 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ -187 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ -188 const R z = in[2]; │ │ │ │ │ -189 │ │ │ │ │ -190 // transformation of the gradient leads to a multiplication │ │ │ │ │ -191 // with the Jacobian [2 0 0; 0 2 0; 1 1 1] │ │ │ │ │ -192 if (x > y) │ │ │ │ │ -193 { │ │ │ │ │ -194 // vertices │ │ │ │ │ -195 out[0][0][0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1); │ │ │ │ │ -196 out[0][0][1] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1); │ │ │ │ │ -197 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1]) │ │ │ │ │ -198 + 0.25*((2*x + 2*z - 1)*(y - z - 1)*(y - z) │ │ │ │ │ -199 + (x + z)*(x + z - 1)*(-2*y + 2*z + 1)); │ │ │ │ │ -200 │ │ │ │ │ -201 out[1][0][0] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ -202 + (x + z)*(y - z)*(-y + z + 1)) - z); │ │ │ │ │ -203 out[1][0][1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ -204 + (x + z)*(y - z)*(-(x + z + 1))) + z); │ │ │ │ │ -205 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1]) │ │ │ │ │ -206 - 0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ -207 - (x + z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ -208 + (x + z)*(y - z)*(x - y + 2*z - 2)) │ │ │ │ │ -209 - (x - y); │ │ │ │ │ -210 │ │ │ │ │ -211 out[2][0][0] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1); │ │ │ │ │ -212 out[2][0][1] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1); │ │ │ │ │ -213 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1]) │ │ │ │ │ -214 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z - 1) │ │ │ │ │ -215 + (x + z)*(y - z)*(y - x - 2*z + 2)); │ │ │ │ │ -216 │ │ │ │ │ -217 out[3][0][0] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1); │ │ │ │ │ -218 out[3][0][1] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1); │ │ │ │ │ -219 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1]) │ │ │ │ │ -220 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z + 1) │ │ │ │ │ -221 + (y - z)*(x + z)*(y - x - 2*z)); │ │ │ │ │ -222 │ │ │ │ │ -223 out[4][0][0] = 0; │ │ │ │ │ -224 out[4][0][1] = 0; │ │ │ │ │ -225 out[4][0][2] = 4*z - 1; │ │ │ │ │ -226 │ │ │ │ │ -227 // lower edges │ │ │ │ │ -228 out[5][0][0] = -(y - z + 1)*(y - 1)*(2*x + z - 1); │ │ │ │ │ -229 out[5][0][1] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x; │ │ │ │ │ -230 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1]) │ │ │ │ │ -231 + 0.5*(x + z - 1)*(y - 1)*x - 0.5*(y - z + 1)*(y - 1)*x; │ │ │ │ │ -232 │ │ │ │ │ -233 out[6][0][0] = -(y - z + 1)*(2*x + z + 1)*(y - 1); │ │ │ │ │ -234 out[6][0][1] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) │ │ │ │ │ -235 + (y - z + 1)*((x + z + 1)*x + 2*z)); │ │ │ │ │ -236 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1]) │ │ │ │ │ -237 - 0.5*(-(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)) │ │ │ │ │ -238 + (y - z + 1)*(((y - 1)*x - 1) + 2*y + 1)); │ │ │ │ │ -239 │ │ │ │ │ -240 out[7][0][0] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) │ │ │ │ │ -241 + (x + z - 1)*((y - z - 1)*y + 2*z)); │ │ │ │ │ -242 out[7][0][1] = -(x + z - 1)*(2*y - z - 1)*(x + 1); │ │ │ │ │ -243 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1]) │ │ │ │ │ -244 - 0.5*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) │ │ │ │ │ -245 + (x + z - 1)*((-(x + 1)*y - 1) + 2*x + 1)); │ │ │ │ │ -246 │ │ │ │ │ -247 out[8][0][0] = -(y - z + 1)*(2*x + z)*y; │ │ │ │ │ -248 out[8][0][1] = -(2*y - z + 1)*(x + z - 1)*(x + 1); │ │ │ │ │ -249 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1]) │ │ │ │ │ -250 - 0.5*(-x + y - 2*z + 2)*(x + 1)*y; │ │ │ │ │ -251 │ │ │ │ │ -252 // upper edges │ │ │ │ │ -253 out[9][0][0] = 2*z*(y - z - 1); │ │ │ │ │ -254 out[9][0][1] = 2*z*(x + z - 1); │ │ │ │ │ -255 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1]) │ │ │ │ │ -256 + (x + z - 1)*(y - z - 1) + z*(-x + y - 2*z); │ │ │ │ │ -257 │ │ │ │ │ -258 out[10][0][0] = -2*z*(y - z - 1); │ │ │ │ │ -259 out[10][0][1] = -2*z*(x + z + 1); │ │ │ │ │ -260 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1]) │ │ │ │ │ -261 - ((x + z + 1)*(y - z - 1) + 4*z) │ │ │ │ │ -262 - z*(-x + y - 2*z + 2); │ │ │ │ │ -263 │ │ │ │ │ -264 out[11][0][0] = -2*z*(y - z + 1); │ │ │ │ │ -265 out[11][0][1] = -2*z*(x + z - 1); │ │ │ │ │ -266 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1]) │ │ │ │ │ -267 - (y - z + 1)*(x + z - 1) - z*(-x + y - 2*z + 2); │ │ │ │ │ -268 │ │ │ │ │ -269 out[12][0][0] = 2*z*(y - z + 1); │ │ │ │ │ -270 out[12][0][1] = 2*z*(x + z + 1); │ │ │ │ │ -271 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1]) │ │ │ │ │ -272 + (y - z + 1)*(x + z + 1) + z*(-x + y - 2*z); │ │ │ │ │ -273 │ │ │ │ │ -274 // base face │ │ │ │ │ -275 out[13][0][0] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ -276 + (y - z + 1)*(x + z - 1)*(y - 1 + z)); │ │ │ │ │ -277 out[13][0][1] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ -278 + (y - z + 1)*(x + z - 1)*(x + 1 - z)); │ │ │ │ │ -279 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1]) │ │ │ │ │ -280 + ((-x + y - 2*z + 2)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ -281 + (y - z + 1)*(x + z - 1)*(x - y + 2*z + 1)); │ │ │ │ │ -282 } │ │ │ │ │ -283 else │ │ │ │ │ -284 { │ │ │ │ │ -285 // vertices │ │ │ │ │ -286 out[0][0][0] = 0.5*(y + z)*(y + z - 1)*(2*x - 2*z - 1); │ │ │ │ │ -287 out[0][0][1] = 0.5*(2*y + 2*z - 1)*(x - z - 1)*(x - z); │ │ │ │ │ -288 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1]) │ │ │ │ │ -289 + 0.25*((2*y + 2*z - 1)*(x - z - 1)*(x - z) │ │ │ │ │ -290 + (y + z)*(y + z - 1)*(-2*x + 2*z + 1)); │ │ │ │ │ -291 │ │ │ │ │ -292 out[1][0][0] = -0.5*(y + z)*(2*x - 2*z + 1)*(-y - z + 1); │ │ │ │ │ -293 out[1][0][1] = -0.5*(x - z)*(x - z + 1)*(-2*y - 2*z + 1); │ │ │ │ │ -294 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1]) │ │ │ │ │ -295 - 0.25*((x - y - 2*z)*(x - z + 1)*(-y - z + 1) │ │ │ │ │ -296 + (x - z)*(y + z)*(-x + y + 2*z - 2)); │ │ │ │ │ -297 │ │ │ │ │ -298 out[2][0][0] = 0.5*((y + z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ -299 + (x - z)*(y + z)*(y + z + 1) + 4*z); │ │ │ │ │ -300 out[2][0][1] = 0.5*((x - z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ -301 + (x - z)*(y + z)*(x - z - 1) - 4*z); │ │ │ │ │ -302 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1]) │ │ │ │ │ -303 + 0.25*((x - y - 2*z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ -304 + (x - z)*(y + z)*(x - y - 2*z + 2) + 4*(x - y)); │ │ │ │ │ -305 │ │ │ │ │ -306 out[3][0][0] = 0.5*(y + z)*(2*x - 2*z + 1)*(y + z + 1); │ │ │ │ │ -307 out[3][0][1] = 0.5*(x - z)*(x - z + 1)*(2*y + 2*z + 1); │ │ │ │ │ -308 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1]) │ │ │ │ │ -309 + 0.25*((x - y - 2*z)*(x - z + 1)*(y + z + 1) │ │ │ │ │ -310 + (y + z)*(x - z)*(x - y - 2*z)); │ │ │ │ │ -311 │ │ │ │ │ -312 out[4][0][0] = 0; │ │ │ │ │ -313 out[4][0][1] = 0; │ │ │ │ │ -314 out[4][0][2] = 4*z - 1; │ │ │ │ │ -315 │ │ │ │ │ -316 // lower edges │ │ │ │ │ -317 out[5][0][0] = -(y + z - 1)*(2*x - z - 1)*(y + 1); │ │ │ │ │ -318 out[5][0][1] = -(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1) │ │ │ │ │ -319 + (y + z - 1)*((x - z - 1)*x + 2*z)); │ │ │ │ │ -320 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1]) │ │ │ │ │ -321 - 0.5*((((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)) │ │ │ │ │ -322 + (y + z - 1)*((-(y + 1)*x - 1) + 2*y + 1)); │ │ │ │ │ -323 │ │ │ │ │ -324 out[6][0][0] = -(2*x - z + 1)*(y + z - 1)*(y + 1); │ │ │ │ │ -325 out[6][0][1] = -(x - z + 1)*(2*y + z)*x; │ │ │ │ │ -326 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1]) │ │ │ │ │ -327 - 0.5*(x - y - 2*z + 2)*(y + 1)*x; │ │ │ │ │ -328 │ │ │ │ │ -329 out[7][0][0] = -(2*x - z)*(y + z - 1)*y; │ │ │ │ │ -330 out[7][0][1] = -(x - z + 1)*(2*y + z - 1)*(x - 1); │ │ │ │ │ -331 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1]) │ │ │ │ │ -332 - 0.5*(x - y - 2*z + 2)*(x - 1)*y; │ │ │ │ │ -333 │ │ │ │ │ -334 out[8][0][0] = -(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1) │ │ │ │ │ -335 + (x - z + 1)*((y + z + 1)*y + 2*z)); │ │ │ │ │ -336 out[8][0][1] = -(x - z + 1)*(2*y + z + 1)*(x - 1); │ │ │ │ │ -337 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1]) │ │ │ │ │ -338 - 0.5*(-(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)) │ │ │ │ │ -339 + (x - z + 1)*(((x - 1)*y - 1) + 2*x + 1)); │ │ │ │ │ -340 │ │ │ │ │ -341 // upper edges │ │ │ │ │ -342 out[9][0][0] = 2*z*(y + z - 1); │ │ │ │ │ -343 out[9][0][1] = 2*z*(x - z - 1); │ │ │ │ │ -344 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1]) │ │ │ │ │ -345 + (y + z - 1)*(x - z - 1) + z*(x - y - 2*z); │ │ │ │ │ -346 │ │ │ │ │ -347 out[10][0][0] = -2*z*(y + z - 1); │ │ │ │ │ -348 out[10][0][1] = -2*z*(x - z + 1); │ │ │ │ │ -349 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1]) │ │ │ │ │ -350 - (x - z + 1)*(y + z - 1) - z*(x - y - 2*z + 2); │ │ │ │ │ -351 │ │ │ │ │ -352 out[11][0][0] = -2*z*(y + z + 1); │ │ │ │ │ -353 out[11][0][1] = -2*z*(x - z - 1); │ │ │ │ │ -354 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1]) │ │ │ │ │ -355 - ((y + z + 1)*(x - z - 1) + 4*z) - z*(x - y - 2*z + 2); │ │ │ │ │ -356 │ │ │ │ │ -357 out[12][0][0] = 2*z*(y + z + 1); │ │ │ │ │ -358 out[12][0][1] = 2*z*(x - z + 1); │ │ │ │ │ -359 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1]) │ │ │ │ │ -360 + (x - z + 1)*(y + z + 1) + z*(x - y - 2*z); │ │ │ │ │ -361 │ │ │ │ │ -362 // base face │ │ │ │ │ -363 out[13][0][0] = 2*((y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ -364 + (x - z + 1)*(y + z - 1)*(y + 1 - z)); │ │ │ │ │ -365 out[13][0][1] = 2*((x - z + 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ -366 + (x - z + 1)*(y + z - 1)*(x - 1 + z)); │ │ │ │ │ -367 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1]) │ │ │ │ │ -368 + (x - y - 2*z + 2)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ -369 + (x - z + 1)*(y + z - 1)*(-(x - y - 2*z - 1)); │ │ │ │ │ -370 } │ │ │ │ │ -371 │ │ │ │ │ -372 return; │ │ │ │ │ -373 } │ │ │ │ │ -374 │ │ │ │ │ -375 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateJacobian for │ │ │ │ │ -order " << k); │ │ │ │ │ -376 } │ │ │ │ │ -377 │ │ │ │ │ -384 void partial(const std::array& order, │ │ │ │ │ -385 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -386 std::vector& out) const │ │ │ │ │ -387 { │ │ │ │ │ -388 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -389 │ │ │ │ │ -390 out.resize(size()); │ │ │ │ │ -391 │ │ │ │ │ -392 if (totalOrder == 0) │ │ │ │ │ -393 { │ │ │ │ │ -394 evaluateFunction(in, out); │ │ │ │ │ -395 return; │ │ │ │ │ -396 } │ │ │ │ │ -397 │ │ │ │ │ -398 if (k==0) │ │ │ │ │ -399 { │ │ │ │ │ -400 out[0] = 0; │ │ │ │ │ -401 return; │ │ │ │ │ -402 } │ │ │ │ │ -403 │ │ │ │ │ -404 if (k==1) │ │ │ │ │ -405 { │ │ │ │ │ -406 if (totalOrder == 1) │ │ │ │ │ -407 { │ │ │ │ │ -408 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -409 if (in[0] > in[1]) │ │ │ │ │ -410 { │ │ │ │ │ -411 switch (direction) │ │ │ │ │ -412 { │ │ │ │ │ -413 case 0: │ │ │ │ │ -414 out[0] = -1 + in[1]; │ │ │ │ │ -415 out[1] = 1 - in[1]; │ │ │ │ │ -416 out[2] = -in[1]; │ │ │ │ │ -417 out[3] = in[1]; │ │ │ │ │ -418 out[4] = 0; │ │ │ │ │ -419 break; │ │ │ │ │ -420 case 1: │ │ │ │ │ -421 out[0] = -1 + in[0] + in[2]; │ │ │ │ │ -422 out[1] = -in[0] - in[2]; │ │ │ │ │ -423 out[2] = 1 - in[0] - in[2]; │ │ │ │ │ -424 out[3] = in[0]+in[2]; │ │ │ │ │ -425 out[4] = 0; │ │ │ │ │ -426 break; │ │ │ │ │ -427 case 2: │ │ │ │ │ -428 out[0] = -1 + in[1]; │ │ │ │ │ -429 out[1] = -in[1]; │ │ │ │ │ -430 out[2] = -in[1]; │ │ │ │ │ -431 out[3] = in[1]; │ │ │ │ │ -432 out[4] = 1; │ │ │ │ │ -433 break; │ │ │ │ │ -434 default: │ │ │ │ │ -435 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -436 } │ │ │ │ │ -437 } │ │ │ │ │ -438 else /* (in[0] <= in[1]) */ │ │ │ │ │ -439 { │ │ │ │ │ -440 switch (direction) │ │ │ │ │ -441 { │ │ │ │ │ -442 case 0: │ │ │ │ │ -443 out[0] = -1 + in[1] + in[2]; │ │ │ │ │ -444 out[1] = 1 - in[1] - in[2]; │ │ │ │ │ -445 out[2] = -in[1] - in[2]; │ │ │ │ │ -446 out[3] = in[1] + in[2]; │ │ │ │ │ -447 out[4] = 0; │ │ │ │ │ -448 break; │ │ │ │ │ -449 case 1: │ │ │ │ │ -450 out[0] = -1 + in[0]; │ │ │ │ │ -451 out[1] = -in[0]; │ │ │ │ │ -452 out[2] = 1 - in[0]; │ │ │ │ │ -453 out[3] = in[0]; │ │ │ │ │ -454 out[4] = 0; │ │ │ │ │ -455 break; │ │ │ │ │ -456 case 2: │ │ │ │ │ -457 out[0] = -1 + in[0]; │ │ │ │ │ -458 out[1] = -in[0]; │ │ │ │ │ -459 out[2] = -in[0]; │ │ │ │ │ -460 out[3] = in[0]; │ │ │ │ │ -461 out[4] = 1; │ │ │ │ │ -462 break; │ │ │ │ │ -463 default: │ │ │ │ │ -464 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -465 } │ │ │ │ │ -466 } │ │ │ │ │ -467 } else if (totalOrder == 2) │ │ │ │ │ -468 { │ │ │ │ │ -469 if ((order[0] == 1 && order[1] == 1) || │ │ │ │ │ -470 (order[1] == 1 && order[2] == 1 && in[0] > in[1]) || │ │ │ │ │ -471 (order[0] == 1 && order[2] == 1 && in[0] <=in[1])) │ │ │ │ │ -472 { │ │ │ │ │ -473 out = {1, -1, -1, 1, 0}; │ │ │ │ │ -474 } else │ │ │ │ │ -475 { │ │ │ │ │ -476 out = {0, 0, 0, 0, 0}; │ │ │ │ │ -477 } │ │ │ │ │ -478 │ │ │ │ │ -479 } else │ │ │ │ │ -480 { │ │ │ │ │ -481 out = {0, 0, 0, 0, 0}; │ │ │ │ │ -482 } │ │ │ │ │ -483 │ │ │ │ │ -484 return; │ │ │ │ │ -485 } │ │ │ │ │ -486 │ │ │ │ │ -487 if (k==2) │ │ │ │ │ -488 { │ │ │ │ │ -489 if (totalOrder == 1) │ │ │ │ │ -490 { │ │ │ │ │ -491 // transform to reference element with base [-1,1]^2 │ │ │ │ │ -492 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ -493 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ -494 const R z = in[2]; │ │ │ │ │ -495 │ │ │ │ │ -496 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -497 │ │ │ │ │ -498 // transformation of the gradient leads to a multiplication │ │ │ │ │ -499 // with the Jacobian [2 0 0; 0 2 0; 1 1 1] │ │ │ │ │ -500 if (x > y) │ │ │ │ │ -501 { │ │ │ │ │ -502 switch (direction) │ │ │ │ │ -503 { │ │ │ │ │ -504 case 0: │ │ │ │ │ -505 out[0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1); │ │ │ │ │ -506 out[1] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - │ │ │ │ │ -z)*(-y + z + 1)) - z); │ │ │ │ │ -507 out[2] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1); │ │ │ │ │ -508 out[3] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1); │ │ │ │ │ -509 out[4] = 0; │ │ │ │ │ -510 out[5] = -(y - z + 1)*(2*x + z - 1)*(y - 1); │ │ │ │ │ -511 out[6] = -(y - z + 1)*(2*x + z + 1)*(y - 1); │ │ │ │ │ -512 out[7] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) + (x + z - 1)*((y - z │ │ │ │ │ -- 1)*y + 2*z)); │ │ │ │ │ -513 out[8] = -(y - z + 1)*(2*x + z)*y; │ │ │ │ │ -514 out[9] = 2*z*(y - z - 1); │ │ │ │ │ -515 out[10] = -2*z*(y - z - 1); │ │ │ │ │ -516 out[11] = -2*z*(y - z + 1); │ │ │ │ │ -517 out[12] = 2*z*(y - z + 1); │ │ │ │ │ -518 out[13] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + │ │ │ │ │ -1)*(x + z - 1)*(y - 1 + z)); │ │ │ │ │ -519 break; │ │ │ │ │ -520 case 1: │ │ │ │ │ -521 out[0] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1); │ │ │ │ │ -522 out[1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - │ │ │ │ │ -z)*(-(x + z + 1))) + z); │ │ │ │ │ -523 out[2] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1); │ │ │ │ │ -524 out[3] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1); │ │ │ │ │ -525 out[4] = 0; │ │ │ │ │ -526 out[5] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x; │ │ │ │ │ -527 out[6] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) + (y - z + 1)*((x + z │ │ │ │ │ -+ 1)*x + 2*z)); │ │ │ │ │ -528 out[7] = -(x + z - 1)*(2*y - z - 1)*(x + 1); │ │ │ │ │ -529 out[8] = -(2*y - z + 1)*(x + z - 1)*(x + 1); │ │ │ │ │ -530 out[9] = 2*z*(x + z - 1); │ │ │ │ │ -531 out[10] = -2*z*(x + z + 1); │ │ │ │ │ -532 out[11] = -2*z*(x + z - 1); │ │ │ │ │ -533 out[12] = 2*z*(x + z + 1); │ │ │ │ │ -534 out[13] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + │ │ │ │ │ -1)*(x + z - 1)*(x + 1 - z)); │ │ │ │ │ -535 break; │ │ │ │ │ -536 case 2: │ │ │ │ │ -537 out[0] = -((y - z)*(2*x + 2*z - 1)*(z - y + 1))/2; │ │ │ │ │ -538 out[1] = ((y - z + 1)*(y - 2*x + z + 2*x*y - 2*x*z + 2*y*z - 2*z*z))/2; │ │ │ │ │ -539 out[2] = ((y - z)*(2*x + 2*z - 1)*(y - z + 1))/2; │ │ │ │ │ -540 out[3] = ((y - z)*(2*x + 2*z + 1)*(y - z + 1))/2; │ │ │ │ │ -541 out[4] = 4*z - 1; │ │ │ │ │ -542 out[5] = (-(y - z + 1)*(2*x + z - 1)*(y - 1) - (x + z - 1)*(y - 1)*x - (y - │ │ │ │ │ -z + 1)*(x + z - 1)*x + (x + z - 1)*(y - 1)*x - (y - z + 1)*(y - 1)*x)/2; │ │ │ │ │ -543 out[6] = -((y - z + 1)*(3*y - 2*x + z + 3*x*y + x*z + y*z + x*x - 1))/2; │ │ │ │ │ -544 out[7] = z - z*(2*x + 1) - ((2*z - y*(z - y + 1))*(x + z - 1))/2 - ((2*x - │ │ │ │ │ -y*(x + 1))*(x + z - 1))/2 + ((x + 1)*(x + z - 1)*(z - 2*y + 1))/2 + y*(x + 1)* │ │ │ │ │ -(z - y + 1); │ │ │ │ │ -545 out[8] = -((y - z + 1)*(y + z + 3*x*y + x*z + y*z + x*x - 1))/2; │ │ │ │ │ -546 out[9] = -(x + 3*z - 1)*(z - y + 1); │ │ │ │ │ -547 out[10] = (x + z + 1)*(z - y + 1) - 2*y*z - 6*z + 2*z*z; │ │ │ │ │ -548 out[11] = -(x + 3*z - 1)*(y - z + 1); │ │ │ │ │ -549 out[12] = (x + 3*z + 1)*(y - z + 1); │ │ │ │ │ -550 out[13] = (y - z + 1)*(2*y - 3*x + z + 2*x*y + 6*x*z - 2*y*z + 2*x*x + │ │ │ │ │ -4*z*z - 3); │ │ │ │ │ -551 break; │ │ │ │ │ -552 default: │ │ │ │ │ -553 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -554 } │ │ │ │ │ -555 } │ │ │ │ │ -556 else // x <= y │ │ │ │ │ -557 { │ │ │ │ │ -558 switch (direction) │ │ │ │ │ -559 { │ │ │ │ │ -560 case 0: │ │ │ │ │ -561 out[0] = -((y + z)*(2*z - 2*x + 1)*(y + z - 1))/2; │ │ │ │ │ -562 out[1] = ((y + z)*(2*x - 2*z + 1)*(y + z - 1))/2; │ │ │ │ │ -563 out[2] = -((y + z + 1)*(y - 3*z - 2*x*y - 2*x*z + 2*y*z + 2*z*z))/2; │ │ │ │ │ -564 out[3] = ((y + z)*(2*x - 2*z + 1)*(y + z + 1))/2; │ │ │ │ │ -565 out[4] = 0; │ │ │ │ │ -566 out[5] = (y + 1)*(y + z - 1)*(z - 2*x + 1); │ │ │ │ │ -567 out[6] = -(y + 1)*(2*x - z + 1)*(y + z - 1); │ │ │ │ │ -568 out[7] = -y*(2*x - z)*(y + z - 1); │ │ │ │ │ -569 out[8] = z - z*(2*x + 1) - (2*z + y*(y + z + 1))*(x - z + 1) - y*(x - 1)*(y │ │ │ │ │ -+ z + 1); │ │ │ │ │ -570 out[9] = 2*z*(y + z - 1); │ │ │ │ │ -571 out[10] = -2*z*(y + z - 1); │ │ │ │ │ -572 out[11] = -2*z*(y + z + 1); │ │ │ │ │ -573 out[12] = 2*z*(y + z + 1); │ │ │ │ │ -574 out[13] = 2*(y + z - 1)*(2*x - z + 2*x*y - 2*x*z + 2*z*z); │ │ │ │ │ -575 break; │ │ │ │ │ -576 case 1: │ │ │ │ │ -577 out[0] = -(x - z)*(y + z - 0.5)*(z - x + 1); │ │ │ │ │ -578 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2; │ │ │ │ │ -579 out[2] = -((z - x + 1)*(x + 3*z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2; │ │ │ │ │ -580 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2; │ │ │ │ │ -581 out[4] = 0; │ │ │ │ │ -582 out[5] = z - z*(2*y + 1) - (2*z - x*(z - x + 1))*(y + z - 1) + x*(y + 1)*(z │ │ │ │ │ -- x + 1); │ │ │ │ │ -583 out[6] = -x*(2*y + z)*(x - z + 1); │ │ │ │ │ -584 out[7] = -(x - 1)*(x - z + 1)*(2*y + z - 1); │ │ │ │ │ -585 out[8] = -(x - 1)*(x - z + 1)*(2*y + z + 1); │ │ │ │ │ -586 out[9] = -2*z*(z - x + 1); │ │ │ │ │ -587 out[10] = -2*z*(x - z + 1); │ │ │ │ │ -588 out[11] = 2*z*(z - x + 1); │ │ │ │ │ -589 out[12] = 2*z*(x - z + 1); │ │ │ │ │ -590 out[13] = 2*(x - z + 1)*(2*x*y - z - 2*y + 2*y*z + 2*z*z); │ │ │ │ │ -591 break; │ │ │ │ │ -592 case 2: │ │ │ │ │ -593 out[0] = -((x - z)*(2*y + 2*z - 1)*(z - x + 1))/2; │ │ │ │ │ -594 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2; │ │ │ │ │ -595 out[2] = ((x - z + 1)*(x - 2*y + z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2; │ │ │ │ │ -596 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2; │ │ │ │ │ -597 out[4] = 4*z - 1; │ │ │ │ │ -598 out[5] = z - z*(2*y + 1) - ((2*z - x*(z - x + 1))*(y + z - 1))/2 - ((2*y - │ │ │ │ │ -x*(y + 1))*(y + z - 1))/2 + ((y + 1)*(y + z - 1)*(z - 2*x + 1))/2 + x*(y + 1)* │ │ │ │ │ -(z - x + 1); │ │ │ │ │ -599 out[6] = -((x - z + 1)*(x + z + 3*x*y + x*z + y*z + y*y - 1))/2; │ │ │ │ │ -600 out[7] = -((x - z + 1)*(3*x*y - 4*y - z - x + x*z + y*z + y*y + 1))/2; │ │ │ │ │ -601 out[8] = -((x - z + 1)*(3*x - 2*y + z + 3*x*y + x*z + y*z + y*y - 1))/2; │ │ │ │ │ -602 out[9] = -(z - x + 1)*(y + 3*z - 1); │ │ │ │ │ -603 out[10] = -(x - z + 1)*(y + 3*z - 1); │ │ │ │ │ -604 out[11] = (y + z + 1)*(z - x + 1) - 2*x*z - 6*z + 2*z*z; │ │ │ │ │ -605 out[12] = (x - z + 1)*(y + 3*z + 1); │ │ │ │ │ -606 out[13] = (x - z + 1)*(2*x - 3*y + z + 2*x*y - 2*x*z + 6*y*z + 2*y*y + │ │ │ │ │ -4*z*z - 3); │ │ │ │ │ -607 break; │ │ │ │ │ -608 default: │ │ │ │ │ -609 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -610 } │ │ │ │ │ -611 } │ │ │ │ │ -612 } else { │ │ │ │ │ -613 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -614 } │ │ │ │ │ -615 │ │ │ │ │ -616 return; │ │ │ │ │ -617 } │ │ │ │ │ -618 │ │ │ │ │ -619 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::partial for order " │ │ │ │ │ -<< k); │ │ │ │ │ -620 } │ │ │ │ │ -621 │ │ │ │ │ -623 static constexpr unsigned int order () │ │ │ │ │ -624 { │ │ │ │ │ -625 return k; │ │ │ │ │ -626 } │ │ │ │ │ -627 }; │ │ │ │ │ -628 │ │ │ │ │ -633 template │ │ │ │ │ -634 class LagrangePyramidLocalCoefficients │ │ │ │ │ -635 { │ │ │ │ │ -636 public: │ │ │ │ │ -638 LagrangePyramidLocalCoefficients () │ │ │ │ │ -639 : localKeys_(size()) │ │ │ │ │ -640 { │ │ │ │ │ -641 if (k==0) │ │ │ │ │ -642 { │ │ │ │ │ -643 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ -644 return; │ │ │ │ │ -645 } │ │ │ │ │ -646 │ │ │ │ │ -647 if (k==1) │ │ │ │ │ -648 { │ │ │ │ │ -649 for (std::size_t i=0; i localKeys_; │ │ │ │ │ -701 }; │ │ │ │ │ -702 │ │ │ │ │ -707 template │ │ │ │ │ -708 class LagrangePyramidLocalInterpolation │ │ │ │ │ -709 { │ │ │ │ │ -710 public: │ │ │ │ │ -711 │ │ │ │ │ -719 template │ │ │ │ │ -720 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -721 { │ │ │ │ │ -722 constexpr auto k = LocalBasis::order(); │ │ │ │ │ -723 using D = typename LocalBasis::Traits::DomainType; │ │ │ │ │ -724 using DF = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ -725 │ │ │ │ │ -726 out.resize(LocalBasis::size()); │ │ │ │ │ -727 │ │ │ │ │ -728 // Specialization for zero-order case │ │ │ │ │ -729 if (k==0) │ │ │ │ │ -730 { │ │ │ │ │ -731 auto center = ReferenceElements::general(GeometryTypes:: │ │ │ │ │ -pyramid).position(0,0); │ │ │ │ │ -732 out[0] = f(center); │ │ │ │ │ -733 return; │ │ │ │ │ -734 } │ │ │ │ │ -735 │ │ │ │ │ -736 // Specialization for first-order case │ │ │ │ │ -737 if (k==1) │ │ │ │ │ -738 { │ │ │ │ │ -739 for (unsigned int i=0; i::general(GeometryTypes:: │ │ │ │ │ -pyramid).position(i,3); │ │ │ │ │ -742 out[i] = f(vertex); │ │ │ │ │ -743 } │ │ │ │ │ -744 return; │ │ │ │ │ -745 } │ │ │ │ │ -746 │ │ │ │ │ -747 // Specialization for second-order case │ │ │ │ │ -748 if (k==2) │ │ │ │ │ -749 { │ │ │ │ │ -750 out[0] = f( D( {0.0, 0.0, 0.0} ) ); │ │ │ │ │ -751 out[1] = f( D( {1.0, 0.0, 0.0} ) ); │ │ │ │ │ -752 out[2] = f( D( {0.0, 1.0, 0.0} ) ); │ │ │ │ │ -753 out[3] = f( D( {1.0, 1.0, 0.0} ) ); │ │ │ │ │ -754 out[4] = f( D( {0.0, 0.0, 1.0} ) ); │ │ │ │ │ -755 out[5] = f( D( {0.0, 0.5, 0.0} ) ); │ │ │ │ │ -756 out[6] = f( D( {1.0, 0.5, 0.0} ) ); │ │ │ │ │ -757 out[7] = f( D( {0.5, 0.0, 0.0} ) ); │ │ │ │ │ -758 out[8] = f( D( {0.5, 1.0, 0.0} ) ); │ │ │ │ │ -759 out[9] = f( D( {0.0, 0.0, 0.5} ) ); │ │ │ │ │ -760 out[10] = f( D( {0.5, 0.0, 0.5} ) ); │ │ │ │ │ -761 out[11] = f( D( {0.0, 0.5, 0.5} ) ); │ │ │ │ │ -762 out[12] = f( D( {0.5, 0.5, 0.5} ) ); │ │ │ │ │ -763 out[13] = f( D( {0.5, 0.5, 0.0} ) ); │ │ │ │ │ -764 │ │ │ │ │ -765 return; │ │ │ │ │ -766 } │ │ │ │ │ -767 │ │ │ │ │ -768 DUNE_THROW(NotImplemented, "LagrangePyramidLocalInterpolation not │ │ │ │ │ -implemented for order " << k); │ │ │ │ │ -769 } │ │ │ │ │ -770 │ │ │ │ │ -771 }; │ │ │ │ │ -772 │ │ │ │ │ -773} } // namespace Dune::Impl │ │ │ │ │ -774 │ │ │ │ │ -775namespace _D_u_n_e │ │ │ │ │ -776{ │ │ │ │ │ -807 template │ │ │ │ │ -_8_0_8 class _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -809 { │ │ │ │ │ -810 public: │ │ │ │ │ -_8_1_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_k_>, │ │ │ │ │ -814 Impl::LagrangePyramidLocalCoefficients, │ │ │ │ │ -815 Impl::LagrangePyramidLocalInterpolation > >; │ │ │ │ │ -816 │ │ │ │ │ -_8_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -820 { │ │ │ │ │ -821 return basis_; │ │ │ │ │ -822 } │ │ │ │ │ -823 │ │ │ │ │ -_8_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -827 { │ │ │ │ │ -828 return coefficients_; │ │ │ │ │ -829 } │ │ │ │ │ -830 │ │ │ │ │ -_8_3_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -834 { │ │ │ │ │ -835 return interpolation_; │ │ │ │ │ -836 } │ │ │ │ │ -837 │ │ │ │ │ -_8_3_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ -840 { │ │ │ │ │ -841 return Impl::LagrangePyramidLocalBasis::size(); │ │ │ │ │ -842 } │ │ │ │ │ -843 │ │ │ │ │ -_8_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -847 { │ │ │ │ │ -848 return GeometryTypes::pyramid; │ │ │ │ │ -849 } │ │ │ │ │ -850 │ │ │ │ │ -851 private: │ │ │ │ │ -852 Impl::LagrangePyramidLocalBasis basis_; │ │ │ │ │ -853 Impl::LagrangePyramidLocalCoefficients coefficients_; │ │ │ │ │ -854 Impl::LagrangePyramidLocalInterpolation > interpolation_; │ │ │ │ │ -855 }; │ │ │ │ │ -856 │ │ │ │ │ -857} // namespace Dune │ │ │ │ │ -858 │ │ │ │ │ -859#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +90#endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ +_b_a_s_i_s_m_a_t_r_i_x_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for 3d pyramids with compile-time polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:809 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:826 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() │ │ │ │ │ -The number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:839 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The reference element that the local finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:846 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:819 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:833 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn basismatrix.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_I_d_e_n_t_i_t_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_I_d_e_n_t_i_t_y_:_:_a_p_p_l_y │ │ │ │ │ +static T apply(const T &t) │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +InterpolationFactory::Object Interpolation │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const unsigned int dimRange │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +release the object returned by the create methods │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:81 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ +CF ComputeField │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +PreBFactory PreBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +InterpolationFactory::Key Key │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +SF StorageField │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +MonomialBasisFactory::Object MonomialBasis │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ +PreBasisFactory::Object PreBasis │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const Basis Object │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_o_r │ │ │ │ │ +StandardEvaluator< MonomialBasis > Evaluator │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +InterpolFactory InterpolationFactory │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type │ │ │ │ │ +MonomialBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ +PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:58 │ │ │ │ │ +_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:769 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ +void fill(const Matrix &matrix) │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:366 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: interpolationhelper.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,32 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0localinterpolation.hh File Reference
│ │ │ │ +
interpolationhelper.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/concept.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::P0LocalInterpolation< LB >
struct  Dune::InterpolationHelper< F, dimension >
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Func, Vector, true >
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Basis, Matrix, false >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,21 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0localinterpolation.hh File Reference │ │ │ │ │ +interpolationhelper.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _>_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e │ │ │ │ │ + _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _>_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_, │ │ │ │ │ + _f_a_l_s_e_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00356_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: interpolationhelper.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,72 +70,199 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localinterpolation.hh
│ │ │ │ +
interpolationhelper.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ +
6#define GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │ -
9#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
10
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
18 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
20 {
│ │ │ │ -
21 public:
│ │ │ │ -
│ │ │ │ -
22 P0LocalInterpolation (const GeometryType& gt) : gt_(gt)
│ │ │ │ -
23 {}
│ │ │ │ -
│ │ │ │ -
24
│ │ │ │ -
26 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
27 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
28 {
│ │ │ │ -
29 typedef typename LB::Traits::DomainType DomainType;
│ │ │ │ -
30 typedef typename LB::Traits::DomainFieldType DF;
│ │ │ │ -
31 const int dim=LB::Traits::dimDomain;
│ │ │ │ -
32
│ │ │ │ -
33 DomainType x = Dune::ReferenceElements<DF,dim>::general(gt_).position(0,0);
│ │ │ │ -
34
│ │ │ │ -
35 out.resize(1);
│ │ │ │ -
36 out[0] = f(x);
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
39 private:
│ │ │ │ -
40 GeometryType gt_;
│ │ │ │ -
41 };
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
43}
│ │ │ │ -
44
│ │ │ │ -
45#endif
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/concept.hh>
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16 // A small helper class to avoid having to
│ │ │ │ +
17 // write the interpolation twice (once for function
│ │ │ │ +
18 // and once for a basis)
│ │ │ │ +
19 template< class F, unsigned int dimension >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
21 {
│ │ │ │ +
22 template <class Func,class Container, bool type>
│ │ │ │ +
23 struct Helper;
│ │ │ │ +
24 };
│ │ │ │ +
│ │ │ │ +
25 template <class F,unsigned int d>
│ │ │ │ +
26 template <class Func,class Vector>
│ │ │ │ +
│ │ │ │ +
27 struct InterpolationHelper<F,d>::Helper<Func,Vector,true>
│ │ │ │ +
28 // Func is of Function type
│ │ │ │ +
29 {
│ │ │ │ +
30 typedef std::vector< Dune::FieldVector<F,d> > Result;
│ │ │ │ +
│ │ │ │ +
31 Helper(const Func & func, Vector &vec)
│ │ │ │ +
32 : func_(func),
│ │ │ │ +
33 vec_(vec),
│ │ │ │ +
34 tmp_(1)
│ │ │ │ +
35 {}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
36 const typename Vector::value_type &operator()(unsigned int row,unsigned int col)
│ │ │ │ +
37 {
│ │ │ │ +
38 return vec_[row];
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40 template <class Fy>
│ │ │ │ +
│ │ │ │ +
41 void set(unsigned int row,unsigned int col,
│ │ │ │ +
42 const Fy &val)
│ │ │ │ +
43 {
│ │ │ │ +
44 assert(col==0);
│ │ │ │ +
45 assert(row<vec_.size());
│ │ │ │ +
46 field_cast( val, vec_[row] );
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48 template <class Fy>
│ │ │ │ +
│ │ │ │ +
49 void add(unsigned int row,unsigned int col,
│ │ │ │ +
50 const Fy &val)
│ │ │ │ +
51 {
│ │ │ │ +
52 assert(col==0);
│ │ │ │ +
53 assert(row<vec_.size());
│ │ │ │ +
54 vec_[row] += field_cast<typename Vector::value_type>(val);
│ │ │ │ +
55 }
│ │ │ │ +
│ │ │ │ +
56 template <class DomainVector>
│ │ │ │ +
│ │ │ │ +
57 const Result &evaluate(const DomainVector &x) const
│ │ │ │ +
58 {
│ │ │ │ +
59 field_cast(func_(x), tmp_[0] );
│ │ │ │ +
60 return tmp_;
│ │ │ │ +
61 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
62 unsigned int size() const
│ │ │ │ +
63 {
│ │ │ │ +
64 return 1;
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66 const Func &func_;
│ │ │ │ +
67 Vector &vec_;
│ │ │ │ +
68 mutable Result tmp_;
│ │ │ │ +
69 };
│ │ │ │ +
│ │ │ │ +
70 template <class F,unsigned int d>
│ │ │ │ +
71 template <class Basis,class Matrix>
│ │ │ │ +
│ │ │ │ +
72 struct InterpolationHelper<F,d>::Helper<Basis,Matrix,false>
│ │ │ │ +
73 // Func is of Basis type
│ │ │ │ +
74 {
│ │ │ │ +
75 typedef std::vector< Dune::FieldVector<F,d> > Result;
│ │ │ │ +
│ │ │ │ +
76 Helper(const Basis & basis, Matrix &matrix)
│ │ │ │ +
77 : basis_(basis),
│ │ │ │ +
78 matrix_(matrix),
│ │ │ │ +
79 tmp_(basis.size()) {}
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
80 const F &operator()(unsigned int row,unsigned int col) const
│ │ │ │ +
81 {
│ │ │ │ +
82 return matrix_[row][col];
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
84 F &operator()(unsigned int row,unsigned int col)
│ │ │ │ +
85 {
│ │ │ │ +
86 return matrix_[row][col];
│ │ │ │ +
87 }
│ │ │ │ +
│ │ │ │ +
88 template <class Fy>
│ │ │ │ +
│ │ │ │ +
89 void set(unsigned int row,unsigned int col,
│ │ │ │ +
90 const Fy &val)
│ │ │ │ +
91 {
│ │ │ │ +
92 assert(col<matrix_.cols());
│ │ │ │ +
93 assert(row<matrix_.rows());
│ │ │ │ +
94 field_cast(val,matrix_[row][col]);
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96 template <class Fy>
│ │ │ │ +
│ │ │ │ +
97 void add(unsigned int row,unsigned int col,
│ │ │ │ +
98 const Fy &val)
│ │ │ │ +
99 {
│ │ │ │ +
100 assert(col<matrix_.cols());
│ │ │ │ +
101 assert(row<matrix_.rows());
│ │ │ │ +
102 matrix_[row][col] += val;
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │ +
104 template <class DomainVector>
│ │ │ │ +
│ │ │ │ +
105 const Result &evaluate(const DomainVector &x) const
│ │ │ │ +
106 {
│ │ │ │ +
107 basis_.template evaluate<0>(x,tmp_);
│ │ │ │ +
108 return tmp_;
│ │ │ │ +
109 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
110 unsigned int size() const
│ │ │ │ +
111 {
│ │ │ │ +
112 return basis_.size();
│ │ │ │ +
113 }
│ │ │ │ +
│ │ │ │ +
114
│ │ │ │ +
115 const Basis &basis_;
│ │ │ │ +
116 Matrix &matrix_;
│ │ │ │ +
117 mutable Result tmp_;
│ │ │ │ +
118 };
│ │ │ │ +
│ │ │ │ +
119}
│ │ │ │ +
120#endif // GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition p0localinterpolation.hh:20
│ │ │ │ -
P0LocalInterpolation(const GeometryType &gt)
Definition p0localinterpolation.hh:22
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
determine coefficients interpolating a given function
Definition p0localinterpolation.hh:27
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition interpolationhelper.hh:21
│ │ │ │ +
Definition interpolationhelper.hh:23
│ │ │ │ +
void add(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:49
│ │ │ │ +
const Func & func_
Definition interpolationhelper.hh:66
│ │ │ │ +
Helper(const Func &func, Vector &vec)
Definition interpolationhelper.hh:31
│ │ │ │ +
const Result & evaluate(const DomainVector &x) const
Definition interpolationhelper.hh:57
│ │ │ │ +
std::vector< Dune::FieldVector< F, d > > Result
Definition interpolationhelper.hh:30
│ │ │ │ +
unsigned int size() const
Definition interpolationhelper.hh:62
│ │ │ │ +
Vector & vec_
Definition interpolationhelper.hh:67
│ │ │ │ +
void set(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:41
│ │ │ │ +
Result tmp_
Definition interpolationhelper.hh:68
│ │ │ │ +
const Vector::value_type & operator()(unsigned int row, unsigned int col)
Definition interpolationhelper.hh:36
│ │ │ │ +
const Basis & basis_
Definition interpolationhelper.hh:115
│ │ │ │ +
const Result & evaluate(const DomainVector &x) const
Definition interpolationhelper.hh:105
│ │ │ │ +
F & operator()(unsigned int row, unsigned int col)
Definition interpolationhelper.hh:84
│ │ │ │ +
void set(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:89
│ │ │ │ +
Helper(const Basis &basis, Matrix &matrix)
Definition interpolationhelper.hh:76
│ │ │ │ +
unsigned int size() const
Definition interpolationhelper.hh:110
│ │ │ │ +
Result tmp_
Definition interpolationhelper.hh:117
│ │ │ │ +
void add(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:97
│ │ │ │ +
std::vector< Dune::FieldVector< F, d > > Result
Definition interpolationhelper.hh:75
│ │ │ │ +
Matrix & matrix_
Definition interpolationhelper.hh:116
│ │ │ │ +
const F & operator()(unsigned int row, unsigned int col) const
Definition interpolationhelper.hh:80
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,65 +1,207 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localinterpolation.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +interpolationhelper.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ +6#define GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -14 │ │ │ │ │ -18 template │ │ │ │ │ -_1_9 class _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -20 { │ │ │ │ │ -21 public: │ │ │ │ │ -_2_2 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (const GeometryType& gt) : gt_(gt) │ │ │ │ │ -23 {} │ │ │ │ │ -24 │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -28 { │ │ │ │ │ -29 typedef typename LB::Traits::DomainType DomainType; │ │ │ │ │ -30 typedef typename LB::Traits::DomainFieldType DF; │ │ │ │ │ -31 const int dim=LB::Traits::dimDomain; │ │ │ │ │ -32 │ │ │ │ │ -33 DomainType x = Dune::ReferenceElements::general(gt_).position(0,0); │ │ │ │ │ -34 │ │ │ │ │ -35 out.resize(1); │ │ │ │ │ -36 out[0] = f(x); │ │ │ │ │ -37 } │ │ │ │ │ -38 │ │ │ │ │ -39 private: │ │ │ │ │ -40 GeometryType gt_; │ │ │ │ │ -41 }; │ │ │ │ │ -42 │ │ │ │ │ -43} │ │ │ │ │ -44 │ │ │ │ │ -45#endif │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 // A small helper class to avoid having to │ │ │ │ │ +17 // write the interpolation twice (once for function │ │ │ │ │ +18 // and once for a basis) │ │ │ │ │ +19 template< class F, unsigned int dimension > │ │ │ │ │ +_2_0 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ +21 { │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 struct _H_e_l_p_e_r; │ │ │ │ │ +24 }; │ │ │ │ │ +25 template │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r::_H_e_l_p_e_r │ │ │ │ │ +28 // Func is of Function type │ │ │ │ │ +29 { │ │ │ │ │ +_3_0 typedef std::vector< Dune::FieldVector > _R_e_s_u_l_t; │ │ │ │ │ +_3_1 _H_e_l_p_e_r(const Func & func, Vector &vec) │ │ │ │ │ +32 : func_(func), │ │ │ │ │ +33 vec_(vec), │ │ │ │ │ +34 tmp_(1) │ │ │ │ │ +35 {} │ │ │ │ │ +_3_6 const typename Vector::value_type &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int │ │ │ │ │ +col) │ │ │ │ │ +37 { │ │ │ │ │ +38 return vec_[row]; │ │ │ │ │ +39 } │ │ │ │ │ +40 template │ │ │ │ │ +_4_1 void _s_e_t(unsigned int row,unsigned int col, │ │ │ │ │ +42 const Fy &val) │ │ │ │ │ +43 { │ │ │ │ │ +44 assert(col==0); │ │ │ │ │ +45 assert(row │ │ │ │ │ +_4_9 void _a_d_d(unsigned int row,unsigned int col, │ │ │ │ │ +50 const Fy &val) │ │ │ │ │ +51 { │ │ │ │ │ +52 assert(col==0); │ │ │ │ │ +53 assert(row(val); │ │ │ │ │ +55 } │ │ │ │ │ +56 template │ │ │ │ │ +_5_7 const _R_e_s_u_l_t &_e_v_a_l_u_a_t_e(const DomainVector &x) const │ │ │ │ │ +58 { │ │ │ │ │ +59 _f_i_e_l_d___c_a_s_t(func_(x), tmp_[0] ); │ │ │ │ │ +60 return tmp_; │ │ │ │ │ +61 } │ │ │ │ │ +_6_2 unsigned int _s_i_z_e() const │ │ │ │ │ +63 { │ │ │ │ │ +64 return 1; │ │ │ │ │ +65 } │ │ │ │ │ +_6_6 const Func &_f_u_n_c__; │ │ │ │ │ +_6_7 Vector &_v_e_c__; │ │ │ │ │ +_6_8 mutable _R_e_s_u_l_t _t_m_p__; │ │ │ │ │ +69 }; │ │ │ │ │ +70 template │ │ │ │ │ +71 template │ │ │ │ │ +_7_2 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r::_H_e_l_p_e_r │ │ │ │ │ +73 // Func is of Basis type │ │ │ │ │ +74 { │ │ │ │ │ +_7_5 typedef std::vector< Dune::FieldVector > _R_e_s_u_l_t; │ │ │ │ │ +_7_6 _H_e_l_p_e_r(const Basis & basis, Matrix &matrix) │ │ │ │ │ +77 : basis_(basis), │ │ │ │ │ +78 matrix_(matrix), │ │ │ │ │ +79 tmp_(basis.size()) {} │ │ │ │ │ +_8_0 const F &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int col) const │ │ │ │ │ +81 { │ │ │ │ │ +82 return matrix_[row][col]; │ │ │ │ │ +83 } │ │ │ │ │ +_8_4 F &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int col) │ │ │ │ │ +85 { │ │ │ │ │ +86 return matrix_[row][col]; │ │ │ │ │ +87 } │ │ │ │ │ +88 template │ │ │ │ │ +_8_9 void _s_e_t(unsigned int row,unsigned int col, │ │ │ │ │ +90 const Fy &val) │ │ │ │ │ +91 { │ │ │ │ │ +92 assert(col │ │ │ │ │ +_9_7 void _a_d_d(unsigned int row,unsigned int col, │ │ │ │ │ +98 const Fy &val) │ │ │ │ │ +99 { │ │ │ │ │ +100 assert(col │ │ │ │ │ +_1_0_5 const _R_e_s_u_l_t &_e_v_a_l_u_a_t_e(const DomainVector &x) const │ │ │ │ │ +106 { │ │ │ │ │ +107 basis_.template evaluate<0>(x,tmp_); │ │ │ │ │ +108 return tmp_; │ │ │ │ │ +109 } │ │ │ │ │ +_1_1_0 unsigned int _s_i_z_e() const │ │ │ │ │ +111 { │ │ │ │ │ +112 return basis_.size(); │ │ │ │ │ +113 } │ │ │ │ │ +114 │ │ │ │ │ +_1_1_5 const Basis &_b_a_s_i_s__; │ │ │ │ │ +_1_1_6 Matrix &_m_a_t_r_i_x__; │ │ │ │ │ +_1_1_7 mutable _R_e_s_u_l_t _t_m_p__; │ │ │ │ │ +118 }; │ │ │ │ │ +119} │ │ │ │ │ +120#endif // GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn p0localinterpolation.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -P0LocalInterpolation(const GeometryType >) │ │ │ │ │ -DDeeffiinniittiioonn p0localinterpolation.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -determine coefficients interpolating a given function │ │ │ │ │ -DDeeffiinniittiioonn p0localinterpolation.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_a_d_d │ │ │ │ │ +void add(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_f_u_n_c__ │ │ │ │ │ +const Func & func_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_H_e_l_p_e_r │ │ │ │ │ +Helper(const Func &func, Vector &vec) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +const Result & evaluate(const DomainVector &x) const │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_R_e_s_u_l_t │ │ │ │ │ +std::vector< Dune::FieldVector< F, d > > Result │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_v_e_c__ │ │ │ │ │ +Vector & vec_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_s_e_t │ │ │ │ │ +void set(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_t_m_p__ │ │ │ │ │ +Result tmp_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ +const Vector::value_type & operator()(unsigned int row, unsigned int col) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_b_a_s_i_s__ │ │ │ │ │ +const Basis & basis_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +const Result & evaluate(const DomainVector &x) const │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ +F & operator()(unsigned int row, unsigned int col) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_s_e_t │ │ │ │ │ +void set(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_H_e_l_p_e_r │ │ │ │ │ +Helper(const Basis &basis, Matrix &matrix) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_t_m_p__ │ │ │ │ │ +Result tmp_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:117 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_a_d_d │ │ │ │ │ +void add(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:97 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_R_e_s_u_l_t │ │ │ │ │ +std::vector< Dune::FieldVector< F, d > > Result │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_m_a_t_r_i_x__ │ │ │ │ │ +Matrix & matrix_ │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:116 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ +const F & operator()(unsigned int row, unsigned int col) const │ │ │ │ │ +DDeeffiinniittiioonn interpolationhelper.hh:80 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: lfematrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
p0localcoefficients.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
lfematrix.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ +
#include <cassert>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include "field.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::P0LocalCoefficients
class  Dune::LFEMatrix< F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<class Field >
std::ostream & Dune::operator<< (std::ostream &out, const LFEMatrix< Field > &mat)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +lfematrix.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include "_f_i_e_l_d_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +class   _D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_<_ _F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _L_F_E_M_a_t_r_i_x< Field > │ │ │ │ │ + &mat) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00359_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: lfematrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,74 +70,228 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localcoefficients.hh
│ │ │ │ +
lfematrix.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ -
28 P0LocalCoefficients () : index(0,0,0)
│ │ │ │ -
29 {}
│ │ │ │ -
│ │ │ │ -
30
│ │ │ │ -
│ │ │ │ -
32 std::size_t size () const
│ │ │ │ -
33 {
│ │ │ │ -
34 return 1;
│ │ │ │ -
35 }
│ │ │ │ -
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ -
38 const LocalKey& localKey ([[maybe_unused]] std::size_t i) const
│ │ │ │ -
39 {
│ │ │ │ -
40 return index;
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include "field.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
16 template< class F >
│ │ │ │ +
│ │ │ │ +
17 class [[deprecated("The usage of LFEMatrix is discouraged. Use DynamicMatrix instead")]] LFEMatrix
│ │ │ │ +
18 {
│ │ │ │ +
19 typedef std::vector< F > Row;
│ │ │ │ +
20 typedef std::vector<Row> RealMatrix;
│ │ │ │ +
21
│ │ │ │ +
22 public:
│ │ │ │ +
23 typedef F Field;
│ │ │ │ +
24
│ │ │ │ +
│ │ │ │ +
25 operator const RealMatrix & () const
│ │ │ │ +
26 {
│ │ │ │ +
27 return matrix_;
│ │ │ │ +
28 }
│ │ │ │ +
│ │ │ │ +
29
│ │ │ │ +
│ │ │ │ +
30 operator RealMatrix & ()
│ │ │ │ +
31 {
│ │ │ │ +
32 return matrix_;
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
35 template <class Vector>
│ │ │ │ +
│ │ │ │ +
36 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
37 {
│ │ │ │ +
38 assert(row<rows());
│ │ │ │ +
39 for (int i=0; i<cols(); ++i)
│ │ │ │ +
40 field_cast(matrix_[row][i], vec[i]);
│ │ │ │
41 }
│ │ │ │
│ │ │ │
42
│ │ │ │ -
43 private:
│ │ │ │ -
44 LocalKey index;
│ │ │ │ -
45 };
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47}
│ │ │ │ -
48#endif
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
43 const Field &operator() ( const unsigned int row, const unsigned int col ) const
│ │ │ │ +
44 {
│ │ │ │ +
45 assert(row<rows());
│ │ │ │ +
46 assert(col<cols());
│ │ │ │ +
47 return matrix_[ row ][ col ];
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
50 Field &operator() ( const unsigned int row, const unsigned int col )
│ │ │ │ +
51 {
│ │ │ │ +
52 assert(row<rows());
│ │ │ │ +
53 assert(col<cols());
│ │ │ │ +
54 return matrix_[ row ][ col ];
│ │ │ │ +
55 }
│ │ │ │ +
│ │ │ │ +
56
│ │ │ │ +
│ │ │ │ +
57 unsigned int rows () const
│ │ │ │ +
58 {
│ │ │ │ +
59 return rows_;
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
62 unsigned int cols () const
│ │ │ │ +
63 {
│ │ │ │ +
64 return cols_;
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
│ │ │ │ +
67 const Field *rowPtr ( const unsigned int row ) const
│ │ │ │ +
68 {
│ │ │ │ +
69 assert(row<rows());
│ │ │ │ +
70 return &(matrix_[row][0]);
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
│ │ │ │ +
73 Field *rowPtr ( const unsigned int row )
│ │ │ │ +
74 {
│ │ │ │ +
75 assert(row<rows());
│ │ │ │ +
76 return &(matrix_[row][0]);
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
│ │ │ │ +
79 void resize ( const unsigned int rows, const unsigned int cols )
│ │ │ │ +
80 {
│ │ │ │ +
81 matrix_.resize(rows);
│ │ │ │ +
82 for (unsigned int i=0; i<rows; ++i)
│ │ │ │ +
83 matrix_[i].resize(cols);
│ │ │ │ +
84 rows_ = rows;
│ │ │ │ +
85 cols_ = cols;
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
88 bool invert ()
│ │ │ │ +
89 {
│ │ │ │ +
90 using std::abs;
│ │ │ │ +
91 assert( rows() == cols() );
│ │ │ │ +
92 std::vector<unsigned int> p(rows());
│ │ │ │ +
93 for (unsigned int j=0; j<rows(); ++j)
│ │ │ │ +
94 p[j] = j;
│ │ │ │ +
95 for (unsigned int j=0; j<rows(); ++j)
│ │ │ │ +
96 {
│ │ │ │ +
97 // pivot search
│ │ │ │ +
98 unsigned int r = j;
│ │ │ │ +
99 Field max = abs( (*this)(j,j) );
│ │ │ │ +
100 for (unsigned int i=j+1; i<rows(); ++i)
│ │ │ │ +
101 {
│ │ │ │ +
102 if ( abs( (*this)(i,j) ) > max )
│ │ │ │ +
103 {
│ │ │ │ +
104 max = abs( (*this)(i,j) );
│ │ │ │ +
105 r = i;
│ │ │ │ +
106 }
│ │ │ │ +
107 }
│ │ │ │ +
108 if (max == Zero<Field>())
│ │ │ │ +
109 return false;
│ │ │ │ +
110 // row swap
│ │ │ │ +
111 if (r > j)
│ │ │ │ +
112 {
│ │ │ │ +
113 for (unsigned int k=0; k<cols(); ++k)
│ │ │ │ +
114 std::swap( (*this)(j,k), (*this)(r,k) );
│ │ │ │ +
115 std::swap( p[j], p[r] );
│ │ │ │ +
116 }
│ │ │ │ +
117 // transformation
│ │ │ │ +
118 Field hr = Unity<Field>()/(*this)(j,j);
│ │ │ │ +
119 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ +
120 (*this)(i,j) *= hr;
│ │ │ │ +
121 (*this)(j,j) = hr;
│ │ │ │ +
122 for (unsigned int k=0; k<cols(); ++k)
│ │ │ │ +
123 {
│ │ │ │ +
124 if (k==j) continue;
│ │ │ │ +
125 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ +
126 {
│ │ │ │ +
127 if (i==j) continue;
│ │ │ │ +
128 (*this)(i,k) -= (*this)(i,j)*(*this)(j,k);
│ │ │ │ +
129 }
│ │ │ │ +
130 (*this)(j,k) *= -hr;
│ │ │ │ +
131 }
│ │ │ │ +
132 }
│ │ │ │ +
133 // column exchange
│ │ │ │ +
134 Row hv(rows());
│ │ │ │ +
135 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ +
136 {
│ │ │ │ +
137 for (unsigned int k=0; k<rows(); ++k)
│ │ │ │ +
138 hv[ p[k] ] = (*this)(i,k);
│ │ │ │ +
139 for (unsigned int k=0; k<rows(); ++k)
│ │ │ │ +
140 (*this)(i,k) = hv[k];
│ │ │ │ +
141 }
│ │ │ │ +
142 return true;
│ │ │ │ +
143 }
│ │ │ │ +
│ │ │ │ +
144
│ │ │ │ +
145 private:
│ │ │ │ +
146 RealMatrix matrix_;
│ │ │ │ +
147 unsigned int cols_,rows_;
│ │ │ │ +
148 };
│ │ │ │ +
│ │ │ │ +
149
│ │ │ │ +
150 template< class Field >
│ │ │ │ +
│ │ │ │ +
151 inline std::ostream &operator<<(std::ostream &out, const LFEMatrix<Field> &mat)
│ │ │ │ +
152 {
│ │ │ │ +
153 for (unsigned int r=0; r<mat.rows(); ++r)
│ │ │ │ +
154 {
│ │ │ │ +
155 out << field_cast<double>(mat(r,0));
│ │ │ │ +
156 for (unsigned int c=1; c<mat.cols(); ++c)
│ │ │ │ +
157 {
│ │ │ │ +
158 out << " , " << field_cast<double>(mat(r,c));
│ │ │ │ +
159 }
│ │ │ │ +
160 out << std::endl;
│ │ │ │ +
161 }
│ │ │ │ +
162 return out;
│ │ │ │ +
163 }
│ │ │ │ +
│ │ │ │ +
164}
│ │ │ │ +
165
│ │ │ │ +
166#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition p0localcoefficients.hh:25
│ │ │ │ -
P0LocalCoefficients()
Standard constructor.
Definition p0localcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition p0localcoefficients.hh:38
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition p0localcoefficients.hh:32
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ +
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
Definition lfematrix.hh:18
│ │ │ │ +
Field * rowPtr(const unsigned int row)
Definition lfematrix.hh:73
│ │ │ │ +
unsigned int cols() const
Definition lfematrix.hh:62
│ │ │ │ +
const Field * rowPtr(const unsigned int row) const
Definition lfematrix.hh:67
│ │ │ │ +
void resize(const unsigned int rows, const unsigned int cols)
Definition lfematrix.hh:79
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition lfematrix.hh:36
│ │ │ │ +
unsigned int rows() const
Definition lfematrix.hh:57
│ │ │ │ +
bool invert()
Definition lfematrix.hh:88
│ │ │ │ +
F Field
Definition lfematrix.hh:23
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,71 +1,223 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localcoefficients.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +lfematrix.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 │ │ │ │ │ -_2_4 class _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : index(0,0,0) │ │ │ │ │ -29 {} │ │ │ │ │ -30 │ │ │ │ │ -_3_2 std::size_t _s_i_z_e () const │ │ │ │ │ -33 { │ │ │ │ │ -34 return 1; │ │ │ │ │ -35 } │ │ │ │ │ -36 │ │ │ │ │ -_3_8 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y ([[maybe_unused]] std::size_t i) const │ │ │ │ │ -39 { │ │ │ │ │ -40 return index; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include "_f_i_e_l_d_._h_h" │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +16 template< class F > │ │ │ │ │ +_1_7 class [[deprecated("The usage of LFEMatrix is discouraged. Use DynamicMatrix │ │ │ │ │ +instead")]] _L_F_E_M_a_t_r_i_x │ │ │ │ │ +18 { │ │ │ │ │ +19 typedef std::vector< F > Row; │ │ │ │ │ +20 typedef std::vector RealMatrix; │ │ │ │ │ +21 │ │ │ │ │ +22 public: │ │ │ │ │ +_2_3 typedef F _F_i_e_l_d; │ │ │ │ │ +24 │ │ │ │ │ +_2_5 operator const RealMatrix & () const │ │ │ │ │ +26 { │ │ │ │ │ +27 return matrix_; │ │ │ │ │ +28 } │ │ │ │ │ +29 │ │ │ │ │ +_3_0 operator RealMatrix & () │ │ │ │ │ +31 { │ │ │ │ │ +32 return matrix_; │ │ │ │ │ +33 } │ │ │ │ │ +34 │ │ │ │ │ +35 template │ │ │ │ │ +_3_6 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ +37 { │ │ │ │ │ +38 assert(row p(rows()); │ │ │ │ │ +93 for (unsigned int j=0; j max ) │ │ │ │ │ +103 { │ │ │ │ │ +104 max = abs( (*this)(i,j) ); │ │ │ │ │ +105 r = i; │ │ │ │ │ +106 } │ │ │ │ │ +107 } │ │ │ │ │ +108 if (max == _Z_e_r_o_<_F_i_e_l_d_>()) │ │ │ │ │ +109 return false; │ │ │ │ │ +110 // row swap │ │ │ │ │ +111 if (r > j) │ │ │ │ │ +112 { │ │ │ │ │ +113 for (unsigned int k=0; k()/(*this)(j,j); │ │ │ │ │ +119 for (unsigned int i=0; i │ │ │ │ │ +_1_5_1 inline std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream &out, const _L_F_E_M_a_t_r_i_x_<_F_i_e_l_d_> │ │ │ │ │ +&mat) │ │ │ │ │ +152 { │ │ │ │ │ +153 for (unsigned int r=0; r(mat(r,0)); │ │ │ │ │ +156 for (unsigned int c=1; c(mat(r,c)); │ │ │ │ │ +159 } │ │ │ │ │ +160 out << std::endl; │ │ │ │ │ +161 } │ │ │ │ │ +162 return out; │ │ │ │ │ +163 } │ │ │ │ │ +164} │ │ │ │ │ +165 │ │ │ │ │ +166#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn p0localcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -P0LocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn p0localcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn p0localcoefficients.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn p0localcoefficients.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ +std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat) │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ +_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ +A class representing the unit of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_P_t_r │ │ │ │ │ +Field * rowPtr(const unsigned int row) │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ +unsigned int cols() const │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_P_t_r │ │ │ │ │ +const Field * rowPtr(const unsigned int row) const │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_e_s_i_z_e │ │ │ │ │ +void resize(const unsigned int rows, const unsigned int cols) │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ +unsigned int rows() const │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_i_n_v_e_r_t │ │ │ │ │ +bool invert() │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:23 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localbasis.hh File Reference │ │ │ │ +dune-localfunctions: basisprint.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,39 +65,42 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
p0localbasis.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
basisprint.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::P0LocalBasis< D, R, d >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<int deriv, class BasisFactory , class PrintField , GeometryType::Id geometryId>
void Dune::basisPrint (std::ostream &out, typename BasisFactory::Object &basis)
 
template<int deriv, class BasisFactory , class PrintField = typename BasisFactory::StorageField>
void Dune::basisPrint (std::ostream &out, typename BasisFactory::Key &key)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +basisprint.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ +void  _D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t (std::ostream &out, typename BasisFactory::Object │ │ │ │ │ + &basis) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +void  _D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t (std::ostream &out, typename BasisFactory::Key &key) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00362_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0localbasis.hh Source File │ │ │ │ +dune-localfunctions: basisprint.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,109 +70,105 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0localbasis.hh
│ │ │ │ +
basisprint.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_P0LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_P0LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
29 template<class D, class R, int d>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 {
│ │ │ │ -
32 public:
│ │ │ │ -
34 typedef LocalBasisTraits<D,d,Dune::FieldVector<D,d>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
35 Dune::FieldMatrix<R,1,d> > Traits;
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ -
38 unsigned int size () const
│ │ │ │ -
39 {
│ │ │ │ -
40 return 1;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 inline void evaluateFunction (const typename Traits::DomainType&,
│ │ │ │ -
45 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
46 {
│ │ │ │ -
47 out.resize(1);
│ │ │ │ -
48 out[0] = 1;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
52 inline void
│ │ │ │ -
│ │ │ │ -
53 evaluateJacobian (const typename Traits::DomainType&, // position
│ │ │ │ -
54 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
55 {
│ │ │ │ -
56 out.resize(1);
│ │ │ │ -
57 for (int i=0; i<d; i++)
│ │ │ │ -
58 out[0][0][i] = 0;
│ │ │ │ +
5#ifndef BASISPRINT
│ │ │ │ +
6#define BASISPRINT
│ │ │ │ + │ │ │ │ + │ │ │ │ +
9namespace Dune {
│ │ │ │ +
10 /**********************************************
│ │ │ │ +
11 * Methods for printing a PolynomialBasis.
│ │ │ │ +
12 * Is achieved by using the MultiIndex class as
│ │ │ │ +
13 * Field type and printing the results.
│ │ │ │ +
14 * The basis and higher order derivatives can be
│ │ │ │ +
15 * printed. This could be the basis for printing
│ │ │ │ +
16 * routings providing C++ or matlab methods
│ │ │ │ +
17 * for computing the basisfunctions for given
│ │ │ │ +
18 * orders or reference elements.
│ │ │ │ +
19 **********************************************/
│ │ │ │ +
20 // default argument does not work for gcc 4.1.2
│ │ │ │ +
21 // template <int deriv,class BasisFactory,class PrintField=typename BasisFactory::StorageField>
│ │ │ │ +
22 template <int deriv,class BasisFactory,class PrintField,GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
23 void basisPrint(std::ostream &out,
│ │ │ │ +
24 typename BasisFactory::Object &basis)
│ │ │ │ +
25 {
│ │ │ │ +
26 typedef typename BasisFactory::Object Basis;
│ │ │ │ +
27 const int dimension = Basis::dimension;
│ │ │ │ +
28
│ │ │ │ + │ │ │ │ +
30 typedef typename BasisFactory::template EvaluationBasisFactory<dimension,Field>::Type
│ │ │ │ +
31 MIBasisFactory;
│ │ │ │ +
32 typedef typename MIBasisFactory::Object MIBasis;
│ │ │ │ +
33 typedef typename Basis::CoefficientMatrix CMatrix;
│ │ │ │ +
34 typedef PolynomialBasis<StandardEvaluator<MIBasis>, CMatrix > PrintBasis;
│ │ │ │ +
35
│ │ │ │ +
36 MIBasis *miBasis = MIBasisFactory::template create<geometryId>( basis.basis().order());
│ │ │ │ +
37 PrintBasis printBasis(*miBasis,basis.matrix(),basis.size());
│ │ │ │ +
38
│ │ │ │ +
39 unsigned int size = printBasis.size();
│ │ │ │ +
40
│ │ │ │ +
41 out << "% Number of base functions: " << size << std::endl;
│ │ │ │ +
42 out << "% Derivative order: " << deriv << std::endl;
│ │ │ │ +
43
│ │ │ │ +
44 std::vector< FieldVector<
│ │ │ │ +
45 FieldVector<Field,LFETensor<Field,dimension,deriv>::size>,
│ │ │ │ +
46 PrintBasis::dimRange> > y( size );
│ │ │ │ +
47
│ │ │ │ +
48 FieldVector< Field, dimension > x;
│ │ │ │ +
49 for( int i = 0; i < dimension; ++i )
│ │ │ │ +
50 x[ i ].set( i, 1 );
│ │ │ │ +
51 printBasis.template evaluateSingle<deriv>( x, y );
│ │ │ │ +
52 for (unsigned int i=0; i<size; ++i)
│ │ │ │ +
53 {
│ │ │ │ +
54 out << "$\\varphi_" << i << "(a,b,c)$&$=$&$" << std::endl;
│ │ │ │ +
55 out << "( ";
│ │ │ │ +
56 for (unsigned int r=0; r<PrintBasis::dimRange; ++r)
│ │ │ │ +
57 out << y[i][r] << (r<PrintBasis::dimRange-1 ? " , $ \\\\ && $" : " )$ \\\\");
│ │ │ │ +
58 out << std::endl;
│ │ │ │
59 }
│ │ │ │ +
60 MIBasisFactory::release(miBasis);
│ │ │ │ +
61 }
│ │ │ │
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
66 void partial(const std::array<unsigned int,d>& order,
│ │ │ │ -
67 const typename Traits::DomainType& in,
│ │ │ │ -
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
69 {
│ │ │ │ -
70 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
71 if (totalOrder == 0) {
│ │ │ │ -
72 evaluateFunction(in, out);
│ │ │ │ -
73 } else {
│ │ │ │ -
74 out.resize(1);
│ │ │ │ -
75 out[0] = 0;
│ │ │ │ -
76 }
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
80 unsigned int order () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return 0;
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86}
│ │ │ │ -
87
│ │ │ │ -
88#endif
│ │ │ │ +
62
│ │ │ │ +
63 template <int deriv,class BasisFactory,class PrintField=typename BasisFactory::StorageField>
│ │ │ │ +
│ │ │ │ +
64 void basisPrint(std::ostream &out,
│ │ │ │ +
65 typename BasisFactory::Key &key)
│ │ │ │ +
66 {
│ │ │ │ +
67 typename BasisFactory::Object *basis = BasisFactory::create(key);
│ │ │ │ +
68 basisPrint<deriv,BasisFactory,PrintField>(out,*basis);
│ │ │ │ +
69 BasisFactory::release(basis);
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71}
│ │ │ │ +
72
│ │ │ │ +
73
│ │ │ │ +
74#endif // BASISPRINT
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition p0localbasis.hh:31
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition p0localbasis.hh:80
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition p0localbasis.hh:53
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition p0localbasis.hh:44
│ │ │ │ -
void partial(const std::array< unsigned int, d > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition p0localbasis.hh:66
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition p0localbasis.hh:38
│ │ │ │ -
LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
export type traits for function signature
Definition p0localbasis.hh:35
│ │ │ │ - │ │ │ │ +
void basisPrint(std::ostream &out, typename BasisFactory::Object &basis)
Definition basisprint.hh:23
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,119 +1,103 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ - * _p_0 │ │ │ │ │ -p0localbasis.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +basisprint.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_P0LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_P0LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 class _P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -31 { │ │ │ │ │ -32 public: │ │ │ │ │ -34 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 unsigned int _s_i_z_e () const │ │ │ │ │ -39 { │ │ │ │ │ -40 return 1; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&, │ │ │ │ │ -45 std::vector& out) const │ │ │ │ │ -46 { │ │ │ │ │ -47 out.resize(1); │ │ │ │ │ -48 out[0] = 1; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -52 inline void │ │ │ │ │ -_5_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&, // position │ │ │ │ │ -54 std::vector& out) const // return value │ │ │ │ │ -55 { │ │ │ │ │ -56 out.resize(1); │ │ │ │ │ -57 for (int i=0; i │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +9namespace _D_u_n_e { │ │ │ │ │ +10 /********************************************** │ │ │ │ │ +11 * Methods for printing a PolynomialBasis. │ │ │ │ │ +12 * Is achieved by using the MultiIndex class as │ │ │ │ │ +13 * Field type and printing the results. │ │ │ │ │ +14 * The basis and higher order derivatives can be │ │ │ │ │ +15 * printed. This could be the basis for printing │ │ │ │ │ +16 * routings providing C++ or matlab methods │ │ │ │ │ +17 * for computing the basisfunctions for given │ │ │ │ │ +18 * orders or reference elements. │ │ │ │ │ +19 **********************************************/ │ │ │ │ │ +20 // default argument does not work for gcc 4.1.2 │ │ │ │ │ +21 // template │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 void _b_a_s_i_s_P_r_i_n_t(std::ostream &out, │ │ │ │ │ +24 typename BasisFactory::Object &basis) │ │ │ │ │ +25 { │ │ │ │ │ +26 typedef typename BasisFactory::Object Basis; │ │ │ │ │ +27 const int dimension = Basis::dimension; │ │ │ │ │ +28 │ │ │ │ │ +29 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_e_n_s_i_o_n_,_ _P_r_i_n_t_F_i_e_l_d_ _> Field; │ │ │ │ │ +30 typedef typename BasisFactory::template │ │ │ │ │ +EvaluationBasisFactory::Type │ │ │ │ │ +31 MIBasisFactory; │ │ │ │ │ +32 typedef typename MIBasisFactory::Object MIBasis; │ │ │ │ │ +33 typedef typename Basis::CoefficientMatrix CMatrix; │ │ │ │ │ +34 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_I_B_a_s_i_s_>, CMatrix > PrintBasis; │ │ │ │ │ +35 │ │ │ │ │ +36 MIBasis *miBasis = MIBasisFactory::template create( basis.basis │ │ │ │ │ +().order()); │ │ │ │ │ +37 PrintBasis printBasis(*miBasis,basis.matrix(),basis.size()); │ │ │ │ │ +38 │ │ │ │ │ +39 unsigned int size = printBasis.size(); │ │ │ │ │ +40 │ │ │ │ │ +41 out << "% Number of base functions: " << size << std::endl; │ │ │ │ │ +42 out << "% Derivative order: " << deriv << std::endl; │ │ │ │ │ +43 │ │ │ │ │ +44 std::vector< FieldVector< │ │ │ │ │ +45 FieldVector::size>, │ │ │ │ │ +46 PrintBasis::dimRange> > y( size ); │ │ │ │ │ +47 │ │ │ │ │ +48 FieldVector< Field, dimension > x; │ │ │ │ │ +49 for( int i = 0; i < dimension; ++i ) │ │ │ │ │ +50 x[ i ].set( i, 1 ); │ │ │ │ │ +51 printBasis.template evaluateSingle( x, y ); │ │ │ │ │ +52 for (unsigned int i=0; i& _o_r_d_e_r, │ │ │ │ │ -67 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -68 std::vector& out) const │ │ │ │ │ -69 { │ │ │ │ │ -70 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -71 if (totalOrder == 0) { │ │ │ │ │ -72 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -73 } else { │ │ │ │ │ -74 out.resize(1); │ │ │ │ │ -75 out[0] = 0; │ │ │ │ │ -76 } │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_8_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return 0; │ │ │ │ │ -83 } │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ -86} │ │ │ │ │ -87 │ │ │ │ │ -88#endif │ │ │ │ │ +60 MIBasisFactory::release(miBasis); │ │ │ │ │ +61 } │ │ │ │ │ +62 │ │ │ │ │ +63 template │ │ │ │ │ +_6_4 void _b_a_s_i_s_P_r_i_n_t(std::ostream &out, │ │ │ │ │ +65 typename BasisFactory::Key &key) │ │ │ │ │ +66 { │ │ │ │ │ +67 typename BasisFactory::Object *basis = BasisFactory::create(key); │ │ │ │ │ +68 basisPrint(out,*basis); │ │ │ │ │ +69 BasisFactory::release(basis); │ │ │ │ │ +70 } │ │ │ │ │ +71} │ │ │ │ │ +72 │ │ │ │ │ +73 │ │ │ │ │ +74#endif // BASISPRINT │ │ │ │ │ +_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, d > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, d > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:35 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t │ │ │ │ │ +void basisPrint(std::ostream &out, typename BasisFactory::Object &basis) │ │ │ │ │ +DDeeffiinniittiioonn basisprint.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q2.hh File Reference │ │ │ │ +dune-localfunctions: tensor.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,132 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
q2.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Enumerations | │ │ │ │ +Functions
│ │ │ │ +
tensor.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +
#include <ostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::Q2FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q23D elements. More...
class  Dune::LFETensor< F, dimD, deriv >
 
struct  Dune::FieldTraits< LFETensor< F, dimD, deriv > >
 
struct  Dune::LFETensor< F, 0, deriv >
 
struct  Dune::LFETensor< F, 0, 0 >
 
class  Dune::LFETensor< F, dimD, 0 >
 
struct  Dune::FieldTraits< Derivatives< F, dimD, dimR, deriv, layout > >
 
struct  Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value >
 
struct  Dune::Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value >
 
struct  Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative >
 
struct  Dune::LFETensorAxpy< Vec1, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value >, Vec2, deriv >
 
struct  Dune::DerivativeAssign< Vec1, Vec2 >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, layout > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, F2 >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, 1 > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, 1 > >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
namespace  Dune::DerivativeLayoutNS
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Enumerations

enum  Dune::DerivativeLayoutNS::DerivativeLayout { Dune::DerivativeLayoutNS::value │ │ │ │ +, Dune::DerivativeLayoutNS::derivative │ │ │ │ + }
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<class F , int dimD, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const LFETensor< F, dimD, deriv > &tensor)
 
template<class F , int dimD, int dimR, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &d)
 
template<class F , int dimD, int dimR, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > &d)
 
template<class F , int dimD, int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::derivative > &d)
 
template<class F , int dimD, int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > &d)
 
template<class F , int dimD, int dimR, unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Derivatives< F, dimD, dimR, deriv, layout > > &y)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,141 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -q2.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _E_n_u_m_e_r_a_t_i_o_n_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +tensor.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ -  Factory for global-valued Q23D elements. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _0_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ + _d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _V_e_c_1_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ + _d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ + _v_a_l_u_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _V_e_c_1_,_ _V_e_c_2_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2 │ │ │ │ │ + _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +namespace   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S │ │ │ │ │ +  │ │ │ │ │ +EEnnuummeerraattiioonnss │ │ │ │ │ +enum   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t { _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ + _v_a_l_u_e , _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e } │ │ │ │ │ +  │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _L_F_E_T_e_n_s_o_r< F, dimD, │ │ │ │ │ + deriv > &tensor) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ + dimD, dimR, deriv, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e > &d) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ + dimD, dimR, deriv, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e > &d) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ + dimD, dimR, 0, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e > &d) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ + dimD, dimR, 0, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e > &d) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std::vector< │ │ │ │ │ + _D_e_r_i_v_a_t_i_v_e_s< F, dimD, dimR, deriv, layout > > &y) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00365_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: q2.hh Source File │ │ │ │ +dune-localfunctions: tensor.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,77 +70,1417 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
q2.hh
│ │ │ │ +
tensor.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <dune/common/typetraits.hh>
│ │ │ │ -
9#include <dune/geometry/type.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_TENSOR_HH
│ │ │ │ +
7#define DUNE_TENSOR_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <ostream>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
20
│ │ │ │ -
25 template<class Geometry, class RF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
28 typename std::conditional<Geometry::mydimension == 1,
│ │ │ │ -
29 LagrangeSimplexLocalFiniteElement<typename Geometry::ctype, RF, 1, 2>,
│ │ │ │ -
30 LagrangeCubeLocalFiniteElement<typename Geometry::ctype, RF, Geometry::mydimension, 2> >::type,
│ │ │ │ -
31 Geometry>
│ │ │ │ -
32 {
│ │ │ │ -
33 typedef typename std::conditional<Geometry::mydimension == 1,
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18 /***********************************************
│ │ │ │ +
19 * The classes here are work in progress.
│ │ │ │ +
20 * Basically they provide tensor structures for
│ │ │ │ +
21 * higher order derivatives of vector valued function.
│ │ │ │ +
22 * Two storage structures are provided
│ │ │ │ +
23 * (either based on the components of the vector valued
│ │ │ │ +
24 * functions or on the order of the derivative).
│ │ │ │ +
25 * Conversions are supplied between the two storage
│ │ │ │ +
26 * structures and simple operations, which make the
│ │ │ │ +
27 * code difficult to use and requires rewriting...
│ │ │ │ +
28 ***************************************************/
│ │ │ │ +
29
│ │ │ │ +
30 // Structure for scalar tensor of order deriv
│ │ │ │ +
31 template <class F,int dimD,unsigned int deriv>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {
│ │ │ │ + │ │ │ │ +
35 typedef LFETensor<F,dimD-1,deriv> BaseDim;
│ │ │ │ +
36 typedef LFETensor<F,dimD,deriv-1> BaseDeriv;
│ │ │ │
37
│ │ │ │ -
38 static const LFE lfe;
│ │ │ │ -
39
│ │ │ │ -
40 public:
│ │ │ │ - │ │ │ │ -
43 };
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
45 template<class Geometry, class RF>
│ │ │ │ -
46 const typename Q2FiniteElementFactory<Geometry, RF>::LFE
│ │ │ │ -
47 Q2FiniteElementFactory<Geometry, RF>::lfe;
│ │ │ │ -
48}
│ │ │ │ +
38 public:
│ │ │ │ +
39 typedef F field_type;
│ │ │ │ +
40 static const unsigned int size = BaseDim::size+BaseDeriv::size;
│ │ │ │ +
41 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ +
42
│ │ │ │ +
43 template< class FF >
│ │ │ │ +
│ │ │ │ +
44 This &operator= ( const FF &f )
│ │ │ │ +
45 {
│ │ │ │ +
46 block() = field_cast< F >( f );
│ │ │ │ +
47 return *this;
│ │ │ │ +
48 }
│ │ │ │ +
│ │ │ │
49
│ │ │ │ -
50#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
50 This &operator= ( const Block &b )
│ │ │ │ +
51 {
│ │ │ │ +
52 block() = b;
│ │ │ │ +
53 return *this;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 block() *= f;
│ │ │ │ +
59 return *this;
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
62 const field_type &operator[] ( const unsigned int i ) const
│ │ │ │ +
63 {
│ │ │ │ +
64 return block()[ i ];
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
│ │ │ │ +
67 field_type &operator[] ( const unsigned int i )
│ │ │ │ +
68 {
│ │ │ │ +
69 return block()[ i ];
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
73 {
│ │ │ │ +
74 return block_;
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
76 const Block &block() const
│ │ │ │ +
77 {
│ │ │ │ +
78 return block_;
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
80 void axpy(const F& a, const This &y)
│ │ │ │ +
81 {
│ │ │ │ +
82 block().axpy(a,y.block());
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
86 {
│ │ │ │ +
87 field_cast(y.block(),block());
│ │ │ │ +
88 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
90 };
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
92
│ │ │ │ +
93 template <class F,int dimD,unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
94 struct FieldTraits<LFETensor<F,dimD,deriv>>
│ │ │ │ +
95 {
│ │ │ │ +
96 using field_type = F;
│ │ │ │ +
97 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ +
98 };
│ │ │ │ +
│ │ │ │ +
99
│ │ │ │ +
100 // ******************************************
│ │ │ │ +
101 template <class F,unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
102 struct LFETensor<F,0,deriv>
│ │ │ │ +
103 {
│ │ │ │ +
104 static const int size = 0;
│ │ │ │ +
105 };
│ │ │ │ +
│ │ │ │ +
106
│ │ │ │ +
107 template <class F>
│ │ │ │ +
│ │ │ │ +
108 struct LFETensor<F,0,0>
│ │ │ │ +
109 {
│ │ │ │ +
110 static const int size = 1;
│ │ │ │ +
111 };
│ │ │ │ +
│ │ │ │ +
112
│ │ │ │ +
113 template <class F,int dimD>
│ │ │ │ +
│ │ │ │ +
114 class LFETensor<F,dimD,0>
│ │ │ │ +
115 {
│ │ │ │ + │ │ │ │ +
117
│ │ │ │ +
118 public:
│ │ │ │ +
119 typedef F field_type;
│ │ │ │ +
120 static const int size = 1;
│ │ │ │ +
121 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ +
122
│ │ │ │ +
123 template< class FF >
│ │ │ │ +
│ │ │ │ +
124 This &operator= ( const FF &f )
│ │ │ │ +
125 {
│ │ │ │ +
126 block() = field_cast< F >( f );
│ │ │ │ +
127 return *this;
│ │ │ │ +
128 }
│ │ │ │ +
│ │ │ │ +
129
│ │ │ │ +
│ │ │ │ +
130 This &operator= ( const Block &b )
│ │ │ │ +
131 {
│ │ │ │ +
132 block() = b;
│ │ │ │ +
133 return *this;
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
137 {
│ │ │ │ +
138 block() *= f;
│ │ │ │ +
139 return *this;
│ │ │ │ +
140 }
│ │ │ │ +
│ │ │ │ +
141
│ │ │ │ +
│ │ │ │ +
142 const F &operator[] ( const unsigned int i ) const
│ │ │ │ +
143 {
│ │ │ │ +
144 return block()[ i ];
│ │ │ │ +
145 }
│ │ │ │ +
│ │ │ │ +
146
│ │ │ │ +
│ │ │ │ +
147 F &operator[] ( const unsigned int i )
│ │ │ │ +
148 {
│ │ │ │ +
149 return block()[ i ];
│ │ │ │ +
150 }
│ │ │ │ +
│ │ │ │ +
151
│ │ │ │ +
│ │ │ │ +
152 void axpy(const F& a, const This &y)
│ │ │ │ +
153 {
│ │ │ │ +
154 block().axpy(a,y.block());
│ │ │ │ +
155 }
│ │ │ │ +
│ │ │ │ +
156 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
158 {
│ │ │ │ +
159 field_cast(y.block(),block());
│ │ │ │ +
160 }
│ │ │ │ +
│ │ │ │ +
161
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
163 {
│ │ │ │ +
164 return block_;
│ │ │ │ +
165 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
166 const Block &block() const
│ │ │ │ +
167 {
│ │ │ │ +
168 return block_;
│ │ │ │ +
169 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
171 };
│ │ │ │ +
│ │ │ │ +
172 // ***********************************************************
│ │ │ │ +
173 // Structure for all derivatives up to order deriv
│ │ │ │ +
174 // for vector valued function
│ │ │ │ +
│ │ │ │ +
175 namespace DerivativeLayoutNS {
│ │ │ │ + │ │ │ │ +
177 }
│ │ │ │ +
│ │ │ │ +
178 template <class F,int dimD,int dimR,unsigned int deriv,
│ │ │ │ + │ │ │ │ + │ │ │ │ +
181
│ │ │ │ +
182 template <class F,int dimD,int dimR,unsigned int deriv,
│ │ │ │ + │ │ │ │ +
│ │ │ │ +
184 struct FieldTraits<Derivatives<F,dimD,dimR,deriv,layout>>
│ │ │ │ +
185 {
│ │ │ │ +
186 using field_type = F;
│ │ │ │ +
187 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ +
188 };
│ │ │ │ +
│ │ │ │ +
189
│ │ │ │ +
190 // Implemnetation for valued based layout
│ │ │ │ +
191 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
192 struct Derivatives<F,dimD,dimR,deriv,DerivativeLayoutNS::value>
│ │ │ │ +
193 : public Derivatives<F,dimD,dimR,deriv-1,DerivativeLayoutNS::value>
│ │ │ │ +
194 {
│ │ │ │ + │ │ │ │ +
196 typedef Derivatives<F,dimD,dimR,deriv-1,DerivativeLayoutNS::value> Base;
│ │ │ │ + │ │ │ │ +
198
│ │ │ │ +
199 typedef F Field;
│ │ │ │ +
200 typedef F field_type;
│ │ │ │ +
201
│ │ │ │ + │ │ │ │ +
203 static const unsigned int dimDomain = dimD;
│ │ │ │ +
204 static const unsigned int dimRange = dimR;
│ │ │ │ +
205 constexpr static int size = Base::size+ThisLFETensor::size*dimR;
│ │ │ │ +
206 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ +
207
│ │ │ │ +
│ │ │ │ +
208 This &operator=(const F& f)
│ │ │ │ +
209 {
│ │ │ │ +
210 block() = f;
│ │ │ │ +
211 return *this;
│ │ │ │ +
212 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
213 This &operator=(const Dune::FieldVector<ThisLFETensor,dimR> &t)
│ │ │ │ +
214 {
│ │ │ │ +
215 tensor_ = t;
│ │ │ │ +
216 return *this;
│ │ │ │ +
217 }
│ │ │ │ +
│ │ │ │ +
218 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
219 This &operator=(const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &t)
│ │ │ │ +
220 {
│ │ │ │ +
221 tensor<dorder>() = t;
│ │ │ │ +
222 return *this;
│ │ │ │ +
223 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
225 {
│ │ │ │ +
226 block() = t;
│ │ │ │ +
227 return *this;
│ │ │ │ +
228 }
│ │ │ │ +
│ │ │ │ +
229
│ │ │ │ +
│ │ │ │ +
230 This &operator*= ( const field_type &f )
│ │ │ │ +
231 {
│ │ │ │ +
232 block() *= f;
│ │ │ │ +
233 return *this;
│ │ │ │ +
234 }
│ │ │ │ +
│ │ │ │ +
235
│ │ │ │ +
│ │ │ │ +
236 void axpy(const F &a, const This &y)
│ │ │ │ +
237 {
│ │ │ │ +
238 block().axpy(a,y.block());
│ │ │ │ +
239 }
│ │ │ │ +
│ │ │ │ +
240
│ │ │ │ +
241 // assign with same layout (only different Field)
│ │ │ │ +
242 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
244 {
│ │ │ │ +
245 field_cast(y.block(),block());
│ │ │ │ +
246 }
│ │ │ │ +
│ │ │ │ +
247 // assign with different layout (same dimRange)
│ │ │ │ +
248 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
250 {
│ │ │ │ +
251 Base::assign(y);
│ │ │ │ +
252 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ +
253 tensor_[rr] = y[rr].template tensor<deriv>()[0];
│ │ │ │ +
254 }
│ │ │ │ +
│ │ │ │ +
255 // assign with rth component of function
│ │ │ │ +
256 template <class Fy,int dimRy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
258 {
│ │ │ │ +
259 assign<Fy,dimRy>(y.block(),r);
│ │ │ │ +
260 }
│ │ │ │ +
│ │ │ │ +
261 // assign with scalar functions to component r
│ │ │ │ +
262 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
264 {
│ │ │ │ +
265 assign(r,y.block());
│ │ │ │ +
266 }
│ │ │ │ +
│ │ │ │ +
267 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
269 {
│ │ │ │ +
270 assign(r,y[0]);
│ │ │ │ +
271 }
│ │ │ │ +
│ │ │ │ +
272
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
274 {
│ │ │ │ +
275 return reinterpret_cast<Block&>(*this);
│ │ │ │ +
276 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
277 const Block &block() const
│ │ │ │ +
278 {
│ │ │ │ +
279 return reinterpret_cast<const Block&>(*this);
│ │ │ │ +
280 }
│ │ │ │ +
│ │ │ │ +
281
│ │ │ │ +
282 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
283 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &tensor() const
│ │ │ │ +
284 {
│ │ │ │ +
285 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
286 const std::integral_constant<int,dorder> a = {};
│ │ │ │ +
287 return tensor(a);
│ │ │ │ +
288 }
│ │ │ │ +
│ │ │ │ +
289 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
290 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &tensor()
│ │ │ │ +
291 {
│ │ │ │ +
292 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
293 return tensor(std::integral_constant<int,dorder>());
│ │ │ │ +
294 }
│ │ │ │ +
│ │ │ │ +
295 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
296 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block() const
│ │ │ │ +
297 {
│ │ │ │ +
298 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
299 const std::integral_constant<int,dorder> a = {};
│ │ │ │ +
300 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ +
301 }
│ │ │ │ +
│ │ │ │ +
302 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
303 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block()
│ │ │ │ +
304 {
│ │ │ │ +
305 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
306 const std::integral_constant<int,dorder> a = {};
│ │ │ │ +
307 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ +
308 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
310 return tensor_[r];
│ │ │ │ +
311 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
312 const ThisLFETensor &operator[](int r) const {
│ │ │ │ +
313 return tensor_[r];
│ │ │ │ +
314 }
│ │ │ │ +
│ │ │ │ +
315 protected:
│ │ │ │ +
316 template <class Fy,int dimRy>
│ │ │ │ +
│ │ │ │ +
317 void assign(const FieldVector<Fy,size*dimRy> &y,unsigned int r)
│ │ │ │ +
318 {
│ │ │ │ +
319 Base::template assign<Fy,dimRy>(reinterpret_cast<const FieldVector<Fy,Base::size*dimRy>&>(y),r);
│ │ │ │ +
320 tensor_[0] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[Base::size*dimRy+r*ThisLFETensor::size]);
│ │ │ │ +
321 }
│ │ │ │ +
│ │ │ │ +
322 template <class Fy>
│ │ │ │ +
│ │ │ │ +
323 void assign(unsigned int r,const FieldVector<Fy,size/dimR> &y)
│ │ │ │ +
324 {
│ │ │ │ +
325 Base::assign(r,reinterpret_cast<const FieldVector<Fy,Base::size/dimR>&>(y));
│ │ │ │ +
326 tensor_[r] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[Base::size/dimR]);
│ │ │ │ +
327 }
│ │ │ │ +
│ │ │ │ +
328 // assign with different layout (same dimRange)
│ │ │ │ +
329 template <class Fy,unsigned int dy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
331 {
│ │ │ │ +
332 Base::assign(y);
│ │ │ │ +
333 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ +
334 tensor_[rr] = y[rr].template tensor<deriv>()[0];
│ │ │ │ +
335 }
│ │ │ │ +
│ │ │ │ +
336
│ │ │ │ +
337 template <int dorder>
│ │ │ │ +
338 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
│ │ │ │ +
│ │ │ │ +
339 tensor(const std::integral_constant<int,dorder> &dorderVar) const
│ │ │ │ +
340 {
│ │ │ │ +
341 return Base::tensor(dorderVar);
│ │ │ │ +
342 }
│ │ │ │ +
│ │ │ │ +
343 const Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
│ │ │ │ +
│ │ │ │ +
344 tensor(const std::integral_constant<int,deriv> &dorderVar) const
│ │ │ │ +
345 {
│ │ │ │ +
346 return tensor_;
│ │ │ │ +
347 }
│ │ │ │ +
│ │ │ │ +
348 template <int dorder>
│ │ │ │ +
349 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
│ │ │ │ +
│ │ │ │ +
350 tensor(const std::integral_constant<int,dorder> &dorderVar)
│ │ │ │ +
351 {
│ │ │ │ +
352 return Base::tensor(dorderVar);
│ │ │ │ +
353 }
│ │ │ │ +
│ │ │ │ +
354 Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
│ │ │ │ +
│ │ │ │ +
355 tensor(const std::integral_constant<int,deriv> &dorderVar)
│ │ │ │ +
356 {
│ │ │ │ +
357 return tensor_;
│ │ │ │ +
358 }
│ │ │ │ +
│ │ │ │ +
359 Dune::FieldVector<ThisLFETensor,dimR> tensor_;
│ │ │ │ +
360 };
│ │ │ │ +
│ │ │ │ +
361
│ │ │ │ +
362 template <class F,int dimD,int dimR>
│ │ │ │ +
│ │ │ │ +
363 struct Derivatives<F,dimD,dimR,0,DerivativeLayoutNS::value>
│ │ │ │ +
364 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
367
│ │ │ │ +
368 typedef F Field;
│ │ │ │ +
369 typedef F field_type;
│ │ │ │ +
370
│ │ │ │ + │ │ │ │ +
372 static const unsigned int dimDomain = dimD;
│ │ │ │ +
373 static const unsigned int dimRange = dimR;
│ │ │ │ +
374 constexpr static int size = ThisLFETensor::size*dimR;
│ │ │ │ +
375 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ +
376
│ │ │ │ +
377 template <class FF>
│ │ │ │ +
│ │ │ │ +
378 This &operator=(const FF& f)
│ │ │ │ +
379 {
│ │ │ │ +
380 for (int r=0; r<dimR; ++r)
│ │ │ │ +
381 tensor_[r] = field_cast<F>(f);
│ │ │ │ +
382 return *this;
│ │ │ │ +
383 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
384 This &operator=(const Dune::FieldVector<ThisLFETensor,dimR> &t)
│ │ │ │ +
385 {
│ │ │ │ +
386 tensor_ = t;
│ │ │ │ +
387 return *this;
│ │ │ │ +
388 }
│ │ │ │ +
│ │ │ │ +
389
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
391 {
│ │ │ │ +
392 block() = t;
│ │ │ │ +
393 return *this;
│ │ │ │ +
394 }
│ │ │ │ +
│ │ │ │ +
395
│ │ │ │ +
│ │ │ │ +
396 This &operator*= ( const field_type &f )
│ │ │ │ +
397 {
│ │ │ │ +
398 block() *= f;
│ │ │ │ +
399 return *this;
│ │ │ │ +
400 }
│ │ │ │ +
│ │ │ │ +
401
│ │ │ │ +
│ │ │ │ +
402 void axpy(const F &a, const This &y)
│ │ │ │ +
403 {
│ │ │ │ +
404 block().axpy(a,y.block());
│ │ │ │ +
405 }
│ │ │ │ +
│ │ │ │ +
406 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
408 {
│ │ │ │ +
409 field_cast(y.block(),block());
│ │ │ │ +
410 }
│ │ │ │ +
│ │ │ │ +
411 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
413 {
│ │ │ │ +
414 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ +
415 tensor_[rr] = y[rr].template tensor<0>()[0];
│ │ │ │ +
416 }
│ │ │ │ +
│ │ │ │ +
417 template <class Fy,int dimRy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
419 {
│ │ │ │ +
420 assign<Fy,dimRy>(y.block(),r);
│ │ │ │ +
421 }
│ │ │ │ +
│ │ │ │ +
422 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
424 {
│ │ │ │ +
425 tensor_[r].assign(y[0]);
│ │ │ │ +
426 }
│ │ │ │ +
│ │ │ │ +
427 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
429 {
│ │ │ │ +
430 tensor_[r].assign(y[0][0]);
│ │ │ │ +
431 }
│ │ │ │ +
│ │ │ │ +
432
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
434 {
│ │ │ │ +
435 return reinterpret_cast<Block&>(*this);
│ │ │ │ +
436 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
437 const Block &block() const
│ │ │ │ +
438 {
│ │ │ │ +
439 return reinterpret_cast<const Block&>(*this);
│ │ │ │ +
440 }
│ │ │ │ +
│ │ │ │ +
441
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
443 return tensor_[r];
│ │ │ │ +
444 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
445 const ThisLFETensor &operator[](int r) const {
│ │ │ │ +
446 return tensor_[r];
│ │ │ │ +
447 }
│ │ │ │ +
│ │ │ │ +
448 template <int dorder>
│ │ │ │ +
│ │ │ │ +
449 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &tensor() const
│ │ │ │ +
450 {
│ │ │ │ +
451 return tensor_;
│ │ │ │ +
452 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
453 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &tensor()
│ │ │ │ +
454 {
│ │ │ │ +
455 return tensor_;
│ │ │ │ +
456 }
│ │ │ │ +
│ │ │ │ +
457 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
458 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block() const
│ │ │ │ +
459 {
│ │ │ │ +
460 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
461 const std::integral_constant<int,dorder> a = {};
│ │ │ │ +
462 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ +
463 }
│ │ │ │ +
│ │ │ │ +
464 template <unsigned int dorder>
│ │ │ │ +
│ │ │ │ +
465 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block()
│ │ │ │ +
466 {
│ │ │ │ +
467 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ +
468 const std::integral_constant<int,dorder> a = {};
│ │ │ │ +
469 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ +
470 }
│ │ │ │ +
│ │ │ │ +
471
│ │ │ │ +
472 protected:
│ │ │ │ +
473 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
│ │ │ │ +
│ │ │ │ +
474 tensor(const std::integral_constant<int,0> &dorderVar) const
│ │ │ │ +
475 {
│ │ │ │ +
476 return tensor_;
│ │ │ │ +
477 }
│ │ │ │ +
│ │ │ │ +
478 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
│ │ │ │ +
│ │ │ │ +
479 tensor(const std::integral_constant<int,0> &dorderVar)
│ │ │ │ +
480 {
│ │ │ │ +
481 return tensor_;
│ │ │ │ +
482 }
│ │ │ │ +
│ │ │ │ +
483 template <class Fy,unsigned int dy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
485 {
│ │ │ │ +
486 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ +
487 tensor_[rr] = y[rr].template tensor<0>()[0];
│ │ │ │ +
488 }
│ │ │ │ +
│ │ │ │ +
489 template <class Fy,int dimRy>
│ │ │ │ +
│ │ │ │ +
490 void assign(const FieldVector<Fy,size*dimRy> &y,unsigned int r)
│ │ │ │ +
491 {
│ │ │ │ +
492 tensor_[0] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[r*ThisLFETensor::size]);
│ │ │ │ +
493 }
│ │ │ │ +
│ │ │ │ +
494 template <class Fy>
│ │ │ │ +
│ │ │ │ +
495 void assign(unsigned int r,const FieldVector<Fy,size/dimR> &y)
│ │ │ │ +
496 {
│ │ │ │ +
497 tensor_[r] = y;
│ │ │ │ +
498 }
│ │ │ │ +
│ │ │ │ +
499 Dune::FieldVector<ThisLFETensor,dimR> tensor_;
│ │ │ │ +
500 };
│ │ │ │ +
│ │ │ │ +
501
│ │ │ │ +
502 // Implemnetation for DerivativeLayoutNS::derivative based layout
│ │ │ │ +
503 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
504 struct Derivatives<F,dimD,dimR,deriv,DerivativeLayoutNS::derivative>
│ │ │ │ +
505 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
508
│ │ │ │ +
509 typedef F Field;
│ │ │ │ +
510 typedef F field_type;
│ │ │ │ +
511
│ │ │ │ + │ │ │ │ +
513 static const unsigned int dimDomain = dimD;
│ │ │ │ +
514 static const unsigned int dimRange = dimR;
│ │ │ │ +
515 constexpr static int size = ScalarDeriv::size*dimR;
│ │ │ │ +
516 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ +
517
│ │ │ │ +
518 template <class FF>
│ │ │ │ +
│ │ │ │ +
519 This &operator=(const FF& f)
│ │ │ │ +
520 {
│ │ │ │ +
521 block() = field_cast<F>(f);
│ │ │ │ +
522 return *this;
│ │ │ │ +
523 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
525 {
│ │ │ │ +
526 block() = t;
│ │ │ │ +
527 return *this;
│ │ │ │ +
528 }
│ │ │ │ +
│ │ │ │ +
529
│ │ │ │ +
│ │ │ │ +
530 This &operator*= ( const field_type &f )
│ │ │ │ +
531 {
│ │ │ │ +
532 block() *= f;
│ │ │ │ +
533 return *this;
│ │ │ │ +
534 }
│ │ │ │ +
│ │ │ │ +
535
│ │ │ │ +
536 template <class FF>
│ │ │ │ +
│ │ │ │ +
537 void axpy(const FF &a, const This &y)
│ │ │ │ +
538 {
│ │ │ │ +
539 block().axpy(field_cast<F>(a),y.block());
│ │ │ │ +
540 }
│ │ │ │ +
│ │ │ │ +
541 // assign with same layout (only different Field)
│ │ │ │ +
542 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
544 {
│ │ │ │ +
545 field_cast(y.block(),block());
│ │ │ │ +
546 }
│ │ │ │ +
│ │ │ │ +
547 // assign with different layout (same dimRange)
│ │ │ │ +
548 template <class Fy>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
550 {
│ │ │ │ +
551 for (unsigned int rr=0; rr<dimR; ++rr)
│ │ │ │ +
552 deriv_[rr].assign(y,rr);
│ │ │ │ +
553 }
│ │ │ │ +
│ │ │ │ +
554 // assign with scalar functions to component r
│ │ │ │ +
555 template <class Fy,DerivativeLayoutNS::DerivativeLayout layouty>
│ │ │ │ +
│ │ │ │ +
556 void assign(unsigned int r,const Derivatives<Fy,dimD,1,deriv,layouty> &y)
│ │ │ │ +
557 {
│ │ │ │ +
558 deriv_[r].assign(r,y);
│ │ │ │ +
559 }
│ │ │ │ +
│ │ │ │ +
560
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
562 {
│ │ │ │ +
563 return reinterpret_cast<Block&>(*this);
│ │ │ │ +
564 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
565 const Block &block() const
│ │ │ │ +
566 {
│ │ │ │ +
567 return reinterpret_cast<const Block&>(*this);
│ │ │ │ +
568 }
│ │ │ │ +
│ │ │ │ +
569
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
571 return deriv_[r];
│ │ │ │ +
572 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
573 const ScalarDeriv &operator[](int r) const {
│ │ │ │ +
574 return deriv_[r];
│ │ │ │ +
575 }
│ │ │ │ +
│ │ │ │ +
576 protected:
│ │ │ │ +
577 Dune::FieldVector<ScalarDeriv,dimR> deriv_;
│ │ │ │ +
578 };
│ │ │ │ +
│ │ │ │ +
579
│ │ │ │ +
580 // ******************************************
│ │ │ │ +
581 // AXPY *************************************
│ │ │ │ +
582 // ******************************************
│ │ │ │ +
583 template <class Vec1,class Vec2,unsigned int deriv>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
585 {
│ │ │ │ +
586 template <class Field>
│ │ │ │ +
│ │ │ │ +
587 static void apply(unsigned int r,const Field &a,
│ │ │ │ +
588 const Vec1 &x, Vec2 &y)
│ │ │ │ +
589 {
│ │ │ │ +
590 y.axpy(a,x);
│ │ │ │ +
591 }
│ │ │ │ +
│ │ │ │ +
592 };
│ │ │ │ +
│ │ │ │ +
593 template <class F1,int dimD,int dimR,
│ │ │ │ +
594 unsigned int d,
│ │ │ │ +
595 class Vec2,
│ │ │ │ +
596 unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
597 struct LFETensorAxpy<Derivatives<F1,dimD,dimR,d,DerivativeLayoutNS::value>,Vec2,deriv>
│ │ │ │ +
598 {
│ │ │ │ + │ │ │ │ +
600 template <class Field>
│ │ │ │ +
│ │ │ │ +
601 static void apply(unsigned int r,const Field &a,
│ │ │ │ +
602 const Vec1 &x, Vec2 &y)
│ │ │ │ +
603 {
│ │ │ │ +
604 const FieldVector<F1,Vec2::size> &xx = x.template block<deriv>();
│ │ │ │ +
605 for (int i=0; i<y.size; ++i)
│ │ │ │ +
606 y[i] += xx[i]*a;
│ │ │ │ +
607 }
│ │ │ │ +
│ │ │ │ +
608 };
│ │ │ │ +
│ │ │ │ +
609 template <class F1,int dimD,int dimR,
│ │ │ │ +
610 unsigned int d,
│ │ │ │ +
611 class Vec2,
│ │ │ │ +
612 unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
613 struct LFETensorAxpy<Derivatives<F1,dimD,dimR,d,DerivativeLayoutNS::derivative>,Vec2,deriv>
│ │ │ │ +
614 {
│ │ │ │ + │ │ │ │ +
616 template <class Field>
│ │ │ │ +
│ │ │ │ +
617 static void apply(unsigned int r,const Field &a,
│ │ │ │ +
618 const Vec1 &x, Vec2 &y)
│ │ │ │ +
619 {
│ │ │ │ +
620 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ + │ │ │ │ +
622 Vec2,deriv>::apply(rr,a,x[rr],y);
│ │ │ │ +
623 }
│ │ │ │ +
│ │ │ │ +
624 };
│ │ │ │ +
│ │ │ │ +
625 template <class F1,int dimD,
│ │ │ │ +
626 unsigned int d,
│ │ │ │ +
627 class Vec2,
│ │ │ │ +
628 unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
629 struct LFETensorAxpy<Derivatives<F1,dimD,1,d,DerivativeLayoutNS::derivative>,Vec2,deriv>
│ │ │ │ +
630 {
│ │ │ │ + │ │ │ │ +
632 template <class Field>
│ │ │ │ +
│ │ │ │ +
633 static void apply(unsigned int r,const Field &a,
│ │ │ │ +
634 const Vec1 &x, Vec2 &y)
│ │ │ │ +
635 {
│ │ │ │ + │ │ │ │ +
637 Vec2,deriv>::apply(r,a,x[0],y);
│ │ │ │ +
638 }
│ │ │ │ +
│ │ │ │ +
639 };
│ │ │ │ +
│ │ │ │ +
640 template <class F1,int dimD,
│ │ │ │ +
641 unsigned int d,
│ │ │ │ +
642 class Vec2,
│ │ │ │ +
643 unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
644 struct LFETensorAxpy<Derivatives<F1,dimD,1,d,DerivativeLayoutNS::value>,Vec2,deriv>
│ │ │ │ +
645 {
│ │ │ │ + │ │ │ │ +
647 template <class Field>
│ │ │ │ +
│ │ │ │ +
648 static void apply(unsigned int r,const Field &a,
│ │ │ │ +
649 const Vec1 &x, Vec2 &y)
│ │ │ │ +
650 {
│ │ │ │ +
651 typedef LFETensor<F1,dimD,deriv> LFETensorType;
│ │ │ │ +
652 const unsigned int rr = r*LFETensorType::size;
│ │ │ │ +
653 const FieldVector<F1,LFETensorType::size> &xx = x.template block<deriv>();
│ │ │ │ +
654 for (int i=0; i<FieldVector<F1,LFETensorType::size>::dimension; ++i)
│ │ │ │ +
655 y[rr+i] += xx[i]*a;
│ │ │ │ +
656 }
│ │ │ │ +
│ │ │ │ +
657 };
│ │ │ │ +
│ │ │ │ +
658
│ │ │ │ +
659 // ***********************************************
│ │ │ │ +
660 // Assign ****************************************
│ │ │ │ +
661 // ***********************************************
│ │ │ │ +
662 template <class Vec1,class Vec2>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
664 {
│ │ │ │ +
│ │ │ │ +
665 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
666 {
│ │ │ │ +
667 field_cast(vec1,vec2);
│ │ │ │ +
668 }
│ │ │ │ +
│ │ │ │ +
669 };
│ │ │ │ +
│ │ │ │ +
670 template <int dimD,int dimR,unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ +
671 class F1,class F2>
│ │ │ │ +
│ │ │ │ +
672 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,layout>,
│ │ │ │ +
673 Derivatives<F2,dimD,dimR,deriv,layout> >
│ │ │ │ +
674 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
677 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
678 {
│ │ │ │ +
679 field_cast(vec1.block(),vec2.block());
│ │ │ │ +
680 }
│ │ │ │ +
│ │ │ │ +
681 };
│ │ │ │ +
│ │ │ │ +
682 template <int dimD,int dimR,unsigned int deriv,
│ │ │ │ +
683 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
684 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::value>,
│ │ │ │ +
685 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ +
686 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
689 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
690 {
│ │ │ │ +
691 vec2.assign(vec1);
│ │ │ │ +
692 }
│ │ │ │ +
│ │ │ │ +
693 };
│ │ │ │ +
│ │ │ │ +
694 template <int dimD,int dimR,unsigned int deriv,
│ │ │ │ +
695 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
696 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ +
697 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
│ │ │ │ +
698 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
701 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
702 {
│ │ │ │ +
703 vec2.assign(vec1);
│ │ │ │ +
704 }
│ │ │ │ +
│ │ │ │ +
705 };
│ │ │ │ +
│ │ │ │ +
706 template <int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ +
707 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
708 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ +
709 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
│ │ │ │ +
710 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
713 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
714 {
│ │ │ │ +
715 vec2.assign(r,vec1);
│ │ │ │ +
716 }
│ │ │ │ +
│ │ │ │ +
717 };
│ │ │ │ +
│ │ │ │ +
718 template <int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ +
719 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
720 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ +
721 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ +
722 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
725 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
726 {
│ │ │ │ +
727 vec2.assign(r,vec1);
│ │ │ │ +
728 }
│ │ │ │ +
│ │ │ │ +
729 };
│ │ │ │ +
│ │ │ │ +
730 template <int dimD,unsigned int deriv,
│ │ │ │ +
731 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
732 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,
│ │ │ │ +
733 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
│ │ │ │ +
734 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
737 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
738 {
│ │ │ │ +
739 field_cast(vec1.block(),vec2.block());
│ │ │ │ +
740 }
│ │ │ │ +
│ │ │ │ +
741 };
│ │ │ │ +
│ │ │ │ +
742 template <int dimD,unsigned int deriv,
│ │ │ │ +
743 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
744 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ +
745 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ +
746 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
749 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
750 {
│ │ │ │ +
751 field_cast(vec1.block(),vec2.block());
│ │ │ │ +
752 }
│ │ │ │ +
│ │ │ │ +
753 };
│ │ │ │ +
│ │ │ │ +
754 template <int dimD,unsigned int deriv,
│ │ │ │ +
755 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
756 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ +
757 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
│ │ │ │ +
758 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
761 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
762 {
│ │ │ │ +
763 field_cast(vec1.block(),vec2.block());
│ │ │ │ +
764 }
│ │ │ │ +
│ │ │ │ +
765 };
│ │ │ │ +
│ │ │ │ +
766 template <int dimD,unsigned int deriv,
│ │ │ │ +
767 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
768 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,
│ │ │ │ +
769 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ +
770 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
773 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
774 {
│ │ │ │ +
775 field_cast(vec1.block(),vec2.block());
│ │ │ │ +
776 }
│ │ │ │ +
│ │ │ │ +
777 };
│ │ │ │ +
│ │ │ │ +
778 template <int dimD,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ +
779 class F1, class F2>
│ │ │ │ +
│ │ │ │ +
780 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ +
781 F2 >
│ │ │ │ +
782 {
│ │ │ │ + │ │ │ │ +
784 typedef F2 Vec2;
│ │ │ │ +
│ │ │ │ +
785 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
786 {
│ │ │ │ +
787 field_cast(vec1.block(),vec2);
│ │ │ │ +
788 }
│ │ │ │ +
│ │ │ │ +
789 };
│ │ │ │ +
│ │ │ │ +
790 template <int dimD,int dimR,
│ │ │ │ +
791 class F1,unsigned int deriv,
│ │ │ │ +
792 class F2>
│ │ │ │ +
│ │ │ │ +
793 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::value>,FieldVector<F2,dimR> >
│ │ │ │ +
794 {
│ │ │ │ + │ │ │ │ +
796 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ +
│ │ │ │ +
797 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
798 {
│ │ │ │ +
799 field_cast(vec1.template block<0>(),vec2);
│ │ │ │ +
800 }
│ │ │ │ +
│ │ │ │ +
801 };
│ │ │ │ +
│ │ │ │ +
802 template <int dimD,int dimR,
│ │ │ │ +
803 class F1,unsigned int deriv,
│ │ │ │ +
804 class F2>
│ │ │ │ +
│ │ │ │ +
805 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,dimR> >
│ │ │ │ +
806 {
│ │ │ │ + │ │ │ │ +
808 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ +
│ │ │ │ +
809 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
810 {
│ │ │ │ +
811 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ +
812 field_cast(vec1[rr].template tensor<0>()[0].block(),vec2[rr]);
│ │ │ │ +
813 }
│ │ │ │ +
│ │ │ │ +
814 };
│ │ │ │ +
│ │ │ │ +
815 template <int dimD,
│ │ │ │ +
816 class F1,unsigned int deriv,
│ │ │ │ +
817 class F2,int dimR>
│ │ │ │ +
│ │ │ │ +
818 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,FieldVector<F2,dimR> >
│ │ │ │ +
819 {
│ │ │ │ + │ │ │ │ +
821 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ +
│ │ │ │ +
822 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
823 {
│ │ │ │ +
824 field_cast(vec1.template tensor<0>()[0].block(),vec2[r]);
│ │ │ │ +
825 }
│ │ │ │ +
│ │ │ │ +
826 };
│ │ │ │ +
│ │ │ │ +
827 template <int dimD,
│ │ │ │ +
828 class F1,unsigned int deriv,
│ │ │ │ +
829 class F2,int dimR>
│ │ │ │ +
│ │ │ │ +
830 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,dimR> >
│ │ │ │ +
831 {
│ │ │ │ + │ │ │ │ +
833 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ +
│ │ │ │ +
834 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
835 {
│ │ │ │ +
836 field_cast(vec1[0].template tensor<0>()[0].block(),vec2[r]);
│ │ │ │ +
837 }
│ │ │ │ +
│ │ │ │ +
838 };
│ │ │ │ +
│ │ │ │ +
839 template <int dimD,
│ │ │ │ +
840 class F1,unsigned int deriv,
│ │ │ │ +
841 class F2>
│ │ │ │ +
│ │ │ │ +
842 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,FieldVector<F2,1> >
│ │ │ │ +
843 {
│ │ │ │ + │ │ │ │ +
845 typedef FieldVector<F2,1> Vec2;
│ │ │ │ +
│ │ │ │ +
846 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
847 {
│ │ │ │ +
848 field_cast(vec1.template tensor<0>()[0].block(),vec2);
│ │ │ │ +
849 }
│ │ │ │ +
│ │ │ │ +
850 };
│ │ │ │ +
│ │ │ │ +
851 template <int dimD,
│ │ │ │ +
852 class F1,unsigned int deriv,
│ │ │ │ +
853 class F2>
│ │ │ │ +
│ │ │ │ +
854 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,1> >
│ │ │ │ +
855 {
│ │ │ │ + │ │ │ │ +
857 typedef FieldVector<F2,1> Vec2;
│ │ │ │ +
│ │ │ │ +
858 static void apply(unsigned int /*r*/,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ +
859 {
│ │ │ │ +
860 field_cast(vec1[0].template tensor<0>()[0].block(),vec2);
│ │ │ │ +
861 }
│ │ │ │ +
│ │ │ │ +
862 };
│ │ │ │ +
│ │ │ │ +
863
│ │ │ │ +
864 // ***********************************************
│ │ │ │ +
865 // IO ********************************************
│ │ │ │ +
866 // ***********************************************
│ │ │ │ +
867 template <class F,int dimD,unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
868 std::ostream &operator<< ( std::ostream &out, const LFETensor< F,dimD,deriv > &tensor )
│ │ │ │ +
869 {
│ │ │ │ +
870 return out << tensor.block();
│ │ │ │ +
871 }
│ │ │ │ +
│ │ │ │ +
872#if 0
│ │ │ │ +
873 template <class F,int dimD,unsigned int deriv>
│ │ │ │ +
874 std::ostream &operator<< ( std::ostream &out, const ScalarDerivatives< F,dimD,deriv > &d )
│ │ │ │ +
875 {
│ │ │ │ +
876 out << static_cast<const ScalarDerivatives< F,dimD,deriv-1 > &>(d);
│ │ │ │ +
877 out << " , " << d.tensor() << std::endl;
│ │ │ │ +
878 return out;
│ │ │ │ +
879 }
│ │ │ │ +
880 template <class F,int dimD>
│ │ │ │ +
881 std::ostream &operator<< ( std::ostream &out, const ScalarDerivatives< F,dimD,0 > &d )
│ │ │ │ +
882 {
│ │ │ │ +
883 out << d.tensor() << std::endl;
│ │ │ │ +
884 return out;
│ │ │ │ +
885 }
│ │ │ │ +
886#endif
│ │ │ │ +
887 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
889 {
│ │ │ │ +
890 out << " ( ";
│ │ │ │ +
891 out << d[0];
│ │ │ │ +
892 for (int r=1; r<dimR; ++r)
│ │ │ │ +
893 {
│ │ │ │ +
894 out << " , " << d[r];
│ │ │ │ +
895 }
│ │ │ │ +
896 out << " ) " << std::endl;
│ │ │ │ +
897 return out;
│ │ │ │ +
898 }
│ │ │ │ +
│ │ │ │ +
899 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
901 {
│ │ │ │ +
902 out << static_cast<const Derivatives< F,dimD,dimR,deriv-1,DerivativeLayoutNS::value > &>(d);
│ │ │ │ +
903 out << " ( ";
│ │ │ │ +
904 out << d[0];
│ │ │ │ +
905 for (int r=1; r<dimR; ++r)
│ │ │ │ +
906 {
│ │ │ │ +
907 out << " , " << d[r];
│ │ │ │ +
908 }
│ │ │ │ +
909 out << " ) " << std::endl;
│ │ │ │ +
910 return out;
│ │ │ │ +
911 }
│ │ │ │ +
│ │ │ │ +
912 template <class F,int dimD,int dimR>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
914 {
│ │ │ │ +
915 out << " ( ";
│ │ │ │ +
916 out << d[0];
│ │ │ │ +
917 for (int r=1; r<dimR; ++r)
│ │ │ │ +
918 {
│ │ │ │ +
919 out << " , " << d[r];
│ │ │ │ +
920 }
│ │ │ │ +
921 out << " ) " << std::endl;
│ │ │ │ +
922 return out;
│ │ │ │ +
923 }
│ │ │ │ +
│ │ │ │ +
924 template <class F,int dimD,int dimR>
│ │ │ │ +
│ │ │ │ +
925 std::ostream &operator<< ( std::ostream &out, const Derivatives< F,dimD,dimR,0,DerivativeLayoutNS::value > &d )
│ │ │ │ +
926 {
│ │ │ │ +
927 out << " ( ";
│ │ │ │ +
928 out << d[0];
│ │ │ │ +
929 for (int r=1; r<dimR; ++r)
│ │ │ │ +
930 {
│ │ │ │ +
931 out << " , " << d[r];
│ │ │ │ +
932 }
│ │ │ │ +
933 out << " ) " << std::endl;
│ │ │ │ +
934 return out;
│ │ │ │ +
935 }
│ │ │ │ +
│ │ │ │ +
936 template <class F,int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout>
│ │ │ │ +
│ │ │ │ +
937 std::ostream &operator<< ( std::ostream &out, const std::vector<Derivatives< F,dimD,dimR,deriv,layout > > &y )
│ │ │ │ +
938 {
│ │ │ │ +
939 out << "Number of basis functions: " << y.size() << std::endl;
│ │ │ │ +
940 for (unsigned int i=0; i<y.size(); ++i)
│ │ │ │ +
941 {
│ │ │ │ +
942 out << "Base " << i << " : " << std::endl;
│ │ │ │ +
943 out << y[i];
│ │ │ │ +
944 out << std::endl;
│ │ │ │ +
945 }
│ │ │ │ +
946 return out;
│ │ │ │ +
947 }
│ │ │ │ +
│ │ │ │ +
948}
│ │ │ │ +
949#endif // DUNE_TENSOR_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ -
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ -
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ -
Factory for global-valued Q23D elements.
Definition q2.hh:32
│ │ │ │ -
Q2FiniteElementFactory()
default constructor
Definition q2.hh:42
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ +
DerivativeLayout
Definition tensor.hh:176
│ │ │ │ +
@ derivative
Definition tensor.hh:176
│ │ │ │ +
@ value
Definition tensor.hh:176
│ │ │ │ +
Definition tensor.hh:33
│ │ │ │ +
const Block & block() const
Definition tensor.hh:76
│ │ │ │ +
This & operator*=(const field_type &f)
Definition tensor.hh:56
│ │ │ │ +
Dune::FieldVector< F, size > Block
Definition tensor.hh:41
│ │ │ │ +
This & operator=(const FF &f)
Definition tensor.hh:44
│ │ │ │ +
Block block_
Definition tensor.hh:89
│ │ │ │ +
F field_type
Definition tensor.hh:39
│ │ │ │ +
void axpy(const F &a, const This &y)
Definition tensor.hh:80
│ │ │ │ +
Block & block()
Definition tensor.hh:72
│ │ │ │ +
void assign(const LFETensor< Fy, dimD, deriv > &y)
Definition tensor.hh:85
│ │ │ │ +
static const unsigned int size
Definition tensor.hh:40
│ │ │ │ +
const field_type & operator[](const unsigned int i) const
Definition tensor.hh:62
│ │ │ │ +
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:97
│ │ │ │ + │ │ │ │ +
Definition tensor.hh:115
│ │ │ │ +
Block & block()
Definition tensor.hh:162
│ │ │ │ +
F field_type
Definition tensor.hh:119
│ │ │ │ +
Block block_
Definition tensor.hh:170
│ │ │ │ +
void assign(const LFETensor< Fy, dimD, 0 > &y)
Definition tensor.hh:157
│ │ │ │ +
const Block & block() const
Definition tensor.hh:166
│ │ │ │ +
void axpy(const F &a, const This &y)
Definition tensor.hh:152
│ │ │ │ +
Dune::FieldVector< F, size > Block
Definition tensor.hh:121
│ │ │ │ +
Definition tensor.hh:180
│ │ │ │ + │ │ │ │ +
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:187
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > This
Definition tensor.hh:195
│ │ │ │ +
This & operator=(const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > &t)
Definition tensor.hh:219
│ │ │ │ + │ │ │ │ +
Derivatives< F, dimD, dimR, deriv-1, DerivativeLayoutNS::value > Base
Definition tensor.hh:196
│ │ │ │ +
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar) const
Definition tensor.hh:339
│ │ │ │ +
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:317
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:243
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:330
│ │ │ │ + │ │ │ │ +
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:312
│ │ │ │ +
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:303
│ │ │ │ +
LFETensor< F, dimD, deriv > ThisLFETensor
Definition tensor.hh:197
│ │ │ │ +
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:263
│ │ │ │ +
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:296
│ │ │ │ +
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar)
Definition tensor.hh:350
│ │ │ │ +
const Block & block() const
Definition tensor.hh:277
│ │ │ │ +
void axpy(const F &a, const This &y)
Definition tensor.hh:236
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:249
│ │ │ │ +
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:213
│ │ │ │ +
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:268
│ │ │ │ +
This & operator=(const Block &t)
Definition tensor.hh:224
│ │ │ │ +
Dune::FieldVector< F, size > Block
Definition tensor.hh:206
│ │ │ │ +
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:359
│ │ │ │ +
Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar)
Definition tensor.hh:355
│ │ │ │ +
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor()
Definition tensor.hh:290
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimRy, deriv, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:257
│ │ │ │ +
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() const
Definition tensor.hh:283
│ │ │ │ +
const Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar) const
Definition tensor.hh:344
│ │ │ │ +
ThisLFETensor & operator[](int r)
Definition tensor.hh:309
│ │ │ │ + │ │ │ │ +
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:323
│ │ │ │ + │ │ │ │ +
ThisLFETensor & operator[](int r)
Definition tensor.hh:442
│ │ │ │ +
LFETensor< F, dimD, 0 > ThisLFETensor
Definition tensor.hh:366
│ │ │ │ +
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:465
│ │ │ │ +
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar)
Definition tensor.hh:479
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:407
│ │ │ │ + │ │ │ │ +
Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > This
Definition tensor.hh:365
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:484
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimRy, 0, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:418
│ │ │ │ +
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() const
Definition tensor.hh:449
│ │ │ │ +
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor()
Definition tensor.hh:453
│ │ │ │ +
This & operator=(const Block &t)
Definition tensor.hh:390
│ │ │ │ + │ │ │ │ +
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:445
│ │ │ │ +
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar) const
Definition tensor.hh:474
│ │ │ │ +
Dune::FieldVector< F, size > Block
Definition tensor.hh:375
│ │ │ │ +
const Block & block() const
Definition tensor.hh:437
│ │ │ │ +
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:458
│ │ │ │ +
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:428
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:412
│ │ │ │ +
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:423
│ │ │ │ +
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:384
│ │ │ │ +
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:490
│ │ │ │ +
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:499
│ │ │ │ +
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:495
│ │ │ │ +
This & operator=(const FF &f)
Definition tensor.hh:378
│ │ │ │ + │ │ │ │ +
void axpy(const F &a, const This &y)
Definition tensor.hh:402
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, layouty > &y)
Definition tensor.hh:556
│ │ │ │ + │ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:549
│ │ │ │ +
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > This
Definition tensor.hh:506
│ │ │ │ +
Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::value > ScalarDeriv
Definition tensor.hh:507
│ │ │ │ +
const ScalarDeriv & operator[](int r) const
Definition tensor.hh:573
│ │ │ │ +
void axpy(const FF &a, const This &y)
Definition tensor.hh:537
│ │ │ │ +
This & operator=(const Block &t)
Definition tensor.hh:524
│ │ │ │ +
Dune::FieldVector< F, size > Block
Definition tensor.hh:516
│ │ │ │ +
Dune::FieldVector< ScalarDeriv, dimR > deriv_
Definition tensor.hh:577
│ │ │ │ +
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:543
│ │ │ │ +
Definition tensor.hh:585
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:587
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:601
│ │ │ │ +
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:599
│ │ │ │ +
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:615
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:617
│ │ │ │ +
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:631
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:633
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:648
│ │ │ │ +
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:646
│ │ │ │ +
Definition tensor.hh:664
│ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:665
│ │ │ │ + │ │ │ │ + │ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:677
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:712
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:724
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:785
│ │ │ │ +
Derivatives< F1, dimD, 1, deriv, layout > Vec1
Definition tensor.hh:783
│ │ │ │ +
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:795
│ │ │ │ + │ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:797
│ │ │ │ +
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:807
│ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:809
│ │ │ │ + │ │ │ │ +
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:820
│ │ │ │ + │ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:822
│ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:834
│ │ │ │ +
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:832
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:844
│ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:846
│ │ │ │ +
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:856
│ │ │ │ +
static void apply(unsigned int, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:858
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,82 +1,1635 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -q2.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +tensor.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_TENSOR_HH │ │ │ │ │ +7#define DUNE_TENSOR_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -20 │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y : │ │ │ │ │ -27 public _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y< │ │ │ │ │ -28 typename std::conditional, │ │ │ │ │ -30 LagrangeCubeLocalFiniteElement >::type, │ │ │ │ │ -31 Geometry> │ │ │ │ │ -32 { │ │ │ │ │ -33 typedef typename std::conditional, │ │ │ │ │ -35 _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_t_y_p_e_n_a_m_e_ _G_e_o_m_e_t_r_y_:_:_c_t_y_p_e_,_ _R_F_,_ _G_e_o_m_e_t_r_y_:_: │ │ │ │ │ -_m_y_d_i_m_e_n_s_i_o_n_,_ _2_> >::type LFE; │ │ │ │ │ -36 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_<_L_F_E_,_ _G_e_o_m_e_t_r_y_> _B_a_s_e; │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 /*********************************************** │ │ │ │ │ +19 * The classes here are work in progress. │ │ │ │ │ +20 * Basically they provide tensor structures for │ │ │ │ │ +21 * higher order derivatives of vector valued function. │ │ │ │ │ +22 * Two storage structures are provided │ │ │ │ │ +23 * (either based on the components of the vector valued │ │ │ │ │ +24 * functions or on the order of the derivative). │ │ │ │ │ +25 * Conversions are supplied between the two storage │ │ │ │ │ +26 * structures and simple operations, which make the │ │ │ │ │ +27 * code difficult to use and requires rewriting... │ │ │ │ │ +28 ***************************************************/ │ │ │ │ │ +29 │ │ │ │ │ +30 // Structure for scalar tensor of order deriv │ │ │ │ │ +31 template │ │ │ │ │ +_3_2 class _L_F_E_T_e_n_s_o_r │ │ │ │ │ +33 { │ │ │ │ │ +34 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_e_r_i_v_> _T_h_i_s; │ │ │ │ │ +35 typedef _L_F_E_T_e_n_s_o_r _B_a_s_e_D_i_m; │ │ │ │ │ +36 typedef _L_F_E_T_e_n_s_o_r _B_a_s_e_D_e_r_i_v; │ │ │ │ │ 37 │ │ │ │ │ -38 static const LFE lfe; │ │ │ │ │ -39 │ │ │ │ │ -40 public: │ │ │ │ │ -_4_2 _Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() : _B_a_s_e(lfe) {} │ │ │ │ │ -43 }; │ │ │ │ │ -44 │ │ │ │ │ -45 template │ │ │ │ │ -46 const typename Q2FiniteElementFactory::LFE │ │ │ │ │ -47 Q2FiniteElementFactory::lfe; │ │ │ │ │ -48} │ │ │ │ │ +38 public: │ │ │ │ │ +_3_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ +_4_0 static const unsigned int _s_i_z_e = _B_a_s_e_D_i_m_:_:_s_i_z_e+_B_a_s_e_D_e_r_i_v_:_:_s_i_z_e; │ │ │ │ │ +_4_1 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +42 │ │ │ │ │ +43 template< class FF > │ │ │ │ │ +_4_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const FF &f ) │ │ │ │ │ +45 { │ │ │ │ │ +46 _b_l_o_c_k() = field_cast< F >( f ); │ │ │ │ │ +47 return *this; │ │ │ │ │ +48 } │ │ │ │ │ 49 │ │ │ │ │ -50#endif │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_5_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _B_l_o_c_k &b ) │ │ │ │ │ +51 { │ │ │ │ │ +52 _b_l_o_c_k() = b; │ │ │ │ │ +53 return *this; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_6 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ +57 { │ │ │ │ │ +58 _b_l_o_c_k() *= f; │ │ │ │ │ +59 return *this; │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +_6_2 const _f_i_e_l_d___t_y_p_e &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ +63 { │ │ │ │ │ +64 return _b_l_o_c_k()[ i ]; │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +_6_7 _f_i_e_l_d___t_y_p_e &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) │ │ │ │ │ +68 { │ │ │ │ │ +69 return _b_l_o_c_k()[ i ]; │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +_7_2 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ +73 { │ │ │ │ │ +74 return _b_l_o_c_k__; │ │ │ │ │ +75 } │ │ │ │ │ +_7_6 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ +77 { │ │ │ │ │ +78 return _b_l_o_c_k__; │ │ │ │ │ +79 } │ │ │ │ │ +_8_0 void _a_x_p_y(const F& a, const _T_h_i_s &y) │ │ │ │ │ +81 { │ │ │ │ │ +82 _b_l_o_c_k().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ +83 } │ │ │ │ │ +84 template │ │ │ │ │ +_8_5 void _a_s_s_i_g_n(const _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_D_,_d_e_r_i_v_> &y) │ │ │ │ │ +86 { │ │ │ │ │ +87 _f_i_e_l_d___c_a_s_t(y._b_l_o_c_k(),_b_l_o_c_k()); │ │ │ │ │ +88 } │ │ │ │ │ +_8_9 _B_l_o_c_k _b_l_o_c_k__; │ │ │ │ │ +90 }; │ │ │ │ │ +91 │ │ │ │ │ +92 │ │ │ │ │ +93 template │ │ │ │ │ +_9_4 struct FieldTraits<_L_F_E_T_e_n_s_o_r> │ │ │ │ │ +95 { │ │ │ │ │ +_9_6 using _f_i_e_l_d___t_y_p_e = F; │ │ │ │ │ +_9_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ +98 }; │ │ │ │ │ +99 │ │ │ │ │ +100 // ****************************************** │ │ │ │ │ +101 template │ │ │ │ │ +_1_0_2 struct _L_F_E_T_e_n_s_o_r │ │ │ │ │ +103 { │ │ │ │ │ +_1_0_4 static const int _s_i_z_e = 0; │ │ │ │ │ +105 }; │ │ │ │ │ +106 │ │ │ │ │ +107 template │ │ │ │ │ +_1_0_8 struct _L_F_E_T_e_n_s_o_r │ │ │ │ │ +109 { │ │ │ │ │ +_1_1_0 static const int _s_i_z_e = 1; │ │ │ │ │ +111 }; │ │ │ │ │ +112 │ │ │ │ │ +113 template │ │ │ │ │ +_1_1_4 class _L_F_E_T_e_n_s_o_r │ │ │ │ │ +115 { │ │ │ │ │ +116 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_0_> _T_h_i_s; │ │ │ │ │ +117 │ │ │ │ │ +118 public: │ │ │ │ │ +_1_1_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ +_1_2_0 static const int _s_i_z_e = 1; │ │ │ │ │ +_1_2_1 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +122 │ │ │ │ │ +123 template< class FF > │ │ │ │ │ +_1_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const FF &f ) │ │ │ │ │ +125 { │ │ │ │ │ +126 _b_l_o_c_k() = field_cast< F >( f ); │ │ │ │ │ +127 return *this; │ │ │ │ │ +128 } │ │ │ │ │ +129 │ │ │ │ │ +_1_3_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _B_l_o_c_k &b ) │ │ │ │ │ +131 { │ │ │ │ │ +132 _b_l_o_c_k() = b; │ │ │ │ │ +133 return *this; │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +_1_3_6 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ +137 { │ │ │ │ │ +138 _b_l_o_c_k() *= f; │ │ │ │ │ +139 return *this; │ │ │ │ │ +140 } │ │ │ │ │ +141 │ │ │ │ │ +_1_4_2 const F &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ +143 { │ │ │ │ │ +144 return _b_l_o_c_k()[ i ]; │ │ │ │ │ +145 } │ │ │ │ │ +146 │ │ │ │ │ +_1_4_7 F &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) │ │ │ │ │ +148 { │ │ │ │ │ +149 return _b_l_o_c_k()[ i ]; │ │ │ │ │ +150 } │ │ │ │ │ +151 │ │ │ │ │ +_1_5_2 void _a_x_p_y(const F& a, const _T_h_i_s &y) │ │ │ │ │ +153 { │ │ │ │ │ +154 _b_l_o_c_k().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ +155 } │ │ │ │ │ +156 template │ │ │ │ │ +_1_5_7 void _a_s_s_i_g_n(const _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_D_,_0_> &y) │ │ │ │ │ +158 { │ │ │ │ │ +159 _f_i_e_l_d___c_a_s_t(y._b_l_o_c_k(),_b_l_o_c_k()); │ │ │ │ │ +160 } │ │ │ │ │ +161 │ │ │ │ │ +_1_6_2 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ +163 { │ │ │ │ │ +164 return _b_l_o_c_k__; │ │ │ │ │ +165 } │ │ │ │ │ +_1_6_6 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ +167 { │ │ │ │ │ +168 return _b_l_o_c_k__; │ │ │ │ │ +169 } │ │ │ │ │ +_1_7_0 _B_l_o_c_k _b_l_o_c_k__; │ │ │ │ │ +171 }; │ │ │ │ │ +172 // *********************************************************** │ │ │ │ │ +173 // Structure for all derivatives up to order deriv │ │ │ │ │ +174 // for vector valued function │ │ │ │ │ +_1_7_5 namespace DerivativeLayoutNS { │ │ │ │ │ +_1_7_6 enum _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t {_v_a_l_u_e,_d_e_r_i_v_a_t_i_v_e}; │ │ │ │ │ +177 } │ │ │ │ │ +178 template │ │ │ │ │ +_1_8_0 struct _D_e_r_i_v_a_t_i_v_e_s; │ │ │ │ │ +181 │ │ │ │ │ +182 template │ │ │ │ │ +_1_8_4 struct FieldTraits<_D_e_r_i_v_a_t_i_v_e_s> │ │ │ │ │ +185 { │ │ │ │ │ +_1_8_6 using _f_i_e_l_d___t_y_p_e = F; │ │ │ │ │ +_1_8_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ +188 }; │ │ │ │ │ +189 │ │ │ │ │ +190 // Implemnetation for valued based layout │ │ │ │ │ +191 template │ │ │ │ │ +_1_9_2 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +193 : public _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +194 { │ │ │ │ │ +_1_9_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _T_h_i_s; │ │ │ │ │ +_1_9_6 typedef _D_e_r_i_v_a_t_i_v_e_s _B_a_s_e; │ │ │ │ │ +_1_9_7 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_e_r_i_v_> _T_h_i_s_L_F_E_T_e_n_s_o_r; │ │ │ │ │ +198 │ │ │ │ │ +_1_9_9 typedef F _F_i_e_l_d; │ │ │ │ │ +_2_0_0 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ +201 │ │ │ │ │ +_2_0_2 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ +_2_0_3 static const unsigned int dimDomain = dimD; │ │ │ │ │ +_2_0_4 static const unsigned int dimRange = dimR; │ │ │ │ │ +_2_0_5 constexpr static int size = Base::size+ThisLFETensor::size*dimR; │ │ │ │ │ +_2_0_6 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +207 │ │ │ │ │ +_2_0_8 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const F& f) │ │ │ │ │ +209 { │ │ │ │ │ +210 block() = f; │ │ │ │ │ +211 return *this; │ │ │ │ │ +212 } │ │ │ │ │ +_2_1_3 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector &t) │ │ │ │ │ +214 { │ │ │ │ │ +215 tensor_ = t; │ │ │ │ │ +216 return *this; │ │ │ │ │ +217 } │ │ │ │ │ +218 template │ │ │ │ │ +_2_1_9 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector<_L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_o_r_d_e_r_>,dimR> &t) │ │ │ │ │ +220 { │ │ │ │ │ +221 tensor() = t; │ │ │ │ │ +222 return *this; │ │ │ │ │ +223 } │ │ │ │ │ +_2_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ +225 { │ │ │ │ │ +226 block() = t; │ │ │ │ │ +227 return *this; │ │ │ │ │ +228 } │ │ │ │ │ +229 │ │ │ │ │ +_2_3_0 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ +231 { │ │ │ │ │ +232 block() *= f; │ │ │ │ │ +233 return *this; │ │ │ │ │ +234 } │ │ │ │ │ +235 │ │ │ │ │ +_2_3_6 void _a_x_p_y(const F &a, const _T_h_i_s &y) │ │ │ │ │ +237 { │ │ │ │ │ +238 block().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ +239 } │ │ │ │ │ +240 │ │ │ │ │ +241 // assign with same layout (only different Field) │ │ │ │ │ +242 template │ │ │ │ │ +_2_4_3 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ +&y) │ │ │ │ │ +244 { │ │ │ │ │ +245 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ +246 } │ │ │ │ │ +247 // assign with different layout (same dimRange) │ │ │ │ │ +248 template │ │ │ │ │ +_2_4_9 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +250 { │ │ │ │ │ +251 Base::assign(y); │ │ │ │ │ +252 for (int rr=0; rr()[0]; │ │ │ │ │ +254 } │ │ │ │ │ +255 // assign with rth component of function │ │ │ │ │ +256 template │ │ │ │ │ +_2_5_7 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_y_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_> &y,unsigned int r) │ │ │ │ │ +258 { │ │ │ │ │ +259 assign(y.block(),r); │ │ │ │ │ +260 } │ │ │ │ │ +261 // assign with scalar functions to component r │ │ │ │ │ +262 template │ │ │ │ │ +_2_6_3 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ +264 { │ │ │ │ │ +265 assign(r,y.block()); │ │ │ │ │ +266 } │ │ │ │ │ +267 template │ │ │ │ │ +_2_6_8 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +269 { │ │ │ │ │ +270 assign(r,y[0]); │ │ │ │ │ +271 } │ │ │ │ │ +272 │ │ │ │ │ +_2_7_3 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ +274 { │ │ │ │ │ +275 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ +276 } │ │ │ │ │ +_2_7_7 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ +278 { │ │ │ │ │ +279 return reinterpret_cast(*this); │ │ │ │ │ +280 } │ │ │ │ │ +281 │ │ │ │ │ +282 template │ │ │ │ │ +_2_8_3 const Dune::FieldVector,dimR> &_t_e_n_s_o_r() const │ │ │ │ │ +284 { │ │ │ │ │ +285 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +286 const std::integral_constant a = {}; │ │ │ │ │ +287 return tensor(a); │ │ │ │ │ +288 } │ │ │ │ │ +289 template │ │ │ │ │ +_2_9_0 Dune::FieldVector,dimR> &_t_e_n_s_o_r() │ │ │ │ │ +291 { │ │ │ │ │ +292 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +293 return tensor(std::integral_constant()); │ │ │ │ │ +294 } │ │ │ │ │ +295 template │ │ │ │ │ +_2_9_6 const Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ +const │ │ │ │ │ +297 { │ │ │ │ │ +298 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +299 const std::integral_constant a = {}; │ │ │ │ │ +300 return reinterpret_cast::size*dimR>&>(tensor(a)); │ │ │ │ │ +301 } │ │ │ │ │ +302 template │ │ │ │ │ +_3_0_3 Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ +304 { │ │ │ │ │ +305 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +306 const std::integral_constant a = {}; │ │ │ │ │ +307 return reinterpret_cast:: │ │ │ │ │ +size*dimR>&>(tensor(a)); │ │ │ │ │ +308 } │ │ │ │ │ +_3_0_9 _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ +310 return tensor_[r]; │ │ │ │ │ +311 } │ │ │ │ │ +_3_1_2 const _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ +313 return tensor_[r]; │ │ │ │ │ +314 } │ │ │ │ │ +315 protected: │ │ │ │ │ +316 template │ │ │ │ │ +_3_1_7 void _a_s_s_i_g_n(const FieldVector &y,unsigned int r) │ │ │ │ │ +318 { │ │ │ │ │ +319 Base::template assign(reinterpret_cast&>(y),r); │ │ │ │ │ +320 tensor_[0] = reinterpret_cast&>(y │ │ │ │ │ +[Base::size*dimRy+r*ThisLFETensor::size]); │ │ │ │ │ +321 } │ │ │ │ │ +322 template │ │ │ │ │ +_3_2_3 void _a_s_s_i_g_n(unsigned int r,const FieldVector &y) │ │ │ │ │ +324 { │ │ │ │ │ +325 Base::assign(r,reinterpret_cast&> │ │ │ │ │ +(y)); │ │ │ │ │ +326 tensor_[r] = reinterpret_cast&>(y │ │ │ │ │ +[Base::size/dimR]); │ │ │ │ │ +327 } │ │ │ │ │ +328 // assign with different layout (same dimRange) │ │ │ │ │ +329 template │ │ │ │ │ +_3_3_0 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_y_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +331 { │ │ │ │ │ +332 Base::assign(y); │ │ │ │ │ +333 for (int rr=0; rr()[0]; │ │ │ │ │ +335 } │ │ │ │ │ +336 │ │ │ │ │ +337 template │ │ │ │ │ +338 const Dune::FieldVector,dimR> & │ │ │ │ │ +_3_3_9 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ +340 { │ │ │ │ │ +341 return Base::tensor(dorderVar); │ │ │ │ │ +342 } │ │ │ │ │ +343 const Dune::FieldVector,dimR> & │ │ │ │ │ +_3_4_4 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ +345 { │ │ │ │ │ +346 return tensor_; │ │ │ │ │ +347 } │ │ │ │ │ +348 template │ │ │ │ │ +349 Dune::FieldVector,dimR> & │ │ │ │ │ +_3_5_0 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ +351 { │ │ │ │ │ +352 return Base::tensor(dorderVar); │ │ │ │ │ +353 } │ │ │ │ │ +354 Dune::FieldVector,dimR> & │ │ │ │ │ +_3_5_5 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ +356 { │ │ │ │ │ +357 return tensor_; │ │ │ │ │ +358 } │ │ │ │ │ +_3_5_9 Dune::FieldVector _t_e_n_s_o_r__; │ │ │ │ │ +360 }; │ │ │ │ │ +361 │ │ │ │ │ +362 template │ │ │ │ │ +_3_6_3 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +364 { │ │ │ │ │ +_3_6_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _T_h_i_s; │ │ │ │ │ +_3_6_6 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_0_> _T_h_i_s_L_F_E_T_e_n_s_o_r; │ │ │ │ │ +367 │ │ │ │ │ +_3_6_8 typedef F _F_i_e_l_d; │ │ │ │ │ +_3_6_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ +370 │ │ │ │ │ +_3_7_1 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ +_3_7_2 static const unsigned int dimDomain = dimD; │ │ │ │ │ +_3_7_3 static const unsigned int dimRange = dimR; │ │ │ │ │ +_3_7_4 constexpr static int size = ThisLFETensor::size*dimR; │ │ │ │ │ +_3_7_5 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +376 │ │ │ │ │ +377 template │ │ │ │ │ +_3_7_8 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const FF& f) │ │ │ │ │ +379 { │ │ │ │ │ +380 for (int r=0; r(f); │ │ │ │ │ +382 return *this; │ │ │ │ │ +383 } │ │ │ │ │ +_3_8_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector &t) │ │ │ │ │ +385 { │ │ │ │ │ +386 tensor_ = t; │ │ │ │ │ +387 return *this; │ │ │ │ │ +388 } │ │ │ │ │ +389 │ │ │ │ │ +_3_9_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ +391 { │ │ │ │ │ +392 block() = t; │ │ │ │ │ +393 return *this; │ │ │ │ │ +394 } │ │ │ │ │ +395 │ │ │ │ │ +_3_9_6 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ +397 { │ │ │ │ │ +398 block() *= f; │ │ │ │ │ +399 return *this; │ │ │ │ │ +400 } │ │ │ │ │ +401 │ │ │ │ │ +_4_0_2 void _a_x_p_y(const F &a, const _T_h_i_s &y) │ │ │ │ │ +403 { │ │ │ │ │ +404 block().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ +405 } │ │ │ │ │ +406 template │ │ │ │ │ +_4_0_7 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ +408 { │ │ │ │ │ +409 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ +410 } │ │ │ │ │ +411 template │ │ │ │ │ +_4_1_2 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +413 { │ │ │ │ │ +414 for (int rr=0; rr()[0]; │ │ │ │ │ +416 } │ │ │ │ │ +417 template │ │ │ │ │ +_4_1_8 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_y_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ +&y,unsigned int r) │ │ │ │ │ +419 { │ │ │ │ │ +420 assign(y.block(),r); │ │ │ │ │ +421 } │ │ │ │ │ +422 template │ │ │ │ │ +_4_2_3 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ +424 { │ │ │ │ │ +425 tensor_[r].assign(y[0]); │ │ │ │ │ +426 } │ │ │ │ │ +427 template │ │ │ │ │ +_4_2_8 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +429 { │ │ │ │ │ +430 tensor_[r].assign(y[0][0]); │ │ │ │ │ +431 } │ │ │ │ │ +432 │ │ │ │ │ +_4_3_3 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ +434 { │ │ │ │ │ +435 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ +436 } │ │ │ │ │ +_4_3_7 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ +438 { │ │ │ │ │ +439 return reinterpret_cast(*this); │ │ │ │ │ +440 } │ │ │ │ │ +441 │ │ │ │ │ +_4_4_2 _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ +443 return tensor_[r]; │ │ │ │ │ +444 } │ │ │ │ │ +_4_4_5 const _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ +446 return tensor_[r]; │ │ │ │ │ +447 } │ │ │ │ │ +448 template │ │ │ │ │ +_4_4_9 const Dune::FieldVector,dimR> &_t_e_n_s_o_r() const │ │ │ │ │ +450 { │ │ │ │ │ +451 return tensor_; │ │ │ │ │ +452 } │ │ │ │ │ +_4_5_3 Dune::FieldVector,dimR> &_t_e_n_s_o_r() │ │ │ │ │ +454 { │ │ │ │ │ +455 return tensor_; │ │ │ │ │ +456 } │ │ │ │ │ +457 template │ │ │ │ │ +_4_5_8 const Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ +const │ │ │ │ │ +459 { │ │ │ │ │ +460 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +461 const std::integral_constant a = {}; │ │ │ │ │ +462 return reinterpret_cast::size*dimR>&>(tensor(a)); │ │ │ │ │ +463 } │ │ │ │ │ +464 template │ │ │ │ │ +_4_6_5 Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ +466 { │ │ │ │ │ +467 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ +468 const std::integral_constant a = {}; │ │ │ │ │ +469 return reinterpret_cast:: │ │ │ │ │ +size*dimR>&>(tensor(a)); │ │ │ │ │ +470 } │ │ │ │ │ +471 │ │ │ │ │ +472 protected: │ │ │ │ │ +473 const Dune::FieldVector,dimR> & │ │ │ │ │ +_4_7_4 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ +475 { │ │ │ │ │ +476 return tensor_; │ │ │ │ │ +477 } │ │ │ │ │ +478 Dune::FieldVector,dimR> & │ │ │ │ │ +_4_7_9 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ +480 { │ │ │ │ │ +481 return tensor_; │ │ │ │ │ +482 } │ │ │ │ │ +483 template │ │ │ │ │ +_4_8_4 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_y_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +485 { │ │ │ │ │ +486 for (int rr=0; rr()[0]; │ │ │ │ │ +488 } │ │ │ │ │ +489 template │ │ │ │ │ +_4_9_0 void _a_s_s_i_g_n(const FieldVector &y,unsigned int r) │ │ │ │ │ +491 { │ │ │ │ │ +492 tensor_[0] = reinterpret_cast&>(y │ │ │ │ │ +[r*ThisLFETensor::size]); │ │ │ │ │ +493 } │ │ │ │ │ +494 template │ │ │ │ │ +_4_9_5 void _a_s_s_i_g_n(unsigned int r,const FieldVector &y) │ │ │ │ │ +496 { │ │ │ │ │ +497 tensor_[r] = y; │ │ │ │ │ +498 } │ │ │ │ │ +_4_9_9 Dune::FieldVector _t_e_n_s_o_r__; │ │ │ │ │ +500 }; │ │ │ │ │ +501 │ │ │ │ │ +502 // Implemnetation for DerivativeLayoutNS::derivative based layout │ │ │ │ │ +503 template │ │ │ │ │ +_5_0_4 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +505 { │ │ │ │ │ +_5_0_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _T_h_i_s; │ │ │ │ │ +_5_0_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _S_c_a_l_a_r_D_e_r_i_v; │ │ │ │ │ +508 │ │ │ │ │ +_5_0_9 typedef F _F_i_e_l_d; │ │ │ │ │ +_5_1_0 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ +511 │ │ │ │ │ +_5_1_2 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ +_5_1_3 static const unsigned int dimDomain = dimD; │ │ │ │ │ +_5_1_4 static const unsigned int dimRange = dimR; │ │ │ │ │ +_5_1_5 constexpr static int size = ScalarDeriv::size*dimR; │ │ │ │ │ +_5_1_6 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +517 │ │ │ │ │ +518 template │ │ │ │ │ +_5_1_9 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const FF& f) │ │ │ │ │ +520 { │ │ │ │ │ +521 block() = field_cast(f); │ │ │ │ │ +522 return *this; │ │ │ │ │ +523 } │ │ │ │ │ +_5_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ +525 { │ │ │ │ │ +526 block() = t; │ │ │ │ │ +527 return *this; │ │ │ │ │ +528 } │ │ │ │ │ +529 │ │ │ │ │ +_5_3_0 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ +531 { │ │ │ │ │ +532 block() *= f; │ │ │ │ │ +533 return *this; │ │ │ │ │ +534 } │ │ │ │ │ +535 │ │ │ │ │ +536 template │ │ │ │ │ +_5_3_7 void _a_x_p_y(const FF &a, const _T_h_i_s &y) │ │ │ │ │ +538 { │ │ │ │ │ +539 block().axpy(field_cast(a),y._b_l_o_c_k()); │ │ │ │ │ +540 } │ │ │ │ │ +541 // assign with same layout (only different Field) │ │ │ │ │ +542 template │ │ │ │ │ +_5_4_3 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ +544 { │ │ │ │ │ +545 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ +546 } │ │ │ │ │ +547 // assign with different layout (same dimRange) │ │ │ │ │ +548 template │ │ │ │ │ +_5_4_9 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ +&y) │ │ │ │ │ +550 { │ │ │ │ │ +551 for (unsigned int rr=0; rr │ │ │ │ │ +_5_5_6 void _a_s_s_i_g_n(unsigned int r,const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_y_> &y) │ │ │ │ │ +557 { │ │ │ │ │ +558 deriv_[r].assign(r,y); │ │ │ │ │ +559 } │ │ │ │ │ +560 │ │ │ │ │ +_5_6_1 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ +562 { │ │ │ │ │ +563 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ +564 } │ │ │ │ │ +_5_6_5 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ +566 { │ │ │ │ │ +567 return reinterpret_cast(*this); │ │ │ │ │ +568 } │ │ │ │ │ +569 │ │ │ │ │ +_5_7_0 _S_c_a_l_a_r_D_e_r_i_v &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ +571 return deriv_[r]; │ │ │ │ │ +572 } │ │ │ │ │ +_5_7_3 const _S_c_a_l_a_r_D_e_r_i_v &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ +574 return deriv_[r]; │ │ │ │ │ +575 } │ │ │ │ │ +576 protected: │ │ │ │ │ +_5_7_7 Dune::FieldVector _d_e_r_i_v__; │ │ │ │ │ +578 }; │ │ │ │ │ +579 │ │ │ │ │ +580 // ****************************************** │ │ │ │ │ +581 // AXPY ************************************* │ │ │ │ │ +582 // ****************************************** │ │ │ │ │ +583 template │ │ │ │ │ +_5_8_4 struct _L_F_E_T_e_n_s_o_r_A_x_p_y │ │ │ │ │ +585 { │ │ │ │ │ +586 template │ │ │ │ │ +_5_8_7 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ +588 const Vec1 &x, Vec2 &y) │ │ │ │ │ +589 { │ │ │ │ │ +590 y.axpy(a,x); │ │ │ │ │ +591 } │ │ │ │ │ +592 }; │ │ │ │ │ +593 template │ │ │ │ │ +_5_9_7 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ +598 { │ │ │ │ │ +_5_9_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +600 template │ │ │ │ │ +_6_0_1 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ +602 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ +603 { │ │ │ │ │ +604 const FieldVector &xx = x.template block(); │ │ │ │ │ +605 for (int i=0; i │ │ │ │ │ +_6_1_3 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ +614 { │ │ │ │ │ +_6_1_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +616 template │ │ │ │ │ +_6_1_7 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ +618 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ +619 { │ │ │ │ │ +620 for (int rr=0; rr, │ │ │ │ │ +622 Vec2,deriv>_:_:_a_p_p_l_y(rr,a,x[rr],y); │ │ │ │ │ +623 } │ │ │ │ │ +624 }; │ │ │ │ │ +625 template │ │ │ │ │ +_6_2_9 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ +630 { │ │ │ │ │ +_6_3_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +632 template │ │ │ │ │ +_6_3_3 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ +634 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ +635 { │ │ │ │ │ +636 _L_F_E_T_e_n_s_o_r_A_x_p_y_<_D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_>, │ │ │ │ │ +637 Vec2,deriv>_:_:_a_p_p_l_y(r,a,x[0],y); │ │ │ │ │ +638 } │ │ │ │ │ +639 }; │ │ │ │ │ +640 template │ │ │ │ │ +_6_4_4 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ +645 { │ │ │ │ │ +_6_4_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +647 template │ │ │ │ │ +_6_4_8 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ +649 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ +650 { │ │ │ │ │ +651 typedef _L_F_E_T_e_n_s_o_r_<_F_1_,_d_i_m_D_,_d_e_r_i_v_> LFETensorType; │ │ │ │ │ +652 const unsigned int rr = r*LFETensorType::size; │ │ │ │ │ +653 const FieldVector &xx = x.template block(); │ │ │ │ │ +654 for (int i=0; i::dimension; ++i) │ │ │ │ │ +655 y[rr+i] += xx[i]*a; │ │ │ │ │ +656 } │ │ │ │ │ +657 }; │ │ │ │ │ +658 │ │ │ │ │ +659 // *********************************************** │ │ │ │ │ +660 // Assign **************************************** │ │ │ │ │ +661 // *********************************************** │ │ │ │ │ +662 template │ │ │ │ │ +_6_6_3 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n │ │ │ │ │ +664 { │ │ │ │ │ +_6_6_5 static void _a_p_p_l_y(unsigned int r,const Vec1 &vec1,Vec2 &vec2) │ │ │ │ │ +666 { │ │ │ │ │ +667 _f_i_e_l_d___c_a_s_t(vec1,vec2); │ │ │ │ │ +668 } │ │ │ │ │ +669 }; │ │ │ │ │ +670 template │ │ │ │ │ +_6_7_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +673 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +674 { │ │ │ │ │ +_6_7_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ +_6_7_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_2; │ │ │ │ │ +_6_7_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +678 { │ │ │ │ │ +679 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ +680 } │ │ │ │ │ +681 }; │ │ │ │ │ +682 template │ │ │ │ │ +_6_8_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +685 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +686 { │ │ │ │ │ +_6_8_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_6_8_8 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ +_V_e_c_2; │ │ │ │ │ +_6_8_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +690 { │ │ │ │ │ +691 vec2.assign(vec1); │ │ │ │ │ +692 } │ │ │ │ │ +693 }; │ │ │ │ │ +694 template │ │ │ │ │ +_6_9_6 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +697 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +698 { │ │ │ │ │ +_6_9_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ +_V_e_c_1; │ │ │ │ │ +_7_0_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ +_7_0_1 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +702 { │ │ │ │ │ +703 vec2.assign(vec1); │ │ │ │ │ +704 } │ │ │ │ │ +705 }; │ │ │ │ │ +706 template │ │ │ │ │ +_7_0_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +709 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +710 { │ │ │ │ │ +_7_1_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ +_7_1_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ +_7_1_3 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +714 { │ │ │ │ │ +715 vec2.assign(r,vec1); │ │ │ │ │ +716 } │ │ │ │ │ +717 }; │ │ │ │ │ +718 template │ │ │ │ │ +_7_2_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +721 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +722 { │ │ │ │ │ +_7_2_3 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ +_7_2_4 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ +_V_e_c_2; │ │ │ │ │ +_7_2_5 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +726 { │ │ │ │ │ +727 vec2.assign(r,vec1); │ │ │ │ │ +728 } │ │ │ │ │ +729 }; │ │ │ │ │ +730 template │ │ │ │ │ +_7_3_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +733 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +734 { │ │ │ │ │ +_7_3_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_7_3_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ +_7_3_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +738 { │ │ │ │ │ +739 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ +740 } │ │ │ │ │ +741 }; │ │ │ │ │ +742 template │ │ │ │ │ +_7_4_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +745 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +746 { │ │ │ │ │ +_7_4_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +_7_4_8 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_2; │ │ │ │ │ +_7_4_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +750 { │ │ │ │ │ +751 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ +752 } │ │ │ │ │ +753 }; │ │ │ │ │ +754 template │ │ │ │ │ +_7_5_6 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +757 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +758 { │ │ │ │ │ +_7_5_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +_7_6_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ +_7_6_1 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +762 { │ │ │ │ │ +763 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ +764 } │ │ │ │ │ +765 }; │ │ │ │ │ +766 template │ │ │ │ │ +_7_6_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +769 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ +770 { │ │ │ │ │ +_7_7_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_7_7_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_2; │ │ │ │ │ +_7_7_3 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +774 { │ │ │ │ │ +775 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ +776 } │ │ │ │ │ +777 }; │ │ │ │ │ +778 template │ │ │ │ │ +_7_8_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ +781 F2 > │ │ │ │ │ +782 { │ │ │ │ │ +_7_8_3 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ +_7_8_4 typedef F2 _V_e_c_2; │ │ │ │ │ +_7_8_5 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +786 { │ │ │ │ │ +787 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2); │ │ │ │ │ +788 } │ │ │ │ │ +789 }; │ │ │ │ │ +790 template │ │ │ │ │ +_7_9_3 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +794 { │ │ │ │ │ +_7_9_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_7_9_6 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_7_9_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +798 { │ │ │ │ │ +799 _f_i_e_l_d___c_a_s_t(vec1.template block<0>(),vec2); │ │ │ │ │ +800 } │ │ │ │ │ +801 }; │ │ │ │ │ +802 template │ │ │ │ │ +_8_0_5 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +806 { │ │ │ │ │ +_8_0_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ +_V_e_c_1; │ │ │ │ │ +_8_0_8 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_8_0_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +810 { │ │ │ │ │ +811 for (int rr=0; rr()[0].block(),vec2[rr]); │ │ │ │ │ +813 } │ │ │ │ │ +814 }; │ │ │ │ │ +815 template │ │ │ │ │ +_8_1_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +819 { │ │ │ │ │ +_8_2_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_8_2_1 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_8_2_2 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +823 { │ │ │ │ │ +824 _f_i_e_l_d___c_a_s_t(vec1.template tensor<0>()[0].block(),vec2[r]); │ │ │ │ │ +825 } │ │ │ │ │ +826 }; │ │ │ │ │ +827 template │ │ │ │ │ +_8_3_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +831 { │ │ │ │ │ +_8_3_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +_8_3_3 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_8_3_4 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +835 { │ │ │ │ │ +836 _f_i_e_l_d___c_a_s_t(vec1[0].template tensor<0>()[0].block(),vec2[r]); │ │ │ │ │ +837 } │ │ │ │ │ +838 }; │ │ │ │ │ +839 template │ │ │ │ │ +_8_4_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +843 { │ │ │ │ │ +_8_4_4 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ +_8_4_5 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_8_4_6 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +847 { │ │ │ │ │ +848 _f_i_e_l_d___c_a_s_t(vec1.template tensor<0>()[0].block(),vec2); │ │ │ │ │ +849 } │ │ │ │ │ +850 }; │ │ │ │ │ +851 template │ │ │ │ │ +_8_5_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ +855 { │ │ │ │ │ +_8_5_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ +_8_5_7 typedef FieldVector _V_e_c_2; │ │ │ │ │ +_8_5_8 static void _a_p_p_l_y(unsigned int /*r*/,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ +859 { │ │ │ │ │ +860 _f_i_e_l_d___c_a_s_t(vec1[0].template tensor<0>()[0].block(),vec2); │ │ │ │ │ +861 } │ │ │ │ │ +862 }; │ │ │ │ │ +863 │ │ │ │ │ +864 // *********************************************** │ │ │ │ │ +865 // IO ******************************************** │ │ │ │ │ +866 // *********************************************** │ │ │ │ │ +867 template │ │ │ │ │ +_8_6_8 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _L_F_E_T_e_n_s_o_r_<_ _F_,_d_i_m_D_,_d_e_r_i_v │ │ │ │ │ +_> &tensor ) │ │ │ │ │ +869 { │ │ │ │ │ +870 return out << tensor._b_l_o_c_k(); │ │ │ │ │ +871 } │ │ │ │ │ +872#if 0 │ │ │ │ │ +873 template │ │ │ │ │ +874 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const ScalarDerivatives< │ │ │ │ │ +F,dimD,deriv > &d ) │ │ │ │ │ +875 { │ │ │ │ │ +876 out << static_cast &>(d); │ │ │ │ │ +877 out << " , " << d.tensor() << std::endl; │ │ │ │ │ +878 return out; │ │ │ │ │ +879 } │ │ │ │ │ +880 template │ │ │ │ │ +881 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const ScalarDerivatives< │ │ │ │ │ +F,dimD,0 > &d ) │ │ │ │ │ +882 { │ │ │ │ │ +883 out << d.tensor() << std::endl; │ │ │ │ │ +884 return out; │ │ │ │ │ +885 } │ │ │ │ │ +886#endif │ │ │ │ │ +887 template │ │ │ │ │ +_8_8_8 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> &d ) │ │ │ │ │ +889 { │ │ │ │ │ +890 out << " ( "; │ │ │ │ │ +891 out << d[0]; │ │ │ │ │ +892 for (int r=1; r │ │ │ │ │ +_9_0_0 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> &d ) │ │ │ │ │ +901 { │ │ │ │ │ +902 out << static_cast &>(d); │ │ │ │ │ +903 out << " ( "; │ │ │ │ │ +904 out << d[0]; │ │ │ │ │ +905 for (int r=1; r │ │ │ │ │ +_9_1_3 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> &d ) │ │ │ │ │ +914 { │ │ │ │ │ +915 out << " ( "; │ │ │ │ │ +916 out << d[0]; │ │ │ │ │ +917 for (int r=1; r │ │ │ │ │ +_9_2_5 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> &d ) │ │ │ │ │ +926 { │ │ │ │ │ +927 out << " ( "; │ │ │ │ │ +928 out << d[0]; │ │ │ │ │ +929 for (int r=1; r │ │ │ │ │ +_9_3_7 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const std:: │ │ │ │ │ +vector<_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_ _> > &y ) │ │ │ │ │ +938 { │ │ │ │ │ +939 out << "Number of basis functions: " << y.size() << std::endl; │ │ │ │ │ +940 for (unsigned int i=0; i &mat) │ │ │ │ │ +DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t │ │ │ │ │ +DerivativeLayout │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e │ │ │ │ │ +@ derivative │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ +@ value │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k │ │ │ │ │ +const Block & block() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ │ +This & operator*=(const field_type &f) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, size > Block │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const FF &f) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k__ │ │ │ │ │ +Block block_ │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_a_x_p_y │ │ │ │ │ +void axpy(const F &a, const This &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k │ │ │ │ │ +Block & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const LFETensor< Fy, dimD, deriv > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_s_i_z_e │ │ │ │ │ +static const unsigned int size │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +const field_type & operator[](const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ +typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:97 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _> │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k │ │ │ │ │ +Block & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:162 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k__ │ │ │ │ │ +Block block_ │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:170 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const LFETensor< Fy, dimD, 0 > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:157 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k │ │ │ │ │ +const Block & block() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:166 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_a_x_p_y │ │ │ │ │ +void axpy(const F &a, const This &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:152 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, size > Block │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:121 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:186 │ │ │ │ │ +_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ +typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:194 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:199 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s │ │ │ │ │ +Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > This │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:195 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > │ │ │ │ │ +&t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:219 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_: │ │ │ │ │ +_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:200 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_a_s_e │ │ │ │ │ +Derivatives< F, dimD, dimR, deriv-1, DerivativeLayoutNS::value > Base │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:196 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const │ │ │ │ │ +std::integral_constant< int, dorder > &dorderVar) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:339 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:317 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value │ │ │ │ │ +> &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:243 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS:: │ │ │ │ │ +derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:330 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const F &f) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:208 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r │ │ │ │ │ +_[_] │ │ │ │ │ +const ThisLFETensor & operator[](int r) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:312 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:303 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_: │ │ │ │ │ +_T_h_i_s_L_F_E_T_e_n_s_o_r │ │ │ │ │ +LFETensor< F, dimD, deriv > ThisLFETensor │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:197 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, │ │ │ │ │ +DerivativeLayoutNS::value > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:263 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block │ │ │ │ │ +() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:296 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std:: │ │ │ │ │ +integral_constant< int, dorder > &dorderVar) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:350 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +const Block & block() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:277 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_x_p_y │ │ │ │ │ +void axpy(const F &a, const This &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:236 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS:: │ │ │ │ │ +derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:249 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:213 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, │ │ │ │ │ +DerivativeLayoutNS::derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:268 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Block &t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:224 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, size > Block │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:206 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r__ │ │ │ │ │ +Dune::FieldVector< ThisLFETensor, dimR > tensor_ │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:359 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std:: │ │ │ │ │ +integral_constant< int, deriv > &dorderVar) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:355 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:290 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimRy, deriv, DerivativeLayoutNS:: │ │ │ │ │ +value > &y, unsigned int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:257 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:283 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +const Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const │ │ │ │ │ +std::integral_constant< int, deriv > &dorderVar) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:344 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r │ │ │ │ │ +_[_] │ │ │ │ │ +ThisLFETensor & operator[](int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:309 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +Block & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:273 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:323 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:364 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +ThisLFETensor & operator[](int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:442 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s_L_F_E_T_e_n_s_o_r │ │ │ │ │ +LFETensor< F, dimD, 0 > ThisLFETensor │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:366 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:465 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std:: │ │ │ │ │ +integral_constant< int, 0 > &dorderVar) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:479 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::value > │ │ │ │ │ +&y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:407 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:368 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s │ │ │ │ │ +Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > This │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:365 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS:: │ │ │ │ │ +derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:484 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimRy, 0, DerivativeLayoutNS::value > │ │ │ │ │ +&y, unsigned int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:418 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:449 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:453 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Block &t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:390 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:369 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +const ThisLFETensor & operator[](int r) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:445 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ +const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std:: │ │ │ │ │ +integral_constant< int, 0 > &dorderVar) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:474 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, size > Block │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:375 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +const Block & block() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:437 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block │ │ │ │ │ +() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:458 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, │ │ │ │ │ +DerivativeLayoutNS::derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:428 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS:: │ │ │ │ │ +derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:412 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, │ │ │ │ │ +DerivativeLayoutNS::value > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:423 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:384 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:490 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r__ │ │ │ │ │ +Dune::FieldVector< ThisLFETensor, dimR > tensor_ │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:499 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:495 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const FF &f) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:378 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ +Block & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:433 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_x_p_y │ │ │ │ │ +void axpy(const F &a, const This &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:402 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:505 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const FF &f) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:519 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_b_l_o_c_k │ │ │ │ │ +Block & block() │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:561 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:509 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_b_l_o_c_k │ │ │ │ │ +const Block & block() const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:565 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_f_i_e_l_d___t_y_p_e │ │ │ │ │ +F field_type │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:510 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_a_s_s_i_g_n │ │ │ │ │ +void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, layouty > │ │ │ │ │ +&y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:556 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +ScalarDeriv & operator[](int r) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:570 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value │ │ │ │ │ +> &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:549 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_:_T_h_i_s │ │ │ │ │ +Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > This │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:506 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_S_c_a_l_a_r_D_e_r_i_v │ │ │ │ │ +Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::value > ScalarDeriv │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:507 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +const ScalarDeriv & operator[](int r) const │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:573 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_:_a_x_p_y │ │ │ │ │ +void axpy(const FF &a, const This &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:537 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_o_p_e_r_a_t_o_r_= │ │ │ │ │ +This & operator=(const Block &t) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:524 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< F, size > Block │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:516 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_d_e_r_i_v__ │ │ │ │ │ +Dune::FieldVector< ScalarDeriv, dimR > deriv_ │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:577 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ +_a_s_s_i_g_n │ │ │ │ │ +void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS:: │ │ │ │ │ +derivative > &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:543 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:585 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:587 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ +_>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:601 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ +_>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:599 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:615 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:617 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:631 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:633 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_, │ │ │ │ │ +_V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:648 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_, │ │ │ │ │ +_V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:646 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:664 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:665 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, deriv, layout > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:675 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, dimR, deriv, layout > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:676 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:677 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:687 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:689 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:688 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:700 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:699 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:701 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:711 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:713 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:712 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:723 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:725 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ +_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:724 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:735 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:736 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:737 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ +_>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:747 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ +_>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:749 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ +_>_:_:_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:748 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ +_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:760 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ +_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:761 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ +_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:759 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ +_V_e_c_2 │ │ │ │ │ +Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:772 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ +_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:773 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ +_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:771 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_V_e_c_2 │ │ │ │ │ +F2 Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:784 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:785 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:783 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:795 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, dimR > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:796 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:797 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:807 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:809 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, dimR > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:808 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:820 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, dimR > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:821 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:822 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:834 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:832 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, dimR > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:833 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, 1 > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:845 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:844 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:846 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ +Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:856 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:858 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ +FieldVector< F2, 1 > Vec2 │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:857 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecube.hh File Reference │ │ │ │ +dune-localfunctions: coeffmatrix.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangecube.hh File Reference
│ │ │ │ +
coeffmatrix.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LagrangeCubeLocalFiniteElement< D, R, dim, k >
 Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order. More...
struct  Dune::Mult< Field, Field2 >
 
struct  Dune::Mult< Field, FieldVector< Field2, dimRange > >
 
class  Dune::SparseCoeffMatrix< F, bSize >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangecube.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +coeffmatrix.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ -  Lagrange finite element for cubes with arbitrary compile-time dimension │ │ │ │ │ - and polynomial order. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_2_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _F_,_ _b_S_i_z_e_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00368_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecube.hh Source File │ │ │ │ +dune-localfunctions: coeffmatrix.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,741 +70,338 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangecube.hh
│ │ │ │ +
coeffmatrix.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13#include <dune/common/math.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune { namespace Impl
│ │ │ │ -
22{
│ │ │ │ -
23 // Forward declaration
│ │ │ │ -
24 template<class LocalBasis>
│ │ │ │ -
25 class LagrangeCubeLocalInterpolation;
│ │ │ │ -
26
│ │ │ │ -
37 template<class D, class R, unsigned int dim, unsigned int k>
│ │ │ │ -
38 class LagrangeCubeLocalBasis
│ │ │ │ -
39 {
│ │ │ │ -
40 friend class LagrangeCubeLocalInterpolation<LagrangeCubeLocalBasis<D,R,dim,k> >;
│ │ │ │ -
41
│ │ │ │ -
42 // i-th Lagrange polynomial of degree k in one dimension
│ │ │ │ -
43 static R p(unsigned int i, D x)
│ │ │ │ -
44 {
│ │ │ │ -
45 R result(1.0);
│ │ │ │ -
46 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
47 if (j!=i) result *= (k*x-j)/((int)i-(int)j);
│ │ │ │ -
48 return result;
│ │ │ │ -
49 }
│ │ │ │ -
50
│ │ │ │ -
51 // derivative of ith Lagrange polynomial of degree k in one dimension
│ │ │ │ -
52 static R dp(unsigned int i, D x)
│ │ │ │ -
53 {
│ │ │ │ -
54 R result(0.0);
│ │ │ │ -
55
│ │ │ │ -
56 for (unsigned int j=0; j<=k; j++)
│ │ │ │ -
57 {
│ │ │ │ -
58 if (j!=i)
│ │ │ │ -
59 {
│ │ │ │ -
60 R prod( (k*1.0)/((int)i-(int)j) );
│ │ │ │ -
61 for (unsigned int l=0; l<=k; l++)
│ │ │ │ -
62 if (l!=i && l!=j)
│ │ │ │ -
63 prod *= (k*x-l)/((int)i-(int)l);
│ │ │ │ -
64 result += prod;
│ │ │ │ -
65 }
│ │ │ │ -
66 }
│ │ │ │ -
67 return result;
│ │ │ │ -
68 }
│ │ │ │ -
69
│ │ │ │ -
70 // Second derivative of j-th Lagrange polynomial of degree k in one dimension
│ │ │ │ -
71 // Formula and notation taken from https://en.wikipedia.org/wiki/Lagrange_polynomial#Derivatives
│ │ │ │ -
72 static R ddp(unsigned int j, D x)
│ │ │ │ -
73 {
│ │ │ │ -
74 R result(0.0);
│ │ │ │ -
75
│ │ │ │ -
76 for (unsigned int i=0; i<=k; i++)
│ │ │ │ -
77 {
│ │ │ │ -
78 if (i==j)
│ │ │ │ -
79 continue;
│ │ │ │ -
80
│ │ │ │ -
81 R sum(0);
│ │ │ │ -
82
│ │ │ │ -
83 for (unsigned int m=0; m<=k; m++)
│ │ │ │ -
84 {
│ │ │ │ -
85 if (m==i || m==j)
│ │ │ │ -
86 continue;
│ │ │ │ -
87
│ │ │ │ -
88 R prod( (k*1.0)/((int)j-(int)m) );
│ │ │ │ -
89 for (unsigned int l=0; l<=k; l++)
│ │ │ │ -
90 if (l!=i && l!=j && l!=m)
│ │ │ │ -
91 prod *= (k*x-l)/((int)j-(int)l);
│ │ │ │ -
92 sum += prod;
│ │ │ │ -
93 }
│ │ │ │ -
94
│ │ │ │ -
95 result += sum * ( (k*1.0)/((int)j-(int)i) );
│ │ │ │ -
96 }
│ │ │ │ -
97
│ │ │ │ -
98 return result;
│ │ │ │ -
99 }
│ │ │ │ -
100
│ │ │ │ -
101 // Return i as a d-digit number in the (k+1)-nary system
│ │ │ │ -
102 static std::array<unsigned int,dim> multiindex (unsigned int i)
│ │ │ │ -
103 {
│ │ │ │ -
104 std::array<unsigned int,dim> alpha;
│ │ │ │ -
105 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
106 {
│ │ │ │ -
107 alpha[j] = i % (k+1);
│ │ │ │ -
108 i = i/(k+1);
│ │ │ │ -
109 }
│ │ │ │ -
110 return alpha;
│ │ │ │ -
111 }
│ │ │ │ -
112
│ │ │ │ -
113 public:
│ │ │ │ -
114 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ -
115
│ │ │ │ -
118 static constexpr unsigned int size ()
│ │ │ │ -
119 {
│ │ │ │ -
120 return power(k+1, dim);
│ │ │ │ -
121 }
│ │ │ │ -
122
│ │ │ │ -
124 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ -
125 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
126 {
│ │ │ │ -
127 out.resize(size());
│ │ │ │ -
128
│ │ │ │ -
129 // Specialization for zero-order case
│ │ │ │ -
130 if (k==0)
│ │ │ │ -
131 {
│ │ │ │ -
132 out[0] = 1;
│ │ │ │ -
133 return;
│ │ │ │ -
134 }
│ │ │ │ -
135
│ │ │ │ -
136 if (k==1)
│ │ │ │ -
137 {
│ │ │ │ -
138 for (size_t i=0; i<size(); i++)
│ │ │ │ -
139 {
│ │ │ │ -
140 out[i] = 1;
│ │ │ │ -
141
│ │ │ │ -
142 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
143 // if j-th bit of i is set multiply with x[j], else with 1-x[j]
│ │ │ │ -
144 out[i] *= (i & (1<<j)) ? x[j] : 1-x[j];
│ │ │ │ -
145 }
│ │ │ │ -
146 return;
│ │ │ │ -
147 }
│ │ │ │ -
148
│ │ │ │ -
149 // General case
│ │ │ │ -
150 for (size_t i=0; i<size(); i++)
│ │ │ │ -
151 {
│ │ │ │ -
152 // convert index i to multiindex
│ │ │ │ -
153 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ -
154
│ │ │ │ -
155 // initialize product
│ │ │ │ -
156 out[i] = 1.0;
│ │ │ │ -
157
│ │ │ │ -
158 // dimension by dimension
│ │ │ │ -
159 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
160 out[i] *= p(alpha[j],x[j]);
│ │ │ │ -
161 }
│ │ │ │ -
162 }
│ │ │ │ -
163
│ │ │ │ -
169 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ -
170 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
171 {
│ │ │ │ -
172 out.resize(size());
│ │ │ │ -
173
│ │ │ │ -
174 // Specialization for k==0
│ │ │ │ -
175 if (k==0)
│ │ │ │ -
176 {
│ │ │ │ -
177 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ -
178 return;
│ │ │ │ -
179 }
│ │ │ │ -
180
│ │ │ │ -
181 // Specialization for k==1
│ │ │ │ -
182 if (k==1)
│ │ │ │ -
183 {
│ │ │ │ -
184 // Loop over all shape functions
│ │ │ │ -
185 for (size_t i=0; i<size(); i++)
│ │ │ │ +
5#ifndef DUNE_COEFFMATRIX_HH
│ │ │ │ +
6#define DUNE_COEFFMATRIX_HH
│ │ │ │ +
7#include <cassert>
│ │ │ │ +
8#include <iostream>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ + │ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16 /*************************************************
│ │ │ │ +
17 * Default class for storing a coefficient matrix
│ │ │ │ +
18 * for the PolynomialBasis. Basically a simple
│ │ │ │ +
19 * CRS structure is used. The additional complexity
│ │ │ │ +
20 * is due to the storage and efficient evaluation
│ │ │ │ +
21 * of higher order derivatives. See the remarks
│ │ │ │ +
22 * in tensor.hh which also hold true for this file.
│ │ │ │ +
23 *************************************************/
│ │ │ │ +
24 template <class Field, class Field2>
│ │ │ │ +
│ │ │ │ +
25 struct Mult
│ │ │ │ +
26 {
│ │ │ │ +
27 typedef Field2 BasisEntry;
│ │ │ │ +
│ │ │ │ +
28 static void add(const Field &vec1, const BasisEntry &vec2,
│ │ │ │ +
29 BasisEntry &res)
│ │ │ │ +
30 {
│ │ │ │ +
31 res += vec1*vec2;
│ │ │ │ +
32 }
│ │ │ │ +
│ │ │ │ +
33 };
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
35 template <class Field,class Field2, int dimRange>
│ │ │ │ +
│ │ │ │ +
36 struct Mult< Field,FieldVector<Field2,dimRange> >
│ │ │ │ +
37 {
│ │ │ │ +
38 typedef FieldVector<Field2,dimRange> BasisEntry;
│ │ │ │ +
│ │ │ │ +
39 static void add(const Field &vec1, const BasisEntry &vec2,
│ │ │ │ +
40 BasisEntry &res)
│ │ │ │ +
41 {
│ │ │ │ +
42 res.axpy(vec1,vec2);
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44 };
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
46 template< class F , unsigned int bSize >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
48 {
│ │ │ │ +
49 public:
│ │ │ │ +
50 typedef F Field;
│ │ │ │ +
51 static const unsigned int blockSize = bSize;
│ │ │ │ + │ │ │ │ +
53
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 : coeff_(0),
│ │ │ │ +
56 rows_(0),
│ │ │ │ +
57 skip_(0),
│ │ │ │ +
58 numRows_(0),
│ │ │ │ +
59 numCols_(0)
│ │ │ │ +
60 {}
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
63 {
│ │ │ │ +
64 delete [] coeff_;
│ │ │ │ +
65 delete [] rows_;
│ │ │ │ +
66 delete [] skip_;
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │ +
68
│ │ │ │ +
│ │ │ │ +
69 unsigned int size () const
│ │ │ │ +
70 {
│ │ │ │ +
71 return numRows_/blockSize;
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
73 unsigned int baseSize () const
│ │ │ │ +
74 {
│ │ │ │ +
75 return numCols_;
│ │ │ │ +
76 }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
78 template< class BasisIterator, class FF>
│ │ │ │ +
│ │ │ │ +
79 void mult ( const BasisIterator &x,
│ │ │ │ +
80 unsigned int numLsg,
│ │ │ │ +
81 FF *y ) const
│ │ │ │ +
82 {
│ │ │ │ +
83 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ +
84 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ +
85 unsigned int row = 0;
│ │ │ │ +
86 Field *pos = rows_[ 0 ];
│ │ │ │ +
87 unsigned int *skipIt = skip_;
│ │ │ │ +
88 XDerivatives val;
│ │ │ │ +
89 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ +
90 {
│ │ │ │ +
91 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ +
92 {
│ │ │ │ +
93 val = 0;
│ │ │ │ +
94 BasisIterator itx = x;
│ │ │ │ +
95 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ +
96 {
│ │ │ │ +
97 itx += *skipIt;
│ │ │ │ +
98 val.axpy(*pos,*itx);
│ │ │ │ +
99 }
│ │ │ │ +
100 DerivativeAssign<XDerivatives,FF>::apply(r,val,*(y+i*XDerivatives::size*blockSize));
│ │ │ │ +
101 }
│ │ │ │ +
102 }
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │ +
104 template< class BasisIterator, class Vector>
│ │ │ │ +
│ │ │ │ +
105 void mult ( const BasisIterator &x,
│ │ │ │ +
106 Vector &y ) const
│ │ │ │ +
107 {
│ │ │ │ +
108 typedef typename Vector::value_type YDerivatives;
│ │ │ │ +
109 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ +
110 size_t numLsg = y.size();
│ │ │ │ +
111 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ +
112 unsigned int row = 0;
│ │ │ │ +
113 Field *pos = rows_[ 0 ];
│ │ │ │ +
114 unsigned int *skipIt = skip_;
│ │ │ │ +
115 XDerivatives val;
│ │ │ │ +
116 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ +
117 {
│ │ │ │ +
118 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ +
119 {
│ │ │ │ +
120 val = 0;
│ │ │ │ +
121 BasisIterator itx = x;
│ │ │ │ +
122 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ +
123 {
│ │ │ │ +
124 itx += *skipIt;
│ │ │ │ +
125 val.axpy(*pos,*itx);
│ │ │ │ +
126 }
│ │ │ │ + │ │ │ │ +
128 }
│ │ │ │ +
129 }
│ │ │ │ +
130 }
│ │ │ │ +
│ │ │ │ +
131 template <unsigned int deriv, class BasisIterator, class Vector>
│ │ │ │ +
│ │ │ │ +
132 void mult ( const BasisIterator &x,
│ │ │ │ +
133 Vector &y ) const
│ │ │ │ +
134 {
│ │ │ │ +
135 typedef typename Vector::value_type YDerivatives;
│ │ │ │ +
136 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ +
137 typedef FieldVector<typename XDerivatives::Field,YDerivatives::dimension> XLFETensor;
│ │ │ │ +
138 size_t numLsg = y.size();
│ │ │ │ +
139 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ +
140 unsigned int row = 0;
│ │ │ │ +
141 Field *pos = rows_[ 0 ];
│ │ │ │ +
142 unsigned int *skipIt = skip_;
│ │ │ │ +
143 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ +
144 {
│ │ │ │ +
145 XLFETensor val(typename XDerivatives::Field(0));
│ │ │ │ +
146 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ +
147 {
│ │ │ │ +
148 BasisIterator itx = x;
│ │ │ │ +
149 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ +
150 {
│ │ │ │ +
151 itx += *skipIt;
│ │ │ │ + │ │ │ │ +
153 }
│ │ │ │ +
154 }
│ │ │ │ +
155 field_cast(val,y[i]);
│ │ │ │ +
156 }
│ │ │ │ +
157 }
│ │ │ │ +
│ │ │ │ +
158
│ │ │ │ +
159 template< class RowMatrix >
│ │ │ │ +
│ │ │ │ +
160 void fill ( const RowMatrix &mat, bool verbose=false )
│ │ │ │ +
161 {
│ │ │ │ +
162 numRows_ = mat.rows();
│ │ │ │ +
163 numCols_ = mat.cols();
│ │ │ │ +
164 unsigned int size = numRows_*numCols_;
│ │ │ │ +
165
│ │ │ │ +
166 delete [] coeff_;
│ │ │ │ +
167 delete [] rows_;
│ │ │ │ +
168 delete [] skip_;
│ │ │ │ +
169
│ │ │ │ +
170 Field* coeff = new Field[ size ];
│ │ │ │ +
171 // we always initialize the next skip entry to zero,
│ │ │ │ +
172 // including the one following the end, so allocate
│ │ │ │ +
173 // size+1 entries so we will stay within the bounds.
│ │ │ │ +
174 unsigned int *skip = new unsigned int[ size+1 ];
│ │ │ │ +
175 rows_ = new Field*[ numRows_+1 ];
│ │ │ │ +
176 std::vector<Field> row( numCols_ );
│ │ │ │ +
177
│ │ │ │ +
178 rows_[ 0 ] = coeff;
│ │ │ │ +
179 Field *cit = coeff;
│ │ │ │ +
180 unsigned int *sit = skip;
│ │ │ │ +
181 for( unsigned int r = 0; r < numRows_; ++r )
│ │ │ │ +
182 {
│ │ │ │ +
183 *sit = 0;
│ │ │ │ +
184 mat.row( r, row );
│ │ │ │ +
185 for( unsigned int c = 0; c < numCols_; ++c )
│ │ │ │
186 {
│ │ │ │ -
187 // Loop over all coordinate directions
│ │ │ │ -
188 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
187 const Field &val = row[c];
│ │ │ │ +
188 if (val < Zero<Field>() || Zero<Field>() < val)
│ │ │ │
189 {
│ │ │ │ -
190 // Initialize: the overall expression is a product
│ │ │ │ -
191 // if j-th bit of i is set to 1, else -11
│ │ │ │ -
192 out[i][0][j] = (i & (1<<j)) ? 1 : -1;
│ │ │ │ -
193
│ │ │ │ -
194 for (unsigned int l=0; l<dim; l++)
│ │ │ │ -
195 {
│ │ │ │ -
196 if (j!=l)
│ │ │ │ -
197 // if l-th bit of i is set multiply with x[l], else with 1-x[l]
│ │ │ │ -
198 out[i][0][j] *= (i & (1<<l)) ? x[l] : 1-x[l];
│ │ │ │ -
199 }
│ │ │ │ -
200 }
│ │ │ │ -
201 }
│ │ │ │ -
202 return;
│ │ │ │ -
203 }
│ │ │ │ -
204
│ │ │ │ -
205 // The general case
│ │ │ │ -
206
│ │ │ │ -
207 // Loop over all shape functions
│ │ │ │ -
208 for (size_t i=0; i<size(); i++)
│ │ │ │ -
209 {
│ │ │ │ -
210 // convert index i to multiindex
│ │ │ │ -
211 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ +
190 *cit = val;
│ │ │ │ +
191 ++sit;
│ │ │ │ +
192 ++cit;
│ │ │ │ +
193 *sit = 1;
│ │ │ │ +
194 } else
│ │ │ │ +
195 {
│ │ │ │ +
196 ++(*sit);
│ │ │ │ +
197 }
│ │ │ │ +
198 }
│ │ │ │ +
199 rows_[ r+1 ] = cit;
│ │ │ │ +
200 }
│ │ │ │ +
201 assert( size_t(rows_[numRows_]-rows_[0]) <= size_t(size) );
│ │ │ │ +
202 size = rows_[numRows_]-rows_[0];
│ │ │ │ +
203 coeff_ = new Field[ size ];
│ │ │ │ +
204 skip_ = new unsigned int[ size ];
│ │ │ │ +
205 for (unsigned int i=0; i<size; ++i)
│ │ │ │ +
206 {
│ │ │ │ +
207 coeff_[i] = coeff[i];
│ │ │ │ +
208 skip_[i] = skip[i];
│ │ │ │ +
209 }
│ │ │ │ +
210 for (unsigned int i=0; i<=numRows_; ++i)
│ │ │ │ +
211 rows_[ i ] = coeff_ + (rows_[ i ] - coeff);
│ │ │ │
212
│ │ │ │ -
213 // Loop over all coordinate directions
│ │ │ │ -
214 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
215 {
│ │ │ │ -
216 // Initialize: the overall expression is a product
│ │ │ │ -
217 // if j-th bit of i is set to -1, else 1
│ │ │ │ -
218 out[i][0][j] = dp(alpha[j],x[j]);
│ │ │ │ -
219
│ │ │ │ -
220 // rest of the product
│ │ │ │ -
221 for (unsigned int l=0; l<dim; l++)
│ │ │ │ -
222 if (l!=j)
│ │ │ │ -
223 out[i][0][j] *= p(alpha[l],x[l]);
│ │ │ │ -
224 }
│ │ │ │ -
225 }
│ │ │ │ -
226 }
│ │ │ │ -
227
│ │ │ │ -
234 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ -
235 const typename Traits::DomainType& in,
│ │ │ │ -
236 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
237 {
│ │ │ │ -
238 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
239
│ │ │ │ -
240 out.resize(size());
│ │ │ │ -
241
│ │ │ │ -
242 if (k==0)
│ │ │ │ -
243 {
│ │ │ │ -
244 out[0] = (totalOrder==0);
│ │ │ │ -
245 return;
│ │ │ │ -
246 }
│ │ │ │ -
247
│ │ │ │ -
248 if (k==1)
│ │ │ │ -
249 {
│ │ │ │ -
250 if (totalOrder == 0)
│ │ │ │ -
251 {
│ │ │ │ -
252 evaluateFunction(in, out);
│ │ │ │ -
253 }
│ │ │ │ -
254 else if (totalOrder == 1)
│ │ │ │ -
255 {
│ │ │ │ -
256 out.resize(size());
│ │ │ │ -
257
│ │ │ │ -
258 auto direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
259 if (direction >= dim)
│ │ │ │ -
260 DUNE_THROW(RangeError, "Direction of partial derivative not found!");
│ │ │ │ +
213 delete [] coeff;
│ │ │ │ +
214 delete [] skip;
│ │ │ │ +
215
│ │ │ │ +
216 if (verbose)
│ │ │ │ +
217 std::cout << "Entries: " << (rows_[numRows_]-rows_[0])
│ │ │ │ +
218 << " full: " << numCols_*numRows_
│ │ │ │ +
219 << std::endl;
│ │ │ │ +
220 }
│ │ │ │ +
│ │ │ │ +
221 // b += a*C[k]
│ │ │ │ +
222 template <class Vector>
│ │ │ │ +
│ │ │ │ +
223 void addRow( unsigned int k, const Field &a, Vector &b) const
│ │ │ │ +
224 {
│ │ │ │ +
225 assert(k<numRows_);
│ │ │ │ +
226 unsigned int j=0;
│ │ │ │ +
227 unsigned int *skipIt = skip_ + (rows_[ k ]-rows_[ 0 ]);
│ │ │ │ +
228 for( Field *pos = rows_[ k ];
│ │ │ │ +
229 pos != rows_[ k+1 ];
│ │ │ │ +
230 ++pos, ++skipIt )
│ │ │ │ +
231 {
│ │ │ │ +
232 j += *skipIt;
│ │ │ │ +
233 assert( j < b.size() );
│ │ │ │ +
234 b[j] += field_cast<typename Vector::value_type>( (*pos)*a ); // field_cast
│ │ │ │ +
235 }
│ │ │ │ +
236 }
│ │ │ │ +
│ │ │ │ +
237 private:
│ │ │ │ +
238 SparseCoeffMatrix ( const This &other )
│ │ │ │ +
239 : numRows_( other.numRows_ ),
│ │ │ │ +
240 numCols_( other.numCols_ )
│ │ │ │ +
241 {
│ │ │ │ +
242 const unsigned int size = other.rows_[numRows_]-other.rows_[0];
│ │ │ │ +
243 coeff_ = new Field[ size ];
│ │ │ │ +
244 rows_ = new Field*[ numRows_+1 ];
│ │ │ │ +
245 skip_ = new unsigned int[ size ];
│ │ │ │ +
246 for (unsigned int i=0; i<size; ++i)
│ │ │ │ +
247 {
│ │ │ │ +
248 coeff_[i] = other.coeff_[i];
│ │ │ │ +
249 skip_[i] = other.skip_[i];
│ │ │ │ +
250 }
│ │ │ │ +
251 for (unsigned int i=0; i<=numRows_; ++i)
│ │ │ │ +
252 rows_[ i ] = coeff_ + (other.rows_[ i ] - other.coeff_);
│ │ │ │ +
253 }
│ │ │ │ +
254
│ │ │ │ +
255 This &operator= (const This&);
│ │ │ │ +
256 Field *coeff_;
│ │ │ │ +
257 Field **rows_;
│ │ │ │ +
258 unsigned int *skip_;
│ │ │ │ +
259 unsigned int numRows_,numCols_;
│ │ │ │ +
260 };
│ │ │ │ +
│ │ │ │
261
│ │ │ │ -
262 // Loop over all shape functions
│ │ │ │ -
263 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
264 {
│ │ │ │ -
265 // Initialize: the overall expression is a product
│ │ │ │ -
266 // if j-th bit of i is set to 1, otherwise to -1
│ │ │ │ -
267 out[i] = (i & (1<<direction)) ? 1 : -1;
│ │ │ │ -
268
│ │ │ │ -
269 for (unsigned int j = 0; j < dim; ++j)
│ │ │ │ -
270 {
│ │ │ │ -
271 if (direction != j)
│ │ │ │ -
272 // if j-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ -
273 out[i] *= (i & (1<<j)) ? in[j] : 1-in[j];
│ │ │ │ -
274 }
│ │ │ │ -
275 }
│ │ │ │ -
276 }
│ │ │ │ -
277 else if (totalOrder == 2)
│ │ │ │ -
278 {
│ │ │ │ -
279
│ │ │ │ -
280 for (size_t i=0; i<size(); i++)
│ │ │ │ -
281 {
│ │ │ │ -
282 // convert index i to multiindex
│ │ │ │ -
283 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ -
284
│ │ │ │ -
285 // Initialize: the overall expression is a product
│ │ │ │ -
286 out[i][0] = 1.0;
│ │ │ │ -
287
│ │ │ │ -
288 // rest of the product
│ │ │ │ -
289 for (std::size_t l=0; l<dim; l++)
│ │ │ │ -
290 {
│ │ │ │ -
291 switch (order[l])
│ │ │ │ -
292 {
│ │ │ │ -
293 case 0:
│ │ │ │ -
294 out[i][0] *= p(alpha[l],in[l]);
│ │ │ │ -
295 break;
│ │ │ │ -
296 case 1:
│ │ │ │ -
297 //std::cout << "dp: " << dp(alpha[l],in[l]) << std::endl;
│ │ │ │ -
298 out[i][0] *= dp(alpha[l],in[l]);
│ │ │ │ -
299 break;
│ │ │ │ -
300 case 2:
│ │ │ │ -
301 out[i][0] *= 0;
│ │ │ │ -
302 break;
│ │ │ │ -
303 default:
│ │ │ │ -
304 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
305 }
│ │ │ │ -
306 }
│ │ │ │ -
307 }
│ │ │ │ -
308 }
│ │ │ │ -
309 else
│ │ │ │ -
310 DUNE_THROW(NotImplemented, "Partial derivative of order " << totalOrder << " is not implemented!");
│ │ │ │ -
311
│ │ │ │ -
312 return;
│ │ │ │ -
313 }
│ │ │ │ -
314
│ │ │ │ -
315 // The case k>1
│ │ │ │ -
316
│ │ │ │ -
317 // Loop over all shape functions
│ │ │ │ -
318 for (size_t i=0; i<size(); i++)
│ │ │ │ -
319 {
│ │ │ │ -
320 // convert index i to multiindex
│ │ │ │ -
321 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ -
322
│ │ │ │ -
323 // Initialize: the overall expression is a product
│ │ │ │ -
324 out[i][0] = 1.0;
│ │ │ │ -
325
│ │ │ │ -
326 // rest of the product
│ │ │ │ -
327 for (std::size_t l=0; l<dim; l++)
│ │ │ │ -
328 {
│ │ │ │ -
329 switch (order[l])
│ │ │ │ -
330 {
│ │ │ │ -
331 case 0:
│ │ │ │ -
332 out[i][0] *= p(alpha[l],in[l]);
│ │ │ │ -
333 break;
│ │ │ │ -
334 case 1:
│ │ │ │ -
335 out[i][0] *= dp(alpha[l],in[l]);
│ │ │ │ -
336 break;
│ │ │ │ -
337 case 2:
│ │ │ │ -
338 out[i][0] *= ddp(alpha[l],in[l]);
│ │ │ │ -
339 break;
│ │ │ │ -
340 default:
│ │ │ │ -
341 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
342 }
│ │ │ │ -
343 }
│ │ │ │ -
344 }
│ │ │ │ -
345 }
│ │ │ │ -
346
│ │ │ │ -
348 static constexpr unsigned int order ()
│ │ │ │ -
349 {
│ │ │ │ -
350 return k;
│ │ │ │ -
351 }
│ │ │ │ -
352 };
│ │ │ │ -
353
│ │ │ │ -
359 template<unsigned int dim, unsigned int k>
│ │ │ │ -
360 class LagrangeCubeLocalCoefficients
│ │ │ │ -
361 {
│ │ │ │ -
362 // Return i as a d-digit number in the (k+1)-nary system
│ │ │ │ -
363 static std::array<unsigned int,dim> multiindex (unsigned int i)
│ │ │ │ -
364 {
│ │ │ │ -
365 std::array<unsigned int,dim> alpha;
│ │ │ │ -
366 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
367 {
│ │ │ │ -
368 alpha[j] = i % (k+1);
│ │ │ │ -
369 i = i/(k+1);
│ │ │ │ -
370 }
│ │ │ │ -
371 return alpha;
│ │ │ │ -
372 }
│ │ │ │ -
373
│ │ │ │ -
375 void setup1d(std::vector<unsigned int>& subEntity)
│ │ │ │ -
376 {
│ │ │ │ -
377 assert(k>0);
│ │ │ │ -
378
│ │ │ │ -
379 unsigned lastIndex=0;
│ │ │ │ -
380
│ │ │ │ -
381 /* edge and vertex numbering
│ │ │ │ -
382 0----0----1
│ │ │ │ -
383 */
│ │ │ │ -
384
│ │ │ │ -
385 // edge (0)
│ │ │ │ -
386 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ -
387 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
388 subEntity[lastIndex++] = 0; // inner dofs of element (0)
│ │ │ │ -
389
│ │ │ │ -
390 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ -
391
│ │ │ │ -
392 assert(power(k+1,dim)==lastIndex);
│ │ │ │ -
393 }
│ │ │ │ -
394
│ │ │ │ -
395 void setup2d(std::vector<unsigned int>& subEntity)
│ │ │ │ -
396 {
│ │ │ │ -
397 assert(k>0);
│ │ │ │ -
398
│ │ │ │ -
399 unsigned lastIndex=0;
│ │ │ │ -
400
│ │ │ │ -
401 // LocalKey: entity number, entity codim, dof indices within each entity
│ │ │ │ -
402 /* edge and vertex numbering
│ │ │ │ -
403 2----3----3
│ │ │ │ -
404 | |
│ │ │ │ -
405 | |
│ │ │ │ -
406 0 1
│ │ │ │ -
407 | |
│ │ │ │ -
408 | |
│ │ │ │ -
409 0----2----1
│ │ │ │ -
410 */
│ │ │ │ -
411
│ │ │ │ -
412 // lower edge (2)
│ │ │ │ -
413 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ -
414 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
415 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
│ │ │ │ -
416
│ │ │ │ -
417 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ -
418
│ │ │ │ -
419 // iterate from bottom to top over inner edge dofs
│ │ │ │ -
420 for (unsigned e = 0; e < k - 1; ++e) {
│ │ │ │ -
421 subEntity[lastIndex++] = 0; // left edge (0)
│ │ │ │ -
422 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
423 subEntity[lastIndex++] = 0; // face dofs
│ │ │ │ -
424 subEntity[lastIndex++] = 1; // right edge (1)
│ │ │ │ -
425 }
│ │ │ │ -
426
│ │ │ │ -
427 // upper edge (3)
│ │ │ │ -
428 subEntity[lastIndex++] = 2; // corner 2
│ │ │ │ -
429 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
430 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
│ │ │ │ -
431
│ │ │ │ -
432 subEntity[lastIndex++] = 3; // corner 3
│ │ │ │ -
433
│ │ │ │ -
434 assert(power(k+1,dim)==lastIndex);
│ │ │ │ -
435 }
│ │ │ │ -
436
│ │ │ │ -
437 void setup3d(std::vector<unsigned int>& subEntity)
│ │ │ │ -
438 {
│ │ │ │ -
439 assert(k>0);
│ │ │ │ -
440
│ │ │ │ -
441 unsigned lastIndex=0;
│ │ │ │ -
442#ifndef NDEBUG
│ │ │ │ -
443 const unsigned numIndices = power(k+1,dim);
│ │ │ │ -
444 const unsigned numFaceIndices = power(k+1,dim-1);
│ │ │ │ -
445#endif
│ │ │ │ -
446 const unsigned numInnerEdgeDofs = k-1;
│ │ │ │ -
447
│ │ │ │ -
448 // LocalKey: entity number, entity codim, dof indices within each entity
│ │ │ │ -
449 /* edge and vertex numbering
│ │ │ │ -
450
│ │ │ │ -
451 6---(11)--7 6---------7
│ │ │ │ -
452 /| /| /| (5) /|
│ │ │ │ -
453 (8)| (9)| / | top / |
│ │ │ │ -
454 / (2) / (3) / |(3)bac/k |
│ │ │ │ -
455 4---(10)--5 | 4---------5 |
│ │ │ │ -
456 | | | | left|(0)| |(1)|right
│ │ │ │ -
457 | 2--(7)|---3 | 2-----|---3
│ │ │ │ -
458 (0) / (1) / |(2)front | /
│ │ │ │ -
459 |(4) |(5) | / (4) | /
│ │ │ │ -
460 |/ |/ |/ bottom |/
│ │ │ │ -
461 0---(6)---1 0---------1
│ │ │ │ -
462 */
│ │ │ │ -
463
│ │ │ │ -
464 // bottom face (4)
│ │ │ │ -
465 lastIndex=0;
│ │ │ │ -
466 // lower edge (6)
│ │ │ │ -
467 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ -
468 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ -
469 subEntity[lastIndex++] = 6; // inner dofs of lower edge (6)
│ │ │ │ -
470
│ │ │ │ -
471 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ -
472
│ │ │ │ -
473 // iterate from bottom to top over inner edge dofs
│ │ │ │ -
474 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) {
│ │ │ │ -
475 subEntity[lastIndex++] = 4; // left edge (4)
│ │ │ │ -
476 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ -
477 subEntity[lastIndex++] = 4; // inner face dofs
│ │ │ │ -
478 subEntity[lastIndex++] = 5; // right edge (5)
│ │ │ │ -
479 }
│ │ │ │ -
480
│ │ │ │ -
481 // upper edge (7)
│ │ │ │ -
482 subEntity[lastIndex++] = 2; // corner 2
│ │ │ │ -
483 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
484 subEntity[lastIndex++] = 7; // inner dofs of upper edge (7)
│ │ │ │ -
485 subEntity[lastIndex++] = 3; // corner 3
│ │ │ │ -
486
│ │ │ │ -
487 assert(numFaceIndices==lastIndex); // added 1 face so far
│ │ │ │ -
489
│ │ │ │ -
491 for(unsigned f = 0; f < numInnerEdgeDofs; ++f) {
│ │ │ │ -
492
│ │ │ │ -
493 // lower edge (connecting edges 0 and 1)
│ │ │ │ -
494 subEntity[lastIndex++] = 0; // dof on edge 0
│ │ │ │ -
495 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ -
496 subEntity[lastIndex++] = 2; // dof in front face
│ │ │ │ -
497 subEntity[lastIndex++] = 1; // dof on edge 1
│ │ │ │ -
498
│ │ │ │ -
499 // iterate from bottom to top over inner edge dofs
│ │ │ │ -
500 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) {
│ │ │ │ -
501 subEntity[lastIndex++] = 0; // on left face (0)
│ │ │ │ -
502 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ -
503 subEntity[lastIndex++] = 0; // volume dofs
│ │ │ │ -
504 subEntity[lastIndex++] = 1; // right face (1)
│ │ │ │ -
505 }
│ │ │ │ -
506
│ │ │ │ -
507 // upper edge (connecting edges 0 and 1)
│ │ │ │ -
508 subEntity[lastIndex++] = 2; // dof on edge 2
│ │ │ │ -
509 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ -
510 subEntity[lastIndex++] = 3; // dof on rear face (3)
│ │ │ │ -
511 subEntity[lastIndex++] = 3; // dof on edge 3
│ │ │ │ -
512
│ │ │ │ -
513 assert(lastIndex==(f+1+1)*numFaceIndices);
│ │ │ │ -
514 }
│ │ │ │ -
515
│ │ │ │ -
517 // lower edge (10)
│ │ │ │ -
518 subEntity[lastIndex++] = 4; // corner 4
│ │ │ │ -
519 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
520 subEntity[lastIndex++] = 10; // inner dofs on lower edge (10)
│ │ │ │ -
521 subEntity[lastIndex++] = 5; // corner 5
│ │ │ │ -
522
│ │ │ │ -
523 // iterate from bottom to top over inner edge dofs
│ │ │ │ -
524 for (unsigned e = 0; e < k - 1; ++e) {
│ │ │ │ -
525 subEntity[lastIndex++] = 8; // left edge (8)
│ │ │ │ -
526 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
527 subEntity[lastIndex++] = 5; // face dofs
│ │ │ │ -
528 subEntity[lastIndex++] = 9; // right edge (9)
│ │ │ │ -
529 }
│ │ │ │ -
530
│ │ │ │ -
531 // upper edge (11)
│ │ │ │ -
532 subEntity[lastIndex++] = 6; // corner 6
│ │ │ │ -
533 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ -
534 subEntity[lastIndex++] = 11; // inner dofs of upper edge (11)
│ │ │ │ -
535 subEntity[lastIndex++] = 7; // corner 7
│ │ │ │ -
536
│ │ │ │ -
537 assert(numIndices==lastIndex);
│ │ │ │ -
538 }
│ │ │ │ -
539
│ │ │ │ -
540 public:
│ │ │ │ -
542 LagrangeCubeLocalCoefficients ()
│ │ │ │ -
543 : localKeys_(size())
│ │ │ │ -
544 {
│ │ │ │ -
545 if (k==0)
│ │ │ │ -
546 {
│ │ │ │ -
547 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ -
548 return;
│ │ │ │ -
549 }
│ │ │ │ -
550
│ │ │ │ -
551 if (k==1)
│ │ │ │ -
552 {
│ │ │ │ -
553 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
554 localKeys_[i] = LocalKey(i,dim,0);
│ │ │ │ -
555 return;
│ │ │ │ -
556 }
│ │ │ │ -
557
│ │ │ │ -
558 // Now: the general case
│ │ │ │ -
559
│ │ │ │ -
560 // Set up array of codimension-per-dof-number
│ │ │ │ -
561 std::vector<unsigned int> codim(size());
│ │ │ │ -
562
│ │ │ │ -
563 for (std::size_t i=0; i<codim.size(); i++)
│ │ │ │ -
564 {
│ │ │ │ -
565 codim[i] = 0;
│ │ │ │ -
566
│ │ │ │ -
567 // Codimension gets increased by 1 for each coordinate direction
│ │ │ │ -
568 // where dof is on boundary
│ │ │ │ -
569 std::array<unsigned int,dim> mIdx = multiindex(i);
│ │ │ │ -
570 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
571 if (mIdx[j]==0 or mIdx[j]==k)
│ │ │ │ -
572 codim[i]++;
│ │ │ │ -
573 }
│ │ │ │ -
574
│ │ │ │ -
575 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
│ │ │ │ -
576 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
│ │ │ │ -
577 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
│ │ │ │ -
578 // that correspond to axes where the dof is on the element boundary, and transform the
│ │ │ │ -
579 // rest to the (k-1)-adic system.
│ │ │ │ -
580 std::vector<unsigned int> index(size());
│ │ │ │ -
581
│ │ │ │ -
582 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
583 {
│ │ │ │ -
584 index[i] = 0;
│ │ │ │ -
585
│ │ │ │ -
586 std::array<unsigned int,dim> mIdx = multiindex(i);
│ │ │ │ -
587
│ │ │ │ -
588 for (int j=dim-1; j>=0; j--)
│ │ │ │ -
589 if (mIdx[j]>0 && mIdx[j]<k)
│ │ │ │ -
590 index[i] = (k-1)*index[i] + (mIdx[j]-1);
│ │ │ │ -
591 }
│ │ │ │ -
592
│ │ │ │ -
593 // Set up entity and dof numbers for each (supported) dimension separately
│ │ │ │ -
594 std::vector<unsigned int> subEntity(size());
│ │ │ │ -
595
│ │ │ │ -
596 if (dim==1) {
│ │ │ │ -
597
│ │ │ │ -
598 setup1d(subEntity);
│ │ │ │ -
599
│ │ │ │ -
600 } else if (dim==2) {
│ │ │ │ -
601
│ │ │ │ -
602 setup2d(subEntity);
│ │ │ │ -
603
│ │ │ │ -
604 } else if (dim==3) {
│ │ │ │ -
605
│ │ │ │ -
606 setup3d(subEntity);
│ │ │ │ -
607
│ │ │ │ -
608 } else
│ │ │ │ -
609 DUNE_THROW(Dune::NotImplemented, "LagrangeCubeLocalCoefficients for order " << k << " and dim == " << dim);
│ │ │ │ -
610
│ │ │ │ -
611 for (size_t i=0; i<size(); i++)
│ │ │ │ -
612 localKeys_[i] = LocalKey(subEntity[i], codim[i], index[i]);
│ │ │ │ -
613 }
│ │ │ │ -
614
│ │ │ │ -
616 static constexpr std::size_t size ()
│ │ │ │ -
617 {
│ │ │ │ -
618 return power(k+1,dim);
│ │ │ │ -
619 }
│ │ │ │ -
620
│ │ │ │ -
622 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
623 {
│ │ │ │ -
624 return localKeys_[i];
│ │ │ │ -
625 }
│ │ │ │ -
626
│ │ │ │ -
627 private:
│ │ │ │ -
628 std::vector<LocalKey> localKeys_;
│ │ │ │ -
629 };
│ │ │ │ -
630
│ │ │ │ -
635 template<class LocalBasis>
│ │ │ │ -
636 class LagrangeCubeLocalInterpolation
│ │ │ │ -
637 {
│ │ │ │ -
638 public:
│ │ │ │ -
639
│ │ │ │ -
647 template<typename F, typename C>
│ │ │ │ -
648 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
649 {
│ │ │ │ -
650 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ -
651 constexpr auto k = LocalBasis::order();
│ │ │ │ -
652 using D = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ -
653
│ │ │ │ -
654 typename LocalBasis::Traits::DomainType x;
│ │ │ │ -
655
│ │ │ │ -
656 out.resize(LocalBasis::size());
│ │ │ │ -
657
│ │ │ │ -
658 // Specialization for zero-order case
│ │ │ │ -
659 if (k==0)
│ │ │ │ -
660 {
│ │ │ │ -
661 auto center = ReferenceElements<D,dim>::cube().position(0,0);
│ │ │ │ -
662 out[0] = f(center);
│ │ │ │ -
663 return;
│ │ │ │ -
664 }
│ │ │ │ -
665
│ │ │ │ -
666 // Specialization for first-order case
│ │ │ │ -
667 if (k==1)
│ │ │ │ -
668 {
│ │ │ │ -
669 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ -
670 {
│ │ │ │ -
671 // Generate coordinate of the i-th corner of the reference cube
│ │ │ │ -
672 for (int j=0; j<dim; j++)
│ │ │ │ -
673 x[j] = (i & (1<<j)) ? 1.0 : 0.0;
│ │ │ │ -
674
│ │ │ │ -
675 out[i] = f(x);
│ │ │ │ -
676 }
│ │ │ │ -
677 return;
│ │ │ │ -
678 }
│ │ │ │ -
679
│ │ │ │ -
680 // The general case
│ │ │ │ -
681 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ -
682 {
│ │ │ │ -
683 // convert index i to multiindex
│ │ │ │ -
684 std::array<unsigned int,dim> alpha(LocalBasis::multiindex(i));
│ │ │ │ -
685
│ │ │ │ -
686 // Generate coordinate of the i-th Lagrange point
│ │ │ │ -
687 for (unsigned int j=0; j<dim; j++)
│ │ │ │ -
688 x[j] = (1.0*alpha[j])/k;
│ │ │ │ -
689
│ │ │ │ -
690 out[i] = f(x);
│ │ │ │ -
691 }
│ │ │ │ -
692 }
│ │ │ │ -
693
│ │ │ │ -
694 };
│ │ │ │ -
695
│ │ │ │ -
696} } // namespace Dune::Impl
│ │ │ │ -
697
│ │ │ │ -
698namespace Dune
│ │ │ │ -
699{
│ │ │ │ -
707 template<class D, class R, int dim, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
709 {
│ │ │ │ -
710 public:
│ │ │ │ - │ │ │ │ -
714 Impl::LagrangeCubeLocalCoefficients<dim,k>,
│ │ │ │ -
715 Impl::LagrangeCubeLocalInterpolation<Impl::LagrangeCubeLocalBasis<D,R,dim,k> > >;
│ │ │ │ -
716
│ │ │ │ -
│ │ │ │ -
719 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
720 {
│ │ │ │ -
721 return basis_;
│ │ │ │ -
722 }
│ │ │ │ -
│ │ │ │ -
723
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
727 {
│ │ │ │ -
728 return coefficients_;
│ │ │ │ -
729 }
│ │ │ │ -
│ │ │ │ -
730
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
734 {
│ │ │ │ -
735 return interpolation_;
│ │ │ │ -
736 }
│ │ │ │ -
│ │ │ │ -
737
│ │ │ │ -
│ │ │ │ -
739 static constexpr std::size_t size ()
│ │ │ │ -
740 {
│ │ │ │ -
741 return power(k+1,dim);
│ │ │ │ -
742 }
│ │ │ │ -
│ │ │ │ -
743
│ │ │ │ -
│ │ │ │ -
746 static constexpr GeometryType type ()
│ │ │ │ -
747 {
│ │ │ │ -
748 return GeometryTypes::cube(dim);
│ │ │ │ -
749 }
│ │ │ │ -
│ │ │ │ -
750
│ │ │ │ -
751 private:
│ │ │ │ -
752 Impl::LagrangeCubeLocalBasis<D,R,dim,k> basis_;
│ │ │ │ -
753 Impl::LagrangeCubeLocalCoefficients<dim,k> coefficients_;
│ │ │ │ -
754 Impl::LagrangeCubeLocalInterpolation<Impl::LagrangeCubeLocalBasis<D,R,dim,k> > interpolation_;
│ │ │ │ -
755 };
│ │ │ │ -
│ │ │ │ -
756
│ │ │ │ -
757} // namespace Dune
│ │ │ │ -
758
│ │ │ │ -
759#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
262}
│ │ │ │ +
263
│ │ │ │ +
264#endif // DUNE_COEFFMATRIX_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangecube.hh:719
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangecube.hh:733
│ │ │ │ -
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangecube.hh:746
│ │ │ │ -
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangecube.hh:739
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangecube.hh:726
│ │ │ │ - │ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition coeffmatrix.hh:26
│ │ │ │ +
static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res)
Definition coeffmatrix.hh:28
│ │ │ │ +
Field2 BasisEntry
Definition coeffmatrix.hh:27
│ │ │ │ +
FieldVector< Field2, dimRange > BasisEntry
Definition coeffmatrix.hh:38
│ │ │ │ +
static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res)
Definition coeffmatrix.hh:39
│ │ │ │ +
Definition coeffmatrix.hh:48
│ │ │ │ +
static const unsigned int blockSize
Definition coeffmatrix.hh:51
│ │ │ │ +
SparseCoeffMatrix()
Definition coeffmatrix.hh:54
│ │ │ │ +
F Field
Definition coeffmatrix.hh:50
│ │ │ │ +
unsigned int baseSize() const
Definition coeffmatrix.hh:73
│ │ │ │ +
SparseCoeffMatrix< Field, blockSize > This
Definition coeffmatrix.hh:52
│ │ │ │ +
unsigned int size() const
Definition coeffmatrix.hh:69
│ │ │ │ +
void fill(const RowMatrix &mat, bool verbose=false)
Definition coeffmatrix.hh:160
│ │ │ │ +
void addRow(unsigned int k, const Field &a, Vector &b) const
Definition coeffmatrix.hh:223
│ │ │ │ +
void mult(const BasisIterator &x, unsigned int numLsg, FF *y) const
Definition coeffmatrix.hh:79
│ │ │ │ +
void mult(const BasisIterator &x, Vector &y) const
Definition coeffmatrix.hh:132
│ │ │ │ +
void mult(const BasisIterator &x, Vector &y) const
Definition coeffmatrix.hh:105
│ │ │ │ +
~SparseCoeffMatrix()
Definition coeffmatrix.hh:62
│ │ │ │ +
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ +
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:587
│ │ │ │ +
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:665
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,764 +1,347 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangecube.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +coeffmatrix.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e { namespace Impl │ │ │ │ │ -22{ │ │ │ │ │ -23 // Forward declaration │ │ │ │ │ -24 template │ │ │ │ │ -25 class LagrangeCubeLocalInterpolation; │ │ │ │ │ -26 │ │ │ │ │ -37 template │ │ │ │ │ -38 class LagrangeCubeLocalBasis │ │ │ │ │ -39 { │ │ │ │ │ -40 friend class │ │ │ │ │ -LagrangeCubeLocalInterpolation >; │ │ │ │ │ -41 │ │ │ │ │ -42 // i-th Lagrange polynomial of degree k in one dimension │ │ │ │ │ -43 static R p(unsigned int i, D x) │ │ │ │ │ -44 { │ │ │ │ │ -45 R result(1.0); │ │ │ │ │ -46 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -47 if (j!=i) result *= (k*x-j)/((int)i-(int)j); │ │ │ │ │ -48 return result; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -51 // derivative of ith Lagrange polynomial of degree k in one dimension │ │ │ │ │ -52 static R dp(unsigned int i, D x) │ │ │ │ │ -53 { │ │ │ │ │ -54 R result(0.0); │ │ │ │ │ -55 │ │ │ │ │ -56 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ -57 { │ │ │ │ │ -58 if (j!=i) │ │ │ │ │ -59 { │ │ │ │ │ -60 R prod( (k*1.0)/((int)i-(int)j) ); │ │ │ │ │ -61 for (unsigned int l=0; l<=k; l++) │ │ │ │ │ -62 if (l!=i && l!=j) │ │ │ │ │ -63 prod *= (k*x-l)/((int)i-(int)l); │ │ │ │ │ -64 result += prod; │ │ │ │ │ -65 } │ │ │ │ │ -66 } │ │ │ │ │ -67 return result; │ │ │ │ │ -68 } │ │ │ │ │ -69 │ │ │ │ │ -70 // Second derivative of j-th Lagrange polynomial of degree k in one │ │ │ │ │ -dimension │ │ │ │ │ -71 // Formula and notation taken from https://en.wikipedia.org/wiki/ │ │ │ │ │ -Lagrange_polynomial#Derivatives │ │ │ │ │ -72 static R ddp(unsigned int j, D x) │ │ │ │ │ -73 { │ │ │ │ │ -74 R result(0.0); │ │ │ │ │ -75 │ │ │ │ │ -76 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ -77 { │ │ │ │ │ -78 if (i==j) │ │ │ │ │ -79 continue; │ │ │ │ │ -80 │ │ │ │ │ -81 R sum(0); │ │ │ │ │ -82 │ │ │ │ │ -83 for (unsigned int m=0; m<=k; m++) │ │ │ │ │ -84 { │ │ │ │ │ -85 if (m==i || m==j) │ │ │ │ │ -86 continue; │ │ │ │ │ -87 │ │ │ │ │ -88 R prod( (k*1.0)/((int)j-(int)m) ); │ │ │ │ │ -89 for (unsigned int l=0; l<=k; l++) │ │ │ │ │ -90 if (l!=i && l!=j && l!=m) │ │ │ │ │ -91 prod *= (k*x-l)/((int)j-(int)l); │ │ │ │ │ -92 sum += prod; │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -95 result += sum * ( (k*1.0)/((int)j-(int)i) ); │ │ │ │ │ -96 } │ │ │ │ │ -97 │ │ │ │ │ -98 return result; │ │ │ │ │ +5#ifndef DUNE_COEFFMATRIX_HH │ │ │ │ │ +6#define DUNE_COEFFMATRIX_HH │ │ │ │ │ +7#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 /************************************************* │ │ │ │ │ +17 * Default class for storing a coefficient matrix │ │ │ │ │ +18 * for the PolynomialBasis. Basically a simple │ │ │ │ │ +19 * CRS structure is used. The additional complexity │ │ │ │ │ +20 * is due to the storage and efficient evaluation │ │ │ │ │ +21 * of higher order derivatives. See the remarks │ │ │ │ │ +22 * in tensor.hh which also hold true for this file. │ │ │ │ │ +23 *************************************************/ │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 struct _M_u_l_t │ │ │ │ │ +26 { │ │ │ │ │ +_2_7 typedef Field2 _B_a_s_i_s_E_n_t_r_y; │ │ │ │ │ +_2_8 static void _a_d_d(const Field &vec1, const _B_a_s_i_s_E_n_t_r_y &vec2, │ │ │ │ │ +29 _B_a_s_i_s_E_n_t_r_y &res) │ │ │ │ │ +30 { │ │ │ │ │ +31 res += vec1*vec2; │ │ │ │ │ +32 } │ │ │ │ │ +33 }; │ │ │ │ │ +34 │ │ │ │ │ +35 template │ │ │ │ │ +_3_6 struct _M_u_l_t< Field,FieldVector > │ │ │ │ │ +37 { │ │ │ │ │ +_3_8 typedef FieldVector _B_a_s_i_s_E_n_t_r_y; │ │ │ │ │ +_3_9 static void _a_d_d(const Field &vec1, const _B_a_s_i_s_E_n_t_r_y &vec2, │ │ │ │ │ +40 _B_a_s_i_s_E_n_t_r_y &res) │ │ │ │ │ +41 { │ │ │ │ │ +42 res.axpy(vec1,vec2); │ │ │ │ │ +43 } │ │ │ │ │ +44 }; │ │ │ │ │ +45 │ │ │ │ │ +46 template< class F , unsigned int bSize > │ │ │ │ │ +_4_7 class _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ +48 { │ │ │ │ │ +49 public: │ │ │ │ │ +_5_0 typedef F _F_i_e_l_d; │ │ │ │ │ +_5_1 static const unsigned int _b_l_o_c_k_S_i_z_e = bSize; │ │ │ │ │ +_5_2 typedef _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_b_l_o_c_k_S_i_z_e_> _T_h_i_s; │ │ │ │ │ +53 │ │ │ │ │ +_5_4 _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x() │ │ │ │ │ +55 : coeff_(0), │ │ │ │ │ +56 rows_(0), │ │ │ │ │ +57 skip_(0), │ │ │ │ │ +58 numRows_(0), │ │ │ │ │ +59 numCols_(0) │ │ │ │ │ +60 {} │ │ │ │ │ +61 │ │ │ │ │ +_6_2 _~_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x() │ │ │ │ │ +63 { │ │ │ │ │ +64 delete [] coeff_; │ │ │ │ │ +65 delete [] rows_; │ │ │ │ │ +66 delete [] skip_; │ │ │ │ │ +67 } │ │ │ │ │ +68 │ │ │ │ │ +_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ +70 { │ │ │ │ │ +71 return numRows_/_b_l_o_c_k_S_i_z_e; │ │ │ │ │ +72 } │ │ │ │ │ +_7_3 unsigned int _b_a_s_e_S_i_z_e () const │ │ │ │ │ +74 { │ │ │ │ │ +75 return numCols_; │ │ │ │ │ +76 } │ │ │ │ │ +77 │ │ │ │ │ +78 template< class BasisIterator, class FF> │ │ │ │ │ +_7_9 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ +80 unsigned int numLsg, │ │ │ │ │ +81 FF *y ) const │ │ │ │ │ +82 { │ │ │ │ │ +83 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ +84 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ +85 unsigned int row = 0; │ │ │ │ │ +86 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ +87 unsigned int *skipIt = skip_; │ │ │ │ │ +88 XDerivatives val; │ │ │ │ │ +89 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ +90 { │ │ │ │ │ +91 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ +92 { │ │ │ │ │ +93 val = 0; │ │ │ │ │ +94 BasisIterator itx = x; │ │ │ │ │ +95 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt ) │ │ │ │ │ +96 { │ │ │ │ │ +97 itx += *skipIt; │ │ │ │ │ +98 val.axpy(*pos,*itx); │ │ │ │ │ 99 } │ │ │ │ │ -100 │ │ │ │ │ -101 // Return i as a d-digit number in the (k+1)-nary system │ │ │ │ │ -102 static std::array multiindex (unsigned int i) │ │ │ │ │ -103 { │ │ │ │ │ -104 std::array alpha; │ │ │ │ │ -105 for (unsigned int j=0; j,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ -115 │ │ │ │ │ -118 static constexpr unsigned int size () │ │ │ │ │ +100 _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_X_D_e_r_i_v_a_t_i_v_e_s_,_F_F_>_:_:_a_p_p_l_y(r,val,*(y+i*XDerivatives:: │ │ │ │ │ +size*_b_l_o_c_k_S_i_z_e)); │ │ │ │ │ +101 } │ │ │ │ │ +102 } │ │ │ │ │ +103 } │ │ │ │ │ +104 template< class BasisIterator, class Vector> │ │ │ │ │ +_1_0_5 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ +106 Vector &y ) const │ │ │ │ │ +107 { │ │ │ │ │ +108 typedef typename Vector::value_type YDerivatives; │ │ │ │ │ +109 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ +110 size_t numLsg = y.size(); │ │ │ │ │ +111 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ +112 unsigned int row = 0; │ │ │ │ │ +113 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ +114 unsigned int *skipIt = skip_; │ │ │ │ │ +115 XDerivatives val; │ │ │ │ │ +116 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ +117 { │ │ │ │ │ +118 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ 119 { │ │ │ │ │ -120 return power(k+1, dim); │ │ │ │ │ -121 } │ │ │ │ │ -122 │ │ │ │ │ -124 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ -125 std::vector& out) const │ │ │ │ │ -126 { │ │ │ │ │ -127 out.resize(size()); │ │ │ │ │ -128 │ │ │ │ │ -129 // Specialization for zero-order case │ │ │ │ │ -130 if (k==0) │ │ │ │ │ -131 { │ │ │ │ │ -132 out[0] = 1; │ │ │ │ │ -133 return; │ │ │ │ │ -134 } │ │ │ │ │ -135 │ │ │ │ │ -136 if (k==1) │ │ │ │ │ -137 { │ │ │ │ │ -138 for (size_t i=0; i alpha(multiindex(i)); │ │ │ │ │ -154 │ │ │ │ │ -155 // initialize product │ │ │ │ │ -156 out[i] = 1.0; │ │ │ │ │ -157 │ │ │ │ │ -158 // dimension by dimension │ │ │ │ │ -159 for (unsigned int j=0; j& out) const │ │ │ │ │ -171 { │ │ │ │ │ -172 out.resize(size()); │ │ │ │ │ -173 │ │ │ │ │ -174 // Specialization for k==0 │ │ │ │ │ -175 if (k==0) │ │ │ │ │ -176 { │ │ │ │ │ -177 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ -178 return; │ │ │ │ │ -179 } │ │ │ │ │ -180 │ │ │ │ │ -181 // Specialization for k==1 │ │ │ │ │ -182 if (k==1) │ │ │ │ │ -183 { │ │ │ │ │ -184 // Loop over all shape functions │ │ │ │ │ -185 for (size_t i=0; i_:_:_a_p_p_l_y(r,val,y[i]); │ │ │ │ │ +128 } │ │ │ │ │ +129 } │ │ │ │ │ +130 } │ │ │ │ │ +131 template │ │ │ │ │ +_1_3_2 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ +133 Vector &y ) const │ │ │ │ │ +134 { │ │ │ │ │ +135 typedef typename Vector::value_type YDerivatives; │ │ │ │ │ +136 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ +137 typedef FieldVector │ │ │ │ │ +XLFETensor; │ │ │ │ │ +138 size_t numLsg = y.size(); │ │ │ │ │ +139 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ +140 unsigned int row = 0; │ │ │ │ │ +141 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ +142 unsigned int *skipIt = skip_; │ │ │ │ │ +143 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ +144 { │ │ │ │ │ +145 XLFETensor val(typename XDerivatives::Field(0)); │ │ │ │ │ +146 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ +147 { │ │ │ │ │ +148 BasisIterator itx = x; │ │ │ │ │ +149 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt ) │ │ │ │ │ +150 { │ │ │ │ │ +151 itx += *skipIt; │ │ │ │ │ +152 _L_F_E_T_e_n_s_o_r_A_x_p_y_<_X_D_e_r_i_v_a_t_i_v_e_s_,_X_L_F_E_T_e_n_s_o_r_,_d_e_r_i_v_>_:_:_a_p_p_l_y(r,*pos,*itx,val); │ │ │ │ │ +153 } │ │ │ │ │ +154 } │ │ │ │ │ +155 _f_i_e_l_d___c_a_s_t(val,y[i]); │ │ │ │ │ +156 } │ │ │ │ │ +157 } │ │ │ │ │ +158 │ │ │ │ │ +159 template< class RowMatrix > │ │ │ │ │ +_1_6_0 void _f_i_l_l ( const RowMatrix &mat, bool verbose=false ) │ │ │ │ │ +161 { │ │ │ │ │ +162 numRows_ = mat.rows(); │ │ │ │ │ +163 numCols_ = mat.cols(); │ │ │ │ │ +164 unsigned int _s_i_z_e = numRows_*numCols_; │ │ │ │ │ +165 │ │ │ │ │ +166 delete [] coeff_; │ │ │ │ │ +167 delete [] rows_; │ │ │ │ │ +168 delete [] skip_; │ │ │ │ │ +169 │ │ │ │ │ +170 _F_i_e_l_d* coeff = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ +171 // we always initialize the next skip entry to zero, │ │ │ │ │ +172 // including the one following the end, so allocate │ │ │ │ │ +173 // size+1 entries so we will stay within the bounds. │ │ │ │ │ +174 unsigned int *skip = new unsigned int[ _s_i_z_e+1 ]; │ │ │ │ │ +175 rows_ = new _F_i_e_l_d*[ numRows_+1 ]; │ │ │ │ │ +176 std::vector row( numCols_ ); │ │ │ │ │ +177 │ │ │ │ │ +178 rows_[ 0 ] = coeff; │ │ │ │ │ +179 _F_i_e_l_d *cit = coeff; │ │ │ │ │ +180 unsigned int *sit = skip; │ │ │ │ │ +181 for( unsigned int r = 0; r < numRows_; ++r ) │ │ │ │ │ +182 { │ │ │ │ │ +183 *sit = 0; │ │ │ │ │ +184 mat.row( r, row ); │ │ │ │ │ +185 for( unsigned int c = 0; c < numCols_; ++c ) │ │ │ │ │ 186 { │ │ │ │ │ -187 // Loop over all coordinate directions │ │ │ │ │ -188 for (unsigned int j=0; j() || _Z_e_r_o_<_F_i_e_l_d_>() < val) │ │ │ │ │ 189 { │ │ │ │ │ -190 // Initialize: the overall expression is a product │ │ │ │ │ -191 // if j-th bit of i is set to 1, else -11 │ │ │ │ │ -192 out[i][0][j] = (i & (1< alpha(multiindex(i)); │ │ │ │ │ +201 assert( size_t(rows_[numRows_]-rows_[0]) <= size_t(_s_i_z_e) ); │ │ │ │ │ +202 _s_i_z_e = rows_[numRows_]-rows_[0]; │ │ │ │ │ +203 coeff_ = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ +204 skip_ = new unsigned int[ _s_i_z_e ]; │ │ │ │ │ +205 for (unsigned int i=0; i<_s_i_z_e; ++i) │ │ │ │ │ +206 { │ │ │ │ │ +207 coeff_[i] = coeff[i]; │ │ │ │ │ +208 skip_[i] = skip[i]; │ │ │ │ │ +209 } │ │ │ │ │ +210 for (unsigned int i=0; i<=numRows_; ++i) │ │ │ │ │ +211 rows_[ i ] = coeff_ + (rows_[ i ] - coeff); │ │ │ │ │ 212 │ │ │ │ │ -213 // Loop over all coordinate directions │ │ │ │ │ -214 for (unsigned int j=0; j& order, │ │ │ │ │ -235 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -236 std::vector& out) const │ │ │ │ │ -237 { │ │ │ │ │ -238 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -239 │ │ │ │ │ -240 out.resize(size()); │ │ │ │ │ -241 │ │ │ │ │ -242 if (k==0) │ │ │ │ │ -243 { │ │ │ │ │ -244 out[0] = (totalOrder==0); │ │ │ │ │ -245 return; │ │ │ │ │ -246 } │ │ │ │ │ -247 │ │ │ │ │ -248 if (k==1) │ │ │ │ │ -249 { │ │ │ │ │ -250 if (totalOrder == 0) │ │ │ │ │ -251 { │ │ │ │ │ -252 evaluateFunction(in, out); │ │ │ │ │ +213 delete [] coeff; │ │ │ │ │ +214 delete [] skip; │ │ │ │ │ +215 │ │ │ │ │ +216 if (verbose) │ │ │ │ │ +217 std::cout << "Entries: " << (rows_[numRows_]-rows_[0]) │ │ │ │ │ +218 << " full: " << numCols_*numRows_ │ │ │ │ │ +219 << std::endl; │ │ │ │ │ +220 } │ │ │ │ │ +221 // b += a*C[k] │ │ │ │ │ +222 template │ │ │ │ │ +_2_2_3 void _a_d_d_R_o_w( unsigned int k, const _F_i_e_l_d &a, Vector &b) const │ │ │ │ │ +224 { │ │ │ │ │ +225 assert(k( (*pos)*a ); // field_cast │ │ │ │ │ +235 } │ │ │ │ │ +236 } │ │ │ │ │ +237 private: │ │ │ │ │ +238 _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x ( const _T_h_i_s &other ) │ │ │ │ │ +239 : numRows_( other.numRows_ ), │ │ │ │ │ +240 numCols_( other.numCols_ ) │ │ │ │ │ +241 { │ │ │ │ │ +242 const unsigned int _s_i_z_e = other.rows_[numRows_]-other.rows_[0]; │ │ │ │ │ +243 coeff_ = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ +244 rows_ = new _F_i_e_l_d*[ numRows_+1 ]; │ │ │ │ │ +245 skip_ = new unsigned int[ _s_i_z_e ]; │ │ │ │ │ +246 for (unsigned int i=0; i<_s_i_z_e; ++i) │ │ │ │ │ +247 { │ │ │ │ │ +248 coeff_[i] = other.coeff_[i]; │ │ │ │ │ +249 skip_[i] = other.skip_[i]; │ │ │ │ │ +250 } │ │ │ │ │ +251 for (unsigned int i=0; i<=numRows_; ++i) │ │ │ │ │ +252 rows_[ i ] = coeff_ + (other.rows_[ i ] - other.coeff_); │ │ │ │ │ 253 } │ │ │ │ │ -254 else if (totalOrder == 1) │ │ │ │ │ -255 { │ │ │ │ │ -256 out.resize(size()); │ │ │ │ │ -257 │ │ │ │ │ -258 auto direction = std::distance(order.begin(), std::find(order.begin(), │ │ │ │ │ -order.end(), 1)); │ │ │ │ │ -259 if (direction >= dim) │ │ │ │ │ -260 DUNE_THROW(RangeError, "Direction of partial derivative not found!"); │ │ │ │ │ +254 │ │ │ │ │ +255 _T_h_i_s &operator= (const _T_h_i_s&); │ │ │ │ │ +256 _F_i_e_l_d *coeff_; │ │ │ │ │ +257 _F_i_e_l_d **rows_; │ │ │ │ │ +258 unsigned int *skip_; │ │ │ │ │ +259 unsigned int numRows_,numCols_; │ │ │ │ │ +260 }; │ │ │ │ │ 261 │ │ │ │ │ -262 // Loop over all shape functions │ │ │ │ │ -263 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -264 { │ │ │ │ │ -265 // Initialize: the overall expression is a product │ │ │ │ │ -266 // if j-th bit of i is set to 1, otherwise to -1 │ │ │ │ │ -267 out[i] = (i & (1< alpha(multiindex(i)); │ │ │ │ │ -284 │ │ │ │ │ -285 // Initialize: the overall expression is a product │ │ │ │ │ -286 out[i][0] = 1.0; │ │ │ │ │ -287 │ │ │ │ │ -288 // rest of the product │ │ │ │ │ -289 for (std::size_t l=0; l1 │ │ │ │ │ -316 │ │ │ │ │ -317 // Loop over all shape functions │ │ │ │ │ -318 for (size_t i=0; i alpha(multiindex(i)); │ │ │ │ │ -322 │ │ │ │ │ -323 // Initialize: the overall expression is a product │ │ │ │ │ -324 out[i][0] = 1.0; │ │ │ │ │ -325 │ │ │ │ │ -326 // rest of the product │ │ │ │ │ -327 for (std::size_t l=0; l │ │ │ │ │ -360 class LagrangeCubeLocalCoefficients │ │ │ │ │ -361 { │ │ │ │ │ -362 // Return i as a d-digit number in the (k+1)-nary system │ │ │ │ │ -363 static std::array multiindex (unsigned int i) │ │ │ │ │ -364 { │ │ │ │ │ -365 std::array alpha; │ │ │ │ │ -366 for (unsigned int j=0; j& subEntity) │ │ │ │ │ -376 { │ │ │ │ │ -377 assert(k>0); │ │ │ │ │ -378 │ │ │ │ │ -379 unsigned lastIndex=0; │ │ │ │ │ -380 │ │ │ │ │ -381 /* edge and vertex numbering │ │ │ │ │ -382 0----0----1 │ │ │ │ │ -383 */ │ │ │ │ │ -384 │ │ │ │ │ -385 // edge (0) │ │ │ │ │ -386 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ -387 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -388 subEntity[lastIndex++] = 0; // inner dofs of element (0) │ │ │ │ │ -389 │ │ │ │ │ -390 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ -391 │ │ │ │ │ -392 assert(power(k+1,dim)==lastIndex); │ │ │ │ │ -393 } │ │ │ │ │ -394 │ │ │ │ │ -395 void setup2d(std::vector& subEntity) │ │ │ │ │ -396 { │ │ │ │ │ -397 assert(k>0); │ │ │ │ │ -398 │ │ │ │ │ -399 unsigned lastIndex=0; │ │ │ │ │ -400 │ │ │ │ │ -401 // LocalKey: entity number, entity codim, dof indices within each entity │ │ │ │ │ -402 /* edge and vertex numbering │ │ │ │ │ -403 2----3----3 │ │ │ │ │ -404 | | │ │ │ │ │ -405 | | │ │ │ │ │ -406 0 1 │ │ │ │ │ -407 | | │ │ │ │ │ -408 | | │ │ │ │ │ -409 0----2----1 │ │ │ │ │ -410 */ │ │ │ │ │ -411 │ │ │ │ │ -412 // lower edge (2) │ │ │ │ │ -413 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ -414 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -415 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2) │ │ │ │ │ -416 │ │ │ │ │ -417 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ -418 │ │ │ │ │ -419 // iterate from bottom to top over inner edge dofs │ │ │ │ │ -420 for (unsigned e = 0; e < k - 1; ++e) { │ │ │ │ │ -421 subEntity[lastIndex++] = 0; // left edge (0) │ │ │ │ │ -422 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -423 subEntity[lastIndex++] = 0; // face dofs │ │ │ │ │ -424 subEntity[lastIndex++] = 1; // right edge (1) │ │ │ │ │ -425 } │ │ │ │ │ -426 │ │ │ │ │ -427 // upper edge (3) │ │ │ │ │ -428 subEntity[lastIndex++] = 2; // corner 2 │ │ │ │ │ -429 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -430 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3) │ │ │ │ │ -431 │ │ │ │ │ -432 subEntity[lastIndex++] = 3; // corner 3 │ │ │ │ │ -433 │ │ │ │ │ -434 assert(power(k+1,dim)==lastIndex); │ │ │ │ │ -435 } │ │ │ │ │ -436 │ │ │ │ │ -437 void setup3d(std::vector& subEntity) │ │ │ │ │ -438 { │ │ │ │ │ -439 assert(k>0); │ │ │ │ │ -440 │ │ │ │ │ -441 unsigned lastIndex=0; │ │ │ │ │ -442#ifndef NDEBUG │ │ │ │ │ -443 const unsigned numIndices = power(k+1,dim); │ │ │ │ │ -444 const unsigned numFaceIndices = power(k+1,dim-1); │ │ │ │ │ -445#endif │ │ │ │ │ -446 const unsigned numInnerEdgeDofs = k-1; │ │ │ │ │ -447 │ │ │ │ │ -448 // LocalKey: entity number, entity codim, dof indices within each entity │ │ │ │ │ -449 /* edge and vertex numbering │ │ │ │ │ -450 │ │ │ │ │ -451 6---(11)--7 6---------7 │ │ │ │ │ -452 /| /| /| (5) /| │ │ │ │ │ -453 (8)| (9)| / | top / | │ │ │ │ │ -454 / (2) / (3) / |(3)bac/k | │ │ │ │ │ -455 4---(10)--5 | 4---------5 | │ │ │ │ │ -456 | | | | left|(0)| |(1)|right │ │ │ │ │ -457 | 2--(7)|---3 | 2-----|---3 │ │ │ │ │ -458 (0) / (1) / |(2)front | / │ │ │ │ │ -459 |(4) |(5) | / (4) | / │ │ │ │ │ -460 |/ |/ |/ bottom |/ │ │ │ │ │ -461 0---(6)---1 0---------1 │ │ │ │ │ -462 */ │ │ │ │ │ -463 │ │ │ │ │ -464 // bottom face (4) │ │ │ │ │ -465 lastIndex=0; │ │ │ │ │ -466 // lower edge (6) │ │ │ │ │ -467 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ -468 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ -469 subEntity[lastIndex++] = 6; // inner dofs of lower edge (6) │ │ │ │ │ -470 │ │ │ │ │ -471 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ -472 │ │ │ │ │ -473 // iterate from bottom to top over inner edge dofs │ │ │ │ │ -474 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) { │ │ │ │ │ -475 subEntity[lastIndex++] = 4; // left edge (4) │ │ │ │ │ -476 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ -477 subEntity[lastIndex++] = 4; // inner face dofs │ │ │ │ │ -478 subEntity[lastIndex++] = 5; // right edge (5) │ │ │ │ │ -479 } │ │ │ │ │ -480 │ │ │ │ │ -481 // upper edge (7) │ │ │ │ │ -482 subEntity[lastIndex++] = 2; // corner 2 │ │ │ │ │ -483 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -484 subEntity[lastIndex++] = 7; // inner dofs of upper edge (7) │ │ │ │ │ -485 subEntity[lastIndex++] = 3; // corner 3 │ │ │ │ │ -486 │ │ │ │ │ -487 assert(numFaceIndices==lastIndex); // added 1 face so far │ │ │ │ │ -489 │ │ │ │ │ -491 for(unsigned f = 0; f < numInnerEdgeDofs; ++f) { │ │ │ │ │ -492 │ │ │ │ │ -493 // lower edge (connecting edges 0 and 1) │ │ │ │ │ -494 subEntity[lastIndex++] = 0; // dof on edge 0 │ │ │ │ │ -495 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ -496 subEntity[lastIndex++] = 2; // dof in front face │ │ │ │ │ -497 subEntity[lastIndex++] = 1; // dof on edge 1 │ │ │ │ │ -498 │ │ │ │ │ -499 // iterate from bottom to top over inner edge dofs │ │ │ │ │ -500 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) { │ │ │ │ │ -501 subEntity[lastIndex++] = 0; // on left face (0) │ │ │ │ │ -502 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ -503 subEntity[lastIndex++] = 0; // volume dofs │ │ │ │ │ -504 subEntity[lastIndex++] = 1; // right face (1) │ │ │ │ │ -505 } │ │ │ │ │ -506 │ │ │ │ │ -507 // upper edge (connecting edges 0 and 1) │ │ │ │ │ -508 subEntity[lastIndex++] = 2; // dof on edge 2 │ │ │ │ │ -509 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ -510 subEntity[lastIndex++] = 3; // dof on rear face (3) │ │ │ │ │ -511 subEntity[lastIndex++] = 3; // dof on edge 3 │ │ │ │ │ -512 │ │ │ │ │ -513 assert(lastIndex==(f+1+1)*numFaceIndices); │ │ │ │ │ -514 } │ │ │ │ │ -515 │ │ │ │ │ -517 // lower edge (10) │ │ │ │ │ -518 subEntity[lastIndex++] = 4; // corner 4 │ │ │ │ │ -519 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -520 subEntity[lastIndex++] = 10; // inner dofs on lower edge (10) │ │ │ │ │ -521 subEntity[lastIndex++] = 5; // corner 5 │ │ │ │ │ -522 │ │ │ │ │ -523 // iterate from bottom to top over inner edge dofs │ │ │ │ │ -524 for (unsigned e = 0; e < k - 1; ++e) { │ │ │ │ │ -525 subEntity[lastIndex++] = 8; // left edge (8) │ │ │ │ │ -526 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -527 subEntity[lastIndex++] = 5; // face dofs │ │ │ │ │ -528 subEntity[lastIndex++] = 9; // right edge (9) │ │ │ │ │ -529 } │ │ │ │ │ -530 │ │ │ │ │ -531 // upper edge (11) │ │ │ │ │ -532 subEntity[lastIndex++] = 6; // corner 6 │ │ │ │ │ -533 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ -534 subEntity[lastIndex++] = 11; // inner dofs of upper edge (11) │ │ │ │ │ -535 subEntity[lastIndex++] = 7; // corner 7 │ │ │ │ │ -536 │ │ │ │ │ -537 assert(numIndices==lastIndex); │ │ │ │ │ -538 } │ │ │ │ │ -539 │ │ │ │ │ -540 public: │ │ │ │ │ -542 LagrangeCubeLocalCoefficients () │ │ │ │ │ -543 : localKeys_(size()) │ │ │ │ │ -544 { │ │ │ │ │ -545 if (k==0) │ │ │ │ │ -546 { │ │ │ │ │ -547 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ -548 return; │ │ │ │ │ -549 } │ │ │ │ │ -550 │ │ │ │ │ -551 if (k==1) │ │ │ │ │ -552 { │ │ │ │ │ -553 for (std::size_t i=0; i codim(size()); │ │ │ │ │ -562 │ │ │ │ │ -563 for (std::size_t i=0; i mIdx = multiindex(i); │ │ │ │ │ -570 for (unsigned int j=0; j index(size()); │ │ │ │ │ -581 │ │ │ │ │ -582 for (std::size_t i=0; i mIdx = multiindex(i); │ │ │ │ │ -587 │ │ │ │ │ -588 for (int j=dim-1; j>=0; j--) │ │ │ │ │ -589 if (mIdx[j]>0 && mIdx[j] subEntity(size()); │ │ │ │ │ -595 │ │ │ │ │ -596 if (dim==1) { │ │ │ │ │ -597 │ │ │ │ │ -598 setup1d(subEntity); │ │ │ │ │ -599 │ │ │ │ │ -600 } else if (dim==2) { │ │ │ │ │ -601 │ │ │ │ │ -602 setup2d(subEntity); │ │ │ │ │ -603 │ │ │ │ │ -604 } else if (dim==3) { │ │ │ │ │ -605 │ │ │ │ │ -606 setup3d(subEntity); │ │ │ │ │ -607 │ │ │ │ │ -608 } else │ │ │ │ │ -609 DUNE_THROW(Dune::NotImplemented, "LagrangeCubeLocalCoefficients for order " │ │ │ │ │ -<< k << " and dim == " << dim); │ │ │ │ │ -610 │ │ │ │ │ -611 for (size_t i=0; i localKeys_; │ │ │ │ │ -629 }; │ │ │ │ │ -630 │ │ │ │ │ -635 template │ │ │ │ │ -636 class LagrangeCubeLocalInterpolation │ │ │ │ │ -637 { │ │ │ │ │ -638 public: │ │ │ │ │ -639 │ │ │ │ │ -647 template │ │ │ │ │ -648 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -649 { │ │ │ │ │ -650 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ -651 constexpr auto k = LocalBasis::order(); │ │ │ │ │ -652 using D = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ -653 │ │ │ │ │ -654 typename LocalBasis::Traits::DomainType x; │ │ │ │ │ -655 │ │ │ │ │ -656 out.resize(LocalBasis::size()); │ │ │ │ │ -657 │ │ │ │ │ -658 // Specialization for zero-order case │ │ │ │ │ -659 if (k==0) │ │ │ │ │ -660 { │ │ │ │ │ -661 auto center = ReferenceElements::cube().position(0,0); │ │ │ │ │ -662 out[0] = f(center); │ │ │ │ │ -663 return; │ │ │ │ │ -664 } │ │ │ │ │ -665 │ │ │ │ │ -666 // Specialization for first-order case │ │ │ │ │ -667 if (k==1) │ │ │ │ │ -668 { │ │ │ │ │ -669 for (unsigned int i=0; i alpha(LocalBasis::multiindex(i)); │ │ │ │ │ -685 │ │ │ │ │ -686 // Generate coordinate of the i-th Lagrange point │ │ │ │ │ -687 for (unsigned int j=0; j │ │ │ │ │ -_7_0_8 class _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -709 { │ │ │ │ │ -710 public: │ │ │ │ │ -_7_1_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ -714 Impl::LagrangeCubeLocalCoefficients, │ │ │ │ │ -715 Impl::LagrangeCubeLocalInterpolation > >; │ │ │ │ │ -716 │ │ │ │ │ -_7_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -720 { │ │ │ │ │ -721 return basis_; │ │ │ │ │ -722 } │ │ │ │ │ -723 │ │ │ │ │ -_7_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -727 { │ │ │ │ │ -728 return coefficients_; │ │ │ │ │ -729 } │ │ │ │ │ -730 │ │ │ │ │ -_7_3_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -734 { │ │ │ │ │ -735 return interpolation_; │ │ │ │ │ -736 } │ │ │ │ │ -737 │ │ │ │ │ -_7_3_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ -740 { │ │ │ │ │ -741 return power(k+1,dim); │ │ │ │ │ -742 } │ │ │ │ │ -743 │ │ │ │ │ -_7_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -747 { │ │ │ │ │ -748 return GeometryTypes::cube(dim); │ │ │ │ │ -749 } │ │ │ │ │ -750 │ │ │ │ │ -751 private: │ │ │ │ │ -752 Impl::LagrangeCubeLocalBasis basis_; │ │ │ │ │ -753 Impl::LagrangeCubeLocalCoefficients coefficients_; │ │ │ │ │ -754 Impl::LagrangeCubeLocalInterpolation > interpolation_; │ │ │ │ │ -755 }; │ │ │ │ │ -756 │ │ │ │ │ -757} // namespace Dune │ │ │ │ │ -758 │ │ │ │ │ -759#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +262} │ │ │ │ │ +263 │ │ │ │ │ +264#endif // DUNE_COEFFMATRIX_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:719 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:733 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The reference element that the local finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:746 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() │ │ │ │ │ -The number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:739 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:726 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_:_:_a_d_d │ │ │ │ │ +static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res) │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_:_:_B_a_s_i_s_E_n_t_r_y │ │ │ │ │ +Field2 BasisEntry │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _>_:_:_B_a_s_i_s_E_n_t_r_y │ │ │ │ │ +FieldVector< Field2, dimRange > BasisEntry │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _>_:_:_a_d_d │ │ │ │ │ +static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res) │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_b_l_o_c_k_S_i_z_e │ │ │ │ │ +static const unsigned int blockSize │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ +SparseCoeffMatrix() │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_b_a_s_e_S_i_z_e │ │ │ │ │ +unsigned int baseSize() const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_T_h_i_s │ │ │ │ │ +SparseCoeffMatrix< Field, blockSize > This │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ +void fill(const RowMatrix &mat, bool verbose=false) │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:160 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_a_d_d_R_o_w │ │ │ │ │ +void addRow(unsigned int k, const Field &a, Vector &b) const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:223 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ +void mult(const BasisIterator &x, unsigned int numLsg, FF *y) const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ +void mult(const BasisIterator &x, Vector &y) const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:132 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ +void mult(const BasisIterator &x, Vector &y) const │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_~_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ +~SparseCoeffMatrix() │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ +A class representing the zero of a given Field. │ │ │ │ │ +DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:587 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_:_:_a_p_p_l_y │ │ │ │ │ +static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:665 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangelfecache.hh File Reference │ │ │ │ +dune-localfunctions: basisevaluator.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,52 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
lagrangelfecache.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
basisevaluator.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <tuple>
│ │ │ │ -#include <utility>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/typetraits.hh>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ +#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

struct  Dune::MonomialEvaluator< B >
 
struct  Dune::MonomialEvaluator< B >::Iterator< deriv >
 
struct  Dune::MonomialEvaluator< B >::BaseIterator< Deriv >
 
struct  Dune::StandardEvaluator< B >
 
struct  Dune::StandardEvaluator< B >::Iterator< deriv >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Typedefs

template<class D , class R , std::size_t dim, std::size_t order>
using Dune::LagrangeLocalFiniteElementCache = LocalFiniteElementVariantCache< Impl::ImplementedLagrangeFiniteElements< D, R, dim, order > >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,32 +1,34 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -lagrangelfecache.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +basisevaluator.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_I_t_e_r_a_t_o_r_<_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_B_a_s_e_I_t_e_r_a_t_o_r_<_ _D_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _B_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_I_t_e_r_a_t_o_r_<_ _d_e_r_i_v_ _> │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -TTyyppeeddeeffss │ │ │ │ │ -template │ │ │ │ │ -using  _D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e< │ │ │ │ │ - Impl::ImplementedLagrangeFiniteElements< D, R, dim, order > > │ │ │ │ │ -  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ - the given dimension and order. │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00371_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangelfecache.hh Source File │ │ │ │ +dune-localfunctions: basisevaluator.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,145 +70,279 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangelfecache.hh
│ │ │ │ +
basisevaluator.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ +
5#ifndef DUNE_BASISEVALUATOR_HH
│ │ │ │ +
6#define DUNE_BASISEVALUATOR_HH
│ │ │ │
7
│ │ │ │ -
8#include <tuple>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/geometry/type.hh>
│ │ │ │ -
12#include <dune/geometry/typeindex.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/typetraits.hh>
│ │ │ │
13
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21
│ │ │ │ -
22namespace Dune {
│ │ │ │ -
23
│ │ │ │ -
24
│ │ │ │ -
25
│ │ │ │ -
26namespace Impl {
│ │ │ │ +
14#include <dune/geometry/type.hh>
│ │ │ │ +
15
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
19
│ │ │ │ +
20namespace Dune
│ │ │ │ +
21{
│ │ │ │ +
22 /*******************************************
│ │ │ │ +
23 * Should be removed as soon as the Tensor
│ │ │ │ +
24 * classes have been revisited. See remarks
│ │ │ │ +
25 * in tensor.hh (also hold true here).
│ │ │ │ +
26 *******************************************/
│ │ │ │
27
│ │ │ │ -
28 // Provide implemented Lagrange local finite elements
│ │ │ │ -
29
│ │ │ │ -
30 template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ -
31 struct ImplementedLagrangeFiniteElements : public FixedDimLocalGeometryTypeIndex<dim>
│ │ │ │ -
32 {
│ │ │ │ -
33 using FixedDimLocalGeometryTypeIndex<dim>::index;
│ │ │ │ -
34 static auto getImplementations()
│ │ │ │ -
35 {
│ │ │ │ -
36 return std::make_tuple(
│ │ │ │ -
37 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return LagrangeSimplexLocalFiniteElement<D,R,dim,order>(); }),
│ │ │ │ -
38 std::make_pair(index(GeometryTypes::cube(dim)), []() { return LagrangeCubeLocalFiniteElement<D,R,dim,order>(); })
│ │ │ │ -
39 );
│ │ │ │ -
40 }
│ │ │ │ -
41 };
│ │ │ │ +
28
│ │ │ │ +
29 template <class B>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32 typedef B Basis;
│ │ │ │ +
33 typedef typename Basis::Field Field;
│ │ │ │ +
34 typedef typename Basis::DomainVector DomainVector;
│ │ │ │ +
35 static const int dimension = Basis::dimension;
│ │ │ │ +
36 static const int dimRange = Basis::dimRange;
│ │ │ │ +
37
│ │ │ │ +
38 typedef std::vector<Field> Container;
│ │ │ │ +
39
│ │ │ │ +
40 template< class Deriv >
│ │ │ │ +
41 struct BaseIterator;
│ │ │ │
42
│ │ │ │ -
43 template<class D, class R, std::size_t dim>
│ │ │ │ -
44 struct ImplementedLagrangeFiniteElements<D,R,dim,0> : public FixedDimLocalGeometryTypeIndex<dim>
│ │ │ │ -
45 {
│ │ │ │ -
46 using FixedDimLocalGeometryTypeIndex<dim>::index;
│ │ │ │ -
47 static auto getImplementations()
│ │ │ │ -
48 {
│ │ │ │ -
49 return std::make_tuple(
│ │ │ │ -
50 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::simplex(dim)); }),
│ │ │ │ -
51 std::make_pair(index(GeometryTypes::cube(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::cube(dim)); }),
│ │ │ │ -
52 std::make_pair(index(GeometryTypes::none(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::none(dim)); })
│ │ │ │ -
53 );
│ │ │ │ -
54 }
│ │ │ │ -
55 };
│ │ │ │ -
56
│ │ │ │ -
57 template<class D, class R>
│ │ │ │ -
58 struct ImplementedLagrangeFiniteElements<D,R,3,0> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ -
59 {
│ │ │ │ -
60 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ -
61 static auto getImplementations()
│ │ │ │ -
62 {
│ │ │ │ -
63 return std::make_tuple(
│ │ │ │ -
64 std::make_pair(index(GeometryTypes::tetrahedron), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::tetrahedron); }),
│ │ │ │ -
65 std::make_pair(index(GeometryTypes::hexahedron), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::hexahedron); }),
│ │ │ │ -
66 std::make_pair(index(GeometryTypes::prism), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::prism); }),
│ │ │ │ -
67 std::make_pair(index(GeometryTypes::pyramid), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::pyramid); })
│ │ │ │ -
68 );
│ │ │ │ -
69 }
│ │ │ │ -
70 };
│ │ │ │ -
71
│ │ │ │ -
72 template<class D, class R>
│ │ │ │ -
73 struct ImplementedLagrangeFiniteElements<D,R,3,1> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ -
74 {
│ │ │ │ -
75 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ -
76 static auto getImplementations()
│ │ │ │ -
77 {
│ │ │ │ -
78 return std::make_tuple(
│ │ │ │ -
79 std::make_pair(index(GeometryTypes::tetrahedron), []() { return LagrangeSimplexLocalFiniteElement<D,R,3,1>(); }),
│ │ │ │ -
80 std::make_pair(index(GeometryTypes::hexahedron), []() { return LagrangeCubeLocalFiniteElement<D,R,3,1>(); }),
│ │ │ │ -
81 std::make_pair(index(GeometryTypes::prism), []() { return LagrangePrismLocalFiniteElement<D,R,1>(); }),
│ │ │ │ -
82 std::make_pair(index(GeometryTypes::pyramid), []() { return LagrangePyramidLocalFiniteElement<D,R,1>(); })
│ │ │ │ -
83 );
│ │ │ │ -
84 }
│ │ │ │ -
85 };
│ │ │ │ +
43 template <unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
44 struct Iterator
│ │ │ │ +
45 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
48 };
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
│ │ │ │ +
50 unsigned int size() const
│ │ │ │ +
51 {
│ │ │ │ +
52 return size_;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 protected:
│ │ │ │ +
│ │ │ │ +
56 MonomialEvaluator(const Basis &basis,unsigned int order,unsigned int size)
│ │ │ │ +
57 : basis_(basis),
│ │ │ │ +
58 order_(order),
│ │ │ │ +
59 size_(size),
│ │ │ │ +
60 container_(0)
│ │ │ │ +
61 {}
│ │ │ │ +
│ │ │ │ +
62 template <int deriv>
│ │ │ │ +
│ │ │ │ +
63 void resize()
│ │ │ │ +
64 {
│ │ │ │ + │ │ │ │ +
66 container_.resize(totalSize);
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
69 const Basis &basis_;
│ │ │ │ +
70 unsigned int order_,size_;
│ │ │ │ + │ │ │ │ +
72 };
│ │ │ │ +
│ │ │ │ +
73
│ │ │ │ +
74
│ │ │ │ +
75 template< class B >
│ │ │ │ +
76 template< class Deriv >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
78 {
│ │ │ │ +
79 typedef Deriv Derivatives;
│ │ │ │ +
80 typedef typename Deriv::Field Field;
│ │ │ │ +
81 static const unsigned int blockSize = Deriv::size;
│ │ │ │ +
82 typedef Dune::FieldVector<Field,blockSize> Block;
│ │ │ │ +
83 static const DerivativeLayoutNS::DerivativeLayout layout = Deriv::layout;
│ │ │ │ +
84 static const unsigned int dimDomain = Deriv::dimDomain;
│ │ │ │ +
85 static const unsigned int dimRange = Deriv::dimRange;
│ │ │ │
86
│ │ │ │ -
87 template<class D, class R>
│ │ │ │ -
88 struct ImplementedLagrangeFiniteElements<D,R,3,2> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ -
89 {
│ │ │ │ -
90 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ -
91 static auto getImplementations()
│ │ │ │ -
92 {
│ │ │ │ -
93 return std::make_tuple(
│ │ │ │ -
94 std::make_pair(index(GeometryTypes::tetrahedron), []() { return LagrangeSimplexLocalFiniteElement<D,R,3,2>(); }),
│ │ │ │ -
95 std::make_pair(index(GeometryTypes::hexahedron), []() { return LagrangeCubeLocalFiniteElement<D,R,3,2>(); }),
│ │ │ │ -
96 std::make_pair(index(GeometryTypes::prism), []() { return LagrangePrismLocalFiniteElement<D,R,2>(); }),
│ │ │ │ -
97 std::make_pair(index(GeometryTypes::pyramid), []() { return LagrangePyramidLocalFiniteElement<D,R,2>(); })
│ │ │ │ -
98 );
│ │ │ │ +
87 typedef std::vector<Field> Container;
│ │ │ │ +
88 typedef typename Container::iterator CIter;
│ │ │ │ +
89
│ │ │ │ +
│ │ │ │ +
90 explicit BaseIterator ( Container &container )
│ │ │ │ +
91 : pos_( container.begin() ),
│ │ │ │ +
92 end_( container.end() )
│ │ │ │ +
93 {}
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
│ │ │ │ +
95 const Deriv &operator*() const
│ │ │ │ +
96 {
│ │ │ │ +
97 assert(!done());
│ │ │ │ +
98 return reinterpret_cast<const Deriv&>(*pos_);
│ │ │ │
99 }
│ │ │ │ -
100 };
│ │ │ │ -
101
│ │ │ │ -
102} // namespace Impl
│ │ │ │ -
103
│ │ │ │ -
104
│ │ │ │ +
│ │ │ │ +
100
│ │ │ │ +
│ │ │ │ +
101 const Deriv *operator->() const
│ │ │ │ +
102 {
│ │ │ │ +
103 return &(operator*());
│ │ │ │ +
104 }
│ │ │ │ +
│ │ │ │
105
│ │ │ │ -
117template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ - │ │ │ │ -
119
│ │ │ │ -
120
│ │ │ │ -
121
│ │ │ │ -
122} // namespace Dune
│ │ │ │ -
123
│ │ │ │ -
124
│ │ │ │ -
125
│ │ │ │ -
126
│ │ │ │ -
127#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
106 bool done () const
│ │ │ │ +
107 {
│ │ │ │ +
108 return pos_ == end_;
│ │ │ │ +
109 }
│ │ │ │ +
│ │ │ │ +
110
│ │ │ │ +
│ │ │ │ +
111 BaseIterator &operator++ ()
│ │ │ │ +
112 {
│ │ │ │ +
113 pos_ += blockSize;
│ │ │ │ +
114 return *this;
│ │ │ │ +
115 }
│ │ │ │ +
│ │ │ │ +
116
│ │ │ │ +
│ │ │ │ +
117 BaseIterator &operator+= ( unsigned int skip )
│ │ │ │ +
118 {
│ │ │ │ +
119 pos_ += skip*blockSize;
│ │ │ │ +
120 return *this;
│ │ │ │ +
121 }
│ │ │ │ +
│ │ │ │ +
122
│ │ │ │ +
123 private:
│ │ │ │ +
124 CIter pos_;
│ │ │ │ +
125 const CIter end_;
│ │ │ │ +
126 };
│ │ │ │ +
│ │ │ │ +
127
│ │ │ │ +
128 template< class B >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
130 : public MonomialEvaluator< B >
│ │ │ │ +
131 {
│ │ │ │ +
132 typedef B Basis;
│ │ │ │ +
133 typedef typename Basis::Field Field;
│ │ │ │ +
134 typedef typename Basis::DomainVector DomainVector;
│ │ │ │ +
135 typedef std::vector<Field> Container;
│ │ │ │ +
136 static const int dimension = Basis::dimension;
│ │ │ │ +
137 static const int dimRange = Basis::dimRange;
│ │ │ │ + │ │ │ │ +
139
│ │ │ │ +
140 template <unsigned int deriv>
│ │ │ │ +
│ │ │ │ +
141 struct Iterator : public Base::template Iterator<deriv>
│ │ │ │ +
142 {};
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
145 : Base(basis,basis.order(),basis.size())
│ │ │ │ +
146 {}
│ │ │ │ +
│ │ │ │ +
147 template <unsigned int deriv,class DVector>
│ │ │ │ +
│ │ │ │ +
148 typename Iterator<deriv>::All evaluate(const DVector &x)
│ │ │ │ +
149 {
│ │ │ │ +
150 Base::template resize<deriv>();
│ │ │ │ +
151 basis_.template evaluate<deriv>(x,&(container_[0]));
│ │ │ │ +
152 return typename Iterator<deriv>::All(container_);
│ │ │ │ +
153 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
155 {
│ │ │ │ +
156 Base::template resize<0>();
│ │ │ │ +
157 basis_.integrate(&(container_[0]));
│ │ │ │ +
158 return typename Iterator<0>::Integrate(container_);
│ │ │ │ +
159 }
│ │ │ │ +
│ │ │ │ +
160
│ │ │ │ +
161 protected:
│ │ │ │ +
│ │ │ │ +
162 StandardEvaluator ( const Basis &basis, unsigned int size )
│ │ │ │ +
163 : Base( basis, basis.order(), size )
│ │ │ │ +
164 {}
│ │ │ │ +
│ │ │ │ +
165
│ │ │ │ +
166 private:
│ │ │ │ + │ │ │ │ +
168 using Base::basis_;
│ │ │ │ +
169 using Base::container_;
│ │ │ │ +
170 };
│ │ │ │ +
│ │ │ │ +
171
│ │ │ │ +
172}
│ │ │ │ +
173
│ │ │ │ +
174#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ +
DerivativeLayout
Definition tensor.hh:176
│ │ │ │ +
Definition basisevaluator.hh:31
│ │ │ │ +
static const int dimRange
Definition basisevaluator.hh:36
│ │ │ │ +
B Basis
Definition basisevaluator.hh:32
│ │ │ │ +
unsigned int order_
Definition basisevaluator.hh:70
│ │ │ │ +
const Basis & basis_
Definition basisevaluator.hh:69
│ │ │ │ +
MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size)
Definition basisevaluator.hh:56
│ │ │ │ +
Basis::Field Field
Definition basisevaluator.hh:33
│ │ │ │ +
unsigned int size_
Definition basisevaluator.hh:70
│ │ │ │ +
Basis::DomainVector DomainVector
Definition basisevaluator.hh:34
│ │ │ │ +
void resize()
Definition basisevaluator.hh:63
│ │ │ │ +
Container container_
Definition basisevaluator.hh:71
│ │ │ │ +
unsigned int size() const
Definition basisevaluator.hh:50
│ │ │ │ +
std::vector< Field > Container
Definition basisevaluator.hh:38
│ │ │ │ +
MonomialEvaluator(const MonomialEvaluator &)
│ │ │ │ +
static const int dimension
Definition basisevaluator.hh:35
│ │ │ │ +
Definition basisevaluator.hh:78
│ │ │ │ +
BaseIterator(Container &container)
Definition basisevaluator.hh:90
│ │ │ │ +
const Deriv & operator*() const
Definition basisevaluator.hh:95
│ │ │ │ +
Dune::FieldVector< Field, blockSize > Block
Definition basisevaluator.hh:82
│ │ │ │ +
bool done() const
Definition basisevaluator.hh:106
│ │ │ │ +
Container::iterator CIter
Definition basisevaluator.hh:88
│ │ │ │ +
const Deriv * operator->() const
Definition basisevaluator.hh:101
│ │ │ │ +
Deriv Derivatives
Definition basisevaluator.hh:79
│ │ │ │ +
std::vector< Field > Container
Definition basisevaluator.hh:87
│ │ │ │ +
Deriv::Field Field
Definition basisevaluator.hh:80
│ │ │ │ +
Definition basisevaluator.hh:45
│ │ │ │ +
BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > > Integrate
Definition basisevaluator.hh:47
│ │ │ │ +
BaseIterator< Derivatives< Field, dimension, dimRange, deriv, DerivativeLayoutNS::derivative > > All
Definition basisevaluator.hh:46
│ │ │ │ +
Definition basisevaluator.hh:131
│ │ │ │ +
Basis::Field Field
Definition basisevaluator.hh:133
│ │ │ │ +
Basis::DomainVector DomainVector
Definition basisevaluator.hh:134
│ │ │ │ +
Iterator< deriv >::All evaluate(const DVector &x)
Definition basisevaluator.hh:148
│ │ │ │ +
MonomialEvaluator< B > Base
Definition basisevaluator.hh:138
│ │ │ │ +
StandardEvaluator(const Basis &basis)
Definition basisevaluator.hh:144
│ │ │ │ +
static const int dimRange
Definition basisevaluator.hh:137
│ │ │ │ +
std::vector< Field > Container
Definition basisevaluator.hh:135
│ │ │ │ +
Iterator< 0 >::Integrate integrate()
Definition basisevaluator.hh:154
│ │ │ │ +
B Basis
Definition basisevaluator.hh:132
│ │ │ │ +
StandardEvaluator(const Basis &basis, unsigned int size)
Definition basisevaluator.hh:162
│ │ │ │ +
static const int dimension
Definition basisevaluator.hh:136
│ │ │ │ +
Definition basisevaluator.hh:142
│ │ │ │ +
Definition tensor.hh:180
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,164 +1,323 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangelfecache.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +basisevaluator.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ +5#ifndef DUNE_BASISEVALUATOR_HH │ │ │ │ │ +6#define DUNE_BASISEVALUATOR_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21 │ │ │ │ │ -22namespace _D_u_n_e { │ │ │ │ │ -23 │ │ │ │ │ -24 │ │ │ │ │ -25 │ │ │ │ │ -26namespace Impl { │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +19 │ │ │ │ │ +20namespace _D_u_n_e │ │ │ │ │ +21{ │ │ │ │ │ +22 /******************************************* │ │ │ │ │ +23 * Should be removed as soon as the Tensor │ │ │ │ │ +24 * classes have been revisited. See remarks │ │ │ │ │ +25 * in tensor.hh (also hold true here). │ │ │ │ │ +26 *******************************************/ │ │ │ │ │ 27 │ │ │ │ │ -28 // Provide implemented Lagrange local finite elements │ │ │ │ │ -29 │ │ │ │ │ -30 template │ │ │ │ │ -31 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex │ │ │ │ │ -32 { │ │ │ │ │ -33 using FixedDimLocalGeometryTypeIndex::index; │ │ │ │ │ -34 static auto getImplementations() │ │ │ │ │ -35 { │ │ │ │ │ -36 return std::make_tuple( │ │ │ │ │ -37 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return │ │ │ │ │ -LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ -38 std::make_pair(index(GeometryTypes::cube(dim)), []() { return │ │ │ │ │ -LagrangeCubeLocalFiniteElement(); }) │ │ │ │ │ -39 ); │ │ │ │ │ -40 } │ │ │ │ │ -41 }; │ │ │ │ │ +28 │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 struct _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ +31 { │ │ │ │ │ +_3_2 typedef B _B_a_s_i_s; │ │ │ │ │ +_3_3 typedef typename Basis::Field _F_i_e_l_d; │ │ │ │ │ +_3_4 typedef typename Basis::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +_3_5 static const int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ +_3_6 static const int _d_i_m_R_a_n_g_e = Basis::dimRange; │ │ │ │ │ +37 │ │ │ │ │ +_3_8 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ +39 │ │ │ │ │ +40 template< class Deriv > │ │ │ │ │ +41 struct _B_a_s_e_I_t_e_r_a_t_o_r; │ │ │ │ │ 42 │ │ │ │ │ -43 template │ │ │ │ │ -44 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex │ │ │ │ │ +43 template │ │ │ │ │ +_4_4 struct _I_t_e_r_a_t_o_r │ │ │ │ │ 45 { │ │ │ │ │ -46 using FixedDimLocalGeometryTypeIndex::index; │ │ │ │ │ -47 static auto getImplementations() │ │ │ │ │ -48 { │ │ │ │ │ -49 return std::make_tuple( │ │ │ │ │ -50 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::simplex(dim)); }), │ │ │ │ │ -51 std::make_pair(index(GeometryTypes::cube(dim)), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::cube(dim)); }), │ │ │ │ │ -52 std::make_pair(index(GeometryTypes::none(dim)), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::none(dim)); }) │ │ │ │ │ -53 ); │ │ │ │ │ -54 } │ │ │ │ │ -55 }; │ │ │ │ │ -56 │ │ │ │ │ -57 template │ │ │ │ │ -58 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ -59 { │ │ │ │ │ -60 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ -61 static auto getImplementations() │ │ │ │ │ -62 { │ │ │ │ │ -63 return std::make_tuple( │ │ │ │ │ -64 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::tetrahedron); }), │ │ │ │ │ -65 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::hexahedron); }), │ │ │ │ │ -66 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::prism); }), │ │ │ │ │ -67 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ -P0LocalFiniteElement(GeometryTypes::pyramid); }) │ │ │ │ │ -68 ); │ │ │ │ │ -69 } │ │ │ │ │ -70 }; │ │ │ │ │ -71 │ │ │ │ │ -72 template │ │ │ │ │ -73 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ -74 { │ │ │ │ │ -75 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ -76 static auto getImplementations() │ │ │ │ │ -77 { │ │ │ │ │ -78 return std::make_tuple( │ │ │ │ │ -79 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ -LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ -80 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ -LagrangeCubeLocalFiniteElement(); }), │ │ │ │ │ -81 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ -LagrangePrismLocalFiniteElement(); }), │ │ │ │ │ -82 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ -LagrangePyramidLocalFiniteElement(); }) │ │ │ │ │ -83 ); │ │ │ │ │ -84 } │ │ │ │ │ -85 }; │ │ │ │ │ +_4_6 typedef │ │ │ │ │ +_B_a_s_e_I_t_e_r_a_t_o_r_<_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_d_i_m_R_a_n_g_e_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_d_e_r_i_v_a_t_i_v_e_> > _A_l_l; │ │ │ │ │ +_4_7 typedef _B_a_s_e_I_t_e_r_a_t_o_r_<_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ +_v_a_l_u_e_> > _I_n_t_e_g_r_a_t_e; │ │ │ │ │ +48 }; │ │ │ │ │ +49 │ │ │ │ │ +_5_0 unsigned int _s_i_z_e() const │ │ │ │ │ +51 { │ │ │ │ │ +52 return _s_i_z_e__; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 protected: │ │ │ │ │ +_5_6 _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r(const _B_a_s_i_s &basis,unsigned int order,unsigned int _s_i_z_e) │ │ │ │ │ +57 : _b_a_s_i_s__(basis), │ │ │ │ │ +58 _o_r_d_e_r__(order), │ │ │ │ │ +59 _s_i_z_e__(_s_i_z_e), │ │ │ │ │ +60 _c_o_n_t_a_i_n_e_r__(0) │ │ │ │ │ +61 {} │ │ │ │ │ +62 template │ │ │ │ │ +_6_3 void _r_e_s_i_z_e() │ │ │ │ │ +64 { │ │ │ │ │ +65 const int totalSize = │ │ │ │ │ +_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_d_i_m_R_a_n_g_e_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_>_:_: │ │ │ │ │ +_s_i_z_e*_s_i_z_e__; │ │ │ │ │ +66 _c_o_n_t_a_i_n_e_r__.resize(totalSize); │ │ │ │ │ +67 } │ │ │ │ │ +_6_8 _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r(const _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r&); │ │ │ │ │ +_6_9 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ +_7_0 unsigned int _o_r_d_e_r__,_s_i_z_e__; │ │ │ │ │ +_7_1 _C_o_n_t_a_i_n_e_r _c_o_n_t_a_i_n_e_r__; │ │ │ │ │ +72 }; │ │ │ │ │ +73 │ │ │ │ │ +74 │ │ │ │ │ +75 template< class B > │ │ │ │ │ +76 template< class Deriv > │ │ │ │ │ +_7_7 struct _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r< B >::_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ +78 { │ │ │ │ │ +_7_9 typedef Deriv _D_e_r_i_v_a_t_i_v_e_s; │ │ │ │ │ +_8_0 typedef typename Deriv::Field _F_i_e_l_d; │ │ │ │ │ +_8_1 static const unsigned int blockSize = Deriv::size; │ │ │ │ │ +_8_2 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +_8_3 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = Deriv::layout; │ │ │ │ │ +_8_4 static const unsigned int dimDomain = Deriv::dimDomain; │ │ │ │ │ +_8_5 static const unsigned int _d_i_m_R_a_n_g_e = Deriv::dimRange; │ │ │ │ │ 86 │ │ │ │ │ -87 template │ │ │ │ │ -88 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ -FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ -89 { │ │ │ │ │ -90 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ -91 static auto getImplementations() │ │ │ │ │ -92 { │ │ │ │ │ -93 return std::make_tuple( │ │ │ │ │ -94 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ -LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ -95 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ -LagrangeCubeLocalFiniteElement(); }), │ │ │ │ │ -96 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ -LagrangePrismLocalFiniteElement(); }), │ │ │ │ │ -97 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ -LagrangePyramidLocalFiniteElement(); }) │ │ │ │ │ -98 ); │ │ │ │ │ +_8_7 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ +_8_8 typedef typename Container::iterator _C_I_t_e_r; │ │ │ │ │ +89 │ │ │ │ │ +_9_0 explicit _B_a_s_e_I_t_e_r_a_t_o_r ( _C_o_n_t_a_i_n_e_r &container ) │ │ │ │ │ +91 : pos_( container.begin() ), │ │ │ │ │ +92 end_( container.end() ) │ │ │ │ │ +93 {} │ │ │ │ │ +94 │ │ │ │ │ +_9_5 const Deriv &_o_p_e_r_a_t_o_r_*() const │ │ │ │ │ +96 { │ │ │ │ │ +97 assert(!done()); │ │ │ │ │ +98 return reinterpret_cast(*pos_); │ │ │ │ │ 99 } │ │ │ │ │ -100 }; │ │ │ │ │ -101 │ │ │ │ │ -102} // namespace Impl │ │ │ │ │ -103 │ │ │ │ │ -104 │ │ │ │ │ +100 │ │ │ │ │ +_1_0_1 const Deriv *_o_p_e_r_a_t_o_r_-_>() const │ │ │ │ │ +102 { │ │ │ │ │ +103 return &(_o_p_e_r_a_t_o_r_*()); │ │ │ │ │ +104 } │ │ │ │ │ 105 │ │ │ │ │ -117template │ │ │ │ │ -_1_1_8using _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_I_m_p_l_:_: │ │ │ │ │ -_I_m_p_l_e_m_e_n_t_e_d_L_a_g_r_a_n_g_e_F_i_n_i_t_e_E_l_e_m_e_n_t_s_<_D_,_R_,_d_i_m_,_o_r_d_e_r_>>; │ │ │ │ │ -119 │ │ │ │ │ -120 │ │ │ │ │ -121 │ │ │ │ │ -122} // namespace Dune │ │ │ │ │ -123 │ │ │ │ │ -124 │ │ │ │ │ -125 │ │ │ │ │ -126 │ │ │ │ │ -127#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ -_p_0_._h_h │ │ │ │ │ +_1_0_6 bool _d_o_n_e () const │ │ │ │ │ +107 { │ │ │ │ │ +108 return pos_ == end_; │ │ │ │ │ +109 } │ │ │ │ │ +110 │ │ │ │ │ +_1_1_1 _B_a_s_e_I_t_e_r_a_t_o_r &operator++ () │ │ │ │ │ +112 { │ │ │ │ │ +113 pos_ += blockSize; │ │ │ │ │ +114 return *this; │ │ │ │ │ +115 } │ │ │ │ │ +116 │ │ │ │ │ +_1_1_7 _B_a_s_e_I_t_e_r_a_t_o_r &operator+= ( unsigned int skip ) │ │ │ │ │ +118 { │ │ │ │ │ +119 pos_ += skip*blockSize; │ │ │ │ │ +120 return *this; │ │ │ │ │ +121 } │ │ │ │ │ +122 │ │ │ │ │ +123 private: │ │ │ │ │ +124 CIter pos_; │ │ │ │ │ +125 const CIter end_; │ │ │ │ │ +126 }; │ │ │ │ │ +127 │ │ │ │ │ +128 template< class B > │ │ │ │ │ +_1_2_9 struct _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +130 : public _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r< B > │ │ │ │ │ +131 { │ │ │ │ │ +_1_3_2 typedef B _B_a_s_i_s; │ │ │ │ │ +_1_3_3 typedef typename Basis::Field _F_i_e_l_d; │ │ │ │ │ +_1_3_4 typedef typename Basis::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ +_1_3_5 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ +_1_3_6 static const int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ +_1_3_7 static const int _d_i_m_R_a_n_g_e = Basis::dimRange; │ │ │ │ │ +_1_3_8 typedef _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_B_> _B_a_s_e; │ │ │ │ │ +139 │ │ │ │ │ +140 template │ │ │ │ │ +_1_4_1 struct _I_t_e_r_a_t_o_r : public Base::template _I_t_e_r_a_t_o_r │ │ │ │ │ +142 {}; │ │ │ │ │ +143 │ │ │ │ │ +_1_4_4 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r(const _B_a_s_i_s &basis) │ │ │ │ │ +145 : _B_a_s_e(basis,basis.order(),basis._s_i_z_e()) │ │ │ │ │ +146 {} │ │ │ │ │ +147 template │ │ │ │ │ +_1_4_8 typename _I_t_e_r_a_t_o_r_<_d_e_r_i_v_>_:_:_A_l_l _e_v_a_l_u_a_t_e(const DVector &x) │ │ │ │ │ +149 { │ │ │ │ │ +150 Base::template resize(); │ │ │ │ │ +151 basis_.template evaluate(x,&(container_[0])); │ │ │ │ │ +152 return typename _I_t_e_r_a_t_o_r_<_d_e_r_i_v_>_:_:_A_l_l(container_); │ │ │ │ │ +153 } │ │ │ │ │ +_1_5_4 typename _I_t_e_r_a_t_o_r_<_0_>_:_:_I_n_t_e_g_r_a_t_e _i_n_t_e_g_r_a_t_e() │ │ │ │ │ +155 { │ │ │ │ │ +156 Base::template resize<0>(); │ │ │ │ │ +157 basis_.integrate(&(container_[0])); │ │ │ │ │ +158 return typename _I_t_e_r_a_t_o_r_<_0_>_:_:_I_n_t_e_g_r_a_t_e(container_); │ │ │ │ │ +159 } │ │ │ │ │ +160 │ │ │ │ │ +161 protected: │ │ │ │ │ +_1_6_2 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r ( const _B_a_s_i_s &basis, unsigned int _s_i_z_e ) │ │ │ │ │ +163 : _B_a_s_e( basis, basis.order(), _s_i_z_e ) │ │ │ │ │ +164 {} │ │ │ │ │ +165 │ │ │ │ │ +166 private: │ │ │ │ │ +167 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r(const _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r&); │ │ │ │ │ +168 using _B_a_s_e_:_:_b_a_s_i_s__; │ │ │ │ │ +169 using _B_a_s_e_:_:_c_o_n_t_a_i_n_e_r__; │ │ │ │ │ +170 }; │ │ │ │ │ +171 │ │ │ │ │ +172} │ │ │ │ │ +173 │ │ │ │ │ +174#endif │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ +_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +_t_e_n_s_o_r_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -A cache storing a compile time selection of local finite element │ │ │ │ │ -implementations. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ +Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ +DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t │ │ │ │ │ +DerivativeLayout │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const int dimRange │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_i_s │ │ │ │ │ +B Basis │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_o_r_d_e_r__ │ │ │ │ │ +unsigned int order_ │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_b_a_s_i_s__ │ │ │ │ │ +const Basis & basis_ │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ +MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size) │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ +Basis::Field Field │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_s_i_z_e__ │ │ │ │ │ +unsigned int size_ │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +Basis::DomainVector DomainVector │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ │ +void resize() │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_c_o_n_t_a_i_n_e_r__ │ │ │ │ │ +Container container_ │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ +std::vector< Field > Container │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ +MonomialEvaluator(const MonomialEvaluator &) │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ +BaseIterator(Container &container) │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ +const Deriv & operator*() const │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_B_l_o_c_k │ │ │ │ │ +Dune::FieldVector< Field, blockSize > Block │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:82 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_d_o_n_e │ │ │ │ │ +bool done() const │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:106 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_C_I_t_e_r │ │ │ │ │ +Container::iterator CIter │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_-_> │ │ │ │ │ +const Deriv * operator->() const │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:101 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +Deriv Derivatives │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ +std::vector< Field > Container │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ +Deriv::Field Field │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r_:_:_I_n_t_e_g_r_a_t_e │ │ │ │ │ +BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > │ │ │ │ │ +> Integrate │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r_:_:_A_l_l │ │ │ │ │ +BaseIterator< Derivatives< Field, dimension, dimRange, deriv, │ │ │ │ │ +DerivativeLayoutNS::derivative > > All │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ +Basis::Field Field │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ +Basis::DomainVector DomainVector │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:134 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +Iterator< deriv >::All evaluate(const DVector &x) │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:148 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e │ │ │ │ │ +MonomialEvaluator< B > Base │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:138 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +StandardEvaluator(const Basis &basis) │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:144 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const int dimRange │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:137 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ +std::vector< Field > Container │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:135 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ +Iterator< 0 >::Integrate integrate() │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:154 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_B_a_s_i_s │ │ │ │ │ +B Basis │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:132 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +StandardEvaluator(const Basis &basis, unsigned int size) │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:162 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:136 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:142 │ │ │ │ │ +_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ +DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangeprism.hh File Reference │ │ │ │ +dune-localfunctions: dglocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangeprism.hh File Reference
│ │ │ │ +
dglocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LagrangePrismLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order. More...
class  Dune::DGLocalCoefficients
 A class providing local coefficients for dg spaces. More...
 
struct  Dune::DGLocalCoefficientsFactory< BasisFactory >
 A factory class for the dg local coefficients. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangeprism.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +dglocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _k_ _> │ │ │ │ │ -  Lagrange finite element for 3d prisms with arbitrary compile-time │ │ │ │ │ - polynomial order. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  A class providing local coefficients for dg spaces. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _B_a_s_i_s_F_a_c_t_o_r_y_ _> │ │ │ │ │ +  A factory class for the dg local coefficients. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00374_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangeprism.hh Source File │ │ │ │ +dune-localfunctions: dglocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,688 +70,117 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangeprism.hh
│ │ │ │ +
dglocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ +
5#ifndef DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <vector>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13#include <dune/common/math.hh>
│ │ │ │ -
14
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune { namespace Impl
│ │ │ │ -
22{
│ │ │ │ -
32 template<class D, class R, unsigned int k>
│ │ │ │ -
33 class LagrangePrismLocalBasis
│ │ │ │ -
34 {
│ │ │ │ -
35 static constexpr std::size_t dim = 3;
│ │ │ │ -
36 public:
│ │ │ │ -
37 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ -
38
│ │ │ │ -
41 static constexpr unsigned int size ()
│ │ │ │ -
42 {
│ │ │ │ -
43 return binomial(k+2,2u) * (k+1);
│ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
16 // DGLocalCoefficients
│ │ │ │ +
17 // -------------------
│ │ │ │ +
18
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ + │ │ │ │ +
25
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ +
28 DGLocalCoefficients ( const unsigned int n )
│ │ │ │ +
29 : localKey_( n )
│ │ │ │ +
30 {
│ │ │ │ +
31 for( unsigned i = 0; i < n; ++i )
│ │ │ │ +
32 localKey_[ i ] = LocalKey( 0, 0, i );
│ │ │ │ +
33 }
│ │ │ │ +
│ │ │ │ +
34
│ │ │ │ +
│ │ │ │ +
35 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ +
36 {
│ │ │ │ +
37 assert( i < size() );
│ │ │ │ +
38 return localKey_[ i ];
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
41 unsigned int size () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return localKey_.size();
│ │ │ │
44 }
│ │ │ │ +
│ │ │ │
45
│ │ │ │ -
47 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ -
48 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
49 {
│ │ │ │ -
50 out.resize(size());
│ │ │ │ +
46 private:
│ │ │ │ +
47 std::vector< LocalKey > localKey_;
│ │ │ │ +
48 };
│ │ │ │ +
│ │ │ │ +
49
│ │ │ │ +
50
│ │ │ │
51
│ │ │ │ -
52 // Specialization for zero-order case
│ │ │ │ -
53 if (k==0)
│ │ │ │ -
54 {
│ │ │ │ -
55 out[0] = 1;
│ │ │ │ -
56 return;
│ │ │ │ -
57 }
│ │ │ │ -
58
│ │ │ │ -
59 if (k==1)
│ │ │ │ -
60 {
│ │ │ │ -
61 out[0] = (1.0-in[0]-in[1])*(1.0-in[2]);
│ │ │ │ -
62 out[1] = in[0]*(1-in[2]);
│ │ │ │ -
63 out[2] = in[1]*(1-in[2]);
│ │ │ │ -
64 out[3] = in[2]*(1.0-in[0]-in[1]);
│ │ │ │ -
65 out[4] = in[0]*in[2];
│ │ │ │ -
66 out[5] = in[1]*in[2];
│ │ │ │ -
67
│ │ │ │ -
68 return;
│ │ │ │ -
69 }
│ │ │ │ -
70
│ │ │ │ -
71 if (k==2)
│ │ │ │ -
72 {
│ │ │ │ -
73 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ -
74 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ -
75 segmentShapeFunction[1] = in[2] * (4 - 4*in[2]);
│ │ │ │ -
76 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ +
52 // DGLocalCoefficientsFactory
│ │ │ │ +
53 // --------------------------
│ │ │ │ +
57 template< class BasisFactory >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
59 {
│ │ │ │ +
60 static const unsigned int dimension = BasisFactory::dimension;
│ │ │ │ +
61 typedef typename BasisFactory::Key Key;
│ │ │ │ + │ │ │ │ +
63
│ │ │ │ +
64 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
65 static Object *create ( const Key &key )
│ │ │ │ +
66 {
│ │ │ │ +
67 const typename BasisFactory::Object *basis
│ │ │ │ +
68 = BasisFactory::template create< geometryId >( key );
│ │ │ │ +
69 Object *coefficients = new Object( basis->size() );
│ │ │ │ +
70 BasisFactory::release( basis );
│ │ │ │ +
71 return coefficients;
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │ +
73 static void release( Object *object ) { delete object; }
│ │ │ │ +
74 };
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76}
│ │ │ │
77
│ │ │ │ -
78 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ -
79 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ -
80 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ -
81 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ -
82 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ -
83 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ -
84 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ -
85
│ │ │ │ -
86 // lower triangle:
│ │ │ │ -
87 out[0] = triangleShapeFunction[0] * segmentShapeFunction[0];
│ │ │ │ -
88 out[1] = triangleShapeFunction[1] * segmentShapeFunction[0];
│ │ │ │ -
89 out[2] = triangleShapeFunction[2] * segmentShapeFunction[0];
│ │ │ │ -
90
│ │ │ │ -
91 //upper triangle
│ │ │ │ -
92 out[3] = triangleShapeFunction[0] * segmentShapeFunction[2];
│ │ │ │ -
93 out[4] = triangleShapeFunction[1] * segmentShapeFunction[2];
│ │ │ │ -
94 out[5] = triangleShapeFunction[2] * segmentShapeFunction[2];
│ │ │ │ -
95
│ │ │ │ -
96 // vertical edges
│ │ │ │ -
97 out[6] = triangleShapeFunction[0] * segmentShapeFunction[1];
│ │ │ │ -
98 out[7] = triangleShapeFunction[1] * segmentShapeFunction[1];
│ │ │ │ -
99 out[8] = triangleShapeFunction[2] * segmentShapeFunction[1];
│ │ │ │ -
100
│ │ │ │ -
101 // lower triangle edges
│ │ │ │ -
102 out[9] = triangleShapeFunction[3] * segmentShapeFunction[0];
│ │ │ │ -
103 out[10] = triangleShapeFunction[4] * segmentShapeFunction[0];
│ │ │ │ -
104 out[11] = triangleShapeFunction[5] * segmentShapeFunction[0];
│ │ │ │ -
105
│ │ │ │ -
106 // upper triangle edges
│ │ │ │ -
107 out[12] = triangleShapeFunction[3] * segmentShapeFunction[2];
│ │ │ │ -
108 out[13] = triangleShapeFunction[4] * segmentShapeFunction[2];
│ │ │ │ -
109 out[14] = triangleShapeFunction[5] * segmentShapeFunction[2];
│ │ │ │ -
110
│ │ │ │ -
111 // quadrilateral sides
│ │ │ │ -
112 out[15] = triangleShapeFunction[3] * segmentShapeFunction[1];
│ │ │ │ -
113 out[16] = triangleShapeFunction[4] * segmentShapeFunction[1];
│ │ │ │ -
114 out[17] = triangleShapeFunction[5] * segmentShapeFunction[1];
│ │ │ │ -
115
│ │ │ │ -
116 return;
│ │ │ │ -
117 }
│ │ │ │ -
118
│ │ │ │ -
119 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateFunction for order " << k);
│ │ │ │ -
120 }
│ │ │ │ -
121
│ │ │ │ -
127 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ -
128 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
129 {
│ │ │ │ -
130 out.resize(size());
│ │ │ │ -
131
│ │ │ │ -
132 // Specialization for k==0
│ │ │ │ -
133 if (k==0)
│ │ │ │ -
134 {
│ │ │ │ -
135 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ -
136 return;
│ │ │ │ -
137 }
│ │ │ │ -
138
│ │ │ │ -
139 if (k==1)
│ │ │ │ -
140 {
│ │ │ │ -
141 out[0][0] = {in[2]-1, in[2]-1, in[0]+in[1]-1};
│ │ │ │ -
142 out[1][0] = {1-in[2], 0, -in[0]};
│ │ │ │ -
143 out[2][0] = { 0, 1-in[2], -in[1]};
│ │ │ │ -
144 out[3][0] = { -in[2], -in[2], 1-in[0]-in[1]};
│ │ │ │ -
145 out[4][0] = { in[2], 0, in[0]};
│ │ │ │ -
146 out[5][0] = { 0, in[2], in[1]};
│ │ │ │ -
147
│ │ │ │ -
148 return;
│ │ │ │ -
149 }
│ │ │ │ -
150
│ │ │ │ -
151 if (k==2)
│ │ │ │ -
152 {
│ │ │ │ -
153 // Second-order shape functions on a triangle, and the first derivatives
│ │ │ │ -
154 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ -
155 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ -
156 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ -
157 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ -
158 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ -
159 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ -
160 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ -
161
│ │ │ │ -
162 std::array<std::array<R,2>,6> triangleShapeFunctionDer;
│ │ │ │ -
163 triangleShapeFunctionDer[0] = {-3 + 4*(in[0] + in[1]), -3 + 4*(in[0] + in[1])};
│ │ │ │ -
164 triangleShapeFunctionDer[1] = { -1 + 4*in[0], 0};
│ │ │ │ -
165 triangleShapeFunctionDer[2] = { 0, -1 + 4*in[1]};
│ │ │ │ -
166 triangleShapeFunctionDer[3] = { 4 - 8*in[0] - 4*in[1], -4*in[0]};
│ │ │ │ -
167 triangleShapeFunctionDer[4] = { -4*in[1], 4 - 4*in[0] - 8*in[1]};
│ │ │ │ -
168 triangleShapeFunctionDer[5] = { 4*in[1], 4*in[0]};
│ │ │ │ -
169
│ │ │ │ -
170 // Second-order shape functions on a line, and the first derivatives
│ │ │ │ -
171 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ -
172 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ -
173 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ -
174 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ -
175
│ │ │ │ -
176 FieldVector<R,k+1> segmentShapeFunctionDer;
│ │ │ │ -
177 segmentShapeFunctionDer[0] = -3 + 4*in[2];
│ │ │ │ -
178 segmentShapeFunctionDer[1] = 4 - 8*in[2];
│ │ │ │ -
179 segmentShapeFunctionDer[2] = -1 + 4*in[2];
│ │ │ │ -
180
│ │ │ │ -
181 // lower triangle:
│ │ │ │ -
182 out[0][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[0];
│ │ │ │ -
183 out[0][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[0];
│ │ │ │ -
184 out[0][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
│ │ │ │ -
185
│ │ │ │ -
186 out[1][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[0];
│ │ │ │ -
187 out[1][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[0];
│ │ │ │ -
188 out[1][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
│ │ │ │ -
189
│ │ │ │ -
190 out[2][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[0];
│ │ │ │ -
191 out[2][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[0];
│ │ │ │ -
192 out[2][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
│ │ │ │ -
193
│ │ │ │ -
194 //upper triangle
│ │ │ │ -
195 out[3][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[2];
│ │ │ │ -
196 out[3][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[2];
│ │ │ │ -
197 out[3][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
│ │ │ │ -
198
│ │ │ │ -
199 out[4][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[2];
│ │ │ │ -
200 out[4][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[2];
│ │ │ │ -
201 out[4][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
│ │ │ │ -
202
│ │ │ │ -
203 out[5][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[2];
│ │ │ │ -
204 out[5][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[2];
│ │ │ │ -
205 out[5][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
│ │ │ │ -
206
│ │ │ │ -
207 // vertical edges
│ │ │ │ -
208 out[6][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[1];
│ │ │ │ -
209 out[6][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[1];
│ │ │ │ -
210 out[6][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
│ │ │ │ -
211
│ │ │ │ -
212 out[7][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[1];
│ │ │ │ -
213 out[7][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[1];
│ │ │ │ -
214 out[7][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
│ │ │ │ -
215
│ │ │ │ -
216 out[8][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[1];
│ │ │ │ -
217 out[8][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[1];
│ │ │ │ -
218 out[8][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
│ │ │ │ -
219
│ │ │ │ -
220 // lower triangle edges
│ │ │ │ -
221 out[9][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[0];
│ │ │ │ -
222 out[9][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[0];
│ │ │ │ -
223 out[9][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
│ │ │ │ -
224
│ │ │ │ -
225 out[10][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[0];
│ │ │ │ -
226 out[10][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[0];
│ │ │ │ -
227 out[10][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
│ │ │ │ -
228
│ │ │ │ -
229 out[11][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[0];
│ │ │ │ -
230 out[11][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[0];
│ │ │ │ -
231 out[11][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
│ │ │ │ -
232
│ │ │ │ -
233 // upper triangle edges
│ │ │ │ -
234 out[12][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[2];
│ │ │ │ -
235 out[12][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[2];
│ │ │ │ -
236 out[12][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
│ │ │ │ -
237
│ │ │ │ -
238 out[13][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[2];
│ │ │ │ -
239 out[13][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[2];
│ │ │ │ -
240 out[13][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
│ │ │ │ -
241
│ │ │ │ -
242 out[14][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[2];
│ │ │ │ -
243 out[14][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[2];
│ │ │ │ -
244 out[14][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
│ │ │ │ -
245
│ │ │ │ -
246 // quadrilateral sides
│ │ │ │ -
247 out[15][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[1];
│ │ │ │ -
248 out[15][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[1];
│ │ │ │ -
249 out[15][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
│ │ │ │ -
250
│ │ │ │ -
251 out[16][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[1];
│ │ │ │ -
252 out[16][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[1];
│ │ │ │ -
253 out[16][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
│ │ │ │ -
254
│ │ │ │ -
255 out[17][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[1];
│ │ │ │ -
256 out[17][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[1];
│ │ │ │ -
257 out[17][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
│ │ │ │ -
258
│ │ │ │ -
259 return;
│ │ │ │ -
260 }
│ │ │ │ -
261
│ │ │ │ -
262 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateJacobian for order " << k);
│ │ │ │ -
263 }
│ │ │ │ -
264
│ │ │ │ -
271 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ -
272 const typename Traits::DomainType& in,
│ │ │ │ -
273 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
274 {
│ │ │ │ -
275 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
276
│ │ │ │ -
277 out.resize(size());
│ │ │ │ -
278
│ │ │ │ -
279 if (totalOrder == 0)
│ │ │ │ -
280 {
│ │ │ │ -
281 evaluateFunction(in, out);
│ │ │ │ -
282 return;
│ │ │ │ -
283 }
│ │ │ │ -
284
│ │ │ │ -
285 // Specialization for zero-order finite elements
│ │ │ │ -
286 if (k==0)
│ │ │ │ -
287 {
│ │ │ │ -
288 out[0] = 0;
│ │ │ │ -
289 return;
│ │ │ │ -
290 }
│ │ │ │ -
291
│ │ │ │ -
292 // Specialization for first-order finite elements
│ │ │ │ -
293 if (k==1)
│ │ │ │ -
294 {
│ │ │ │ -
295 if (totalOrder == 1)
│ │ │ │ -
296 {
│ │ │ │ -
297 auto direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
298
│ │ │ │ -
299 switch (direction) {
│ │ │ │ -
300 case 0:
│ │ │ │ -
301 out[0] = in[2]-1;
│ │ │ │ -
302 out[1] = 1-in[2];
│ │ │ │ -
303 out[2] = 0;
│ │ │ │ -
304 out[3] = -in[2];
│ │ │ │ -
305 out[4] = in[2];
│ │ │ │ -
306 out[5] = 0;
│ │ │ │ -
307 break;
│ │ │ │ -
308 case 1:
│ │ │ │ -
309 out[0] = in[2]-1;
│ │ │ │ -
310 out[1] = 0;
│ │ │ │ -
311 out[2] = 1-in[2];
│ │ │ │ -
312 out[3] = -in[2];
│ │ │ │ -
313 out[4] = 0;
│ │ │ │ -
314 out[5] = in[2];
│ │ │ │ -
315 break;
│ │ │ │ -
316 case 2:
│ │ │ │ -
317 out[0] = in[0]+in[1]-1;
│ │ │ │ -
318 out[1] = -in[0];
│ │ │ │ -
319 out[2] = -in[1];
│ │ │ │ -
320 out[3] = 1-in[0]-in[1];
│ │ │ │ -
321 out[4] = in[0];
│ │ │ │ -
322 out[5] = in[1];
│ │ │ │ -
323 break;
│ │ │ │ -
324 default:
│ │ │ │ -
325 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
326 }
│ │ │ │ -
327 } else if (totalOrder == 2) {
│ │ │ │ -
328 out.resize(size());
│ │ │ │ -
329 if (order[0] == 1 && order[2] == 1) {
│ │ │ │ -
330 out[0] = 1;
│ │ │ │ -
331 out[1] =-1;
│ │ │ │ -
332 out[2] = 0;
│ │ │ │ -
333 out[3] =-1;
│ │ │ │ -
334 out[4] = 1;
│ │ │ │ -
335 out[5] = 0;
│ │ │ │ -
336 } else if (order[1] == 1 && order[2] == 1) {
│ │ │ │ -
337 out[0] = 1;
│ │ │ │ -
338 out[1] = 0;
│ │ │ │ -
339 out[2] =-1;
│ │ │ │ -
340 out[3] =-1;
│ │ │ │ -
341 out[4] = 0;
│ │ │ │ -
342 out[5] = 1;
│ │ │ │ -
343 } else {
│ │ │ │ -
344 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
345 out[i] = 0;
│ │ │ │ -
346 }
│ │ │ │ -
347 } else {
│ │ │ │ -
348 out.resize(size());
│ │ │ │ -
349 std::fill(out.begin(), out.end(), 0.0);
│ │ │ │ -
350 }
│ │ │ │ -
351
│ │ │ │ -
352 return;
│ │ │ │ -
353 }
│ │ │ │ -
354
│ │ │ │ -
355 // Specialization for second-order finite elements
│ │ │ │ -
356 if (k==2)
│ │ │ │ -
357 {
│ │ │ │ -
358 if (totalOrder == 1)
│ │ │ │ -
359 {
│ │ │ │ -
360 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
361 switch (direction)
│ │ │ │ -
362 {
│ │ │ │ -
363 case 0:
│ │ │ │ -
364 {
│ │ │ │ -
365 FieldVector<R,6> triangleShapeFunctionDerX;
│ │ │ │ -
366 triangleShapeFunctionDerX[0] = -3 + 4*(in[0] + in[1]);
│ │ │ │ -
367 triangleShapeFunctionDerX[1] = -1 + 4* in[0];
│ │ │ │ -
368 triangleShapeFunctionDerX[2] = 0;
│ │ │ │ -
369 triangleShapeFunctionDerX[3] = 4 - 8* in[0] - 4*in[1];
│ │ │ │ -
370 triangleShapeFunctionDerX[4] = -4*in[1];
│ │ │ │ -
371 triangleShapeFunctionDerX[5] = 4*in[1];
│ │ │ │ -
372
│ │ │ │ -
373 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ -
374 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ -
375 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ -
376 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ -
377
│ │ │ │ -
378 out[0] = triangleShapeFunctionDerX[0] * segmentShapeFunction[0];
│ │ │ │ -
379 out[1] = triangleShapeFunctionDerX[1] * segmentShapeFunction[0];
│ │ │ │ -
380 out[2] = triangleShapeFunctionDerX[2] * segmentShapeFunction[0];
│ │ │ │ -
381 out[3] = triangleShapeFunctionDerX[0] * segmentShapeFunction[2];
│ │ │ │ -
382 out[4] = triangleShapeFunctionDerX[1] * segmentShapeFunction[2];
│ │ │ │ -
383 out[5] = triangleShapeFunctionDerX[2] * segmentShapeFunction[2];
│ │ │ │ -
384 out[6] = triangleShapeFunctionDerX[0] * segmentShapeFunction[1];
│ │ │ │ -
385 out[7] = triangleShapeFunctionDerX[1] * segmentShapeFunction[1];
│ │ │ │ -
386 out[8] = triangleShapeFunctionDerX[2] * segmentShapeFunction[1];
│ │ │ │ -
387 out[9] = triangleShapeFunctionDerX[3] * segmentShapeFunction[0];
│ │ │ │ -
388 out[10] = triangleShapeFunctionDerX[4] * segmentShapeFunction[0];
│ │ │ │ -
389 out[11] = triangleShapeFunctionDerX[5] * segmentShapeFunction[0];
│ │ │ │ -
390 out[12] = triangleShapeFunctionDerX[3] * segmentShapeFunction[2];
│ │ │ │ -
391 out[13] = triangleShapeFunctionDerX[4] * segmentShapeFunction[2];
│ │ │ │ -
392 out[14] = triangleShapeFunctionDerX[5] * segmentShapeFunction[2];
│ │ │ │ -
393 out[15] = triangleShapeFunctionDerX[3] * segmentShapeFunction[1];
│ │ │ │ -
394 out[16] = triangleShapeFunctionDerX[4] * segmentShapeFunction[1];
│ │ │ │ -
395 out[17] = triangleShapeFunctionDerX[5] * segmentShapeFunction[1];
│ │ │ │ -
396 break;
│ │ │ │ -
397 }
│ │ │ │ -
398 case 1:
│ │ │ │ -
399 {
│ │ │ │ -
400 FieldVector<R,6> triangleShapeFunctionDerY;
│ │ │ │ -
401 triangleShapeFunctionDerY[0] = -3 + 4*(in[0] + in[1]);
│ │ │ │ -
402 triangleShapeFunctionDerY[1] = 0;
│ │ │ │ -
403 triangleShapeFunctionDerY[2] = -1 + 4* in[1];
│ │ │ │ -
404 triangleShapeFunctionDerY[3] = -4* in[0];
│ │ │ │ -
405 triangleShapeFunctionDerY[4] = 4 - 4* in[0] - 8*in[1];
│ │ │ │ -
406 triangleShapeFunctionDerY[5] = 4* in[0];
│ │ │ │ -
407
│ │ │ │ -
408 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ -
409 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ -
410 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ -
411 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ -
412
│ │ │ │ -
413 out[0] = triangleShapeFunctionDerY[0] * segmentShapeFunction[0];
│ │ │ │ -
414 out[1] = triangleShapeFunctionDerY[1] * segmentShapeFunction[0];
│ │ │ │ -
415 out[2] = triangleShapeFunctionDerY[2] * segmentShapeFunction[0];
│ │ │ │ -
416 out[3] = triangleShapeFunctionDerY[0] * segmentShapeFunction[2];
│ │ │ │ -
417 out[4] = triangleShapeFunctionDerY[1] * segmentShapeFunction[2];
│ │ │ │ -
418 out[5] = triangleShapeFunctionDerY[2] * segmentShapeFunction[2];
│ │ │ │ -
419 out[6] = triangleShapeFunctionDerY[0] * segmentShapeFunction[1];
│ │ │ │ -
420 out[7] = triangleShapeFunctionDerY[1] * segmentShapeFunction[1];
│ │ │ │ -
421 out[8] = triangleShapeFunctionDerY[2] * segmentShapeFunction[1];
│ │ │ │ -
422 out[9] = triangleShapeFunctionDerY[3] * segmentShapeFunction[0];
│ │ │ │ -
423 out[10] = triangleShapeFunctionDerY[4] * segmentShapeFunction[0];
│ │ │ │ -
424 out[11] = triangleShapeFunctionDerY[5] * segmentShapeFunction[0];
│ │ │ │ -
425 out[12] = triangleShapeFunctionDerY[3] * segmentShapeFunction[2];
│ │ │ │ -
426 out[13] = triangleShapeFunctionDerY[4] * segmentShapeFunction[2];
│ │ │ │ -
427 out[14] = triangleShapeFunctionDerY[5] * segmentShapeFunction[2];
│ │ │ │ -
428 out[15] = triangleShapeFunctionDerY[3] * segmentShapeFunction[1];
│ │ │ │ -
429 out[16] = triangleShapeFunctionDerY[4] * segmentShapeFunction[1];
│ │ │ │ -
430 out[17] = triangleShapeFunctionDerY[5] * segmentShapeFunction[1];
│ │ │ │ -
431 break;
│ │ │ │ -
432 }
│ │ │ │ -
433 case 2:
│ │ │ │ -
434 {
│ │ │ │ -
435 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ -
436 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ -
437 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ -
438 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ -
439 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ -
440 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ -
441 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ -
442
│ │ │ │ -
443 FieldVector<R,k+1> segmentShapeFunctionDer;
│ │ │ │ -
444 segmentShapeFunctionDer[0] = -3 + 4*in[2];
│ │ │ │ -
445 segmentShapeFunctionDer[1] = 4 - 8*in[2];
│ │ │ │ -
446 segmentShapeFunctionDer[2] = -1 + 4*in[2];
│ │ │ │ -
447
│ │ │ │ -
448 out[0] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
│ │ │ │ -
449 out[1] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
│ │ │ │ -
450 out[2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
│ │ │ │ -
451 out[3] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
│ │ │ │ -
452 out[4] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
│ │ │ │ -
453 out[5] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
│ │ │ │ -
454 out[6] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
│ │ │ │ -
455 out[7] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
│ │ │ │ -
456 out[8] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
│ │ │ │ -
457 out[9] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
│ │ │ │ -
458 out[10] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
│ │ │ │ -
459 out[11] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
│ │ │ │ -
460 out[12] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
│ │ │ │ -
461 out[13] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
│ │ │ │ -
462 out[14] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
│ │ │ │ -
463 out[15] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
│ │ │ │ -
464 out[16] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
│ │ │ │ -
465 out[17] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
│ │ │ │ -
466 break;
│ │ │ │ -
467 }
│ │ │ │ -
468 default:
│ │ │ │ -
469 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
470 }
│ │ │ │ -
471 } else {
│ │ │ │ -
472 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
473 }
│ │ │ │ -
474
│ │ │ │ -
475 return;
│ │ │ │ -
476 }
│ │ │ │ -
477
│ │ │ │ -
478 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::partial not implemented for order " << k);
│ │ │ │ -
479 }
│ │ │ │ -
480
│ │ │ │ -
482 static constexpr unsigned int order ()
│ │ │ │ -
483 {
│ │ │ │ -
484 return k;
│ │ │ │ -
485 }
│ │ │ │ -
486 };
│ │ │ │ -
487
│ │ │ │ -
492 template<unsigned int k>
│ │ │ │ -
493 class LagrangePrismLocalCoefficients
│ │ │ │ -
494 {
│ │ │ │ -
495 public:
│ │ │ │ -
497 LagrangePrismLocalCoefficients ()
│ │ │ │ -
498 : localKeys_(size())
│ │ │ │ -
499 {
│ │ │ │ -
500 if (k==0)
│ │ │ │ -
501 {
│ │ │ │ -
502 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ -
503 return;
│ │ │ │ -
504 }
│ │ │ │ -
505
│ │ │ │ -
506 if (k==1)
│ │ │ │ -
507 {
│ │ │ │ -
508 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
509 localKeys_[i] = LocalKey(i,3,0);
│ │ │ │ -
510 return;
│ │ │ │ -
511 }
│ │ │ │ -
512
│ │ │ │ -
513 if (k==2)
│ │ │ │ -
514 {
│ │ │ │ -
515 // Vertex shape functions
│ │ │ │ -
516 localKeys_[0] = LocalKey(0,3,0);
│ │ │ │ -
517 localKeys_[1] = LocalKey(1,3,0);
│ │ │ │ -
518 localKeys_[2] = LocalKey(2,3,0);
│ │ │ │ -
519 localKeys_[3] = LocalKey(3,3,0);
│ │ │ │ -
520 localKeys_[4] = LocalKey(4,3,0);
│ │ │ │ -
521 localKeys_[5] = LocalKey(5,3,0);
│ │ │ │ -
522
│ │ │ │ -
523 // Edge shape functions
│ │ │ │ -
524 localKeys_[6] = LocalKey(0,2,0);
│ │ │ │ -
525 localKeys_[7] = LocalKey(1,2,0);
│ │ │ │ -
526 localKeys_[8] = LocalKey(2,2,0);
│ │ │ │ -
527 localKeys_[9] = LocalKey(3,2,0);
│ │ │ │ -
528 localKeys_[10] = LocalKey(4,2,0);
│ │ │ │ -
529 localKeys_[11] = LocalKey(5,2,0);
│ │ │ │ -
530 localKeys_[12] = LocalKey(6,2,0);
│ │ │ │ -
531 localKeys_[13] = LocalKey(7,2,0);
│ │ │ │ -
532 localKeys_[14] = LocalKey(8,2,0);
│ │ │ │ -
533
│ │ │ │ -
534 // Quadrilateral sides shape functions
│ │ │ │ -
535 localKeys_[15] = LocalKey(0,1,0);
│ │ │ │ -
536 localKeys_[16] = LocalKey(1,1,0);
│ │ │ │ -
537 localKeys_[17] = LocalKey(2,1,0);
│ │ │ │ -
538
│ │ │ │ -
539 return;
│ │ │ │ -
540 }
│ │ │ │ -
541
│ │ │ │ -
542 // Now: the general case
│ │ │ │ -
543 DUNE_THROW(NotImplemented, "LagrangePrismLocalCoefficients not implemented for order " << k);
│ │ │ │ -
544
│ │ │ │ -
545 }
│ │ │ │ -
546
│ │ │ │ -
548 static constexpr std::size_t size ()
│ │ │ │ -
549 {
│ │ │ │ -
550 return binomial(k+2,2u) * (k+1);
│ │ │ │ -
551 }
│ │ │ │ -
552
│ │ │ │ -
554 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
555 {
│ │ │ │ -
556 return localKeys_[i];
│ │ │ │ -
557 }
│ │ │ │ -
558
│ │ │ │ -
559 private:
│ │ │ │ -
560 std::vector<LocalKey> localKeys_;
│ │ │ │ -
561 };
│ │ │ │ -
562
│ │ │ │ -
567 template<class LocalBasis>
│ │ │ │ -
568 class LagrangePrismLocalInterpolation
│ │ │ │ -
569 {
│ │ │ │ -
570 public:
│ │ │ │ -
571
│ │ │ │ -
579 template<typename F, typename C>
│ │ │ │ -
580 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
581 {
│ │ │ │ -
582 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ -
583 constexpr auto k = LocalBasis::order();
│ │ │ │ -
584 using D = typename LocalBasis::Traits::DomainType;
│ │ │ │ -
585 using DF = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ -
586
│ │ │ │ -
587 out.resize(LocalBasis::size());
│ │ │ │ -
588
│ │ │ │ -
589 // Specialization for zero-order case
│ │ │ │ -
590 if (k==0)
│ │ │ │ -
591 {
│ │ │ │ -
592 auto center = ReferenceElements<DF,dim>::general(GeometryTypes::prism).position(0,0);
│ │ │ │ -
593 out[0] = f(center);
│ │ │ │ -
594 return;
│ │ │ │ -
595 }
│ │ │ │ -
596
│ │ │ │ -
597 // Specialization for first-order case
│ │ │ │ -
598 if (k==1)
│ │ │ │ -
599 {
│ │ │ │ -
600 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ -
601 {
│ │ │ │ -
602 auto vertex = ReferenceElements<DF,3>::general(GeometryTypes::prism).position(i,3);
│ │ │ │ -
603 out[i] = f(vertex);
│ │ │ │ -
604 }
│ │ │ │ -
605 return;
│ │ │ │ -
606 }
│ │ │ │ -
607
│ │ │ │ -
608 if (k==2)
│ │ │ │ -
609 {
│ │ │ │ -
610 out[0] = f( D( {0.0, 0.0, 0.0} ) );
│ │ │ │ -
611 out[1] = f( D( {1.0, 0.0, 0.0} ) );
│ │ │ │ -
612 out[2] = f( D( {0.0, 1.0, 0.0} ) );
│ │ │ │ -
613 out[3] = f( D( {0.0, 0.0, 1.0} ) );
│ │ │ │ -
614 out[4] = f( D( {1.0, 0.0, 1.0} ) );
│ │ │ │ -
615 out[5] = f( D( {0.0, 1.0, 1.0} ) );
│ │ │ │ -
616 out[6] = f( D( {0.0, 0.0, 0.5} ) );
│ │ │ │ -
617 out[7] = f( D( {1.0, 0.0, 0.5} ) );
│ │ │ │ -
618 out[8] = f( D( {0.0, 1.0, 0.5} ) );
│ │ │ │ -
619 out[9] = f( D( {0.5, 0.0, 0.0} ) );
│ │ │ │ -
620 out[10] = f( D( {0.0, 0.5, 0.0} ) );
│ │ │ │ -
621 out[11] = f( D( {0.5, 0.5, 0.0} ) );
│ │ │ │ -
622 out[12] = f( D( {0.5, 0.0, 1.0} ) );
│ │ │ │ -
623 out[13] = f( D( {0.0, 0.5, 1.0} ) );
│ │ │ │ -
624 out[14] = f( D( {0.5, 0.5, 1.0} ) );
│ │ │ │ -
625 out[15] = f( D( {0.5, 0.0, 0.5} ) );
│ │ │ │ -
626 out[16] = f( D( {0.0, 0.5, 0.5} ) );
│ │ │ │ -
627 out[17] = f( D( {0.5, 0.5, 0.5} ) );
│ │ │ │ -
628
│ │ │ │ -
629 return;
│ │ │ │ -
630 }
│ │ │ │ -
631
│ │ │ │ -
632 DUNE_THROW(NotImplemented, "LagrangePrismLocalInterpolation not implemented for order " << k);
│ │ │ │ -
633 }
│ │ │ │ -
634
│ │ │ │ -
635 };
│ │ │ │ -
636
│ │ │ │ -
637} } // namespace Dune::Impl
│ │ │ │ -
638
│ │ │ │ -
639namespace Dune
│ │ │ │ -
640{
│ │ │ │ -
647 template<class D, class R, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
649 {
│ │ │ │ -
650 public:
│ │ │ │ - │ │ │ │ -
654 Impl::LagrangePrismLocalCoefficients<k>,
│ │ │ │ -
655 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > >;
│ │ │ │ -
656
│ │ │ │ -
│ │ │ │ -
659 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
660 {
│ │ │ │ -
661 return basis_;
│ │ │ │ -
662 }
│ │ │ │ -
│ │ │ │ -
663
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
667 {
│ │ │ │ -
668 return coefficients_;
│ │ │ │ -
669 }
│ │ │ │ -
│ │ │ │ -
670
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
674 {
│ │ │ │ -
675 return interpolation_;
│ │ │ │ -
676 }
│ │ │ │ -
│ │ │ │ -
677
│ │ │ │ -
│ │ │ │ -
679 static constexpr std::size_t size ()
│ │ │ │ -
680 {
│ │ │ │ -
681 return binomial(k+2,2) * (k+1);
│ │ │ │ -
682 }
│ │ │ │ -
│ │ │ │ -
683
│ │ │ │ -
│ │ │ │ -
686 static constexpr GeometryType type ()
│ │ │ │ -
687 {
│ │ │ │ -
688 return GeometryTypes::prism;
│ │ │ │ -
689 }
│ │ │ │ -
│ │ │ │ -
690
│ │ │ │ -
691 private:
│ │ │ │ -
692 Impl::LagrangePrismLocalBasis<D,R,k> basis_;
│ │ │ │ -
693 Impl::LagrangePrismLocalCoefficients<k> coefficients_;
│ │ │ │ -
694 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > interpolation_;
│ │ │ │ -
695 };
│ │ │ │ -
│ │ │ │ -
696
│ │ │ │ -
697} // namespace Dune
│ │ │ │ -
698
│ │ │ │ -
699#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
78#endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition lagrangeprism.hh:649
│ │ │ │ -
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangeprism.hh:679
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangeprism.hh:673
│ │ │ │ -
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangeprism.hh:686
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangeprism.hh:666
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangeprism.hh:659
│ │ │ │ - │ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
A class providing local coefficients for dg spaces.
Definition dglocalcoefficients.hh:23
│ │ │ │ +
unsigned int size() const
Definition dglocalcoefficients.hh:41
│ │ │ │ +
const LocalKey & localKey(const unsigned int i) const
Definition dglocalcoefficients.hh:35
│ │ │ │ +
DGLocalCoefficients(const unsigned int n)
construct local keys for n basis functions
Definition dglocalcoefficients.hh:28
│ │ │ │ +
A factory class for the dg local coefficients.
Definition dglocalcoefficients.hh:59
│ │ │ │ +
static void release(Object *object)
Definition dglocalcoefficients.hh:73
│ │ │ │ +
const DGLocalCoefficients Object
Definition dglocalcoefficients.hh:62
│ │ │ │ +
static Object * create(const Key &key)
Definition dglocalcoefficients.hh:65
│ │ │ │ +
BasisFactory::Key Key
Definition dglocalcoefficients.hh:61
│ │ │ │ +
static const unsigned int dimension
Definition dglocalcoefficients.hh:60
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,712 +1,120 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangeprism.hh │ │ │ │ │ + * _u_t_i_l_i_t_y │ │ │ │ │ +dglocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ +5#ifndef DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e { namespace Impl │ │ │ │ │ -22{ │ │ │ │ │ -32 template │ │ │ │ │ -33 class LagrangePrismLocalBasis │ │ │ │ │ -34 { │ │ │ │ │ -35 static constexpr std::size_t dim = 3; │ │ │ │ │ -36 public: │ │ │ │ │ -37 using Traits = │ │ │ │ │ -LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ -38 │ │ │ │ │ -41 static constexpr unsigned int size () │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +16 // DGLocalCoefficients │ │ │ │ │ +17 // ------------------- │ │ │ │ │ +18 │ │ │ │ │ +_2_2 class _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +23 { │ │ │ │ │ +24 typedef _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s _T_h_i_s; │ │ │ │ │ +25 │ │ │ │ │ +26 public: │ │ │ │ │ +_2_8 _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s ( const unsigned int n ) │ │ │ │ │ +29 : localKey_( n ) │ │ │ │ │ +30 { │ │ │ │ │ +31 for( unsigned i = 0; i < n; ++i ) │ │ │ │ │ +32 localKey_[ i ] = _L_o_c_a_l_K_e_y( 0, 0, i ); │ │ │ │ │ +33 } │ │ │ │ │ +34 │ │ │ │ │ +_3_5 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ +36 { │ │ │ │ │ +37 assert( i < _s_i_z_e() ); │ │ │ │ │ +38 return localKey_[ i ]; │ │ │ │ │ +39 } │ │ │ │ │ +40 │ │ │ │ │ +_4_1 unsigned int _s_i_z_e () const │ │ │ │ │ 42 { │ │ │ │ │ -43 return binomial(k+2,2u) * (k+1); │ │ │ │ │ +43 return localKey_.size(); │ │ │ │ │ 44 } │ │ │ │ │ 45 │ │ │ │ │ -47 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -48 std::vector& out) const │ │ │ │ │ -49 { │ │ │ │ │ -50 out.resize(size()); │ │ │ │ │ +46 private: │ │ │ │ │ +47 std::vector< LocalKey > localKey_; │ │ │ │ │ +48 }; │ │ │ │ │ +49 │ │ │ │ │ +50 │ │ │ │ │ 51 │ │ │ │ │ -52 // Specialization for zero-order case │ │ │ │ │ -53 if (k==0) │ │ │ │ │ -54 { │ │ │ │ │ -55 out[0] = 1; │ │ │ │ │ -56 return; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -59 if (k==1) │ │ │ │ │ -60 { │ │ │ │ │ -61 out[0] = (1.0-in[0]-in[1])*(1.0-in[2]); │ │ │ │ │ -62 out[1] = in[0]*(1-in[2]); │ │ │ │ │ -63 out[2] = in[1]*(1-in[2]); │ │ │ │ │ -64 out[3] = in[2]*(1.0-in[0]-in[1]); │ │ │ │ │ -65 out[4] = in[0]*in[2]; │ │ │ │ │ -66 out[5] = in[1]*in[2]; │ │ │ │ │ -67 │ │ │ │ │ -68 return; │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -71 if (k==2) │ │ │ │ │ -72 { │ │ │ │ │ -73 FieldVector segmentShapeFunction; │ │ │ │ │ -74 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ -75 segmentShapeFunction[1] = in[2] * (4 - 4*in[2]); │ │ │ │ │ -76 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ +52 // DGLocalCoefficientsFactory │ │ │ │ │ +53 // -------------------------- │ │ │ │ │ +57 template< class BasisFactory > │ │ │ │ │ +_5_8 struct _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +59 { │ │ │ │ │ +_6_0 static const unsigned int _d_i_m_e_n_s_i_o_n = BasisFactory::dimension; │ │ │ │ │ +_6_1 typedef typename BasisFactory::Key _K_e_y; │ │ │ │ │ +_6_2 typedef const _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s _O_b_j_e_c_t; │ │ │ │ │ +63 │ │ │ │ │ +64 template< GeometryType::Id geometryId > │ │ │ │ │ +_6_5 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ +66 { │ │ │ │ │ +67 const typename BasisFactory::Object *basis │ │ │ │ │ +68 = BasisFactory::template create< geometryId >( key ); │ │ │ │ │ +69 _O_b_j_e_c_t *coefficients = new _O_b_j_e_c_t( basis->size() ); │ │ │ │ │ +70 BasisFactory::release( basis ); │ │ │ │ │ +71 return coefficients; │ │ │ │ │ +72 } │ │ │ │ │ +_7_3 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +74 }; │ │ │ │ │ +75 │ │ │ │ │ +76} │ │ │ │ │ 77 │ │ │ │ │ -78 FieldVector triangleShapeFunction; │ │ │ │ │ -79 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ -80 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ -81 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ -82 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ -83 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ -84 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ -85 │ │ │ │ │ -86 // lower triangle: │ │ │ │ │ -87 out[0] = triangleShapeFunction[0] * segmentShapeFunction[0]; │ │ │ │ │ -88 out[1] = triangleShapeFunction[1] * segmentShapeFunction[0]; │ │ │ │ │ -89 out[2] = triangleShapeFunction[2] * segmentShapeFunction[0]; │ │ │ │ │ -90 │ │ │ │ │ -91 //upper triangle │ │ │ │ │ -92 out[3] = triangleShapeFunction[0] * segmentShapeFunction[2]; │ │ │ │ │ -93 out[4] = triangleShapeFunction[1] * segmentShapeFunction[2]; │ │ │ │ │ -94 out[5] = triangleShapeFunction[2] * segmentShapeFunction[2]; │ │ │ │ │ -95 │ │ │ │ │ -96 // vertical edges │ │ │ │ │ -97 out[6] = triangleShapeFunction[0] * segmentShapeFunction[1]; │ │ │ │ │ -98 out[7] = triangleShapeFunction[1] * segmentShapeFunction[1]; │ │ │ │ │ -99 out[8] = triangleShapeFunction[2] * segmentShapeFunction[1]; │ │ │ │ │ -100 │ │ │ │ │ -101 // lower triangle edges │ │ │ │ │ -102 out[9] = triangleShapeFunction[3] * segmentShapeFunction[0]; │ │ │ │ │ -103 out[10] = triangleShapeFunction[4] * segmentShapeFunction[0]; │ │ │ │ │ -104 out[11] = triangleShapeFunction[5] * segmentShapeFunction[0]; │ │ │ │ │ -105 │ │ │ │ │ -106 // upper triangle edges │ │ │ │ │ -107 out[12] = triangleShapeFunction[3] * segmentShapeFunction[2]; │ │ │ │ │ -108 out[13] = triangleShapeFunction[4] * segmentShapeFunction[2]; │ │ │ │ │ -109 out[14] = triangleShapeFunction[5] * segmentShapeFunction[2]; │ │ │ │ │ -110 │ │ │ │ │ -111 // quadrilateral sides │ │ │ │ │ -112 out[15] = triangleShapeFunction[3] * segmentShapeFunction[1]; │ │ │ │ │ -113 out[16] = triangleShapeFunction[4] * segmentShapeFunction[1]; │ │ │ │ │ -114 out[17] = triangleShapeFunction[5] * segmentShapeFunction[1]; │ │ │ │ │ -115 │ │ │ │ │ -116 return; │ │ │ │ │ -117 } │ │ │ │ │ -118 │ │ │ │ │ -119 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateFunction for │ │ │ │ │ -order " << k); │ │ │ │ │ -120 } │ │ │ │ │ -121 │ │ │ │ │ -127 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -128 std::vector& out) const │ │ │ │ │ -129 { │ │ │ │ │ -130 out.resize(size()); │ │ │ │ │ -131 │ │ │ │ │ -132 // Specialization for k==0 │ │ │ │ │ -133 if (k==0) │ │ │ │ │ -134 { │ │ │ │ │ -135 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ -136 return; │ │ │ │ │ -137 } │ │ │ │ │ -138 │ │ │ │ │ -139 if (k==1) │ │ │ │ │ -140 { │ │ │ │ │ -141 out[0][0] = {in[2]-1, in[2]-1, in[0]+in[1]-1}; │ │ │ │ │ -142 out[1][0] = {1-in[2], 0, -in[0]}; │ │ │ │ │ -143 out[2][0] = { 0, 1-in[2], -in[1]}; │ │ │ │ │ -144 out[3][0] = { -in[2], -in[2], 1-in[0]-in[1]}; │ │ │ │ │ -145 out[4][0] = { in[2], 0, in[0]}; │ │ │ │ │ -146 out[5][0] = { 0, in[2], in[1]}; │ │ │ │ │ -147 │ │ │ │ │ -148 return; │ │ │ │ │ -149 } │ │ │ │ │ -150 │ │ │ │ │ -151 if (k==2) │ │ │ │ │ -152 { │ │ │ │ │ -153 // Second-order shape functions on a triangle, and the first derivatives │ │ │ │ │ -154 FieldVector triangleShapeFunction; │ │ │ │ │ -155 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ -156 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ -157 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ -158 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ -159 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ -160 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ -161 │ │ │ │ │ -162 std::array,6> triangleShapeFunctionDer; │ │ │ │ │ -163 triangleShapeFunctionDer[0] = {-3 + 4*(in[0] + in[1]), -3 + 4*(in[0] + in │ │ │ │ │ -[1])}; │ │ │ │ │ -164 triangleShapeFunctionDer[1] = { -1 + 4*in[0], 0}; │ │ │ │ │ -165 triangleShapeFunctionDer[2] = { 0, -1 + 4*in[1]}; │ │ │ │ │ -166 triangleShapeFunctionDer[3] = { 4 - 8*in[0] - 4*in[1], -4*in[0]}; │ │ │ │ │ -167 triangleShapeFunctionDer[4] = { -4*in[1], 4 - 4*in[0] - 8*in[1]}; │ │ │ │ │ -168 triangleShapeFunctionDer[5] = { 4*in[1], 4*in[0]}; │ │ │ │ │ -169 │ │ │ │ │ -170 // Second-order shape functions on a line, and the first derivatives │ │ │ │ │ -171 FieldVector segmentShapeFunction; │ │ │ │ │ -172 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ -173 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ -174 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ -175 │ │ │ │ │ -176 FieldVector segmentShapeFunctionDer; │ │ │ │ │ -177 segmentShapeFunctionDer[0] = -3 + 4*in[2]; │ │ │ │ │ -178 segmentShapeFunctionDer[1] = 4 - 8*in[2]; │ │ │ │ │ -179 segmentShapeFunctionDer[2] = -1 + 4*in[2]; │ │ │ │ │ -180 │ │ │ │ │ -181 // lower triangle: │ │ │ │ │ -182 out[0][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[0]; │ │ │ │ │ -183 out[0][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[0]; │ │ │ │ │ -184 out[0][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[0]; │ │ │ │ │ -185 │ │ │ │ │ -186 out[1][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[0]; │ │ │ │ │ -187 out[1][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[0]; │ │ │ │ │ -188 out[1][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[0]; │ │ │ │ │ -189 │ │ │ │ │ -190 out[2][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[0]; │ │ │ │ │ -191 out[2][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[0]; │ │ │ │ │ -192 out[2][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0]; │ │ │ │ │ -193 │ │ │ │ │ -194 //upper triangle │ │ │ │ │ -195 out[3][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[2]; │ │ │ │ │ -196 out[3][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[2]; │ │ │ │ │ -197 out[3][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[2]; │ │ │ │ │ -198 │ │ │ │ │ -199 out[4][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[2]; │ │ │ │ │ -200 out[4][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[2]; │ │ │ │ │ -201 out[4][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[2]; │ │ │ │ │ -202 │ │ │ │ │ -203 out[5][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[2]; │ │ │ │ │ -204 out[5][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[2]; │ │ │ │ │ -205 out[5][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[2]; │ │ │ │ │ -206 │ │ │ │ │ -207 // vertical edges │ │ │ │ │ -208 out[6][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[1]; │ │ │ │ │ -209 out[6][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[1]; │ │ │ │ │ -210 out[6][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[1]; │ │ │ │ │ -211 │ │ │ │ │ -212 out[7][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[1]; │ │ │ │ │ -213 out[7][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[1]; │ │ │ │ │ -214 out[7][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[1]; │ │ │ │ │ -215 │ │ │ │ │ -216 out[8][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[1]; │ │ │ │ │ -217 out[8][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[1]; │ │ │ │ │ -218 out[8][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[1]; │ │ │ │ │ -219 │ │ │ │ │ -220 // lower triangle edges │ │ │ │ │ -221 out[9][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[0]; │ │ │ │ │ -222 out[9][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[0]; │ │ │ │ │ -223 out[9][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[0]; │ │ │ │ │ -224 │ │ │ │ │ -225 out[10][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[0]; │ │ │ │ │ -226 out[10][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[0]; │ │ │ │ │ -227 out[10][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[0]; │ │ │ │ │ -228 │ │ │ │ │ -229 out[11][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[0]; │ │ │ │ │ -230 out[11][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[0]; │ │ │ │ │ -231 out[11][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[0]; │ │ │ │ │ -232 │ │ │ │ │ -233 // upper triangle edges │ │ │ │ │ -234 out[12][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[2]; │ │ │ │ │ -235 out[12][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[2]; │ │ │ │ │ -236 out[12][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[2]; │ │ │ │ │ -237 │ │ │ │ │ -238 out[13][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[2]; │ │ │ │ │ -239 out[13][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[2]; │ │ │ │ │ -240 out[13][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[2]; │ │ │ │ │ -241 │ │ │ │ │ -242 out[14][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[2]; │ │ │ │ │ -243 out[14][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[2]; │ │ │ │ │ -244 out[14][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[2]; │ │ │ │ │ -245 │ │ │ │ │ -246 // quadrilateral sides │ │ │ │ │ -247 out[15][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[1]; │ │ │ │ │ -248 out[15][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[1]; │ │ │ │ │ -249 out[15][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[1]; │ │ │ │ │ -250 │ │ │ │ │ -251 out[16][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[1]; │ │ │ │ │ -252 out[16][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[1]; │ │ │ │ │ -253 out[16][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[1]; │ │ │ │ │ -254 │ │ │ │ │ -255 out[17][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[1]; │ │ │ │ │ -256 out[17][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[1]; │ │ │ │ │ -257 out[17][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[1]; │ │ │ │ │ -258 │ │ │ │ │ -259 return; │ │ │ │ │ -260 } │ │ │ │ │ -261 │ │ │ │ │ -262 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateJacobian for │ │ │ │ │ -order " << k); │ │ │ │ │ -263 } │ │ │ │ │ -264 │ │ │ │ │ -271 void partial(const std::array& order, │ │ │ │ │ -272 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -273 std::vector& out) const │ │ │ │ │ -274 { │ │ │ │ │ -275 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -276 │ │ │ │ │ -277 out.resize(size()); │ │ │ │ │ -278 │ │ │ │ │ -279 if (totalOrder == 0) │ │ │ │ │ -280 { │ │ │ │ │ -281 evaluateFunction(in, out); │ │ │ │ │ -282 return; │ │ │ │ │ -283 } │ │ │ │ │ -284 │ │ │ │ │ -285 // Specialization for zero-order finite elements │ │ │ │ │ -286 if (k==0) │ │ │ │ │ -287 { │ │ │ │ │ -288 out[0] = 0; │ │ │ │ │ -289 return; │ │ │ │ │ -290 } │ │ │ │ │ -291 │ │ │ │ │ -292 // Specialization for first-order finite elements │ │ │ │ │ -293 if (k==1) │ │ │ │ │ -294 { │ │ │ │ │ -295 if (totalOrder == 1) │ │ │ │ │ -296 { │ │ │ │ │ -297 auto direction = std::distance(order.begin(), std::find(order.begin(), │ │ │ │ │ -order.end(), 1)); │ │ │ │ │ -298 │ │ │ │ │ -299 switch (direction) { │ │ │ │ │ -300 case 0: │ │ │ │ │ -301 out[0] = in[2]-1; │ │ │ │ │ -302 out[1] = 1-in[2]; │ │ │ │ │ -303 out[2] = 0; │ │ │ │ │ -304 out[3] = -in[2]; │ │ │ │ │ -305 out[4] = in[2]; │ │ │ │ │ -306 out[5] = 0; │ │ │ │ │ -307 break; │ │ │ │ │ -308 case 1: │ │ │ │ │ -309 out[0] = in[2]-1; │ │ │ │ │ -310 out[1] = 0; │ │ │ │ │ -311 out[2] = 1-in[2]; │ │ │ │ │ -312 out[3] = -in[2]; │ │ │ │ │ -313 out[4] = 0; │ │ │ │ │ -314 out[5] = in[2]; │ │ │ │ │ -315 break; │ │ │ │ │ -316 case 2: │ │ │ │ │ -317 out[0] = in[0]+in[1]-1; │ │ │ │ │ -318 out[1] = -in[0]; │ │ │ │ │ -319 out[2] = -in[1]; │ │ │ │ │ -320 out[3] = 1-in[0]-in[1]; │ │ │ │ │ -321 out[4] = in[0]; │ │ │ │ │ -322 out[5] = in[1]; │ │ │ │ │ -323 break; │ │ │ │ │ -324 default: │ │ │ │ │ -325 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -326 } │ │ │ │ │ -327 } else if (totalOrder == 2) { │ │ │ │ │ -328 out.resize(size()); │ │ │ │ │ -329 if (order[0] == 1 && order[2] == 1) { │ │ │ │ │ -330 out[0] = 1; │ │ │ │ │ -331 out[1] =-1; │ │ │ │ │ -332 out[2] = 0; │ │ │ │ │ -333 out[3] =-1; │ │ │ │ │ -334 out[4] = 1; │ │ │ │ │ -335 out[5] = 0; │ │ │ │ │ -336 } else if (order[1] == 1 && order[2] == 1) { │ │ │ │ │ -337 out[0] = 1; │ │ │ │ │ -338 out[1] = 0; │ │ │ │ │ -339 out[2] =-1; │ │ │ │ │ -340 out[3] =-1; │ │ │ │ │ -341 out[4] = 0; │ │ │ │ │ -342 out[5] = 1; │ │ │ │ │ -343 } else { │ │ │ │ │ -344 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -345 out[i] = 0; │ │ │ │ │ -346 } │ │ │ │ │ -347 } else { │ │ │ │ │ -348 out.resize(size()); │ │ │ │ │ -349 std::fill(out.begin(), out.end(), 0.0); │ │ │ │ │ -350 } │ │ │ │ │ -351 │ │ │ │ │ -352 return; │ │ │ │ │ -353 } │ │ │ │ │ -354 │ │ │ │ │ -355 // Specialization for second-order finite elements │ │ │ │ │ -356 if (k==2) │ │ │ │ │ -357 { │ │ │ │ │ -358 if (totalOrder == 1) │ │ │ │ │ -359 { │ │ │ │ │ -360 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -361 switch (direction) │ │ │ │ │ -362 { │ │ │ │ │ -363 case 0: │ │ │ │ │ -364 { │ │ │ │ │ -365 FieldVector triangleShapeFunctionDerX; │ │ │ │ │ -366 triangleShapeFunctionDerX[0] = -3 + 4*(in[0] + in[1]); │ │ │ │ │ -367 triangleShapeFunctionDerX[1] = -1 + 4* in[0]; │ │ │ │ │ -368 triangleShapeFunctionDerX[2] = 0; │ │ │ │ │ -369 triangleShapeFunctionDerX[3] = 4 - 8* in[0] - 4*in[1]; │ │ │ │ │ -370 triangleShapeFunctionDerX[4] = -4*in[1]; │ │ │ │ │ -371 triangleShapeFunctionDerX[5] = 4*in[1]; │ │ │ │ │ -372 │ │ │ │ │ -373 FieldVector segmentShapeFunction; │ │ │ │ │ -374 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ -375 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ -376 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ -377 │ │ │ │ │ -378 out[0] = triangleShapeFunctionDerX[0] * segmentShapeFunction[0]; │ │ │ │ │ -379 out[1] = triangleShapeFunctionDerX[1] * segmentShapeFunction[0]; │ │ │ │ │ -380 out[2] = triangleShapeFunctionDerX[2] * segmentShapeFunction[0]; │ │ │ │ │ -381 out[3] = triangleShapeFunctionDerX[0] * segmentShapeFunction[2]; │ │ │ │ │ -382 out[4] = triangleShapeFunctionDerX[1] * segmentShapeFunction[2]; │ │ │ │ │ -383 out[5] = triangleShapeFunctionDerX[2] * segmentShapeFunction[2]; │ │ │ │ │ -384 out[6] = triangleShapeFunctionDerX[0] * segmentShapeFunction[1]; │ │ │ │ │ -385 out[7] = triangleShapeFunctionDerX[1] * segmentShapeFunction[1]; │ │ │ │ │ -386 out[8] = triangleShapeFunctionDerX[2] * segmentShapeFunction[1]; │ │ │ │ │ -387 out[9] = triangleShapeFunctionDerX[3] * segmentShapeFunction[0]; │ │ │ │ │ -388 out[10] = triangleShapeFunctionDerX[4] * segmentShapeFunction[0]; │ │ │ │ │ -389 out[11] = triangleShapeFunctionDerX[5] * segmentShapeFunction[0]; │ │ │ │ │ -390 out[12] = triangleShapeFunctionDerX[3] * segmentShapeFunction[2]; │ │ │ │ │ -391 out[13] = triangleShapeFunctionDerX[4] * segmentShapeFunction[2]; │ │ │ │ │ -392 out[14] = triangleShapeFunctionDerX[5] * segmentShapeFunction[2]; │ │ │ │ │ -393 out[15] = triangleShapeFunctionDerX[3] * segmentShapeFunction[1]; │ │ │ │ │ -394 out[16] = triangleShapeFunctionDerX[4] * segmentShapeFunction[1]; │ │ │ │ │ -395 out[17] = triangleShapeFunctionDerX[5] * segmentShapeFunction[1]; │ │ │ │ │ -396 break; │ │ │ │ │ -397 } │ │ │ │ │ -398 case 1: │ │ │ │ │ -399 { │ │ │ │ │ -400 FieldVector triangleShapeFunctionDerY; │ │ │ │ │ -401 triangleShapeFunctionDerY[0] = -3 + 4*(in[0] + in[1]); │ │ │ │ │ -402 triangleShapeFunctionDerY[1] = 0; │ │ │ │ │ -403 triangleShapeFunctionDerY[2] = -1 + 4* in[1]; │ │ │ │ │ -404 triangleShapeFunctionDerY[3] = -4* in[0]; │ │ │ │ │ -405 triangleShapeFunctionDerY[4] = 4 - 4* in[0] - 8*in[1]; │ │ │ │ │ -406 triangleShapeFunctionDerY[5] = 4* in[0]; │ │ │ │ │ -407 │ │ │ │ │ -408 FieldVector segmentShapeFunction; │ │ │ │ │ -409 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ -410 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ -411 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ -412 │ │ │ │ │ -413 out[0] = triangleShapeFunctionDerY[0] * segmentShapeFunction[0]; │ │ │ │ │ -414 out[1] = triangleShapeFunctionDerY[1] * segmentShapeFunction[0]; │ │ │ │ │ -415 out[2] = triangleShapeFunctionDerY[2] * segmentShapeFunction[0]; │ │ │ │ │ -416 out[3] = triangleShapeFunctionDerY[0] * segmentShapeFunction[2]; │ │ │ │ │ -417 out[4] = triangleShapeFunctionDerY[1] * segmentShapeFunction[2]; │ │ │ │ │ -418 out[5] = triangleShapeFunctionDerY[2] * segmentShapeFunction[2]; │ │ │ │ │ -419 out[6] = triangleShapeFunctionDerY[0] * segmentShapeFunction[1]; │ │ │ │ │ -420 out[7] = triangleShapeFunctionDerY[1] * segmentShapeFunction[1]; │ │ │ │ │ -421 out[8] = triangleShapeFunctionDerY[2] * segmentShapeFunction[1]; │ │ │ │ │ -422 out[9] = triangleShapeFunctionDerY[3] * segmentShapeFunction[0]; │ │ │ │ │ -423 out[10] = triangleShapeFunctionDerY[4] * segmentShapeFunction[0]; │ │ │ │ │ -424 out[11] = triangleShapeFunctionDerY[5] * segmentShapeFunction[0]; │ │ │ │ │ -425 out[12] = triangleShapeFunctionDerY[3] * segmentShapeFunction[2]; │ │ │ │ │ -426 out[13] = triangleShapeFunctionDerY[4] * segmentShapeFunction[2]; │ │ │ │ │ -427 out[14] = triangleShapeFunctionDerY[5] * segmentShapeFunction[2]; │ │ │ │ │ -428 out[15] = triangleShapeFunctionDerY[3] * segmentShapeFunction[1]; │ │ │ │ │ -429 out[16] = triangleShapeFunctionDerY[4] * segmentShapeFunction[1]; │ │ │ │ │ -430 out[17] = triangleShapeFunctionDerY[5] * segmentShapeFunction[1]; │ │ │ │ │ -431 break; │ │ │ │ │ -432 } │ │ │ │ │ -433 case 2: │ │ │ │ │ -434 { │ │ │ │ │ -435 FieldVector triangleShapeFunction; │ │ │ │ │ -436 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ -437 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ -438 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ -439 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ -440 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ -441 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ -442 │ │ │ │ │ -443 FieldVector segmentShapeFunctionDer; │ │ │ │ │ -444 segmentShapeFunctionDer[0] = -3 + 4*in[2]; │ │ │ │ │ -445 segmentShapeFunctionDer[1] = 4 - 8*in[2]; │ │ │ │ │ -446 segmentShapeFunctionDer[2] = -1 + 4*in[2]; │ │ │ │ │ -447 │ │ │ │ │ -448 out[0] = triangleShapeFunction[0] * segmentShapeFunctionDer[0]; │ │ │ │ │ -449 out[1] = triangleShapeFunction[1] * segmentShapeFunctionDer[0]; │ │ │ │ │ -450 out[2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0]; │ │ │ │ │ -451 out[3] = triangleShapeFunction[0] * segmentShapeFunctionDer[2]; │ │ │ │ │ -452 out[4] = triangleShapeFunction[1] * segmentShapeFunctionDer[2]; │ │ │ │ │ -453 out[5] = triangleShapeFunction[2] * segmentShapeFunctionDer[2]; │ │ │ │ │ -454 out[6] = triangleShapeFunction[0] * segmentShapeFunctionDer[1]; │ │ │ │ │ -455 out[7] = triangleShapeFunction[1] * segmentShapeFunctionDer[1]; │ │ │ │ │ -456 out[8] = triangleShapeFunction[2] * segmentShapeFunctionDer[1]; │ │ │ │ │ -457 out[9] = triangleShapeFunction[3] * segmentShapeFunctionDer[0]; │ │ │ │ │ -458 out[10] = triangleShapeFunction[4] * segmentShapeFunctionDer[0]; │ │ │ │ │ -459 out[11] = triangleShapeFunction[5] * segmentShapeFunctionDer[0]; │ │ │ │ │ -460 out[12] = triangleShapeFunction[3] * segmentShapeFunctionDer[2]; │ │ │ │ │ -461 out[13] = triangleShapeFunction[4] * segmentShapeFunctionDer[2]; │ │ │ │ │ -462 out[14] = triangleShapeFunction[5] * segmentShapeFunctionDer[2]; │ │ │ │ │ -463 out[15] = triangleShapeFunction[3] * segmentShapeFunctionDer[1]; │ │ │ │ │ -464 out[16] = triangleShapeFunction[4] * segmentShapeFunctionDer[1]; │ │ │ │ │ -465 out[17] = triangleShapeFunction[5] * segmentShapeFunctionDer[1]; │ │ │ │ │ -466 break; │ │ │ │ │ -467 } │ │ │ │ │ -468 default: │ │ │ │ │ -469 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -470 } │ │ │ │ │ -471 } else { │ │ │ │ │ -472 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -473 } │ │ │ │ │ -474 │ │ │ │ │ -475 return; │ │ │ │ │ -476 } │ │ │ │ │ -477 │ │ │ │ │ -478 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::partial not │ │ │ │ │ -implemented for order " << k); │ │ │ │ │ -479 } │ │ │ │ │ -480 │ │ │ │ │ -482 static constexpr unsigned int order () │ │ │ │ │ -483 { │ │ │ │ │ -484 return k; │ │ │ │ │ -485 } │ │ │ │ │ -486 }; │ │ │ │ │ -487 │ │ │ │ │ -492 template │ │ │ │ │ -493 class LagrangePrismLocalCoefficients │ │ │ │ │ -494 { │ │ │ │ │ -495 public: │ │ │ │ │ -497 LagrangePrismLocalCoefficients () │ │ │ │ │ -498 : localKeys_(size()) │ │ │ │ │ -499 { │ │ │ │ │ -500 if (k==0) │ │ │ │ │ -501 { │ │ │ │ │ -502 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ -503 return; │ │ │ │ │ -504 } │ │ │ │ │ -505 │ │ │ │ │ -506 if (k==1) │ │ │ │ │ -507 { │ │ │ │ │ -508 for (std::size_t i=0; i localKeys_; │ │ │ │ │ -561 }; │ │ │ │ │ -562 │ │ │ │ │ -567 template │ │ │ │ │ -568 class LagrangePrismLocalInterpolation │ │ │ │ │ -569 { │ │ │ │ │ -570 public: │ │ │ │ │ -571 │ │ │ │ │ -579 template │ │ │ │ │ -580 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -581 { │ │ │ │ │ -582 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ -583 constexpr auto k = LocalBasis::order(); │ │ │ │ │ -584 using D = typename LocalBasis::Traits::DomainType; │ │ │ │ │ -585 using DF = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ -586 │ │ │ │ │ -587 out.resize(LocalBasis::size()); │ │ │ │ │ -588 │ │ │ │ │ -589 // Specialization for zero-order case │ │ │ │ │ -590 if (k==0) │ │ │ │ │ -591 { │ │ │ │ │ -592 auto center = ReferenceElements::general(GeometryTypes:: │ │ │ │ │ -prism).position(0,0); │ │ │ │ │ -593 out[0] = f(center); │ │ │ │ │ -594 return; │ │ │ │ │ -595 } │ │ │ │ │ -596 │ │ │ │ │ -597 // Specialization for first-order case │ │ │ │ │ -598 if (k==1) │ │ │ │ │ -599 { │ │ │ │ │ -600 for (unsigned int i=0; i::general(GeometryTypes:: │ │ │ │ │ -prism).position(i,3); │ │ │ │ │ -603 out[i] = f(vertex); │ │ │ │ │ -604 } │ │ │ │ │ -605 return; │ │ │ │ │ -606 } │ │ │ │ │ -607 │ │ │ │ │ -608 if (k==2) │ │ │ │ │ -609 { │ │ │ │ │ -610 out[0] = f( D( {0.0, 0.0, 0.0} ) ); │ │ │ │ │ -611 out[1] = f( D( {1.0, 0.0, 0.0} ) ); │ │ │ │ │ -612 out[2] = f( D( {0.0, 1.0, 0.0} ) ); │ │ │ │ │ -613 out[3] = f( D( {0.0, 0.0, 1.0} ) ); │ │ │ │ │ -614 out[4] = f( D( {1.0, 0.0, 1.0} ) ); │ │ │ │ │ -615 out[5] = f( D( {0.0, 1.0, 1.0} ) ); │ │ │ │ │ -616 out[6] = f( D( {0.0, 0.0, 0.5} ) ); │ │ │ │ │ -617 out[7] = f( D( {1.0, 0.0, 0.5} ) ); │ │ │ │ │ -618 out[8] = f( D( {0.0, 1.0, 0.5} ) ); │ │ │ │ │ -619 out[9] = f( D( {0.5, 0.0, 0.0} ) ); │ │ │ │ │ -620 out[10] = f( D( {0.0, 0.5, 0.0} ) ); │ │ │ │ │ -621 out[11] = f( D( {0.5, 0.5, 0.0} ) ); │ │ │ │ │ -622 out[12] = f( D( {0.5, 0.0, 1.0} ) ); │ │ │ │ │ -623 out[13] = f( D( {0.0, 0.5, 1.0} ) ); │ │ │ │ │ -624 out[14] = f( D( {0.5, 0.5, 1.0} ) ); │ │ │ │ │ -625 out[15] = f( D( {0.5, 0.0, 0.5} ) ); │ │ │ │ │ -626 out[16] = f( D( {0.0, 0.5, 0.5} ) ); │ │ │ │ │ -627 out[17] = f( D( {0.5, 0.5, 0.5} ) ); │ │ │ │ │ -628 │ │ │ │ │ -629 return; │ │ │ │ │ -630 } │ │ │ │ │ -631 │ │ │ │ │ -632 DUNE_THROW(NotImplemented, "LagrangePrismLocalInterpolation not implemented │ │ │ │ │ -for order " << k); │ │ │ │ │ -633 } │ │ │ │ │ -634 │ │ │ │ │ -635 }; │ │ │ │ │ -636 │ │ │ │ │ -637} } // namespace Dune::Impl │ │ │ │ │ -638 │ │ │ │ │ -639namespace _D_u_n_e │ │ │ │ │ -640{ │ │ │ │ │ -647 template │ │ │ │ │ -_6_4_8 class _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -649 { │ │ │ │ │ -650 public: │ │ │ │ │ -_6_5_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_k_>, │ │ │ │ │ -654 Impl::LagrangePrismLocalCoefficients, │ │ │ │ │ -655 Impl::LagrangePrismLocalInterpolation │ │ │ │ │ -> >; │ │ │ │ │ -656 │ │ │ │ │ -_6_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -660 { │ │ │ │ │ -661 return basis_; │ │ │ │ │ -662 } │ │ │ │ │ -663 │ │ │ │ │ -_6_6_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -667 { │ │ │ │ │ -668 return coefficients_; │ │ │ │ │ -669 } │ │ │ │ │ -670 │ │ │ │ │ -_6_7_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -674 { │ │ │ │ │ -675 return interpolation_; │ │ │ │ │ -676 } │ │ │ │ │ -677 │ │ │ │ │ -_6_7_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ -680 { │ │ │ │ │ -681 return binomial(k+2,2) * (k+1); │ │ │ │ │ -682 } │ │ │ │ │ -683 │ │ │ │ │ -_6_8_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -687 { │ │ │ │ │ -688 return GeometryTypes::prism; │ │ │ │ │ -689 } │ │ │ │ │ -690 │ │ │ │ │ -691 private: │ │ │ │ │ -692 Impl::LagrangePrismLocalBasis basis_; │ │ │ │ │ -693 Impl::LagrangePrismLocalCoefficients coefficients_; │ │ │ │ │ -694 Impl::LagrangePrismLocalInterpolation │ │ │ │ │ -> interpolation_; │ │ │ │ │ -695 }; │ │ │ │ │ -696 │ │ │ │ │ -697} // namespace Dune │ │ │ │ │ -698 │ │ │ │ │ -699#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +78#endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for 3d prisms with arbitrary compile-time polynomial │ │ │ │ │ -order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:649 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() │ │ │ │ │ -The number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:679 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:673 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The reference element that the local finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:686 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:666 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:659 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +A class providing local coefficients for dg spaces. │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DGLocalCoefficients(const unsigned int n) │ │ │ │ │ +construct local keys for n basis functions │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +A factory class for the dg local coefficients. │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const DGLocalCoefficients Object │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +BasisFactory::Key Key │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn dglocalcoefficients.hh:60 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk2d.hh File Reference │ │ │ │ +dune-localfunctions: enriched.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,48 +65,24 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
pk2d.hh File Reference
│ │ │ │ +
enriched.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::Pk2DFiniteElement< Geometry, RF, k >
 Langrange finite element of arbitrary order on triangles. More...
 
struct  Dune::Pk2DFiniteElement< Geometry, RF, k >::Traits
 
struct  Dune::Pk2DFiniteElementFactory< Geometry, RF, k >
 Factory for Pk2DFiniteElement objects. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,29 +1,11 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pk2d.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +enriched.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ -  Langrange finite element of arbitrary order on triangles. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ -  Factory for _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00377_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pk2d.hh Source File │ │ │ │ +dune-localfunctions: enriched.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,144 +70,32 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pk2d.hh
│ │ │ │ +
enriched.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ + │ │ │ │
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
19
│ │ │ │ -
21
│ │ │ │ -
28 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 typedef typename Geometry::ctype DF;
│ │ │ │ -
31 typedef Impl::LagrangeSimplexLocalBasis<DF,RF,2,k> LocalBasis;
│ │ │ │ -
32 typedef Impl::LagrangeSimplexLocalInterpolation<LocalBasis> LocalInterpolation;
│ │ │ │ -
33
│ │ │ │ -
34 public:
│ │ │ │ -
│ │ │ │ -
38 struct Traits {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
41 LocalInterpolation,
│ │ │ │ -
42 typename Basis::Traits
│ │ │ │ - │ │ │ │ -
44 typedef Impl::LagrangeSimplexLocalCoefficients<2,k> Coefficients;
│ │ │ │ -
45 };
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47 private:
│ │ │ │ -
48 static const GeometryType gt;
│ │ │ │ -
49 static const LocalBasis localBasis;
│ │ │ │ -
50 static const LocalInterpolation localInterpolation;
│ │ │ │ -
51
│ │ │ │ -
52 typename Traits::Basis basis_;
│ │ │ │ -
53 typename Traits::Interpolation interpolation_;
│ │ │ │ -
54 typename Traits::Coefficients coefficients_;
│ │ │ │ -
55
│ │ │ │ -
56 public:
│ │ │ │ -
58
│ │ │ │ -
71 template<class VertexOrder>
│ │ │ │ -
│ │ │ │ -
72 Pk2DFiniteElement(const Geometry &geometry,
│ │ │ │ -
73 const VertexOrder& vertexOrder) :
│ │ │ │ -
74 basis_(localBasis, geometry), interpolation_(localInterpolation),
│ │ │ │ -
75 coefficients_(vertexOrder.begin(0, 0))
│ │ │ │ -
76 { }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
78 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ -
│ │ │ │ -
79 const typename Traits::Interpolation& interpolation() const
│ │ │ │ -
80 { return interpolation_; }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
81 const typename Traits::Coefficients& coefficients() const
│ │ │ │ -
82 { return coefficients_; }
│ │ │ │ -
│ │ │ │ -
83 const GeometryType &type() const { return gt; }
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
87 const GeometryType
│ │ │ │ -
88 Pk2DFiniteElement<Geometry, RF, k>::gt(GeometryTypes::simplex(2));
│ │ │ │ -
89
│ │ │ │ -
90 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
91 const typename Pk2DFiniteElement<Geometry, RF, k>::LocalBasis
│ │ │ │ -
92 Pk2DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
│ │ │ │ -
93
│ │ │ │ -
94 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
95 const typename Pk2DFiniteElement<Geometry, RF, k>::LocalInterpolation
│ │ │ │ -
96 Pk2DFiniteElement<Geometry, RF, k>::localInterpolation =
│ │ │ │ -
97 LocalInterpolation();
│ │ │ │ -
98
│ │ │ │ -
100
│ │ │ │ -
110 template<class Geometry, class RF, std::size_t k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ - │ │ │ │ -
113
│ │ │ │ -
115
│ │ │ │ -
129 template<class VertexOrder>
│ │ │ │ -
│ │ │ │ -
130 const FiniteElement make(const Geometry& geometry,
│ │ │ │ -
131 const VertexOrder& vertexOrder)
│ │ │ │ -
132 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ -
│ │ │ │ -
133 };
│ │ │ │ -
│ │ │ │ -
134}
│ │ │ │ -
135
│ │ │ │ -
136#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ -
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ -
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ -
Langrange finite element of arbitrary order on triangles.
Definition pk2d.hh:29
│ │ │ │ -
Pk2DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder)
construct a Pk2DFiniteElement
Definition pk2d.hh:72
│ │ │ │ -
const Traits::Interpolation & interpolation() const
Definition pk2d.hh:79
│ │ │ │ -
const Traits::Basis & basis() const
Definition pk2d.hh:78
│ │ │ │ -
const Traits::Coefficients & coefficients() const
Definition pk2d.hh:81
│ │ │ │ -
const GeometryType & type() const
Definition pk2d.hh:83
│ │ │ │ -
Definition pk2d.hh:38
│ │ │ │ -
ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis
Definition pk2d.hh:39
│ │ │ │ -
Impl::LagrangeSimplexLocalCoefficients< 2, k > Coefficients
Definition pk2d.hh:44
│ │ │ │ -
LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > Interpolation
Definition pk2d.hh:43
│ │ │ │ -
Factory for Pk2DFiniteElement objects.
Definition pk2d.hh:111
│ │ │ │ -
Pk2DFiniteElement< Geometry, RF, k > FiniteElement
Definition pk2d.hh:112
│ │ │ │ -
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct Pk2DFiniteElementFactory
Definition pk2d.hh:130
│ │ │ │ +
10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,158 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pk2d.hh │ │ │ │ │ +enriched.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ 9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -19 │ │ │ │ │ -21 │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ -30 typedef typename Geometry::ctype DF; │ │ │ │ │ -31 typedef Impl::LagrangeSimplexLocalBasis LocalBasis; │ │ │ │ │ -32 typedef Impl::LagrangeSimplexLocalInterpolation │ │ │ │ │ -LocalInterpolation; │ │ │ │ │ -33 │ │ │ │ │ -34 public: │ │ │ │ │ -_3_8 struct _T_r_a_i_t_s { │ │ │ │ │ -_3_9 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _B_a_s_i_s; │ │ │ │ │ -40 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r< │ │ │ │ │ -41 LocalInterpolation, │ │ │ │ │ -42 typename _B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -_4_3 > _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_4_4 typedef Impl::LagrangeSimplexLocalCoefficients<2,k> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ -45 }; │ │ │ │ │ -46 │ │ │ │ │ -47 private: │ │ │ │ │ -48 static const GeometryType gt; │ │ │ │ │ -49 static const LocalBasis localBasis; │ │ │ │ │ -50 static const LocalInterpolation localInterpolation; │ │ │ │ │ -51 │ │ │ │ │ -52 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ -53 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ -54 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ -55 │ │ │ │ │ -56 public: │ │ │ │ │ -58 │ │ │ │ │ -71 template │ │ │ │ │ -_7_2 _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry &geometry, │ │ │ │ │ -73 const VertexOrder& vertexOrder) : │ │ │ │ │ -74 basis_(localBasis, geometry), interpolation_(localInterpolation), │ │ │ │ │ -75 coefficients_(vertexOrder.begin(0, 0)) │ │ │ │ │ -76 { } │ │ │ │ │ -77 │ │ │ │ │ -_7_8 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ -_7_9 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -80 { return interpolation_; } │ │ │ │ │ -_8_1 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -82 { return coefficients_; } │ │ │ │ │ -_8_3 const GeometryType &_t_y_p_e() const { return gt; } │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ -86 template │ │ │ │ │ -87 const GeometryType │ │ │ │ │ -88 Pk2DFiniteElement::gt(GeometryTypes::simplex(2)); │ │ │ │ │ -89 │ │ │ │ │ -90 template │ │ │ │ │ -91 const typename Pk2DFiniteElement::LocalBasis │ │ │ │ │ -92 Pk2DFiniteElement::localBasis = LocalBasis(); │ │ │ │ │ -93 │ │ │ │ │ -94 template │ │ │ │ │ -95 const typename Pk2DFiniteElement::LocalInterpolation │ │ │ │ │ -96 Pk2DFiniteElement::localInterpolation = │ │ │ │ │ -97 LocalInterpolation(); │ │ │ │ │ -98 │ │ │ │ │ -100 │ │ │ │ │ -110 template │ │ │ │ │ -_1_1_1 struct _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ -_1_1_2 typedef _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ -113 │ │ │ │ │ -115 │ │ │ │ │ -129 template │ │ │ │ │ -_1_3_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ -131 const VertexOrder& vertexOrder) │ │ │ │ │ -132 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ -133 }; │ │ │ │ │ -134} │ │ │ │ │ -135 │ │ │ │ │ -136#endif │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ -Traits class for local-to-global basis adaptors. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local basis into a global basis. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ -Convert a local interpolation into a global interpolation. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Langrange finite element of arbitrary order on triangles. │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Pk2DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder) │ │ │ │ │ -construct a Pk2DFiniteElement │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::Interpolation & interpolation() const │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ -const Traits::Basis & basis() const │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::Coefficients & coefficients() const │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:81 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -const GeometryType & type() const │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ -ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Impl::LagrangeSimplexLocalCoefficients< 2, k > Coefficients │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > │ │ │ │ │ -Interpolation │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory for Pk2DFiniteElement objects. │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Pk2DFiniteElement< Geometry, RF, k > FiniteElement │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:112 │ │ │ │ │ -_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ -const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ -&vertexOrder) │ │ │ │ │ -construct Pk2DFiniteElementFactory │ │ │ │ │ -DDeeffiinniittiioonn pk2d.hh:130 │ │ │ │ │ +10#endif // DUNE_LOCALFUNCTIONS_ENRICHED_HH │ │ │ │ │ +_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0.hh File Reference │ │ │ │ +dune-localfunctions: orthonormalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
p0.hh File Reference
│ │ │ │ +
orthonormalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "p0/p0localbasis.hh"
│ │ │ │ -#include "p0/p0localcoefficients.hh"
│ │ │ │ -#include "p0/p0localinterpolation.hh"
│ │ │ │ +
#include <sstream>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::P0LocalFiniteElement< D, R, d >
 The local p0 finite element on all types of reference elements. More...
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >
 
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >::EvaluationBasisFactory< dd, FF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -p0.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_p_0_/_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_p_0_/_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_p_0_/_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +orthonormalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ -  The local p0 finite element on all types of reference elements. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_< │ │ │ │ │ + _d_d_,_ _F_F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00380_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: p0.hh Source File │ │ │ │ +dune-localfunctions: orthonormalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,115 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
p0.hh
│ │ │ │ +
orthonormalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <sstream>
│ │ │ │
9
│ │ │ │ - │ │ │ │ -
11#include "p0/p0localbasis.hh"
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
23 template<class D, class R, int d>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
31
│ │ │ │ -
│ │ │ │ -
34 P0LocalFiniteElement (const GeometryType& type)
│ │ │ │ -
35 : interpolation(type), gt(type)
│ │ │ │ -
36 {}
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
16 // OrthonormalBasisFactory
│ │ │ │ +
17 // -----------------------
│ │ │ │ +
18 template< int dim, class SF, class CF = typename ComputeField< SF, 512 >::Type >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
20 {
│ │ │ │ +
21 static const unsigned int dimension = dim;
│ │ │ │ +
22 typedef SF StorageField;
│ │ │ │ +
23 typedef CF ComputeField;
│ │ │ │ +
24
│ │ │ │ +
25 template <unsigned int dd, class FF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │ + │ │ │ │ +
29 };
│ │ │ │ +
│ │ │ │ +
30
│ │ │ │ + │ │ │ │ +
32 typedef typename MonomialBasisProviderType::Object MonomialBasisType;
│ │ │ │ +
33
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
37
│ │ │ │ -
│ │ │ │ -
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return basis;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
48 {
│ │ │ │ -
49 return coefficients;
│ │ │ │ -
50 }
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 {
│ │ │ │ -
56 return interpolation;
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ -
60 unsigned int size () const
│ │ │ │ -
61 {
│ │ │ │ -
62 return 1;
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ -
67 GeometryType type () const
│ │ │ │ -
68 {
│ │ │ │ -
69 return gt;
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
72 private:
│ │ │ │ - │ │ │ │ -
74 P0LocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
76 GeometryType gt;
│ │ │ │ -
77 };
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79}
│ │ │ │ -
80
│ │ │ │ -
81#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
38 typedef unsigned int Key;
│ │ │ │ +
39 typedef const Basis Object;
│ │ │ │ +
40
│ │ │ │ +
41 static constexpr GeometryType SimplexGeometry = GeometryTypes::simplex(dim);
│ │ │ │ +
42
│ │ │ │ +
43 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
44 static Object *create ( const unsigned int order )
│ │ │ │ +
45 {
│ │ │ │ +
46 const MonomialBasisType &monomialBasis = *MonomialBasisProviderType::template create< SimplexGeometry >( order );
│ │ │ │ +
47
│ │ │ │ +
48 static CoefficientMatrix _coeffs;
│ │ │ │ +
49 if( _coeffs.size() <= monomialBasis.size() )
│ │ │ │ +
50 {
│ │ │ │ + │ │ │ │ +
52 _coeffs.fill( matrix );
│ │ │ │ +
53 }
│ │ │ │ +
54
│ │ │ │ +
55 return new Basis( monomialBasis, _coeffs, monomialBasis.size() );
│ │ │ │ +
56 }
│ │ │ │ +
│ │ │ │ +
57 static void release( Object *object ) { delete object; }
│ │ │ │ +
58 };
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
60}
│ │ │ │ +
61
│ │ │ │ +
62#endif // #ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
The local p0 finite element on all types of reference elements.
Definition p0.hh:25
│ │ │ │ -
P0LocalFiniteElement(const GeometryType &type)
Definition p0.hh:34
│ │ │ │ -
unsigned int size() const
The number of shape functions – here: 1.
Definition p0.hh:60
│ │ │ │ -
GeometryType type() const
Definition p0.hh:67
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition p0.hh:40
│ │ │ │ -
LocalFiniteElementTraits< P0LocalBasis< D, R, d >, P0LocalCoefficients, P0LocalInterpolation< P0LocalBasis< D, R, d > > > Traits
Definition p0.hh:30
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition p0.hh:47
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition p0.hh:54
│ │ │ │ -
Definition p0localbasis.hh:31
│ │ │ │ -
Definition p0localcoefficients.hh:25
│ │ │ │ -
Definition p0localinterpolation.hh:20
│ │ │ │ +
Definition orthonormalbasis.hh:20
│ │ │ │ +
SparseCoeffMatrix< StorageField, 1 > CoefficientMatrix
Definition orthonormalbasis.hh:34
│ │ │ │ +
static Object * create(const unsigned int order)
Definition orthonormalbasis.hh:44
│ │ │ │ +
StandardEvaluator< MonomialBasisType > Evaluator
Definition orthonormalbasis.hh:35
│ │ │ │ +
SF StorageField
Definition orthonormalbasis.hh:22
│ │ │ │ +
static constexpr GeometryType SimplexGeometry
Definition orthonormalbasis.hh:41
│ │ │ │ +
PolynomialBasis< Evaluator, CoefficientMatrix > Basis
Definition orthonormalbasis.hh:36
│ │ │ │ +
EvaluationBasisFactory< dimension, StorageField >::Type MonomialBasisProviderType
Definition orthonormalbasis.hh:31
│ │ │ │ +
CF ComputeField
Definition orthonormalbasis.hh:23
│ │ │ │ +
const Basis Object
Definition orthonormalbasis.hh:39
│ │ │ │ +
unsigned int Key
Definition orthonormalbasis.hh:38
│ │ │ │ +
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │ +
static const unsigned int dimension
Definition orthonormalbasis.hh:21
│ │ │ │ +
MonomialBasisProviderType::Object MonomialBasisType
Definition orthonormalbasis.hh:32
│ │ │ │ + │ │ │ │ +
MonomialBasisProvider< dd, FF > Type
Definition orthonormalbasis.hh:28
│ │ │ │ +
Definition orthonormalcompute.hh:95
│ │ │ │ +
Definition basisevaluator.hh:131
│ │ │ │ +
Definition coeffmatrix.hh:48
│ │ │ │ +
unsigned int size() const
Definition coeffmatrix.hh:69
│ │ │ │ +
void fill(const RowMatrix &mat, bool verbose=false)
Definition coeffmatrix.hh:160
│ │ │ │ +
Definition monomialbasis.hh:780
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,125 +1,144 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -p0.hh │ │ │ │ │ + * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ +orthonormalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_P0LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_P0LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_p_0_/_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_p_0_/_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_p_0_/_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -29 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_>, _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_0 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> > > _T_r_a_i_t_s; │ │ │ │ │ -31 │ │ │ │ │ -_3_4 _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (const GeometryType& _t_y_p_e) │ │ │ │ │ -35 : interpolation(_t_y_p_e), gt(_t_y_p_e) │ │ │ │ │ -36 {} │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +16 // OrthonormalBasisFactory │ │ │ │ │ +17 // ----------------------- │ │ │ │ │ +18 template< int dim, class SF, class CF = typename ComputeField< SF, 512 >:: │ │ │ │ │ +Type > │ │ │ │ │ +_1_9 struct _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +20 { │ │ │ │ │ +_2_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_2_2 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ +_2_3 typedef CF _C_o_m_p_u_t_e_F_i_e_l_d; │ │ │ │ │ +24 │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +27 { │ │ │ │ │ +_2_8 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ +29 }; │ │ │ │ │ +30 │ │ │ │ │ +_3_1 typedef typename _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _S_t_o_r_a_g_e_F_i_e_l_d_ _>_:_:_T_y_p_e │ │ │ │ │ +_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_T_y_p_e; │ │ │ │ │ +_3_2 typedef typename MonomialBasisProviderType::Object _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e; │ │ │ │ │ +33 │ │ │ │ │ +_3_4 typedef _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _S_t_o_r_a_g_e_F_i_e_l_d_,_ _1_ _> _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ +_3_5 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e_ _> _E_v_a_l_u_a_t_o_r; │ │ │ │ │ +_3_6 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_u_a_t_o_r_,_ _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x_ _> _B_a_s_i_s; │ │ │ │ │ 37 │ │ │ │ │ -_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -41 { │ │ │ │ │ -42 return basis; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -_4_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -48 { │ │ │ │ │ -49 return coefficients; │ │ │ │ │ -50 } │ │ │ │ │ -51 │ │ │ │ │ -_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -55 { │ │ │ │ │ -56 return interpolation; │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_6_0 unsigned int _s_i_z_e () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return 1; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_7 GeometryType _t_y_p_e () const │ │ │ │ │ -68 { │ │ │ │ │ -69 return gt; │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -72 private: │ │ │ │ │ -73 _P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> basis; │ │ │ │ │ -74 _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -75 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> > interpolation; │ │ │ │ │ -76 GeometryType gt; │ │ │ │ │ -77 }; │ │ │ │ │ -78 │ │ │ │ │ -79} │ │ │ │ │ -80 │ │ │ │ │ -81#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_3_8 typedef unsigned int _K_e_y; │ │ │ │ │ +_3_9 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ +40 │ │ │ │ │ +_4_1 static constexpr GeometryType _S_i_m_p_l_e_x_G_e_o_m_e_t_r_y = GeometryTypes::simplex(dim); │ │ │ │ │ +42 │ │ │ │ │ +43 template< GeometryType::Id geometryId > │ │ │ │ │ +_4_4 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const unsigned int order ) │ │ │ │ │ +45 { │ │ │ │ │ +46 const _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e &monomialBasis = *MonomialBasisProviderType:: │ │ │ │ │ +template create< SimplexGeometry >( order ); │ │ │ │ │ +47 │ │ │ │ │ +48 static _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x _coeffs; │ │ │ │ │ +49 if( _coeffs._s_i_z_e() <= monomialBasis.size() ) │ │ │ │ │ +50 { │ │ │ │ │ +51 _O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _C_o_m_p_u_t_e_F_i_e_l_d_ _> matrix( order ); │ │ │ │ │ +52 _coeffs._f_i_l_l( matrix ); │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +55 return new _B_a_s_i_s( monomialBasis, _coeffs, monomialBasis._s_i_z_e() ); │ │ │ │ │ +56 } │ │ │ │ │ +_5_7 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +58 }; │ │ │ │ │ +59 │ │ │ │ │ +60} │ │ │ │ │ +61 │ │ │ │ │ +62#endif // #ifndef DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ +_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -The local p0 finite element on all types of reference elements. │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -P0LocalFiniteElement(const GeometryType &type) │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ +SparseCoeffMatrix< StorageField, 1 > CoefficientMatrix │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_o_r │ │ │ │ │ +StandardEvaluator< MonomialBasisType > Evaluator │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ +SF StorageField │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_i_m_p_l_e_x_G_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType SimplexGeometry │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ +PolynomialBasis< Evaluator, CoefficientMatrix > Basis │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_T_y_p_e │ │ │ │ │ +EvaluationBasisFactory< dimension, StorageField >::Type │ │ │ │ │ +MonomialBasisProviderType │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ +CF ComputeField │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const Basis Object │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +unsigned int Key │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +MonomialBasisProviderType::Object MonomialBasisType │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +MonomialBasisProvider< dd, FF > Type │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:28 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -The number of shape functions – here: 1. │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< P0LocalBasis< D, R, d >, P0LocalCoefficients, │ │ │ │ │ -P0LocalInterpolation< P0LocalBasis< D, R, d > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn p0localbasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn p0localcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn p0localinterpolation.hh:20 │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ +void fill(const RowMatrix &mat, bool verbose=false) │ │ │ │ │ +DDeeffiinniittiioonn coeffmatrix.hh:160 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecoefficients.hh File Reference │ │ │ │ +dune-localfunctions: orthonormalcompute.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,57 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
lagrangecoefficients.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
orthonormalcompute.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <fstream>
│ │ │ │ +#include <iomanip>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <map>
│ │ │ │ +#include <dune/common/dynmatrix.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LagrangeCoefficientsFactory< LP, dim, F >
struct  ONBCompute::Integral< geometryId >
 
class  ONBCompute::ONBMatrix< geometryId, scalar_t >
 
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
namespace  ONBCompute
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

template<class scalar_t >
scalar_t ONBCompute::factorial (int start, int end)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,36 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangecoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +orthonormalcompute.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ +struct   _O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_<_ _g_e_o_m_e_t_r_y_I_d_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _s_c_a_l_a_r___t_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ +namespace   _O_N_B_C_o_m_p_u_t_e │ │ │ │ │ +  │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ +template │ │ │ │ │ +scalar_t  _O_N_B_C_o_m_p_u_t_e_:_:_f_a_c_t_o_r_i_a_l (int start, int end) │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00383_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangecoefficients.hh Source File │ │ │ │ +dune-localfunctions: orthonormalcompute.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,81 +70,264 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangecoefficients.hh
│ │ │ │ +
orthonormalcompute.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ +
6#define DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/geometry/type.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <fstream>
│ │ │ │ +
11#include <iomanip>
│ │ │ │ +
12#include <utility>
│ │ │ │ +
13#include <map>
│ │ │ │ +
14
│ │ │ │ +
15#include <dune/common/dynmatrix.hh>
│ │ │ │ +
16#include <dune/common/fmatrix.hh>
│ │ │ │ +
17
│ │ │ │ +
18#include <dune/geometry/type.hh>
│ │ │ │
19
│ │ │ │ -
20 template< template <class,unsigned int> class LP,
│ │ │ │ -
21 unsigned int dim, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24 static const unsigned int dimension = dim;
│ │ │ │ -
25 const typedef LP<F,dim> Object;
│ │ │ │ -
26 typedef std::size_t Key;
│ │ │ │ -
27
│ │ │ │ -
28 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
29 static Object *create ( const Key &order )
│ │ │ │ -
30 {
│ │ │ │ -
31 if (order == 0 || !Object::template supports<geometryId>(order))
│ │ │ │ -
32 return 0;
│ │ │ │ -
33 typedef typename std::remove_const<Object>::type LagrangeCoefficients;
│ │ │ │ -
34 LagrangeCoefficients *object = new LagrangeCoefficients(order);
│ │ │ │ -
35 if ( !object->template build<geometryId>() )
│ │ │ │ -
36 {
│ │ │ │ -
37 delete object;
│ │ │ │ -
38 object = nullptr;
│ │ │ │ -
39 }
│ │ │ │ -
40 return object;
│ │ │ │ -
41 }
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
23
│ │ │ │ +
│ │ │ │ +
24namespace ONBCompute
│ │ │ │ +
25{
│ │ │ │ +
26
│ │ │ │ +
27 template< class scalar_t >
│ │ │ │ +
│ │ │ │ +
28 scalar_t factorial( int start, int end )
│ │ │ │ +
29 {
│ │ │ │ +
30 scalar_t ret( 1 );
│ │ │ │ +
31 for( int j = start; j <= end; ++j )
│ │ │ │ +
32 ret *= scalar_t( j );
│ │ │ │ +
33 return ret;
│ │ │ │ +
34 }
│ │ │ │
│ │ │ │ -
42 static void release( Object *object ) { delete object; }
│ │ │ │ -
43 };
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
45}
│ │ │ │ +
35
│ │ │ │ +
36
│ │ │ │ +
37
│ │ │ │ +
38 // Integral
│ │ │ │ +
39 // --------
│ │ │ │ +
40
│ │ │ │ +
41 template< Dune::GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
42 struct Integral
│ │ │ │ +
43 {
│ │ │ │ +
44 static constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ +
45 static constexpr int dimension = geometry.dim();
│ │ │ │
46
│ │ │ │ -
47#endif // DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Definition lagrangecoefficients.hh:23
│ │ │ │ -
static const unsigned int dimension
Definition lagrangecoefficients.hh:24
│ │ │ │ -
static void release(Object *object)
Definition lagrangecoefficients.hh:42
│ │ │ │ -
const typedef LP< F, dim > Object
Definition lagrangecoefficients.hh:25
│ │ │ │ -
static Object * create(const Key &order)
Definition lagrangecoefficients.hh:29
│ │ │ │ -
std::size_t Key
Definition lagrangecoefficients.hh:26
│ │ │ │ +
47 template< int dim, class scalar_t >
│ │ │ │ +
│ │ │ │ +
48 static int compute ( const Dune::MultiIndex< dim, scalar_t > &alpha,
│ │ │ │ +
49 scalar_t &p, scalar_t &q )
│ │ │ │ +
50 {
│ │ │ │ +
51 return compute(alpha, p, q, std::make_integer_sequence<int,dimension>{});
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
54 template< int dim, class scalar_t , int ...ints>
│ │ │ │ +
│ │ │ │ +
55 static int compute ( const Dune::MultiIndex< dim, scalar_t > &alpha,
│ │ │ │ +
56 scalar_t &p, scalar_t &q, std::integer_sequence<int,ints...> intS)
│ │ │ │ +
57 {
│ │ │ │ +
58 p = scalar_t( 1 );
│ │ │ │ +
59 q = scalar_t( 1 );
│ │ │ │ +
60
│ │ │ │ +
61 int ord = 0;
│ │ │ │ +
62 ((computeIntegral<ints>(alpha,p,q,ord)),...);
│ │ │ │ +
63
│ │ │ │ +
64 return ord;
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
67 template< int step, int dim, class scalar_t >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
69 scalar_t &p, scalar_t &q, int& ord)
│ │ │ │ +
70 {
│ │ │ │ +
71 int i = alpha.z( step );
│ │ │ │ +
72
│ │ │ │ +
73 if constexpr ( geometry.isPrismatic(step))
│ │ │ │ +
74 {
│ │ │ │ +
75 //p *= scalar_t( 1 );
│ │ │ │ +
76 q *= scalar_t( i+1 );
│ │ │ │ +
77 }
│ │ │ │ +
78 else
│ │ │ │ +
79 {
│ │ │ │ +
80 p *= factorial< scalar_t >( 1, i );
│ │ │ │ +
81 q *= factorial< scalar_t >( step+1 + ord, step+1 + ord + i );
│ │ │ │ +
82 }
│ │ │ │ +
83 ord +=i;
│ │ │ │ +
84 }
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86 };
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
88
│ │ │ │ +
89 // ONBMatrix
│ │ │ │ +
90 // ---------
│ │ │ │ +
91
│ │ │ │ +
92 template< Dune::GeometryType::Id geometryId, class scalar_t >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
94 : public Dune::DynamicMatrix< scalar_t >
│ │ │ │ +
95 {
│ │ │ │ + │ │ │ │ +
97 typedef Dune::DynamicMatrix< scalar_t > Base;
│ │ │ │ +
98
│ │ │ │ +
99 public:
│ │ │ │ +
100 typedef std::vector< scalar_t > vec_t;
│ │ │ │ +
101 typedef Dune::DynamicMatrix< scalar_t > mat_t;
│ │ │ │ +
102
│ │ │ │ +
│ │ │ │ +
103 explicit ONBMatrix ( unsigned int order )
│ │ │ │ +
104 {
│ │ │ │ +
105 // get all multiindecies for monomial basis
│ │ │ │ +
106 constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ +
107 constexpr unsigned int dim = geometry.dim();
│ │ │ │ + │ │ │ │ + │ │ │ │ +
110 const std::size_t size = basis.size();
│ │ │ │ +
111 std::vector< Dune::FieldVector< MI, 1 > > y( size );
│ │ │ │ +
112 Dune::FieldVector< MI, dim > x;
│ │ │ │ +
113 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ +
114 x[ i ].set( i );
│ │ │ │ +
115 basis.evaluate( x, y );
│ │ │ │ +
116
│ │ │ │ +
117 // set bounds of data
│ │ │ │ +
118 Base::resize( size, size );
│ │ │ │ +
119 S.resize( size, size );
│ │ │ │ +
120 d.resize( size );
│ │ │ │ +
121
│ │ │ │ +
122 // setup matrix for bilinear form x^T S y: S_ij = int_A x^(i+j)
│ │ │ │ +
123 scalar_t p, q;
│ │ │ │ +
124 for( std::size_t i = 0; i < size; ++i )
│ │ │ │ +
125 {
│ │ │ │ +
126 for( std::size_t j = 0; j < size; ++j )
│ │ │ │ +
127 {
│ │ │ │ +
128 Integral< geometryId >::compute( y[ i ][ 0 ] * y[ j ][ 0 ], p, q );
│ │ │ │ +
129 S[i][j] = p;
│ │ │ │ +
130 S[i][j] /= q;
│ │ │ │ +
131 }
│ │ │ │ +
132 }
│ │ │ │ +
133
│ │ │ │ +
134 // orthonormalize
│ │ │ │ +
135 gramSchmidt();
│ │ │ │ +
136 }
│ │ │ │ +
│ │ │ │ +
137
│ │ │ │ +
138 template< class Vector >
│ │ │ │ +
│ │ │ │ +
139 void row ( unsigned int row, Vector &vec ) const
│ │ │ │ +
140 {
│ │ │ │ +
141 // transposed matrix is required
│ │ │ │ +
142 assert( row < Base::cols() );
│ │ │ │ +
143 for( std::size_t i = 0; i < Base::rows(); ++i )
│ │ │ │ +
144 Dune::field_cast( (*this)[i][row], vec[ i ] );
│ │ │ │ +
145 }
│ │ │ │ +
│ │ │ │ +
146
│ │ │ │ +
147 private:
│ │ │ │ +
148 void sprod ( int col1, int col2, scalar_t &ret )
│ │ │ │ +
149 {
│ │ │ │ +
150 ret = 0;
│ │ │ │ +
151 for( int k = 0; k <= col1; ++k )
│ │ │ │ +
152 {
│ │ │ │ +
153 for( int l = 0; l <=col2; ++l )
│ │ │ │ +
154 ret += (*this)[l][col2] * S[l][k] * (*this)[k][col1];
│ │ │ │ +
155 }
│ │ │ │ +
156 }
│ │ │ │ +
157
│ │ │ │ +
158 void vmul ( std::size_t col, std::size_t rowEnd, const scalar_t &s )
│ │ │ │ +
159 {
│ │ │ │ +
160 for( std::size_t i = 0; i <= rowEnd; ++i )
│ │ │ │ +
161 (*this)[i][col] *= s;
│ │ │ │ +
162 }
│ │ │ │ +
163
│ │ │ │ +
164 void vsub ( std::size_t coldest, std::size_t colsrc, std::size_t rowEnd, const scalar_t &s )
│ │ │ │ +
165 {
│ │ │ │ +
166 for( std::size_t i = 0; i <= rowEnd; ++i )
│ │ │ │ +
167 (*this)[i][coldest] -= s * (*this)[i][colsrc];
│ │ │ │ +
168 }
│ │ │ │ +
169
│ │ │ │ +
170 void gramSchmidt ()
│ │ │ │ +
171 {
│ │ │ │ +
172 using std::sqrt;
│ │ │ │ +
173 // setup identity
│ │ │ │ +
174 const std::size_t N = Base::rows();
│ │ │ │ +
175 for( std::size_t i = 0; i < N; ++i )
│ │ │ │ +
176 {
│ │ │ │ +
177 for( std::size_t j = 0; j < N; ++j )
│ │ │ │ +
178 (*this)[i][j] = scalar_t( i == j ? 1 : 0 );
│ │ │ │ +
179 }
│ │ │ │ +
180
│ │ │ │ +
181 // perform Gram-Schmidt procedure
│ │ │ │ +
182 scalar_t s;
│ │ │ │ +
183 sprod( 0, 0, s );
│ │ │ │ +
184 vmul( 0, 0, scalar_t( 1 ) / sqrt( s ) );
│ │ │ │ +
185 for( std::size_t i = 1; i < N; ++i )
│ │ │ │ +
186 {
│ │ │ │ +
187 for( std::size_t k = 0; k < i; ++k )
│ │ │ │ +
188 {
│ │ │ │ +
189 sprod( i, k, s );
│ │ │ │ +
190 vsub( i, k, i, s );
│ │ │ │ +
191 }
│ │ │ │ +
192 sprod( i, i, s );
│ │ │ │ +
193 vmul( i, i, scalar_t( 1 ) / sqrt( s ) );
│ │ │ │ +
194 }
│ │ │ │ +
195 }
│ │ │ │ +
196
│ │ │ │ +
197 vec_t d;
│ │ │ │ +
198 mat_t S;
│ │ │ │ +
199 };
│ │ │ │ +
│ │ │ │ +
200
│ │ │ │ +
201} // namespace ONBCompute
│ │ │ │ +
│ │ │ │ +
202
│ │ │ │ +
203#endif // #ifndef DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition orthonormalcompute.hh:25
│ │ │ │ +
scalar_t factorial(int start, int end)
Definition orthonormalcompute.hh:28
│ │ │ │ +
Definition orthonormalcompute.hh:43
│ │ │ │ +
static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q)
Definition orthonormalcompute.hh:48
│ │ │ │ +
static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q, std::integer_sequence< int, ints... > intS)
Definition orthonormalcompute.hh:55
│ │ │ │ +
static void computeIntegral(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q, int &ord)
Definition orthonormalcompute.hh:68
│ │ │ │ +
static constexpr int dimension
Definition orthonormalcompute.hh:45
│ │ │ │ +
static constexpr Dune::GeometryType geometry
Definition orthonormalcompute.hh:44
│ │ │ │ +
Definition orthonormalcompute.hh:95
│ │ │ │ +
ONBMatrix(unsigned int order)
Definition orthonormalcompute.hh:103
│ │ │ │ +
std::vector< scalar_t > vec_t
Definition orthonormalcompute.hh:100
│ │ │ │ +
Dune::DynamicMatrix< scalar_t > mat_t
Definition orthonormalcompute.hh:101
│ │ │ │ +
void row(unsigned int row, Vector &vec) const
Definition orthonormalcompute.hh:139
│ │ │ │ +
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ +
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ +
Definition monomialbasis.hh:571
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
int z(int i) const
Definition multiindex.hh:92
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,80 +1,277 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangecoefficients.hh │ │ │ │ │ + * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ +orthonormalcompute.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ +6#define DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include │ │ │ │ │ 19 │ │ │ │ │ -20 template< template class LP, │ │ │ │ │ -21 unsigned int dim, class F> │ │ │ │ │ -_2_2 struct _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -23 { │ │ │ │ │ -_2_4 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_2_5 const typedef LP _O_b_j_e_c_t; │ │ │ │ │ -_2_6 typedef std::size_t _K_e_y; │ │ │ │ │ -27 │ │ │ │ │ -28 template< GeometryType::Id geometryId > │ │ │ │ │ -_2_9 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ -30 { │ │ │ │ │ -31 if (order == 0 || !Object::template supports(order)) │ │ │ │ │ -32 return 0; │ │ │ │ │ -33 typedef typename std::remove_const::type LagrangeCoefficients; │ │ │ │ │ -34 LagrangeCoefficients *object = new LagrangeCoefficients(order); │ │ │ │ │ -35 if ( !object->template build() ) │ │ │ │ │ -36 { │ │ │ │ │ -37 delete object; │ │ │ │ │ -38 object = nullptr; │ │ │ │ │ -39 } │ │ │ │ │ -40 return object; │ │ │ │ │ -41 } │ │ │ │ │ -_4_2 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -43 }; │ │ │ │ │ -44 │ │ │ │ │ -45} │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +23 │ │ │ │ │ +_2_4namespace _O_N_B_C_o_m_p_u_t_e │ │ │ │ │ +25{ │ │ │ │ │ +26 │ │ │ │ │ +27 template< class scalar_t > │ │ │ │ │ +_2_8 scalar_t _f_a_c_t_o_r_i_a_l( int start, int end ) │ │ │ │ │ +29 { │ │ │ │ │ +30 scalar_t ret( 1 ); │ │ │ │ │ +31 for( int j = start; j <= end; ++j ) │ │ │ │ │ +32 ret *= scalar_t( j ); │ │ │ │ │ +33 return ret; │ │ │ │ │ +34 } │ │ │ │ │ +35 │ │ │ │ │ +36 │ │ │ │ │ +37 │ │ │ │ │ +38 // Integral │ │ │ │ │ +39 // -------- │ │ │ │ │ +40 │ │ │ │ │ +41 template< Dune::GeometryType::Id geometryId > │ │ │ │ │ +_4_2 struct _I_n_t_e_g_r_a_l │ │ │ │ │ +43 { │ │ │ │ │ +_4_4 static constexpr Dune::GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ +_4_5 static constexpr int _d_i_m_e_n_s_i_o_n = _g_e_o_m_e_t_r_y.dim(); │ │ │ │ │ 46 │ │ │ │ │ -47#endif // DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +47 template< int dim, class scalar_t > │ │ │ │ │ +_4_8 static int _c_o_m_p_u_t_e ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> &alpha, │ │ │ │ │ +49 scalar_t &p, scalar_t &q ) │ │ │ │ │ +50 { │ │ │ │ │ +51 return _c_o_m_p_u_t_e(alpha, p, q, std::make_integer_sequence{}); │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +54 template< int dim, class scalar_t , int ...ints> │ │ │ │ │ +_5_5 static int _c_o_m_p_u_t_e ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> &alpha, │ │ │ │ │ +56 scalar_t &p, scalar_t &q, std::integer_sequence intS) │ │ │ │ │ +57 { │ │ │ │ │ +58 p = scalar_t( 1 ); │ │ │ │ │ +59 q = scalar_t( 1 ); │ │ │ │ │ +60 │ │ │ │ │ +61 int ord = 0; │ │ │ │ │ +62 ((computeIntegral(alpha,p,q,ord)),...); │ │ │ │ │ +63 │ │ │ │ │ +64 return ord; │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +67 template< int step, int dim, class scalar_t > │ │ │ │ │ +_6_8 static void _c_o_m_p_u_t_e_I_n_t_e_g_r_a_l ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> │ │ │ │ │ +&alpha, │ │ │ │ │ +69 scalar_t &p, scalar_t &q, int& ord) │ │ │ │ │ +70 { │ │ │ │ │ +71 int i = alpha._z( step ); │ │ │ │ │ +72 │ │ │ │ │ +73 if constexpr ( _g_e_o_m_e_t_r_y.isPrismatic(step)) │ │ │ │ │ +74 { │ │ │ │ │ +75 //p *= scalar_t( 1 ); │ │ │ │ │ +76 q *= scalar_t( i+1 ); │ │ │ │ │ +77 } │ │ │ │ │ +78 else │ │ │ │ │ +79 { │ │ │ │ │ +80 p *= factorial< scalar_t >( 1, i ); │ │ │ │ │ +81 q *= factorial< scalar_t >( step+1 + ord, step+1 + ord + i ); │ │ │ │ │ +82 } │ │ │ │ │ +83 ord +=i; │ │ │ │ │ +84 } │ │ │ │ │ +85 │ │ │ │ │ +86 }; │ │ │ │ │ +87 │ │ │ │ │ +88 │ │ │ │ │ +89 // ONBMatrix │ │ │ │ │ +90 // --------- │ │ │ │ │ +91 │ │ │ │ │ +92 template< Dune::GeometryType::Id geometryId, class scalar_t > │ │ │ │ │ +_9_3 class _O_N_B_M_a_t_r_i_x │ │ │ │ │ +94 : public Dune::DynamicMatrix< scalar_t > │ │ │ │ │ +95 { │ │ │ │ │ +96 typedef _O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _s_c_a_l_a_r___t_ _> _T_h_i_s; │ │ │ │ │ +97 typedef Dune::DynamicMatrix< scalar_t > Base; │ │ │ │ │ +98 │ │ │ │ │ +99 public: │ │ │ │ │ +_1_0_0 typedef std::vector< scalar_t > _v_e_c___t; │ │ │ │ │ +_1_0_1 typedef Dune::DynamicMatrix< scalar_t > _m_a_t___t; │ │ │ │ │ +102 │ │ │ │ │ +_1_0_3 explicit _O_N_B_M_a_t_r_i_x ( unsigned int order ) │ │ │ │ │ +104 { │ │ │ │ │ +105 // get all multiindecies for monomial basis │ │ │ │ │ +106 constexpr Dune::GeometryType geometry = geometryId; │ │ │ │ │ +107 constexpr unsigned int dim = geometry.dim(); │ │ │ │ │ +108 typedef _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> MI; │ │ │ │ │ +109 _D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _M_I_ _> basis( order ); │ │ │ │ │ +110 const std::size_t size = basis._s_i_z_e(); │ │ │ │ │ +111 std::vector< Dune::FieldVector< MI, 1 > > y( size ); │ │ │ │ │ +112 Dune::FieldVector< MI, dim > x; │ │ │ │ │ +113 for( unsigned int i = 0; i < dim; ++i ) │ │ │ │ │ +114 x[ i ].set( i ); │ │ │ │ │ +115 basis._e_v_a_l_u_a_t_e( x, y ); │ │ │ │ │ +116 │ │ │ │ │ +117 // set bounds of data │ │ │ │ │ +118 Base::resize( size, size ); │ │ │ │ │ +119 S.resize( size, size ); │ │ │ │ │ +120 d.resize( size ); │ │ │ │ │ +121 │ │ │ │ │ +122 // setup matrix for bilinear form x^T S y: S_ij = int_A x^(i+j) │ │ │ │ │ +123 scalar_t p, q; │ │ │ │ │ +124 for( std::size_t i = 0; i < size; ++i ) │ │ │ │ │ +125 { │ │ │ │ │ +126 for( std::size_t j = 0; j < size; ++j ) │ │ │ │ │ +127 { │ │ │ │ │ +128 _I_n_t_e_g_r_a_l_<_ _g_e_o_m_e_t_r_y_I_d_ _>_:_:_c_o_m_p_u_t_e( y[ i ][ 0 ] * y[ j ][ 0 ], p, q ); │ │ │ │ │ +129 S[i][j] = p; │ │ │ │ │ +130 S[i][j] /= q; │ │ │ │ │ +131 } │ │ │ │ │ +132 } │ │ │ │ │ +133 │ │ │ │ │ +134 // orthonormalize │ │ │ │ │ +135 gramSchmidt(); │ │ │ │ │ +136 } │ │ │ │ │ +137 │ │ │ │ │ +138 template< class Vector > │ │ │ │ │ +_1_3_9 void _r_o_w ( unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ +140 { │ │ │ │ │ +141 // transposed matrix is required │ │ │ │ │ +142 assert( _r_o_w < Base::cols() ); │ │ │ │ │ +143 for( std::size_t i = 0; i < Base::rows(); ++i ) │ │ │ │ │ +144 _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t( (*this)[i][_r_o_w], vec[ i ] ); │ │ │ │ │ +145 } │ │ │ │ │ +146 │ │ │ │ │ +147 private: │ │ │ │ │ +148 void sprod ( int col1, int col2, scalar_t &ret ) │ │ │ │ │ +149 { │ │ │ │ │ +150 ret = 0; │ │ │ │ │ +151 for( int k = 0; k <= col1; ++k ) │ │ │ │ │ +152 { │ │ │ │ │ +153 for( int l = 0; l <=col2; ++l ) │ │ │ │ │ +154 ret += (*this)[l][col2] * S[l][k] * (*this)[k][col1]; │ │ │ │ │ +155 } │ │ │ │ │ +156 } │ │ │ │ │ +157 │ │ │ │ │ +158 void vmul ( std::size_t col, std::size_t rowEnd, const scalar_t &s ) │ │ │ │ │ +159 { │ │ │ │ │ +160 for( std::size_t i = 0; i <= rowEnd; ++i ) │ │ │ │ │ +161 (*this)[i][col] *= s; │ │ │ │ │ +162 } │ │ │ │ │ +163 │ │ │ │ │ +164 void vsub ( std::size_t coldest, std::size_t colsrc, std::size_t rowEnd, │ │ │ │ │ +const scalar_t &s ) │ │ │ │ │ +165 { │ │ │ │ │ +166 for( std::size_t i = 0; i <= rowEnd; ++i ) │ │ │ │ │ +167 (*this)[i][coldest] -= s * (*this)[i][colsrc]; │ │ │ │ │ +168 } │ │ │ │ │ +169 │ │ │ │ │ +170 void gramSchmidt () │ │ │ │ │ +171 { │ │ │ │ │ +172 using std::sqrt; │ │ │ │ │ +173 // setup identity │ │ │ │ │ +174 const std::size_t N = Base::rows(); │ │ │ │ │ +175 for( std::size_t i = 0; i < N; ++i ) │ │ │ │ │ +176 { │ │ │ │ │ +177 for( std::size_t j = 0; j < N; ++j ) │ │ │ │ │ +178 (*this)[i][j] = scalar_t( i == j ? 1 : 0 ); │ │ │ │ │ +179 } │ │ │ │ │ +180 │ │ │ │ │ +181 // perform Gram-Schmidt procedure │ │ │ │ │ +182 scalar_t s; │ │ │ │ │ +183 sprod( 0, 0, s ); │ │ │ │ │ +184 vmul( 0, 0, scalar_t( 1 ) / sqrt( s ) ); │ │ │ │ │ +185 for( std::size_t i = 1; i < N; ++i ) │ │ │ │ │ +186 { │ │ │ │ │ +187 for( std::size_t k = 0; k < i; ++k ) │ │ │ │ │ +188 { │ │ │ │ │ +189 sprod( i, k, s ); │ │ │ │ │ +190 vsub( i, k, i, s ); │ │ │ │ │ +191 } │ │ │ │ │ +192 sprod( i, i, s ); │ │ │ │ │ +193 vmul( i, i, scalar_t( 1 ) / sqrt( s ) ); │ │ │ │ │ +194 } │ │ │ │ │ +195 } │ │ │ │ │ +196 │ │ │ │ │ +197 _v_e_c___t d; │ │ │ │ │ +198 _m_a_t___t S; │ │ │ │ │ +199 }; │ │ │ │ │ +200 │ │ │ │ │ +201} // namespace ONBCompute │ │ │ │ │ +202 │ │ │ │ │ +203#endif // #ifndef DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ _f_i_e_l_d_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const typedef LP< F, dim > Object │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &order) │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:26 │ │ │ │ │ +_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:25 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_f_a_c_t_o_r_i_a_l │ │ │ │ │ +scalar_t factorial(int start, int end) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:28 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:43 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_c_o_m_p_u_t_e │ │ │ │ │ +static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, │ │ │ │ │ +scalar_t &q) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:48 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_c_o_m_p_u_t_e │ │ │ │ │ +static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, │ │ │ │ │ +scalar_t &q, std::integer_sequence< int, ints... > intS) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:55 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_c_o_m_p_u_t_e_I_n_t_e_g_r_a_l │ │ │ │ │ +static void computeIntegral(const Dune::MultiIndex< dim, scalar_t > &alpha, │ │ │ │ │ +scalar_t &p, scalar_t &q, int &ord) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:68 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static constexpr int dimension │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:45 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr Dune::GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:44 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:95 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ +ONBMatrix(unsigned int order) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:103 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_v_e_c___t │ │ │ │ │ +std::vector< scalar_t > vec_t │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:100 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_m_a_t___t │ │ │ │ │ +Dune::DynamicMatrix< scalar_t > mat_t │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:101 │ │ │ │ │ +_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ +void row(unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn orthonormalcompute.hh:139 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:571 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ +int z(int i) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: cache.hh File Reference │ │ │ │ +dune-localfunctions: simplexp1bubble.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,49 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
cache.hh File Reference
│ │ │ │ +
simplexp1bubble.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <map>
│ │ │ │ -#include <optional>
│ │ │ │ -#include <type_traits>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/equidistantpoints.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/enriched/simplexp1bubble/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/enriched/simplexp1bubble/localcoefficients.hh>
│ │ │ │ +#include <dune/localfunctions/enriched/simplexp1bubble/localinterpolation.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DynamicLagrangeLocalFiniteElementCache< Domain, Range, dim >
 A cache that stores Lagrange finite elements for the given dimension and order. More...
 
class  Dune::StaticLagrangeLocalFiniteElementCache< id, Domain, Range, dim, order >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order for the case that the GeometryType is fixed and has the given Id. More...
 
class  Dune::StaticLagrangeLocalFiniteElementCache< GeometryType::Id(~0u), Domain, Range, dim, order >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. More...
class  Dune::SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,43 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _e_n_r_i_c_h_e_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -cache.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +simplexp1bubble.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_ _> │ │ │ │ │ -  A cache that stores Lagrange finite elements for the given dimension │ │ │ │ │ - and order. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _i_d_,_ _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_, │ │ │ │ │ - _o_r_d_e_r_ _> │ │ │ │ │ - A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ -  the given dimension and order for the case that the GeometryType is │ │ │ │ │ - fixed and has the given Id. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _G_e_o_m_e_t_r_y_T_y_p_e_:_:_I_d_(_~_0_u_)_, │ │ │ │ │ - _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ -  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ - the given dimension and order. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00386_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: cache.hh Source File │ │ │ │ +dune-localfunctions: simplexp1bubble.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,146 +70,116 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
cache.hh
│ │ │ │ +
simplexp1bubble.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │
7
│ │ │ │ -
8#include <map>
│ │ │ │ -
9#include <optional>
│ │ │ │ -
10#include <type_traits>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/geometry/type.hh>
│ │ │ │ -
13#include <dune/geometry/typeindex.hh>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23
│ │ │ │ -
24namespace Dune {
│ │ │ │ -
25
│ │ │ │ -
37template <class Domain, class Range, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39{
│ │ │ │ -
40public:
│ │ │ │ - │ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 explicit DynamicLagrangeLocalFiniteElementCache (unsigned int order)
│ │ │ │ -
45 : order_(order)
│ │ │ │ -
46 , data_()
│ │ │ │ -
47 {}
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
55 const FiniteElementType& get (GeometryType type) const
│ │ │ │ -
56 {
│ │ │ │ -
57 auto [it,_] = data_.try_emplace(type,type,order_);
│ │ │ │ -
58 return it->second;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
61private:
│ │ │ │ -
62 unsigned int order_;
│ │ │ │ -
63 mutable std::map<GeometryType, FiniteElementType> data_;
│ │ │ │ -
64};
│ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
43 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {
│ │ │ │ +
46 public:
│ │ │ │ + │ │ │ │ +
49
│ │ │ │ + │ │ │ │ +
52
│ │ │ │ + │ │ │ │ +
55
│ │ │ │ + │ │ │ │ +
58
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
61 const LocalBasisType& localBasis () const
│ │ │ │ +
62 {
│ │ │ │ +
63 return basis_;
│ │ │ │ +
64 }
│ │ │ │
│ │ │ │
65
│ │ │ │ -
66
│ │ │ │ -
78template <GeometryType::Id id, class Domain, class Range, std::size_t dim, std::size_t order>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
80{
│ │ │ │ -
81 struct UnknownToplogy {};
│ │ │ │ -
82
│ │ │ │ -
83 static constexpr bool isSimplex = GeometryType(id).isSimplex();
│ │ │ │ -
84 static constexpr bool isCube = GeometryType(id).isCube();
│ │ │ │ -
85 static constexpr bool isPrism = GeometryType(id).isPrism();
│ │ │ │ -
86 static constexpr bool isPyramid = GeometryType(id).isPyramid();
│ │ │ │ -
87
│ │ │ │ -
88public:
│ │ │ │ - │ │ │ │ -
90 = std::conditional_t<isSimplex, LagrangeSimplexLocalFiniteElement<Domain,Range,dim,order>,
│ │ │ │ -
91 std::conditional_t<isCube, LagrangeCubeLocalFiniteElement<Domain,Range,dim,order>,
│ │ │ │ -
92 std::conditional_t<isPrism, LagrangePrismLocalFiniteElement<Domain,Range,order>,
│ │ │ │ -
93 std::conditional_t<isPyramid, LagrangePyramidLocalFiniteElement<Domain,Range,order>, UnknownToplogy> > > >;
│ │ │ │ -
94
│ │ │ │ -
│ │ │ │ -
96 explicit StaticLagrangeLocalFiniteElementCache (std::integral_constant<std::size_t,order> = {})
│ │ │ │ -
97 {
│ │ │ │ -
98 lfe_.emplace();
│ │ │ │ -
99 }
│ │ │ │ -
│ │ │ │ -
100
│ │ │ │ -
│ │ │ │ -
102 const FiniteElementType& get ([[maybe_unused]] GeometryType type) const
│ │ │ │ -
103 {
│ │ │ │ -
104 assert(GeometryType::Id(type) == id);
│ │ │ │ -
105 assert(!!lfe_);
│ │ │ │ -
106 return *lfe_;
│ │ │ │ -
107 }
│ │ │ │ -
│ │ │ │ -
108
│ │ │ │ -
109private:
│ │ │ │ -
110 std::optional<FiniteElementType> lfe_{};
│ │ │ │ -
111};
│ │ │ │ -
│ │ │ │ -
112
│ │ │ │ -
113
│ │ │ │ -
127template <class Domain, class Range, std::size_t dim, std::size_t order>
│ │ │ │ -
│ │ │ │ -
128class StaticLagrangeLocalFiniteElementCache<GeometryType::Id(~0u), Domain, Range, dim, order>
│ │ │ │ -
129 : public LagrangeLocalFiniteElementCache<Domain,Range,dim,order>
│ │ │ │ -
130{
│ │ │ │ - │ │ │ │ -
132public:
│ │ │ │ -
133 using Base::Base;
│ │ │ │ -
134};
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
136} // namespace Dune
│ │ │ │ -
137
│ │ │ │ -
138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Convenience header that includes all implementations of Lagrange finite elements.
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
68 {
│ │ │ │ +
69 return coefficients_;
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
74 {
│ │ │ │ +
75 return interpolation_;
│ │ │ │ +
76 }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
│ │ │ │ +
79 static constexpr std::size_t size () noexcept
│ │ │ │ +
80 {
│ │ │ │ +
81 return LocalBasisType::size();
│ │ │ │ +
82 }
│ │ │ │ +
│ │ │ │ +
83
│ │ │ │ +
│ │ │ │ +
85 static constexpr GeometryType type () noexcept
│ │ │ │ +
86 {
│ │ │ │ +
87 return GeometryTypes::simplex(dim);
│ │ │ │ +
88 }
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
90 private:
│ │ │ │ +
91 LocalCoefficientsType coefficients_{};
│ │ │ │ +
92 [[no_unique_address]] LocalBasisType basis_{};
│ │ │ │ +
93 [[no_unique_address]] LocalInterpolationType interpolation_{};
│ │ │ │ +
94 };
│ │ │ │ +
│ │ │ │ +
95
│ │ │ │ +
96} // end namespace Dune
│ │ │ │ +
97
│ │ │ │ +
98#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ -
Lagrange local finite elements for a given set of interpolation points.
Definition lagrange.hh:66
│ │ │ │ -
A cache that stores Lagrange finite elements for the given dimension and order.
Definition cache.hh:39
│ │ │ │ -
DynamicLagrangeLocalFiniteElementCache(unsigned int order)
Construct an empty cache.
Definition cache.hh:44
│ │ │ │ -
const FiniteElementType & get(GeometryType type) const
Obtain the cached local finite-element.
Definition cache.hh:55
│ │ │ │ -
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order ...
Definition cache.hh:80
│ │ │ │ -
const FiniteElementType & get(GeometryType type) const
Obtain the cached local finite-element.
Definition cache.hh:102
│ │ │ │ -
std::conditional_t< isSimplex, LagrangeSimplexLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isCube, LagrangeCubeLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isPrism, LagrangePrismLocalFiniteElement< Domain, Range, order >, std::conditional_t< isPyramid, LagrangePyramidLocalFiniteElement< Domain, Range, order >, UnknownToplogy > > > > FiniteElementType
Definition cache.hh:93
│ │ │ │ -
StaticLagrangeLocalFiniteElementCache(std::integral_constant< std::size_t, order >={})
Construct the local-finite element for the order specified as template parameter.
Definition cache.hh:96
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
Linear Lagrange functions enriched with an element bubble function.
Definition simplexp1bubble.hh:45
│ │ │ │ +
const LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition simplexp1bubble.hh:73
│ │ │ │ +
SimplexP1BubbleLocalBasis< D, R, dim > LocalBasisType
Type of the local basis.
Definition simplexp1bubble.hh:48
│ │ │ │ +
const LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition simplexp1bubble.hh:67
│ │ │ │ +
const LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition simplexp1bubble.hh:61
│ │ │ │ +
SimplexP1BubbleLocalCoefficients< dim > LocalCoefficientsType
Type of the local coefficients.
Definition simplexp1bubble.hh:51
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns the number of shape functions in this finite-element.
Definition simplexp1bubble.hh:79
│ │ │ │ +
SimplexP1BubbleLocalInterpolation< LocalBasisType > LocalInterpolationType
Type of the local interpolation.
Definition simplexp1bubble.hh:54
│ │ │ │ +
static constexpr GeometryType type() noexcept
Returns the type of the geometry the finite-element is attached to.
Definition simplexp1bubble.hh:85
│ │ │ │ +
P1 basis in dim-d enriched by an (order dim+1) element bubble function.
Definition enriched/simplexp1bubble/localbasis.hh:35
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:55
│ │ │ │ +
The Local keys associated to the dim-d local basis functions.
Definition enriched/simplexp1bubble/localcoefficients.hh:24
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,167 +1,133 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -cache.hh │ │ │ │ │ + * _e_n_r_i_c_h_e_d │ │ │ │ │ +simplexp1bubble.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_/_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ 14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -22 │ │ │ │ │ -23 │ │ │ │ │ -24namespace _D_u_n_e { │ │ │ │ │ -25 │ │ │ │ │ -37template │ │ │ │ │ -_3_8class _D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -39{ │ │ │ │ │ -40public: │ │ │ │ │ -_4_1 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e = _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_, │ │ │ │ │ -_d_i_m_,_ _D_o_m_a_i_n_,_ _R_a_n_g_e_>; │ │ │ │ │ -42 │ │ │ │ │ -_4_4 explicit _D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e (unsigned int order) │ │ │ │ │ -45 : order_(order) │ │ │ │ │ -46 , data_() │ │ │ │ │ -47 {} │ │ │ │ │ -48 │ │ │ │ │ -_5_5 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t (GeometryType type) const │ │ │ │ │ -56 { │ │ │ │ │ -57 auto [it,_] = data_.try_emplace(type,type,order_); │ │ │ │ │ -58 return it->second; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -61private: │ │ │ │ │ -62 unsigned int order_; │ │ │ │ │ -63 mutable std::map data_; │ │ │ │ │ -64}; │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +43 template │ │ │ │ │ +_4_4 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +45 { │ │ │ │ │ +46 public: │ │ │ │ │ +_4_8 using _L_o_c_a_l_B_a_s_i_s_T_y_p_e = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>; │ │ │ │ │ +49 │ │ │ │ │ +_5_1 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>; │ │ │ │ │ +52 │ │ │ │ │ +_5_4 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e = │ │ │ │ │ +_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_>; │ │ │ │ │ +55 │ │ │ │ │ +_5_7 using _T_r_a_i_t_s = │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_,_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e_>; │ │ │ │ │ +58 │ │ │ │ │ +59 │ │ │ │ │ +_6_1 const _L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +62 { │ │ │ │ │ +63 return basis_; │ │ │ │ │ +64 } │ │ │ │ │ 65 │ │ │ │ │ -66 │ │ │ │ │ -78template │ │ │ │ │ -_7_9class _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -80{ │ │ │ │ │ -81 struct UnknownToplogy {}; │ │ │ │ │ -82 │ │ │ │ │ -83 static constexpr bool isSimplex = GeometryType(id).isSimplex(); │ │ │ │ │ -84 static constexpr bool isCube = GeometryType(id).isCube(); │ │ │ │ │ -85 static constexpr bool isPrism = GeometryType(id).isPrism(); │ │ │ │ │ -86 static constexpr bool isPyramid = GeometryType(id).isPyramid(); │ │ │ │ │ -87 │ │ │ │ │ -88public: │ │ │ │ │ -_8_9 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -90 = std::conditional_t, │ │ │ │ │ -91 std::conditional_t, │ │ │ │ │ -92 std::conditional_t, │ │ │ │ │ -93 std::conditional_t, UnknownToplogy> > > >; │ │ │ │ │ -94 │ │ │ │ │ -_9_6 explicit _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e (std::integral_constant = {}) │ │ │ │ │ -97 { │ │ │ │ │ -98 lfe_.emplace(); │ │ │ │ │ -99 } │ │ │ │ │ -100 │ │ │ │ │ -_1_0_2 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t ([[maybe_unused]] GeometryType type) const │ │ │ │ │ -103 { │ │ │ │ │ -104 assert(GeometryType::Id(type) == id); │ │ │ │ │ -105 assert(!!lfe_); │ │ │ │ │ -106 return *lfe_; │ │ │ │ │ -107 } │ │ │ │ │ -108 │ │ │ │ │ -109private: │ │ │ │ │ -110 std::optional lfe_{}; │ │ │ │ │ -111}; │ │ │ │ │ -112 │ │ │ │ │ -113 │ │ │ │ │ -127template │ │ │ │ │ -_1_2_8class _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -129 : public _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -130{ │ │ │ │ │ -131 using _B_a_s_e = _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_D_o_m_a_i_n_,_R_a_n_g_e_,_d_i_m_,_o_r_d_e_r_>; │ │ │ │ │ -132public: │ │ │ │ │ -133 using Base::Base; │ │ │ │ │ -134}; │ │ │ │ │ -135 │ │ │ │ │ -136} // namespace Dune │ │ │ │ │ -137 │ │ │ │ │ -138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_._h_h │ │ │ │ │ -Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ -elements. │ │ │ │ │ +_6_7 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +68 { │ │ │ │ │ +69 return coefficients_; │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +_7_3 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +74 { │ │ │ │ │ +75 return interpolation_; │ │ │ │ │ +76 } │ │ │ │ │ +77 │ │ │ │ │ +_7_9 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +80 { │ │ │ │ │ +81 return _L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_s_i_z_e(); │ │ │ │ │ +82 } │ │ │ │ │ +83 │ │ │ │ │ +_8_5 static constexpr GeometryType _t_y_p_e () noexcept │ │ │ │ │ +86 { │ │ │ │ │ +87 return GeometryTypes::simplex(dim); │ │ │ │ │ +88 } │ │ │ │ │ +89 │ │ │ │ │ +90 private: │ │ │ │ │ +91 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_{}; │ │ │ │ │ +92 [[no_unique_address]] _L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_{}; │ │ │ │ │ +93 [[no_unique_address]] _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_{}; │ │ │ │ │ +94 }; │ │ │ │ │ +95 │ │ │ │ │ +96} // end namespace Dune │ │ │ │ │ +97 │ │ │ │ │ +98#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ -A cache storing a compile time selection of local finite element │ │ │ │ │ -implementations. │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ -DDeeffiinniittiioonn lagrange.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -A cache that stores Lagrange finite elements for the given dimension and order. │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_: │ │ │ │ │ -_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -DynamicLagrangeLocalFiniteElementCache(unsigned int order) │ │ │ │ │ -Construct an empty cache. │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ -const FiniteElementType & get(GeometryType type) const │ │ │ │ │ -Obtain the cached local finite-element. │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -A cache that stores all available Pk/Qk like local finite elements for the │ │ │ │ │ -given dimension and order ... │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ -const FiniteElementType & get(GeometryType type) const │ │ │ │ │ -Obtain the cached local finite-element. │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:102 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -std::conditional_t< isSimplex, LagrangeSimplexLocalFiniteElement< Domain, │ │ │ │ │ -Range, dim, order >, std::conditional_t< isCube, │ │ │ │ │ -LagrangeCubeLocalFiniteElement< Domain, Range, dim, order >, std:: │ │ │ │ │ -conditional_t< isPrism, LagrangePrismLocalFiniteElement< Domain, Range, order │ │ │ │ │ ->, std::conditional_t< isPyramid, LagrangePyramidLocalFiniteElement< Domain, │ │ │ │ │ -Range, order >, UnknownToplogy > > > > FiniteElementType │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:93 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_: │ │ │ │ │ -_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -StaticLagrangeLocalFiniteElementCache(std::integral_constant< std::size_t, │ │ │ │ │ -order >={}) │ │ │ │ │ -Construct the local-finite element for the order specified as template │ │ │ │ │ -parameter. │ │ │ │ │ -DDeeffiinniittiioonn cache.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +SimplexP1BubbleLocalBasis< D, R, dim > LocalBasisType │ │ │ │ │ +Type of the local basis. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +SimplexP1BubbleLocalCoefficients< dim > LocalCoefficientsType │ │ │ │ │ +Type of the local coefficients. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns the number of shape functions in this finite-element. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +SimplexP1BubbleLocalInterpolation< LocalBasisType > LocalInterpolationType │ │ │ │ │ +Type of the local interpolation. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() noexcept │ │ │ │ │ +Returns the type of the geometry the finite-element is attached to. │ │ │ │ │ +DDeeffiinniittiioonn simplexp1bubble.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +The Local keys associated to the dim-d local basis functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_o_c_a_l_B_a_s_i_s_T_y_p_e_ _> │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangebasis.hh File Reference │ │ │ │ +dune-localfunctions: monomial.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,45 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrangebasis.hh File Reference
│ │ │ │ +
monomial.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ -#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/interpolation.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <cstdlib>
│ │ │ │ +#include <memory>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include "common/localfiniteelementtraits.hh"
│ │ │ │ +#include "common/localtoglobaladaptors.hh"
│ │ │ │ +#include "monomial/monomiallocalbasis.hh"
│ │ │ │ +#include "monomial/monomiallocalcoefficients.hh"
│ │ │ │ +#include "monomial/monomiallocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LagrangeBasisFactory< LP, dim, SF, CF >
class  Dune::MonomialLocalFiniteElement< D, R, d, p >
 Monomial basis for discontinuous Galerkin methods. More...
 
class  Dune::MonomialFiniteElementFactory< Geometry, RF, p >
 Factory for global-valued MonomFiniteElement objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,32 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrangebasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ +monomial.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h" │ │ │ │ │ +#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_,_ _p_ _> │ │ │ │ │ +  Monomial basis for discontinuous Galerkin methods. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _p_ _> │ │ │ │ │ +  Factory for global-valued MonomFiniteElement objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00389_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrangebasis.hh Source File │ │ │ │ +dune-localfunctions: monomial.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,58 +70,223 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrangebasis.hh
│ │ │ │ +
monomial.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ -
6#define DUNE_LAGRANGEBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ - │ │ │ │ -
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
19 template< template <class,unsigned int> class LP,
│ │ │ │ -
20 unsigned int dim, class SF, class CF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 : public DefaultBasisFactory< MonomialBasisFactory<dim,CF>,
│ │ │ │ -
23 LagrangeInterpolationFactory<LP,dim,CF>,
│ │ │ │ -
24 dim,1,SF,CF >
│ │ │ │ -
25 {};
│ │ │ │ -
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <cassert>
│ │ │ │ +
10#include <cstddef>
│ │ │ │ +
11#include <cstdlib>
│ │ │ │ +
12#include <memory>
│ │ │ │ +
13#include <vector>
│ │ │ │ +
14
│ │ │ │ +
15#include <dune/geometry/type.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
22
│ │ │ │ +
23namespace Dune
│ │ │ │ +
24{
│ │ │ │ +
25
│ │ │ │
26
│ │ │ │ -
27}
│ │ │ │ -
28
│ │ │ │ -
29#endif // #ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
39 template<class D, class R, int d, int p>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
41 {
│ │ │ │ +
42 constexpr static int static_size = MonomialLocalBasis<D,R,d,p>::size();
│ │ │ │ +
43
│ │ │ │ +
44 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
52
│ │ │ │ +
│ │ │ │ +
54 MonomialLocalFiniteElement (const GeometryType &gt_)
│ │ │ │ +
55 : basis(), interpolation(gt_, basis), gt(gt_)
│ │ │ │ +
56 {}
│ │ │ │ +
│ │ │ │ +
57
│ │ │ │ +
│ │ │ │ +
60 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
61 {
│ │ │ │ +
62 return basis;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
68 {
│ │ │ │ +
69 return coefficients;
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
75 {
│ │ │ │ +
76 return interpolation;
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
│ │ │ │ +
80 unsigned int size () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return basis.size();
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
│ │ │ │ +
87 GeometryType type () const
│ │ │ │ +
88 {
│ │ │ │ +
89 return gt;
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
92 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
96 GeometryType gt;
│ │ │ │ +
97 };
│ │ │ │ +
│ │ │ │ +
98
│ │ │ │ +
100
│ │ │ │ +
112 template<class Geometry, class RF, std::size_t p>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
114 typedef typename Geometry::ctype DF;
│ │ │ │ +
115 static const std::size_t dim = Geometry::mydimension;
│ │ │ │ +
116
│ │ │ │ + │ │ │ │ +
118
│ │ │ │ +
119 std::vector<std::shared_ptr<const LocalFE> > localFEs;
│ │ │ │ +
120
│ │ │ │ +
121 void init(const GeometryType &gt) {
│ │ │ │ +
122 std::size_t index = gt.id() >> 1;
│ │ │ │ +
123 if(localFEs.size() <= index)
│ │ │ │ +
124 localFEs.resize(index+1);
│ │ │ │ +
125 localFEs[index].reset(new LocalFE(gt));
│ │ │ │ +
126 }
│ │ │ │ +
127
│ │ │ │ +
128 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
131
│ │ │ │ +
133
│ │ │ │ +
137 template<class ForwardIterator>
│ │ │ │ +
│ │ │ │ +
138 MonomialFiniteElementFactory(const ForwardIterator &begin,
│ │ │ │ +
139 const ForwardIterator &end)
│ │ │ │ +
140 {
│ │ │ │ +
141 for(ForwardIterator it = begin; it != end; ++it)
│ │ │ │ +
142 init(*it);
│ │ │ │ +
143 }
│ │ │ │ +
│ │ │ │ +
144
│ │ │ │ +
146
│ │ │ │ +
│ │ │ │ +
149 MonomialFiniteElementFactory(const GeometryType &gt)
│ │ │ │ +
150 { init(gt); }
│ │ │ │ +
│ │ │ │ +
151
│ │ │ │ +
153
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
157 static_assert(dim <= 3, "MonomFiniteElementFactory knows the "
│ │ │ │ +
158 "available geometry types only up to dimension 3");
│ │ │ │ +
159
│ │ │ │ +
160 GeometryType gt;
│ │ │ │ +
161 switch(dim) {
│ │ │ │ +
162 case 0 :
│ │ │ │ +
163 gt = Dune::GeometryTypes::vertex; init(gt);
│ │ │ │ +
164 break;
│ │ │ │ +
165 case 1 :
│ │ │ │ +
166 gt = Dune::GeometryTypes::line; init(gt);
│ │ │ │ +
167 break;
│ │ │ │ +
168 case 2 :
│ │ │ │ +
169 gt = Dune::GeometryTypes::triangle; init(gt);
│ │ │ │ +
170 gt = Dune::GeometryTypes::quadrilateral; init(gt);
│ │ │ │ +
171 break;
│ │ │ │ +
172 case 3 :
│ │ │ │ +
173 gt = Dune::GeometryTypes::tetrahedron; init(gt);
│ │ │ │ +
174 gt = Dune::GeometryTypes::pyramid; init(gt);
│ │ │ │ +
175 gt = Dune::GeometryTypes::prism; init(gt);
│ │ │ │ +
176 gt = Dune::GeometryTypes::hexahedron; init(gt);
│ │ │ │ +
177 break;
│ │ │ │ +
178 default :
│ │ │ │ +
179 // this should never happen -- it should be caught by the static
│ │ │ │ +
180 // assert above.
│ │ │ │ +
181 std::abort();
│ │ │ │ +
182 };
│ │ │ │ +
183 }
│ │ │ │ +
│ │ │ │ +
184
│ │ │ │ +
186
│ │ │ │ +
│ │ │ │ +
196 const FiniteElement make(const Geometry& geometry) {
│ │ │ │ +
197 std::size_t index = geometry.type().id() >> 1;
│ │ │ │ +
198 assert(localFEs.size() > index && localFEs[index]);
│ │ │ │ +
199 return FiniteElement(*localFEs[index], geometry);
│ │ │ │ +
200 }
│ │ │ │ +
│ │ │ │ +
201 };
│ │ │ │ +
│ │ │ │ +
202}
│ │ │ │ +
203
│ │ │ │ +
204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition lagrangebasis.hh:25
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ - │ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Convert a simple scalar local finite element into a global finite element.
Definition localtoglobaladaptors.hh:187
│ │ │ │ +
GeometryType type() const
Definition localtoglobaladaptors.hh:229
│ │ │ │ +
Monomial basis for discontinuous Galerkin methods.
Definition monomial.hh:41
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition monomial.hh:80
│ │ │ │ +
GeometryType type() const
Definition monomial.hh:87
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition monomial.hh:74
│ │ │ │ +
LocalFiniteElementTraits< MonomialLocalBasis< D, R, d, p >, MonomialLocalCoefficients< static_size >, MonomialLocalInterpolation< MonomialLocalBasis< D, R, d, p >, static_size > > Traits
Definition monomial.hh:51
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition monomial.hh:67
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition monomial.hh:60
│ │ │ │ +
MonomialLocalFiniteElement(const GeometryType &gt_)
Construct a MonomLocalFiniteElement.
Definition monomial.hh:54
│ │ │ │ +
Factory for global-valued MonomFiniteElement objects.
Definition monomial.hh:113
│ │ │ │ +
MonomialFiniteElementFactory(const ForwardIterator &begin, const ForwardIterator &end)
construct a MonomialFiniteElementFactory from a list of GeometryType's
Definition monomial.hh:138
│ │ │ │ +
MonomialFiniteElementFactory(const GeometryType &gt)
construct a MonomialFiniteElementFactory from a single GeometryType
Definition monomial.hh:149
│ │ │ │ +
const FiniteElement make(const Geometry &geometry)
construct a global-valued MonomFiniteElement
Definition monomial.hh:196
│ │ │ │ +
ScalarLocalToGlobalFiniteElementAdaptor< LocalFE, Geometry > FiniteElement
Definition monomial.hh:130
│ │ │ │ +
MonomialFiniteElementFactory()
construct a MonomFiniteElementFactory for all applicable GeometryType's
Definition monomial.hh:156
│ │ │ │ +
Definition monomiallocalbasis.hh:202
│ │ │ │ +
static constexpr unsigned int size()
Number of shape functions.
Definition monomiallocalbasis.hh:217
│ │ │ │ +
Definition monomiallocalcoefficients.hh:25
│ │ │ │ +
Definition monomiallocalinterpolation.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,50 +1,246 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrangebasis.hh │ │ │ │ │ +monomial.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ -6#define DUNE_LAGRANGEBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -19 template< template class LP, │ │ │ │ │ -20 unsigned int dim, class SF, class CF > │ │ │ │ │ -_2_1 struct _L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -22 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< MonomialBasisFactory, │ │ │ │ │ -23 LagrangeInterpolationFactory, │ │ │ │ │ -24 dim,1,SF,CF > │ │ │ │ │ -25 {}; │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +18#include "_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h" │ │ │ │ │ +19#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +20#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +21#include "_m_o_n_o_m_i_a_l_/_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +22 │ │ │ │ │ +23namespace _D_u_n_e │ │ │ │ │ +24{ │ │ │ │ │ +25 │ │ │ │ │ 26 │ │ │ │ │ -27} │ │ │ │ │ -28 │ │ │ │ │ -29#endif // #ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ -_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ +39 template │ │ │ │ │ +_4_0 class _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +41 { │ │ │ │ │ +42 constexpr static int static_size = _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>_:_:_s_i_z_e(); │ │ │ │ │ +43 │ │ │ │ │ +44 public: │ │ │ │ │ +47 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +48 _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>, │ │ │ │ │ +49 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_s_t_a_t_i_c___s_i_z_e_>, │ │ │ │ │ +50 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>,static_size> │ │ │ │ │ +_5_1 > _T_r_a_i_t_s; │ │ │ │ │ +52 │ │ │ │ │ +_5_4 _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (const GeometryType >_) │ │ │ │ │ +55 : basis(), interpolation(gt_, basis), gt(gt_) │ │ │ │ │ +56 {} │ │ │ │ │ +57 │ │ │ │ │ +_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return basis; │ │ │ │ │ +63 } │ │ │ │ │ +64 │ │ │ │ │ +_6_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +68 { │ │ │ │ │ +69 return coefficients; │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +_7_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +75 { │ │ │ │ │ +76 return interpolation; │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +_8_0 unsigned int _s_i_z_e () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return basis.size(); │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_7 GeometryType _t_y_p_e () const │ │ │ │ │ +88 { │ │ │ │ │ +89 return gt; │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +92 private: │ │ │ │ │ +93 _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_> basis; │ │ │ │ │ +94 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_s_t_a_t_i_c___s_i_z_e_> coefficients; │ │ │ │ │ +95 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_p_>,static_size> │ │ │ │ │ +interpolation; │ │ │ │ │ +96 GeometryType gt; │ │ │ │ │ +97 }; │ │ │ │ │ +98 │ │ │ │ │ +100 │ │ │ │ │ +112 template │ │ │ │ │ +_1_1_3 class _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ +114 typedef typename Geometry::ctype DF; │ │ │ │ │ +115 static const std::size_t dim = Geometry::mydimension; │ │ │ │ │ +116 │ │ │ │ │ +117 typedef _M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_F_,_ _R_F_,_ _d_i_m_,_ _p_> _L_o_c_a_l_F_E; │ │ │ │ │ +118 │ │ │ │ │ +119 std::vector > localFEs; │ │ │ │ │ +120 │ │ │ │ │ +121 void init(const GeometryType >) { │ │ │ │ │ +122 std::size_t index = gt.id() >> 1; │ │ │ │ │ +123 if(localFEs.size() <= index) │ │ │ │ │ +124 localFEs.resize(index+1); │ │ │ │ │ +125 localFEs[index].reset(new _L_o_c_a_l_F_E(gt)); │ │ │ │ │ +126 } │ │ │ │ │ +127 │ │ │ │ │ +128 public: │ │ │ │ │ +129 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_L_o_c_a_l_F_E_,_ _G_e_o_m_e_t_r_y_> │ │ │ │ │ +_1_3_0 _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +131 │ │ │ │ │ +133 │ │ │ │ │ +137 template │ │ │ │ │ +_1_3_8 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y(const ForwardIterator &begin, │ │ │ │ │ +139 const ForwardIterator &end) │ │ │ │ │ +140 { │ │ │ │ │ +141 for(ForwardIterator it = begin; it != end; ++it) │ │ │ │ │ +142 init(*it); │ │ │ │ │ +143 } │ │ │ │ │ +144 │ │ │ │ │ +146 │ │ │ │ │ +_1_4_9 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y(const GeometryType >) │ │ │ │ │ +150 { init(gt); } │ │ │ │ │ +151 │ │ │ │ │ +153 │ │ │ │ │ +_1_5_6 _M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() { │ │ │ │ │ +157 static_assert(dim <= 3, "MonomFiniteElementFactory knows the " │ │ │ │ │ +158 "available geometry types only up to dimension 3"); │ │ │ │ │ +159 │ │ │ │ │ +160 GeometryType gt; │ │ │ │ │ +161 switch(dim) { │ │ │ │ │ +162 case 0 : │ │ │ │ │ +163 gt = Dune::GeometryTypes::vertex; init(gt); │ │ │ │ │ +164 break; │ │ │ │ │ +165 case 1 : │ │ │ │ │ +166 gt = Dune::GeometryTypes::line; init(gt); │ │ │ │ │ +167 break; │ │ │ │ │ +168 case 2 : │ │ │ │ │ +169 gt = Dune::GeometryTypes::triangle; init(gt); │ │ │ │ │ +170 gt = Dune::GeometryTypes::quadrilateral; init(gt); │ │ │ │ │ +171 break; │ │ │ │ │ +172 case 3 : │ │ │ │ │ +173 gt = Dune::GeometryTypes::tetrahedron; init(gt); │ │ │ │ │ +174 gt = Dune::GeometryTypes::pyramid; init(gt); │ │ │ │ │ +175 gt = Dune::GeometryTypes::prism; init(gt); │ │ │ │ │ +176 gt = Dune::GeometryTypes::hexahedron; init(gt); │ │ │ │ │ +177 break; │ │ │ │ │ +178 default : │ │ │ │ │ +179 // this should never happen -- it should be caught by the static │ │ │ │ │ +180 // assert above. │ │ │ │ │ +181 std::abort(); │ │ │ │ │ +182 }; │ │ │ │ │ +183 } │ │ │ │ │ +184 │ │ │ │ │ +186 │ │ │ │ │ +_1_9_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry) { │ │ │ │ │ +197 std::size_t index = geometry._t_y_p_e().id() >> 1; │ │ │ │ │ +198 assert(localFEs.size() > index && localFEs[index]); │ │ │ │ │ +199 return _F_i_n_i_t_e_E_l_e_m_e_n_t(*localFEs[index], geometry); │ │ │ │ │ +200 } │ │ │ │ │ +201 }; │ │ │ │ │ +202} │ │ │ │ │ +203 │ │ │ │ │ +204#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_HH │ │ │ │ │ +_m_o_n_o_m_i_a_l_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_m_o_n_o_m_i_a_l_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_m_o_n_o_m_i_a_l_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrangebasis.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local finite element into a global finite element. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:229 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Monomial basis for discontinuous Galerkin methods. │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< MonomialLocalBasis< D, R, d, p >, │ │ │ │ │ +MonomialLocalCoefficients< static_size >, MonomialLocalInterpolation< │ │ │ │ │ +MonomialLocalBasis< D, R, d, p >, static_size > > Traits │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +MonomialLocalFiniteElement(const GeometryType >_) │ │ │ │ │ +Construct a MonomLocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for global-valued MonomFiniteElement objects. │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:113 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +MonomialFiniteElementFactory(const ForwardIterator &begin, const │ │ │ │ │ +ForwardIterator &end) │ │ │ │ │ +construct a MonomialFiniteElementFactory from a list of GeometryType's │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:138 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +MonomialFiniteElementFactory(const GeometryType >) │ │ │ │ │ +construct a MonomialFiniteElementFactory from a single GeometryType │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &geometry) │ │ │ │ │ +construct a global-valued MonomFiniteElement │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:196 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +ScalarLocalToGlobalFiniteElementAdaptor< LocalFE, Geometry > FiniteElement │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:130 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +MonomialFiniteElementFactory() │ │ │ │ │ +construct a MonomFiniteElementFactory for all applicable GeometryType's │ │ │ │ │ +DDeeffiinniittiioonn monomial.hh:156 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:202 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalbasis.hh:217 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn monomiallocalinterpolation.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pqkfactory.hh File Reference │ │ │ │ +dune-localfunctions: raviartthomas.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,56 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
pqkfactory.hh File Reference
│ │ │ │ +
raviartthomas.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <map>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualwrappers.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, d, k >
 Factory that only creates dimension specific local finite elements. More...
 
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, 3, k >
 Factory that only creates dimension specific local finite elements. More...
 
struct  Dune::PQkLocalFiniteElementFactory< D, R, dim, k >
 Factory to create any kind of Pk/Qk like element wrapped for the virtual interface. More...
 
class  Dune::PQkLocalFiniteElementCache< D, R, dim, k >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,41 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -pqkfactory.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +raviartthomas.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _d_,_ _k_ _> │ │ │ │ │ -  Factory that only creates dimension specific local finite elements. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _> │ │ │ │ │ -  Factory that only creates dimension specific local finite elements. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ -  Factory to create any kind of Pk/Qk like element wrapped for the │ │ │ │ │ - virtual interface. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ -  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ - the given dimension and order. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00392_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: pqkfactory.hh Source File │ │ │ │ +dune-localfunctions: raviartthomas.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,217 +70,59 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
pqkfactory.hh
│ │ │ │ +
raviartthomas.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ +
5#ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <map>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/geometry/type.hh>
│ │ │ │ +
8// Raviart-Thomas implementations with run-time order
│ │ │ │ + │ │ │ │ + │ │ │ │
11
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune
│ │ │ │ -
22{
│ │ │ │ -
23
│ │ │ │ -
28 template<class D, class R, int d, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ - │ │ │ │ -
32
│ │ │ │ -
│ │ │ │ -
34 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType&)
│ │ │ │ -
35 {
│ │ │ │ -
36 return nullptr;
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ -
38 };
│ │ │ │ -
│ │ │ │ -
39
│ │ │ │ -
44 template<class D, class R, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
52
│ │ │ │ -
│ │ │ │ -
54 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType& gt)
│ │ │ │ -
55 {
│ │ │ │ -
56 if ((gt.isPrism())and (k==1))
│ │ │ │ - │ │ │ │ -
58 if ((gt.isPrism())and (k==2))
│ │ │ │ - │ │ │ │ -
60 if ((gt.isPyramid())and (k==1))
│ │ │ │ - │ │ │ │ -
62 if ((gt.isPyramid())and (k==2))
│ │ │ │ - │ │ │ │ -
64 return nullptr;
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66 };
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
68
│ │ │ │ -
72 template<class D, class R, int dim, int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
74 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
80
│ │ │ │ -
81
│ │ │ │ -
│ │ │ │ -
83 static FiniteElementType* create(const GeometryType& gt)
│ │ │ │ -
84 {
│ │ │ │ -
85 if (k==0)
│ │ │ │ - │ │ │ │ -
87
│ │ │ │ -
88 if (gt.isSimplex())
│ │ │ │ - │ │ │ │ -
90
│ │ │ │ -
91 if (gt.isCube())
│ │ │ │ - │ │ │ │ -
93
│ │ │ │ - │ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96 };
│ │ │ │ -
│ │ │ │ -
97
│ │ │ │ -
98
│ │ │ │ -
99
│ │ │ │ -
110 template<class D, class R, int dim, int k>
│ │ │ │ -
│ │ │ │ -
111 class
│ │ │ │ -
112 [[deprecated("Use LagrangeLocalFiniteElementCache<D,R,dim,k> from lagrangelfecache.hh. This will be removed after release 2.10.")]]
│ │ │ │ - │ │ │ │ -
114 {
│ │ │ │ -
115 protected:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
118 typedef typename std::map<GeometryType,FE*> FEMap;
│ │ │ │ -
119
│ │ │ │ -
120 public:
│ │ │ │ - │ │ │ │ -
123
│ │ │ │ - │ │ │ │ -
126
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
129 {
│ │ │ │ -
130 typename FEMap::iterator it = other.cache_.begin();
│ │ │ │ -
131 typename FEMap::iterator end = other.cache_.end();
│ │ │ │ -
132 for(; it!=end; ++it)
│ │ │ │ -
133 cache_[it->first] = (it->second)->clone();
│ │ │ │ -
134 }
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
137 {
│ │ │ │ -
138 typename FEMap::iterator it = cache_.begin();
│ │ │ │ -
139 typename FEMap::iterator end = cache_.end();
│ │ │ │ -
140 for(; it!=end; ++it)
│ │ │ │ -
141 delete it->second;
│ │ │ │ -
142 }
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
│ │ │ │ -
145 const FiniteElementType& get(const GeometryType& gt) const
│ │ │ │ -
146 {
│ │ │ │ -
147 typename FEMap::const_iterator it = cache_.find(gt);
│ │ │ │ -
148 if (it==cache_.end())
│ │ │ │ -
149 {
│ │ │ │ - │ │ │ │ -
151 if (fe==0)
│ │ │ │ -
152 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element available for geometry type " << gt << " and order " << k);
│ │ │ │ -
153
│ │ │ │ -
154 cache_[gt] = fe;
│ │ │ │ -
155 return *fe;
│ │ │ │ -
156 }
│ │ │ │ -
157 return *(it->second);
│ │ │ │ -
158 }
│ │ │ │ -
│ │ │ │ -
159
│ │ │ │ -
160 protected:
│ │ │ │ -
161 mutable FEMap cache_;
│ │ │ │ -
162
│ │ │ │ -
163 };
│ │ │ │ -
│ │ │ │ -
164
│ │ │ │ -
165}
│ │ │ │ -
166
│ │ │ │ -
167#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ -
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ -
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ -
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition lagrangeprism.hh:649
│ │ │ │ -
Lagrange finite element for 3d pyramids with compile-time polynomial order.
Definition lagrangepyramid.hh:809
│ │ │ │ -
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ -
The local p0 finite element on all types of reference elements.
Definition p0.hh:25
│ │ │ │ -
Factory that only creates dimension specific local finite elements.
Definition pqkfactory.hh:30
│ │ │ │ -
P0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:31
│ │ │ │ -
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &)
create finite element for given GeometryType
Definition pqkfactory.hh:34
│ │ │ │ -
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:54
│ │ │ │ -
P0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:47
│ │ │ │ -
Factory to create any kind of Pk/Qk like element wrapped for the virtual interface.
Definition pqkfactory.hh:74
│ │ │ │ -
LagrangeCubeLocalFiniteElement< D, R, dim, k > Qk
Definition pqkfactory.hh:79
│ │ │ │ -
LagrangeSimplexLocalFiniteElement< D, R, dim, k > Pk
Definition pqkfactory.hh:78
│ │ │ │ -
LocalFiniteElementVirtualInterface< T > FiniteElementType
Definition pqkfactory.hh:76
│ │ │ │ -
static FiniteElementType * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:83
│ │ │ │ -
P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:75
│ │ │ │ -
P0LocalFiniteElement< D, R, dim > P0
Definition pqkfactory.hh:77
│ │ │ │ -
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
Definition pqkfactory.hh:114
│ │ │ │ -
P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:116
│ │ │ │ -
LocalFiniteElementVirtualInterface< T > FE
Definition pqkfactory.hh:117
│ │ │ │ -
PQkLocalFiniteElementCache()
Default constructor.
Definition pqkfactory.hh:125
│ │ │ │ -
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition pqkfactory.hh:122
│ │ │ │ -
std::map< GeometryType, FE * > FEMap
Definition pqkfactory.hh:118
│ │ │ │ -
const FiniteElementType & get(const GeometryType &gt) const
Get local finite element for given GeometryType.
Definition pqkfactory.hh:145
│ │ │ │ -
FEMap cache_
Definition pqkfactory.hh:161
│ │ │ │ -
~PQkLocalFiniteElementCache()
Definition pqkfactory.hh:136
│ │ │ │ -
PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other)
Copy constructor.
Definition pqkfactory.hh:128
│ │ │ │ +
12// Raviart-Thomas implementations with compile-time order
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
24
│ │ │ │ +
25#endif // #ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Convenience header that includes all available Raviart-Thomas local finite elements for cubes.
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,266 +1,53 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -pqkfactory.hh │ │ │ │ │ +raviartthomas.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ +5#ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ +8// Raviart-Thomas implementations with run-time order │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h> │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ 11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e │ │ │ │ │ -22{ │ │ │ │ │ -23 │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 struct _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -30 { │ │ │ │ │ -_3_1 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s │ │ │ │ │ -_T; │ │ │ │ │ -32 │ │ │ │ │ -_3_4 static _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_r_e_a_t_e(const GeometryType&) │ │ │ │ │ -35 { │ │ │ │ │ -36 return nullptr; │ │ │ │ │ -37 } │ │ │ │ │ -38 }; │ │ │ │ │ -39 │ │ │ │ │ -44 template │ │ │ │ │ -_4_5 struct _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -46 { │ │ │ │ │ -_4_7 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_3_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s │ │ │ │ │ -_T; │ │ │ │ │ -_4_8 using _P_r_i_s_m_P_1 = _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_1_>; │ │ │ │ │ -_4_9 using _P_r_i_s_m_P_2 = _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_>; │ │ │ │ │ -_5_0 using _P_y_r_a_m_i_d_P_1 = _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_1_>; │ │ │ │ │ -_5_1 using _P_y_r_a_m_i_d_P_2 = _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_>; │ │ │ │ │ -52 │ │ │ │ │ -_5_4 static _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_r_e_a_t_e(const GeometryType& gt) │ │ │ │ │ -55 { │ │ │ │ │ -56 if ((gt.isPrism())and (k==1)) │ │ │ │ │ -57 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_r_i_s_m_P_1_>(_P_r_i_s_m_P_1()); │ │ │ │ │ -58 if ((gt.isPrism())and (k==2)) │ │ │ │ │ -59 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_r_i_s_m_P_2_>(_P_r_i_s_m_P_2()); │ │ │ │ │ -60 if ((gt.isPyramid())and (k==1)) │ │ │ │ │ -61 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_y_r_a_m_i_d_P_1_>(_P_y_r_a_m_i_d_P_1()); │ │ │ │ │ -62 if ((gt.isPyramid())and (k==2)) │ │ │ │ │ -63 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_y_r_a_m_i_d_P_2_>(_P_y_r_a_m_i_d_P_2()); │ │ │ │ │ -64 return nullptr; │ │ │ │ │ -65 } │ │ │ │ │ -66 }; │ │ │ │ │ -67 │ │ │ │ │ -68 │ │ │ │ │ -72 template │ │ │ │ │ -_7_3 struct _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -74 { │ │ │ │ │ -_7_5 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_: │ │ │ │ │ -_T_r_a_i_t_s _T; │ │ │ │ │ -_7_6 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ -_7_7 using _P_0 = _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>; │ │ │ │ │ -_7_8 using _P_k = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_k_>; │ │ │ │ │ -_7_9 using _Q_k = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_k_>; │ │ │ │ │ -80 │ │ │ │ │ -81 │ │ │ │ │ -_8_3 static _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* _c_r_e_a_t_e(const GeometryType& gt) │ │ │ │ │ -84 { │ │ │ │ │ -85 if (k==0) │ │ │ │ │ -86 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_0_>(_P_0(gt)); │ │ │ │ │ -87 │ │ │ │ │ -88 if (gt.isSimplex()) │ │ │ │ │ -89 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_k_>(_P_k()); │ │ │ │ │ -90 │ │ │ │ │ -91 if (gt.isCube()) │ │ │ │ │ -92 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_Q_k_>(_Q_k()); │ │ │ │ │ -93 │ │ │ │ │ -94 return _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_D_,_R_,_d_i_m_,_k_>_:_:_c_r_e_a_t_e(gt); │ │ │ │ │ -95 } │ │ │ │ │ -96 }; │ │ │ │ │ -97 │ │ │ │ │ -98 │ │ │ │ │ -99 │ │ │ │ │ -110 template │ │ │ │ │ -_1_1_1 class │ │ │ │ │ -112 [[deprecated("Use LagrangeLocalFiniteElementCache from │ │ │ │ │ -lagrangelfecache.hh. This will be removed after release 2.10.")]] │ │ │ │ │ -113 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -114 { │ │ │ │ │ -115 protected: │ │ │ │ │ -_1_1_6 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_: │ │ │ │ │ -_T_r_a_i_t_s _T; │ │ │ │ │ -_1_1_7 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_E; │ │ │ │ │ -_1_1_8 typedef typename std::map _F_E_M_a_p; │ │ │ │ │ -119 │ │ │ │ │ -120 public: │ │ │ │ │ -_1_2_2 typedef _F_E _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ -123 │ │ │ │ │ -_1_2_5 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() {} │ │ │ │ │ -126 │ │ │ │ │ -_1_2_8 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e(const _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e& other) │ │ │ │ │ -129 { │ │ │ │ │ -130 typename FEMap::iterator it = other._c_a_c_h_e__.begin(); │ │ │ │ │ -131 typename FEMap::iterator end = other._c_a_c_h_e__.end(); │ │ │ │ │ -132 for(; it!=end; ++it) │ │ │ │ │ -133 cache_[it->first] = (it->second)->clone(); │ │ │ │ │ -134 } │ │ │ │ │ -135 │ │ │ │ │ -_1_3_6 _~_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() │ │ │ │ │ -137 { │ │ │ │ │ -138 typename FEMap::iterator it = cache_.begin(); │ │ │ │ │ -139 typename FEMap::iterator end = cache_.end(); │ │ │ │ │ -140 for(; it!=end; ++it) │ │ │ │ │ -141 delete it->second; │ │ │ │ │ -142 } │ │ │ │ │ -143 │ │ │ │ │ -_1_4_5 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t(const GeometryType& gt) const │ │ │ │ │ -146 { │ │ │ │ │ -147 typename FEMap::const_iterator it = cache_.find(gt); │ │ │ │ │ -148 if (it==cache_.end()) │ │ │ │ │ -149 { │ │ │ │ │ -150 _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* fe = _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_D_,_R_,_d_i_m_,_k_>_:_:_c_r_e_a_t_e │ │ │ │ │ -(gt); │ │ │ │ │ -151 if (fe==0) │ │ │ │ │ -152 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element │ │ │ │ │ -available for geometry type " << gt << " and order " << k); │ │ │ │ │ -153 │ │ │ │ │ -154 cache_[gt] = fe; │ │ │ │ │ -155 return *fe; │ │ │ │ │ -156 } │ │ │ │ │ -157 return *(it->second); │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -160 protected: │ │ │ │ │ -_1_6_1 mutable _F_E_M_a_p _c_a_c_h_e__; │ │ │ │ │ -162 │ │ │ │ │ -163 }; │ │ │ │ │ -164 │ │ │ │ │ -165} │ │ │ │ │ -166 │ │ │ │ │ -167#endif │ │ │ │ │ -_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ -_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ -_p_0_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local finite elements with functions │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping a finite element using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for 3d prisms with arbitrary compile-time polynomial │ │ │ │ │ -order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangeprism.hh:649 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for 3d pyramids with compile-time polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangepyramid.hh:809 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ -polynomial order. │ │ │ │ │ -DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ -_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -The local p0 finite element on all types of reference elements. │ │ │ │ │ -DDeeffiinniittiioonn p0.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory that only creates dimension specific local finite elements. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_T │ │ │ │ │ -P0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits T │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &) │ │ │ │ │ -create finite element for given GeometryType │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _>_:_:_c_r_e_a_t_e │ │ │ │ │ -static LocalFiniteElementVirtualInterface< T > * create(const GeometryType >) │ │ │ │ │ -create finite element for given GeometryType │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _>_:_:_T │ │ │ │ │ -P0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits T │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ -Factory to create any kind of Pk/Qk like element wrapped for the virtual │ │ │ │ │ -interface. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_Q_k │ │ │ │ │ -LagrangeCubeLocalFiniteElement< D, R, dim, k > Qk │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_P_k │ │ │ │ │ -LagrangeSimplexLocalFiniteElement< D, R, dim, k > Pk │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -LocalFiniteElementVirtualInterface< T > FiniteElementType │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static FiniteElementType * create(const GeometryType >) │ │ │ │ │ -create finite element for given GeometryType │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_T │ │ │ │ │ -P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_P_0 │ │ │ │ │ -P0LocalFiniteElement< D, R, dim > P0 │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:77 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -A cache that stores all available Pk/Qk like local finite elements for the │ │ │ │ │ -given dimension and order. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:114 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_T │ │ │ │ │ -P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:116 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E │ │ │ │ │ -LocalFiniteElementVirtualInterface< T > FE │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:117 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -PQkLocalFiniteElementCache() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:125 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -FE FiniteElementType │ │ │ │ │ -Type of the finite elements stored in this cache. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:122 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E_M_a_p │ │ │ │ │ -std::map< GeometryType, FE * > FEMap │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:118 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ -const FiniteElementType & get(const GeometryType >) const │ │ │ │ │ -Get local finite element for given GeometryType. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:145 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_a_c_h_e__ │ │ │ │ │ -FEMap cache_ │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:161 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_~_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -~PQkLocalFiniteElementCache() │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:136 │ │ │ │ │ -_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other) │ │ │ │ │ -Copy constructor. │ │ │ │ │ -DDeeffiinniittiioonn pqkfactory.hh:128 │ │ │ │ │ +12// Raviart-Thomas implementations with compile-time order │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h> │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ +22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +23#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h> │ │ │ │ │ +24 │ │ │ │ │ +25#endif // #ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h │ │ │ │ │ +Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ +elements for cubes. │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ +arbitrary dimension. │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h │ │ │ │ │ +_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: emptypoints.hh File Reference │ │ │ │ +dune-localfunctions: nedelec.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,25 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
emptypoints.hh File Reference
│ │ │ │ +
nedelec.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::LagrangePoint< F, dim >
 
class  Dune::EmptyPointSet< F, dim >
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,12 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -emptypoints.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +nedelec.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00395_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: emptypoints.hh Source File │ │ │ │ +dune-localfunctions: nedelec.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,185 +70,38 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
emptypoints.hh
│ │ │ │ +
nedelec.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ -
6#define DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
16 template< class F, unsigned int dim >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
18 {
│ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21 template< class, class >
│ │ │ │ - │ │ │ │ -
23
│ │ │ │ -
24 public:
│ │ │ │ -
25 static const int dimension = dim;
│ │ │ │ -
26
│ │ │ │ -
27 typedef F Field;
│ │ │ │ -
28
│ │ │ │ -
29 typedef FieldVector< Field, dimension > Vector;
│ │ │ │ -
30
│ │ │ │ -
│ │ │ │ -
31 const Vector &point () const
│ │ │ │ -
32 {
│ │ │ │ -
33 return point_;
│ │ │ │ -
34 }
│ │ │ │ -
│ │ │ │ -
35
│ │ │ │ -
│ │ │ │ -
36 const LocalKey &localKey () const
│ │ │ │ -
37 {
│ │ │ │ -
38 return localKey_;
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ -
41 const Field weight () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return weight_;
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
49 };
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
51 // EmptyPointSet
│ │ │ │ -
52 // --------------
│ │ │ │ -
53
│ │ │ │ -
54 template< class F, unsigned int dim >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ - │ │ │ │ -
58
│ │ │ │ -
59 public:
│ │ │ │ -
60 typedef F Field;
│ │ │ │ -
61
│ │ │ │ -
62 static const unsigned int dimension = dim;
│ │ │ │ -
63
│ │ │ │ - │ │ │ │ -
65
│ │ │ │ -
66 typedef typename std::vector< LagrangePoint >::const_iterator iterator;
│ │ │ │ -
67
│ │ │ │ -
68 protected:
│ │ │ │ -
│ │ │ │ -
69 EmptyPointSet ( const std::size_t order )
│ │ │ │ -
70 : order_( order )
│ │ │ │ -
71 {}
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73 public:
│ │ │ │ -
│ │ │ │ -
74 const LagrangePoint &operator[] ( const unsigned int i ) const
│ │ │ │ -
75 {
│ │ │ │ -
76 assert( i < size() );
│ │ │ │ -
77 return points_[ i ];
│ │ │ │ -
78 }
│ │ │ │ -
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
80 iterator begin () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return points_.begin();
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
│ │ │ │ -
85 iterator end () const
│ │ │ │ -
86 {
│ │ │ │ -
87 return points_.end();
│ │ │ │ -
88 }
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
│ │ │ │ -
90 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ -
91 {
│ │ │ │ -
92 return (*this)[ i ].localKey();
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
│ │ │ │ -
95 std::size_t order () const
│ │ │ │ -
96 {
│ │ │ │ -
97 return order_;
│ │ │ │ -
98 }
│ │ │ │ -
│ │ │ │ -
99
│ │ │ │ -
│ │ │ │ -
100 std::size_t size () const
│ │ │ │ -
101 {
│ │ │ │ -
102 return points_.size();
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
105 protected:
│ │ │ │ -
106 std::size_t order_;
│ │ │ │ -
107 std::vector< LagrangePoint > points_;
│ │ │ │ -
108 };
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ -
110}
│ │ │ │ -
111
│ │ │ │ -
112#endif // DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition emptypoints.hh:18
│ │ │ │ -
const LocalKey & localKey() const
Definition emptypoints.hh:36
│ │ │ │ -
Field weight_
Definition emptypoints.hh:48
│ │ │ │ -
static const int dimension
Definition emptypoints.hh:25
│ │ │ │ -
friend class LagrangePointSetImpl
Definition emptypoints.hh:22
│ │ │ │ -
Vector point_
Definition emptypoints.hh:46
│ │ │ │ -
const Field weight() const
Definition emptypoints.hh:41
│ │ │ │ -
FieldVector< Field, dimension > Vector
Definition emptypoints.hh:29
│ │ │ │ -
F Field
Definition emptypoints.hh:27
│ │ │ │ -
const Vector & point() const
Definition emptypoints.hh:31
│ │ │ │ -
LocalKey localKey_
Definition emptypoints.hh:47
│ │ │ │ -
Definition emptypoints.hh:56
│ │ │ │ -
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ -
std::size_t order_
Definition emptypoints.hh:106
│ │ │ │ -
static const unsigned int dimension
Definition emptypoints.hh:62
│ │ │ │ -
EmptyPointSet(const std::size_t order)
Definition emptypoints.hh:69
│ │ │ │ -
const LagrangePoint & operator[](const unsigned int i) const
Definition emptypoints.hh:74
│ │ │ │ -
std::size_t size() const
Definition emptypoints.hh:100
│ │ │ │ -
Dune::LagrangePoint< Field, dimension > LagrangePoint
Definition emptypoints.hh:64
│ │ │ │ -
const LocalKey & localKey(const unsigned int i) const
Definition emptypoints.hh:90
│ │ │ │ -
iterator begin() const
Definition emptypoints.hh:80
│ │ │ │ -
iterator end() const
Definition emptypoints.hh:85
│ │ │ │ -
F Field
Definition emptypoints.hh:60
│ │ │ │ -
std::vector< LagrangePoint > points_
Definition emptypoints.hh:107
│ │ │ │ -
std::vector< LagrangePoint >::const_iterator iterator
Definition emptypoints.hh:66
│ │ │ │ +
8// Nedelec element implementations with run-time order
│ │ │ │ +
9// [include them here once they exist]
│ │ │ │ +
10
│ │ │ │ +
11// Nedelec element implementations with compile-time order
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,203 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -emptypoints.hh │ │ │ │ │ +nedelec.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ -6#define DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -16 template< class F, unsigned int dim > │ │ │ │ │ -_1_7 class _L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ -18 { │ │ │ │ │ -19 typedef _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_,_ _d_i_m_ _> _T_h_i_s; │ │ │ │ │ -20 │ │ │ │ │ -21 template< class, class > │ │ │ │ │ -_2_2 friend class _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_I_m_p_l; │ │ │ │ │ -23 │ │ │ │ │ -24 public: │ │ │ │ │ -_2_5 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -26 │ │ │ │ │ -_2_7 typedef F _F_i_e_l_d; │ │ │ │ │ -28 │ │ │ │ │ -_2_9 typedef FieldVector< Field, dimension > _V_e_c_t_o_r; │ │ │ │ │ -30 │ │ │ │ │ -_3_1 const _V_e_c_t_o_r &_p_o_i_n_t () const │ │ │ │ │ -32 { │ │ │ │ │ -33 return _p_o_i_n_t__; │ │ │ │ │ -34 } │ │ │ │ │ -35 │ │ │ │ │ -_3_6 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y () const │ │ │ │ │ -37 { │ │ │ │ │ -38 return _l_o_c_a_l_K_e_y__; │ │ │ │ │ -39 } │ │ │ │ │ -40 │ │ │ │ │ -_4_1 const _F_i_e_l_d _w_e_i_g_h_t () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return _w_e_i_g_h_t__; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -_4_6 _V_e_c_t_o_r _p_o_i_n_t__ = {}; │ │ │ │ │ -_4_7 _L_o_c_a_l_K_e_y _l_o_c_a_l_K_e_y__ = {}; │ │ │ │ │ -_4_8 _F_i_e_l_d _w_e_i_g_h_t__ = {}; │ │ │ │ │ -49 }; │ │ │ │ │ -50 │ │ │ │ │ -51 // EmptyPointSet │ │ │ │ │ -52 // -------------- │ │ │ │ │ -53 │ │ │ │ │ -54 template< class F, unsigned int dim > │ │ │ │ │ -_5_5 class _E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ -56 { │ │ │ │ │ -57 typedef _E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> _T_h_i_s; │ │ │ │ │ -58 │ │ │ │ │ -59 public: │ │ │ │ │ -_6_0 typedef F _F_i_e_l_d; │ │ │ │ │ -61 │ │ │ │ │ -_6_2 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -63 │ │ │ │ │ -_6_4 typedef _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_i_e_l_d_,_ _d_i_m_e_n_s_i_o_n_ _> _L_a_g_r_a_n_g_e_P_o_i_n_t; │ │ │ │ │ -65 │ │ │ │ │ -_6_6 typedef typename std::vector< LagrangePoint >::const_iterator _i_t_e_r_a_t_o_r; │ │ │ │ │ -67 │ │ │ │ │ -68 protected: │ │ │ │ │ -_6_9 _E_m_p_t_y_P_o_i_n_t_S_e_t ( const std::size_t _o_r_d_e_r ) │ │ │ │ │ -70 : _o_r_d_e_r__( _o_r_d_e_r ) │ │ │ │ │ -71 {} │ │ │ │ │ -72 │ │ │ │ │ -73 public: │ │ │ │ │ -_7_4 const _L_a_g_r_a_n_g_e_P_o_i_n_t &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ -75 { │ │ │ │ │ -76 assert( i < _s_i_z_e() ); │ │ │ │ │ -77 return _p_o_i_n_t_s__[ i ]; │ │ │ │ │ -78 } │ │ │ │ │ -79 │ │ │ │ │ -_8_0 _i_t_e_r_a_t_o_r _b_e_g_i_n () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return _p_o_i_n_t_s__.begin(); │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_8_5 _i_t_e_r_a_t_o_r _e_n_d () const │ │ │ │ │ -86 { │ │ │ │ │ -87 return _p_o_i_n_t_s__.end(); │ │ │ │ │ -88 } │ │ │ │ │ -89 │ │ │ │ │ -_9_0 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ -91 { │ │ │ │ │ -92 return (*this)[ i ].localKey(); │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -_9_5 std::size_t _o_r_d_e_r () const │ │ │ │ │ -96 { │ │ │ │ │ -97 return _o_r_d_e_r__; │ │ │ │ │ -98 } │ │ │ │ │ -99 │ │ │ │ │ -_1_0_0 std::size_t _s_i_z_e () const │ │ │ │ │ -101 { │ │ │ │ │ -102 return _p_o_i_n_t_s__.size(); │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -105 protected: │ │ │ │ │ -_1_0_6 std::size_t _o_r_d_e_r__; │ │ │ │ │ -_1_0_7 std::vector< LagrangePoint > _p_o_i_n_t_s__; │ │ │ │ │ -108 }; │ │ │ │ │ -109 │ │ │ │ │ -110} │ │ │ │ │ -111 │ │ │ │ │ -112#endif // DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t__ │ │ │ │ │ -Field weight_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_I_m_p_l │ │ │ │ │ -friend class LagrangePointSetImpl │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t__ │ │ │ │ │ -Vector point_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t │ │ │ │ │ -const Field weight() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_V_e_c_t_o_r │ │ │ │ │ -FieldVector< Field, dimension > Vector │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t │ │ │ │ │ -const Vector & point() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y__ │ │ │ │ │ -LocalKey localKey_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r__ │ │ │ │ │ -std::size_t order_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:106 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ -EmptyPointSet(const std::size_t order) │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -const LagrangePoint & operator[](const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:100 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ -Dune::LagrangePoint< Field, dimension > LagrangePoint │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:64 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_b_e_g_i_n │ │ │ │ │ -iterator begin() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_e_n_d │ │ │ │ │ -iterator end() const │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_p_o_i_n_t_s__ │ │ │ │ │ -std::vector< LagrangePoint > points_ │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_i_t_e_r_a_t_o_r │ │ │ │ │ -std::vector< LagrangePoint >::const_iterator iterator │ │ │ │ │ -DDeeffiinniittiioonn emptypoints.hh:66 │ │ │ │ │ +8// Nedelec element implementations with run-time order │ │ │ │ │ +9// [include them here once they exist] │ │ │ │ │ +10 │ │ │ │ │ +11// Nedelec element implementations with compile-time order │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_n_e_d_e_l_e_c_/_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_HH │ │ │ │ │ +_n_e_d_e_l_e_c_1_s_t_k_i_n_d_c_u_b_e_._h_h │ │ │ │ │ +_n_e_d_e_l_e_c_1_s_t_k_i_n_d_s_i_m_p_l_e_x_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: mimetic.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1localinterpolation.hh File Reference
│ │ │ │ +
mimetic.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include "common/localfiniteelementtraits.hh"
│ │ │ │ +#include "mimetic/mimeticall.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualP1LocalInterpolation< dim, LB >
class  Dune::MimeticLocalFiniteElement< D, R, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +1,20 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualp1localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +mimetic.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ +#include "_m_i_m_e_t_i_c_/_m_i_m_e_t_i_c_a_l_l_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_,_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00398_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: mimetic.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,112 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localinterpolation.hh
│ │ │ │ +
mimetic.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
15 template<int dim, class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
17 {
│ │ │ │ -
18 public:
│ │ │ │ -
20 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
22 {
│ │ │ │ -
23 typename LB::Traits::DomainType x;
│ │ │ │ -
24 // If the dual functions are dual on the faces,
│ │ │ │ -
25 // then adjust the interpolation weights
│ │ │ │ -
26 const int faceDual(LB::faceDual);
│ │ │ │ -
27
│ │ │ │ -
28 // compute P1 interpolation coefficients
│ │ │ │ -
29 std::vector<C> p1Interpolation(dim+1);
│ │ │ │ -
30
│ │ │ │ -
31 // vertex 0
│ │ │ │ -
32 for (int i=0; i<dim; i++)
│ │ │ │ -
33 x[i] = 0;
│ │ │ │ -
34 p1Interpolation[0] = f(x);
│ │ │ │ -
35
│ │ │ │ -
36 // remaining vertices
│ │ │ │ -
37 for (int i=0; i<dim; i++) {
│ │ │ │ -
38 for (int j=0; j<dim; j++)
│ │ │ │ -
39 x[j] = (i==j);
│ │ │ │ -
40
│ │ │ │ -
41 p1Interpolation[i+1] = f(x);
│ │ │ │ -
42
│ │ │ │ -
43 }
│ │ │ │ -
44
│ │ │ │ -
45 // compute dual coefficients from the Lagrange ones
│ │ │ │ -
46 out.resize(dim+1);
│ │ │ │ -
47 for (int i=0; i<dim+1; i++) {
│ │ │ │ -
48 out[i] = 2*p1Interpolation[i]/(dim+2-faceDual);
│ │ │ │ -
49
│ │ │ │ -
50 for (int j=0; j<i; j++)
│ │ │ │ -
51 out[i] += p1Interpolation[j]/(dim+2-faceDual);
│ │ │ │ -
52
│ │ │ │ -
53 for (int j=i+1; j<=dim; j++)
│ │ │ │ -
54 out[i] += p1Interpolation[j]/(dim+2-faceDual);
│ │ │ │ -
55 }
│ │ │ │ -
56 }
│ │ │ │ + │ │ │ │ +
11#include "mimetic/mimeticall.hh"
│ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
22 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 Dune::GeometryType gt;
│ │ │ │ + │ │ │ │ +
27 MimeticLocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
34
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 {}
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
38 MimeticLocalFiniteElement (Dune::GeometryType::BasicType basicType)
│ │ │ │ +
39 : gt(basicType,dim)
│ │ │ │ +
40 {}
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
42 MimeticLocalFiniteElement (Dune::GeometryType::BasicType basicType, unsigned int variant)
│ │ │ │ +
43 : gt(basicType,dim), basis(variant), coefficients(variant)
│ │ │ │ +
44 {}
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
46 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return basis;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
52 {
│ │ │ │ +
53 return coefficients;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
57 {
│ │ │ │ +
58 return interpolation;
│ │ │ │ +
59 }
│ │ │ │
│ │ │ │ -
57
│ │ │ │ -
58 };
│ │ │ │ -
│ │ │ │ -
59}
│ │ │ │
60
│ │ │ │ -
61#endif
│ │ │ │ +
61 Dune::GeometryType type () const { return gt; }
│ │ │ │ +
62 };
│ │ │ │ +
│ │ │ │ +
63}
│ │ │ │ +
64
│ │ │ │ +
65#endif
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition dualp1localinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition dualp1localinterpolation.hh:21
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Definition mimetic.hh:24
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition mimetic.hh:56
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition mimetic.hh:46
│ │ │ │ +
MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType, unsigned int variant)
Definition mimetic.hh:42
│ │ │ │ +
MimeticLocalFiniteElement()
Definition mimetic.hh:35
│ │ │ │ +
MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType)
Definition mimetic.hh:38
│ │ │ │ +
Dune::GeometryType type() const
Definition mimetic.hh:61
│ │ │ │ +
Dune::LocalFiniteElementTraits< MimeticLocalBasis< D, R, dim >, MimeticLocalCoefficients, MimeticLocalInterpolation< MimeticLocalBasis< D, R, dim > > > Traits
Definition mimetic.hh:33
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition mimetic.hh:51
│ │ │ │ +
Definition mimeticall.hh:23
│ │ │ │ +
Definition mimeticall.hh:74
│ │ │ │ +
!
Definition mimeticall.hh:88
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,78 +1,122 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localinterpolation.hh │ │ │ │ │ +mimetic.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_DUAL_P1_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -15 template │ │ │ │ │ -_1_6 class _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -17 { │ │ │ │ │ -18 public: │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -22 { │ │ │ │ │ -23 typename LB::Traits::DomainType x; │ │ │ │ │ -24 // If the dual functions are dual on the faces, │ │ │ │ │ -25 // then adjust the interpolation weights │ │ │ │ │ -26 const int faceDual(LB::faceDual); │ │ │ │ │ -27 │ │ │ │ │ -28 // compute P1 interpolation coefficients │ │ │ │ │ -29 std::vector p1Interpolation(dim+1); │ │ │ │ │ -30 │ │ │ │ │ -31 // vertex 0 │ │ │ │ │ -32 for (int i=0; i │ │ │ │ │ +_2_3 class _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +24 { │ │ │ │ │ +25 Dune::GeometryType gt; │ │ │ │ │ +26 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ +27 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +28 _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > interpolation; │ │ │ │ │ +29 │ │ │ │ │ +30 public: │ │ │ │ │ +31 typedef _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ +32 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_3 _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > > _T_r_a_i_t_s; │ │ │ │ │ +34 │ │ │ │ │ +_3_5 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +36 {} │ │ │ │ │ +37 │ │ │ │ │ +_3_8 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (Dune::GeometryType::BasicType basicType) │ │ │ │ │ +39 : gt(basicType,dim) │ │ │ │ │ +40 {} │ │ │ │ │ +41 │ │ │ │ │ +_4_2 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (Dune::GeometryType::BasicType basicType, unsigned │ │ │ │ │ +int variant) │ │ │ │ │ +43 : gt(basicType,dim), basis(variant), coefficients(variant) │ │ │ │ │ +44 {} │ │ │ │ │ +45 │ │ │ │ │ +_4_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return basis; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +52 { │ │ │ │ │ +53 return coefficients; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +57 { │ │ │ │ │ +58 return interpolation; │ │ │ │ │ +59 } │ │ │ │ │ 60 │ │ │ │ │ -61#endif │ │ │ │ │ +_6_1 Dune::GeometryType _t_y_p_e () const { return gt; } │ │ │ │ │ +62 }; │ │ │ │ │ +63} │ │ │ │ │ +64 │ │ │ │ │ +65#endif │ │ │ │ │ +_m_i_m_e_t_i_c_a_l_l_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn dualp1localinterpolation.hh:17 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Local interpolation of a function. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localinterpolation.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType, unsigned int │ │ │ │ │ +variant) │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +MimeticLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType) │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +Dune::GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +Dune::LocalFiniteElementTraits< MimeticLocalBasis< D, R, dim >, │ │ │ │ │ +MimeticLocalCoefficients, MimeticLocalInterpolation< MimeticLocalBasis< D, R, │ │ │ │ │ +dim > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn mimetic.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +! │ │ │ │ │ +DDeeffiinniittiioonn mimeticall.hh:88 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: crouzeixraviart.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1localbasis.hh File Reference
│ │ │ │ +
crouzeixraviart.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualP1LocalBasis< D, R, dim, faceDualT >
 Dual Lagrange shape functions on the simplex. More...
class  Dune::CrouzeixRaviartLocalFiniteElement< D, R, dim >
 Crouzeix-Raviart finite element. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualp1localbasis.hh File Reference │ │ │ │ │ +crouzeixraviart.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_T_ _> │ │ │ │ │ -  Dual Lagrange shape functions on the simplex. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Crouzeix-Raviart finite element. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00401_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localbasis.hh Source File │ │ │ │ +dune-localfunctions: crouzeixraviart.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,147 +70,230 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localbasis.hh
│ │ │ │ +
crouzeixraviart.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_DUAL_P1_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │
11#include <dune/common/fmatrix.hh>
│ │ │ │ - │ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
33 template<class D, class R, int dim, bool faceDualT=false>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {
│ │ │ │ -
36 public:
│ │ │ │ -
38 static const bool faceDual = faceDualT;
│ │ │ │ -
40 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
41 Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ -
44 unsigned int size () const
│ │ │ │ +
14#include <dune/geometry/type.hh>
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune { namespace Impl
│ │ │ │ +
22{
│ │ │ │ +
29 template<class D, class R, unsigned int dim>
│ │ │ │ +
30 class CrouzeixRaviartLocalBasis
│ │ │ │ +
31 {
│ │ │ │ +
32 public:
│ │ │ │ +
33 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ +
34
│ │ │ │ +
37 static constexpr unsigned int size ()
│ │ │ │ +
38 {
│ │ │ │ +
39 return dim+1;
│ │ │ │ +
40 }
│ │ │ │ +
41
│ │ │ │ +
43 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ +
44 std::vector<typename Traits::RangeType>& out) const
│ │ │ │
45 {
│ │ │ │ -
46 return dim+1;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
50 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
51 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
52 {
│ │ │ │ -
53 // evaluate P1 basis functions
│ │ │ │ -
54 std::vector<typename Traits::RangeType> p1Values(size());
│ │ │ │ -
55
│ │ │ │ -
56 p1Values[0] = 1.0;
│ │ │ │ +
46 out.resize(size());
│ │ │ │ +
47
│ │ │ │ +
48 std::fill(out.begin(), out.end()-1, 1.0);
│ │ │ │ +
49 out.back() = 1.0-dim;
│ │ │ │ +
50
│ │ │ │ +
51 for (unsigned int i=0; i<dim; i++)
│ │ │ │ +
52 {
│ │ │ │ +
53 out[i] -= dim * x[dim-i-1];
│ │ │ │ +
54 out.back() += dim*x[i];
│ │ │ │ +
55 }
│ │ │ │ +
56 }
│ │ │ │
57
│ │ │ │ -
58 for (int i=0; i<dim; i++) {
│ │ │ │ -
59 p1Values[0] -= in[i];
│ │ │ │ -
60 p1Values[i+1] = in[i];
│ │ │ │ -
61 }
│ │ │ │ -
62
│ │ │ │ -
63 // compute dual basis function values as a linear combination of the Lagrange values
│ │ │ │ -
64 out.resize(size());
│ │ │ │ -
65
│ │ │ │ -
66 for (int i=0; i<=dim; i++) {
│ │ │ │ -
67 out[i] = (dim+!faceDual)*p1Values[i];
│ │ │ │ -
68 for (int j=0; j<i; j++)
│ │ │ │ -
69 out[i] -= p1Values[j];
│ │ │ │ -
70
│ │ │ │ -
71 for (int j=i+1; j<=dim; j++)
│ │ │ │ -
72 out[i] -= p1Values[j];
│ │ │ │ -
73 }
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
77 inline void
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
79 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
80 {
│ │ │ │ -
81 // evaluate P1 jacobians
│ │ │ │ -
82 std::vector<typename Traits::JacobianType> p1Jacs(size());
│ │ │ │ -
83
│ │ │ │ -
84 for (int i=0; i<dim; i++)
│ │ │ │ -
85 p1Jacs[0][0][i] = -1;
│ │ │ │ +
63 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ +
64 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
65 {
│ │ │ │ +
66 out.resize(size());
│ │ │ │ +
67
│ │ │ │ +
68 for (unsigned i=0; i<dim; i++)
│ │ │ │ +
69 for (unsigned j=0; j<dim; j++)
│ │ │ │ +
70 out[i][0][j] = (i==(dim-1-j)) ? -(double)dim : 0;
│ │ │ │ +
71
│ │ │ │ +
72 std::fill(out.back()[0].begin(), out.back()[0].end(), dim);
│ │ │ │ +
73 }
│ │ │ │ +
74
│ │ │ │ +
81 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ +
82 const typename Traits::DomainType& in,
│ │ │ │ +
83 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
84 {
│ │ │ │ +
85 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │
86
│ │ │ │ -
87 for (int i=0; i<dim; i++)
│ │ │ │ -
88 for (int j=0; j<dim; j++)
│ │ │ │ -
89 p1Jacs[i+1][0][j] = (i==j);
│ │ │ │ -
90
│ │ │ │ -
91 // compute dual basis jacobians as linear combination of the Lagrange jacobians
│ │ │ │ -
92 out.resize(size());
│ │ │ │ +
87 out.resize(size());
│ │ │ │ +
88
│ │ │ │ +
89 if (totalOrder == 0) {
│ │ │ │ +
90 evaluateFunction(in, out);
│ │ │ │ +
91 return;
│ │ │ │ +
92 }
│ │ │ │
93
│ │ │ │ -
94 for (size_t i=0; i<=dim; i++) {
│ │ │ │ -
95 out[i][0] = 0;
│ │ │ │ -
96 out[i][0].axpy(dim+!faceDual,p1Jacs[i][0]);
│ │ │ │ +
94 if (totalOrder==1)
│ │ │ │ +
95 {
│ │ │ │ +
96 auto direction = std::find(order.begin(), order.end(), 1)-order.begin();
│ │ │ │
97
│ │ │ │ -
98 for (size_t j=0; j<i; j++)
│ │ │ │ -
99 out[i][0] -= p1Jacs[j][0];
│ │ │ │ +
98 for (unsigned int i=0; i<dim; i++)
│ │ │ │ +
99 out[i] = (i==(dim-1-direction)) ? -(double)dim : 0.0;
│ │ │ │
100
│ │ │ │ -
101 for (int j=i+1; j<=dim; j++)
│ │ │ │ -
102 out[i][0] -= p1Jacs[j][0];
│ │ │ │ -
103 }
│ │ │ │ -
104 }
│ │ │ │ -
│ │ │ │ -
105
│ │ │ │ -
│ │ │ │ -
107 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
108 const typename Traits::DomainType& in, // position
│ │ │ │ -
109 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
110 {
│ │ │ │ -
111 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
112 if (totalOrder == 0) {
│ │ │ │ -
113 evaluateFunction(in, out);
│ │ │ │ -
114 } else {
│ │ │ │ -
115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
116 }
│ │ │ │ -
117 }
│ │ │ │ -
│ │ │ │ -
118
│ │ │ │ -
│ │ │ │ -
120 unsigned int order () const
│ │ │ │ -
121 {
│ │ │ │ -
122 return 1;
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ -
124 };
│ │ │ │ -
│ │ │ │ -
125}
│ │ │ │ -
126#endif
│ │ │ │ +
101 out.back()[0] = dim;
│ │ │ │ +
102 }
│ │ │ │ +
103 else // all higher order derivatives are zero
│ │ │ │ +
104 std::fill(out.begin(), out.end(), 0);
│ │ │ │ +
105 }
│ │ │ │ +
106
│ │ │ │ +
108 static constexpr unsigned int order ()
│ │ │ │ +
109 {
│ │ │ │ +
110 return 1;
│ │ │ │ +
111 }
│ │ │ │ +
112 };
│ │ │ │ +
113
│ │ │ │ +
118 template<unsigned int dim>
│ │ │ │ +
119 class CrouzeixRaviartLocalCoefficients
│ │ │ │ +
120 {
│ │ │ │ +
121 public:
│ │ │ │ +
123 CrouzeixRaviartLocalCoefficients ()
│ │ │ │ +
124 : localKeys_(size())
│ │ │ │ +
125 {
│ │ │ │ +
126 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
127 localKeys_[i] = LocalKey(i,1,0);
│ │ │ │ +
128 }
│ │ │ │ +
129
│ │ │ │ +
131 static constexpr std::size_t size ()
│ │ │ │ +
132 {
│ │ │ │ +
133 return dim+1;
│ │ │ │ +
134 }
│ │ │ │ +
135
│ │ │ │ +
137 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
138 {
│ │ │ │ +
139 return localKeys_[i];
│ │ │ │ +
140 }
│ │ │ │ +
141
│ │ │ │ +
142 private:
│ │ │ │ +
143 std::vector<LocalKey> localKeys_;
│ │ │ │ +
144 };
│ │ │ │ +
145
│ │ │ │ +
150 template<class LocalBasis>
│ │ │ │ +
151 class CrouzeixRaviartLocalInterpolation
│ │ │ │ +
152 {
│ │ │ │ +
153 public:
│ │ │ │ +
154
│ │ │ │ +
162 template<typename F, typename C>
│ │ │ │ +
163 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
164 {
│ │ │ │ +
165 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ +
166
│ │ │ │ +
167 out.resize(LocalBasis::size());
│ │ │ │ +
168
│ │ │ │ +
169 // Evaluate at the facet midpoints
│ │ │ │ +
170 auto refSimplex = ReferenceElements<typename LocalBasis::Traits::DomainFieldType,dim>::simplex();
│ │ │ │ +
171 for (int i=0; i<refSimplex.size(1); i++)
│ │ │ │ +
172 out[i] = f(refSimplex.template geometry<1>(i).center());
│ │ │ │ +
173 }
│ │ │ │ +
174 };
│ │ │ │ +
175
│ │ │ │ +
176} } // namespace Dune::Impl
│ │ │ │ +
177
│ │ │ │ +
178namespace Dune
│ │ │ │ +
179{
│ │ │ │ +
186 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
188 {
│ │ │ │ +
189 public:
│ │ │ │ + │ │ │ │ +
193 Impl::CrouzeixRaviartLocalCoefficients<dim>,
│ │ │ │ +
194 Impl::CrouzeixRaviartLocalInterpolation<Impl::CrouzeixRaviartLocalBasis<D,R,dim> > >;
│ │ │ │ +
195
│ │ │ │ +
│ │ │ │ +
198 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ +
199 {
│ │ │ │ +
200 return basis_;
│ │ │ │ +
201 }
│ │ │ │ +
│ │ │ │ +
202
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
206 {
│ │ │ │ +
207 return coefficients_;
│ │ │ │ +
208 }
│ │ │ │ +
│ │ │ │ +
209
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
213 {
│ │ │ │ +
214 return interpolation_;
│ │ │ │ +
215 }
│ │ │ │ +
│ │ │ │ +
216
│ │ │ │ +
│ │ │ │ +
218 static constexpr std::size_t size()
│ │ │ │ +
219 {
│ │ │ │ +
220 return dim+1;
│ │ │ │ +
221 }
│ │ │ │ +
│ │ │ │ +
222
│ │ │ │ +
│ │ │ │ +
225 static constexpr GeometryType type()
│ │ │ │ +
226 {
│ │ │ │ +
227 return GeometryTypes::simplex(dim);
│ │ │ │ +
228 }
│ │ │ │ +
│ │ │ │ +
229
│ │ │ │ +
230 private:
│ │ │ │ +
231 Impl::CrouzeixRaviartLocalBasis<D,R,dim> basis_;
│ │ │ │ +
232 Impl::CrouzeixRaviartLocalCoefficients<dim> coefficients_;
│ │ │ │ +
233 Impl::CrouzeixRaviartLocalInterpolation<Impl::CrouzeixRaviartLocalBasis<D,R,dim> > interpolation_;
│ │ │ │ +
234 };
│ │ │ │ +
│ │ │ │ +
235
│ │ │ │ +
236} // namespace Dune
│ │ │ │ +
237
│ │ │ │ +
238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Dual Lagrange shape functions on the simplex.
Definition dualp1localbasis.hh:35
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition dualp1localbasis.hh:120
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition dualp1localbasis.hh:50
│ │ │ │ -
static const bool faceDual
Determines if the basis is only biorthogonal on adjacent faces.
Definition dualp1localbasis.hh:38
│ │ │ │ -
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition dualp1localbasis.hh:107
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition dualp1localbasis.hh:44
│ │ │ │ -
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
export type traits for function signature
Definition dualp1localbasis.hh:41
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition dualp1localbasis.hh:78
│ │ │ │ - │ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Crouzeix-Raviart finite element.
Definition crouzeixraviart.hh:188
│ │ │ │ +
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition crouzeixraviart.hh:225
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition crouzeixraviart.hh:205
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition crouzeixraviart.hh:212
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition crouzeixraviart.hh:198
│ │ │ │ +
static constexpr std::size_t size()
The number of shape functions.
Definition crouzeixraviart.hh:218
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,163 +1,243 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localbasis.hh │ │ │ │ │ +crouzeixraviart.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_DUAL_P1_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ 11#include │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -33 template │ │ │ │ │ -_3_4 class _D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -35 { │ │ │ │ │ -36 public: │ │ │ │ │ -_3_8 static const bool _f_a_c_e_D_u_a_l = faceDualT; │ │ │ │ │ -40 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_4_1 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -42 │ │ │ │ │ -_4_4 unsigned int _s_i_z_e () const │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e { namespace Impl │ │ │ │ │ +22{ │ │ │ │ │ +29 template │ │ │ │ │ +30 class CrouzeixRaviartLocalBasis │ │ │ │ │ +31 { │ │ │ │ │ +32 public: │ │ │ │ │ +33 using Traits = │ │ │ │ │ +LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ +>; │ │ │ │ │ +34 │ │ │ │ │ +37 static constexpr unsigned int size () │ │ │ │ │ +38 { │ │ │ │ │ +39 return dim+1; │ │ │ │ │ +40 } │ │ │ │ │ +41 │ │ │ │ │ +43 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ +44 std::vector& out) const │ │ │ │ │ 45 { │ │ │ │ │ -46 return dim+1; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -51 std::vector& out) const │ │ │ │ │ +46 out.resize(size()); │ │ │ │ │ +47 │ │ │ │ │ +48 std::fill(out.begin(), out.end()-1, 1.0); │ │ │ │ │ +49 out.back() = 1.0-dim; │ │ │ │ │ +50 │ │ │ │ │ +51 for (unsigned int i=0; i p1Values(_s_i_z_e()); │ │ │ │ │ -55 │ │ │ │ │ -56 p1Values[0] = 1.0; │ │ │ │ │ +53 out[i] -= dim * x[dim-i-1]; │ │ │ │ │ +54 out.back() += dim*x[i]; │ │ │ │ │ +55 } │ │ │ │ │ +56 } │ │ │ │ │ 57 │ │ │ │ │ -58 for (int i=0; i& out) const │ │ │ │ │ +65 { │ │ │ │ │ +66 out.resize(size()); │ │ │ │ │ +67 │ │ │ │ │ +68 for (unsigned i=0; i& out) const │ │ │ │ │ -80 { │ │ │ │ │ -81 // evaluate P1 jacobians │ │ │ │ │ -82 std::vector p1Jacs(_s_i_z_e()); │ │ │ │ │ -83 │ │ │ │ │ -84 for (int i=0; i& order, │ │ │ │ │ +82 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +83 std::vector& out) const │ │ │ │ │ +84 { │ │ │ │ │ +85 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ 86 │ │ │ │ │ -87 for (int i=0; i& _o_r_d_e_r, │ │ │ │ │ -108 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -109 std::vector& out) const // return value │ │ │ │ │ -110 { │ │ │ │ │ -111 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -112 if (totalOrder == 0) { │ │ │ │ │ -113 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -114 } else { │ │ │ │ │ -115 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -116 } │ │ │ │ │ -117 } │ │ │ │ │ -118 │ │ │ │ │ -_1_2_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -121 { │ │ │ │ │ -122 return 1; │ │ │ │ │ -123 } │ │ │ │ │ -124 }; │ │ │ │ │ -125} │ │ │ │ │ -126#endif │ │ │ │ │ +101 out.back()[0] = dim; │ │ │ │ │ +102 } │ │ │ │ │ +103 else // all higher order derivatives are zero │ │ │ │ │ +104 std::fill(out.begin(), out.end(), 0); │ │ │ │ │ +105 } │ │ │ │ │ +106 │ │ │ │ │ +108 static constexpr unsigned int order () │ │ │ │ │ +109 { │ │ │ │ │ +110 return 1; │ │ │ │ │ +111 } │ │ │ │ │ +112 }; │ │ │ │ │ +113 │ │ │ │ │ +118 template │ │ │ │ │ +119 class CrouzeixRaviartLocalCoefficients │ │ │ │ │ +120 { │ │ │ │ │ +121 public: │ │ │ │ │ +123 CrouzeixRaviartLocalCoefficients () │ │ │ │ │ +124 : localKeys_(size()) │ │ │ │ │ +125 { │ │ │ │ │ +126 for (std::size_t i=0; i localKeys_; │ │ │ │ │ +144 }; │ │ │ │ │ +145 │ │ │ │ │ +150 template │ │ │ │ │ +151 class CrouzeixRaviartLocalInterpolation │ │ │ │ │ +152 { │ │ │ │ │ +153 public: │ │ │ │ │ +154 │ │ │ │ │ +162 template │ │ │ │ │ +163 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +164 { │ │ │ │ │ +165 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ +166 │ │ │ │ │ +167 out.resize(LocalBasis::size()); │ │ │ │ │ +168 │ │ │ │ │ +169 // Evaluate at the facet midpoints │ │ │ │ │ +170 auto refSimplex = ReferenceElements::simplex(); │ │ │ │ │ +171 for (int i=0; i(i).center()); │ │ │ │ │ +173 } │ │ │ │ │ +174 }; │ │ │ │ │ +175 │ │ │ │ │ +176} } // namespace Dune::Impl │ │ │ │ │ +177 │ │ │ │ │ +178namespace _D_u_n_e │ │ │ │ │ +179{ │ │ │ │ │ +186 template │ │ │ │ │ +_1_8_7 class _C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +188 { │ │ │ │ │ +189 public: │ │ │ │ │ +_1_9_2 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ +193 Impl::CrouzeixRaviartLocalCoefficients, │ │ │ │ │ +194 Impl::CrouzeixRaviartLocalInterpolation > >; │ │ │ │ │ +195 │ │ │ │ │ +_1_9_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ +199 { │ │ │ │ │ +200 return basis_; │ │ │ │ │ +201 } │ │ │ │ │ +202 │ │ │ │ │ +_2_0_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +206 { │ │ │ │ │ +207 return coefficients_; │ │ │ │ │ +208 } │ │ │ │ │ +209 │ │ │ │ │ +_2_1_2 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +213 { │ │ │ │ │ +214 return interpolation_; │ │ │ │ │ +215 } │ │ │ │ │ +216 │ │ │ │ │ +_2_1_8 static constexpr std::size_t _s_i_z_e() │ │ │ │ │ +219 { │ │ │ │ │ +220 return dim+1; │ │ │ │ │ +221 } │ │ │ │ │ +222 │ │ │ │ │ +_2_2_5 static constexpr GeometryType _t_y_p_e() │ │ │ │ │ +226 { │ │ │ │ │ +227 return GeometryTypes::simplex(dim); │ │ │ │ │ +228 } │ │ │ │ │ +229 │ │ │ │ │ +230 private: │ │ │ │ │ +231 Impl::CrouzeixRaviartLocalBasis basis_; │ │ │ │ │ +232 Impl::CrouzeixRaviartLocalCoefficients coefficients_; │ │ │ │ │ +233 Impl::CrouzeixRaviartLocalInterpolation > interpolation_; │ │ │ │ │ +234 }; │ │ │ │ │ +235 │ │ │ │ │ +236} // namespace Dune │ │ │ │ │ +237 │ │ │ │ │ +238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Dual Lagrange shape functions on the simplex. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:120 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_f_a_c_e_D_u_a_l │ │ │ │ │ -static const bool faceDual │ │ │ │ │ -Determines if the basis is only biorthogonal on adjacent faces. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ -R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Crouzeix-Raviart finite element. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:188 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The reference element that the local finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:205 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:212 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:198 │ │ │ │ │ +_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() │ │ │ │ │ +The number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn crouzeixraviart.hh:218 │ │ │ │ │ _l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: refined.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,30 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
dualp1localcoefficients.hh File Reference
│ │ │ │ +
refined.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ + │ │ │ │ +

Convenience header that includes all available LocalFiniteElements based on uniform element refinement. │ │ │ │ +More...

│ │ │ │ +
#include <dune/localfunctions/refined/refinedp0.hh>
│ │ │ │ +#include <dune/localfunctions/refined/refinedp1.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::DualP1LocalCoefficients< dim >
 Local coefficients for dual simplex P1 elements. More...
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Convenience header that includes all available LocalFiniteElements based on uniform element refinement.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,17 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualp1localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +refined.hh File Reference │ │ │ │ │ +Convenience header that includes all available LocalFiniteElements based on │ │ │ │ │ +uniform element refinement. _M_o_r_e_._._. │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ -  Local coefficients for dual simplex P1 elements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Convenience header that includes all available LocalFiniteElements based on │ │ │ │ │ +uniform element refinement. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00404_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: refined.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,78 +70,29 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1localcoefficients.hh
│ │ │ │ +
refined.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
22 template <int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ -
29 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
30 li[i] = LocalKey(i,dim,0);
│ │ │ │ -
31 }
│ │ │ │ -
│ │ │ │ -
32
│ │ │ │ -
│ │ │ │ -
34 std::size_t size () const
│ │ │ │ -
35 {
│ │ │ │ -
36 return dim+1;
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ -
40 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
41 {
│ │ │ │ -
42 return li[i];
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
45 private:
│ │ │ │ -
46 std::vector<LocalKey> li;
│ │ │ │ -
47 };
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
49}
│ │ │ │ -
50
│ │ │ │ -
51#endif
│ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Local coefficients for dual simplex P1 elements.
Definition dualp1localcoefficients.hh:24
│ │ │ │ -
DualP1LocalCoefficients()
Standard constructor.
Definition dualp1localcoefficients.hh:27
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition dualp1localcoefficients.hh:40
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition dualp1localcoefficients.hh:34
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Piecewise P0 finite element.
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,76 +1,20 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_p_1 │ │ │ │ │ -dualp1localcoefficients.hh │ │ │ │ │ +refined.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DUAL_P1_LOCALCOEFFICIENTS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 public: │ │ │ │ │ -_2_7 _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(_s_i_z_e()) │ │ │ │ │ -28 { │ │ │ │ │ -29 for (std::size_t i=0; i<_s_i_z_e(); i++) │ │ │ │ │ -30 li[i] = _L_o_c_a_l_K_e_y(i,dim,0); │ │ │ │ │ -31 } │ │ │ │ │ -32 │ │ │ │ │ -_3_4 std::size_t _s_i_z_e () const │ │ │ │ │ -35 { │ │ │ │ │ -36 return dim+1; │ │ │ │ │ -37 } │ │ │ │ │ -38 │ │ │ │ │ -_4_0 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -41 { │ │ │ │ │ -42 return li[i]; │ │ │ │ │ -43 } │ │ │ │ │ -44 │ │ │ │ │ -45 private: │ │ │ │ │ -46 std::vector li; │ │ │ │ │ -47 }; │ │ │ │ │ -48 │ │ │ │ │ -49} │ │ │ │ │ -50 │ │ │ │ │ -51#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Local coefficients for dual simplex P1 elements. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DualP1LocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn dualp1localcoefficients.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn dualp1localcoefficients.hh:34 │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_._h_h> │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_._h_h │ │ │ │ │ +Piecewise P0 finite element. │ │ │ │ │ +_r_e_f_i_n_e_d_p_1_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualpq1factory.hh File Reference │ │ │ │ +dune-localfunctions: lagrangeprism.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualpq1factory.hh File Reference
│ │ │ │ +
lagrangeprism.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <map>
│ │ │ │ -#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualwrappers.hh>
│ │ │ │ -#include <dune/localfunctions/dualmortarbasis.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualPQ1LocalFiniteElementCache< D, R, dim, faceDual >
class  Dune::LagrangePrismLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualpq1factory.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h> │ │ │ │ │ +lagrangeprism.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _k_ _> │ │ │ │ │ +  Lagrange finite element for 3d prisms with arbitrary compile-time │ │ │ │ │ + polynomial order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00407_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualpq1factory.hh Source File │ │ │ │ +dune-localfunctions: lagrangeprism.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,688 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualpq1factory.hh
│ │ │ │ +
lagrangeprism.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │
7
│ │ │ │ -
8#include <map>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13#include <dune/common/math.hh>
│ │ │ │
14
│ │ │ │ -
15namespace Dune {
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │
16
│ │ │ │ -
17template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
19{
│ │ │ │ -
20protected:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
25 typedef std::map<Dune::GeometryType,FE*> FEMap;
│ │ │ │ -
26
│ │ │ │ -
27public:
│ │ │ │ - │ │ │ │ -
30
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
32 {
│ │ │ │ -
33 typename FEMap::iterator it = cache_.begin();
│ │ │ │ -
34 typename FEMap::iterator end = cache_.end();
│ │ │ │ -
35 for(; it!=end; ++it)
│ │ │ │ -
36 delete it->second;
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune { namespace Impl
│ │ │ │ +
22{
│ │ │ │ +
32 template<class D, class R, unsigned int k>
│ │ │ │ +
33 class LagrangePrismLocalBasis
│ │ │ │ +
34 {
│ │ │ │ +
35 static constexpr std::size_t dim = 3;
│ │ │ │ +
36 public:
│ │ │ │ +
37 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │
38
│ │ │ │ -
│ │ │ │ -
40 static FE* create(const Dune::GeometryType& gt)
│ │ │ │ -
41 {
│ │ │ │ -
42 if (gt.isSimplex())
│ │ │ │ - │ │ │ │ -
44 if (gt.isCube())
│ │ │ │ - │ │ │ │ -
46 return 0;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
50 const FiniteElementType& get(const Dune::GeometryType& gt) const
│ │ │ │ -
51 {
│ │ │ │ -
52 typename FEMap::const_iterator it = cache_.find(gt);
│ │ │ │ -
53 if (it==cache_.end())
│ │ │ │ -
54 {
│ │ │ │ -
55 FiniteElementType* fe = create(gt);
│ │ │ │ -
56
│ │ │ │ -
57 if (fe==0)
│ │ │ │ -
58 DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element available for geometry type " << gt);
│ │ │ │ -
59
│ │ │ │ -
60 cache_[gt] = fe;
│ │ │ │ -
61 return *fe;
│ │ │ │ -
62 }
│ │ │ │ -
63 return *(it->second);
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
66protected:
│ │ │ │ -
67 mutable FEMap cache_;
│ │ │ │ -
68};
│ │ │ │ -
│ │ │ │ -
69
│ │ │ │ -
70} // namespace Dune
│ │ │ │ -
71
│ │ │ │ -
72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
41 static constexpr unsigned int size ()
│ │ │ │ +
42 {
│ │ │ │ +
43 return binomial(k+2,2u) * (k+1);
│ │ │ │ +
44 }
│ │ │ │ +
45
│ │ │ │ +
47 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
48 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
49 {
│ │ │ │ +
50 out.resize(size());
│ │ │ │ +
51
│ │ │ │ +
52 // Specialization for zero-order case
│ │ │ │ +
53 if (k==0)
│ │ │ │ +
54 {
│ │ │ │ +
55 out[0] = 1;
│ │ │ │ +
56 return;
│ │ │ │ +
57 }
│ │ │ │ +
58
│ │ │ │ +
59 if (k==1)
│ │ │ │ +
60 {
│ │ │ │ +
61 out[0] = (1.0-in[0]-in[1])*(1.0-in[2]);
│ │ │ │ +
62 out[1] = in[0]*(1-in[2]);
│ │ │ │ +
63 out[2] = in[1]*(1-in[2]);
│ │ │ │ +
64 out[3] = in[2]*(1.0-in[0]-in[1]);
│ │ │ │ +
65 out[4] = in[0]*in[2];
│ │ │ │ +
66 out[5] = in[1]*in[2];
│ │ │ │ +
67
│ │ │ │ +
68 return;
│ │ │ │ +
69 }
│ │ │ │ +
70
│ │ │ │ +
71 if (k==2)
│ │ │ │ +
72 {
│ │ │ │ +
73 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ +
74 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ +
75 segmentShapeFunction[1] = in[2] * (4 - 4*in[2]);
│ │ │ │ +
76 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ +
77
│ │ │ │ +
78 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ +
79 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ +
80 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ +
81 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ +
82 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ +
83 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ +
84 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ +
85
│ │ │ │ +
86 // lower triangle:
│ │ │ │ +
87 out[0] = triangleShapeFunction[0] * segmentShapeFunction[0];
│ │ │ │ +
88 out[1] = triangleShapeFunction[1] * segmentShapeFunction[0];
│ │ │ │ +
89 out[2] = triangleShapeFunction[2] * segmentShapeFunction[0];
│ │ │ │ +
90
│ │ │ │ +
91 //upper triangle
│ │ │ │ +
92 out[3] = triangleShapeFunction[0] * segmentShapeFunction[2];
│ │ │ │ +
93 out[4] = triangleShapeFunction[1] * segmentShapeFunction[2];
│ │ │ │ +
94 out[5] = triangleShapeFunction[2] * segmentShapeFunction[2];
│ │ │ │ +
95
│ │ │ │ +
96 // vertical edges
│ │ │ │ +
97 out[6] = triangleShapeFunction[0] * segmentShapeFunction[1];
│ │ │ │ +
98 out[7] = triangleShapeFunction[1] * segmentShapeFunction[1];
│ │ │ │ +
99 out[8] = triangleShapeFunction[2] * segmentShapeFunction[1];
│ │ │ │ +
100
│ │ │ │ +
101 // lower triangle edges
│ │ │ │ +
102 out[9] = triangleShapeFunction[3] * segmentShapeFunction[0];
│ │ │ │ +
103 out[10] = triangleShapeFunction[4] * segmentShapeFunction[0];
│ │ │ │ +
104 out[11] = triangleShapeFunction[5] * segmentShapeFunction[0];
│ │ │ │ +
105
│ │ │ │ +
106 // upper triangle edges
│ │ │ │ +
107 out[12] = triangleShapeFunction[3] * segmentShapeFunction[2];
│ │ │ │ +
108 out[13] = triangleShapeFunction[4] * segmentShapeFunction[2];
│ │ │ │ +
109 out[14] = triangleShapeFunction[5] * segmentShapeFunction[2];
│ │ │ │ +
110
│ │ │ │ +
111 // quadrilateral sides
│ │ │ │ +
112 out[15] = triangleShapeFunction[3] * segmentShapeFunction[1];
│ │ │ │ +
113 out[16] = triangleShapeFunction[4] * segmentShapeFunction[1];
│ │ │ │ +
114 out[17] = triangleShapeFunction[5] * segmentShapeFunction[1];
│ │ │ │ +
115
│ │ │ │ +
116 return;
│ │ │ │ +
117 }
│ │ │ │ +
118
│ │ │ │ +
119 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateFunction for order " << k);
│ │ │ │ +
120 }
│ │ │ │ +
121
│ │ │ │ +
127 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
128 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
129 {
│ │ │ │ +
130 out.resize(size());
│ │ │ │ +
131
│ │ │ │ +
132 // Specialization for k==0
│ │ │ │ +
133 if (k==0)
│ │ │ │ +
134 {
│ │ │ │ +
135 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ +
136 return;
│ │ │ │ +
137 }
│ │ │ │ +
138
│ │ │ │ +
139 if (k==1)
│ │ │ │ +
140 {
│ │ │ │ +
141 out[0][0] = {in[2]-1, in[2]-1, in[0]+in[1]-1};
│ │ │ │ +
142 out[1][0] = {1-in[2], 0, -in[0]};
│ │ │ │ +
143 out[2][0] = { 0, 1-in[2], -in[1]};
│ │ │ │ +
144 out[3][0] = { -in[2], -in[2], 1-in[0]-in[1]};
│ │ │ │ +
145 out[4][0] = { in[2], 0, in[0]};
│ │ │ │ +
146 out[5][0] = { 0, in[2], in[1]};
│ │ │ │ +
147
│ │ │ │ +
148 return;
│ │ │ │ +
149 }
│ │ │ │ +
150
│ │ │ │ +
151 if (k==2)
│ │ │ │ +
152 {
│ │ │ │ +
153 // Second-order shape functions on a triangle, and the first derivatives
│ │ │ │ +
154 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ +
155 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ +
156 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ +
157 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ +
158 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ +
159 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ +
160 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ +
161
│ │ │ │ +
162 std::array<std::array<R,2>,6> triangleShapeFunctionDer;
│ │ │ │ +
163 triangleShapeFunctionDer[0] = {-3 + 4*(in[0] + in[1]), -3 + 4*(in[0] + in[1])};
│ │ │ │ +
164 triangleShapeFunctionDer[1] = { -1 + 4*in[0], 0};
│ │ │ │ +
165 triangleShapeFunctionDer[2] = { 0, -1 + 4*in[1]};
│ │ │ │ +
166 triangleShapeFunctionDer[3] = { 4 - 8*in[0] - 4*in[1], -4*in[0]};
│ │ │ │ +
167 triangleShapeFunctionDer[4] = { -4*in[1], 4 - 4*in[0] - 8*in[1]};
│ │ │ │ +
168 triangleShapeFunctionDer[5] = { 4*in[1], 4*in[0]};
│ │ │ │ +
169
│ │ │ │ +
170 // Second-order shape functions on a line, and the first derivatives
│ │ │ │ +
171 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ +
172 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ +
173 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ +
174 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ +
175
│ │ │ │ +
176 FieldVector<R,k+1> segmentShapeFunctionDer;
│ │ │ │ +
177 segmentShapeFunctionDer[0] = -3 + 4*in[2];
│ │ │ │ +
178 segmentShapeFunctionDer[1] = 4 - 8*in[2];
│ │ │ │ +
179 segmentShapeFunctionDer[2] = -1 + 4*in[2];
│ │ │ │ +
180
│ │ │ │ +
181 // lower triangle:
│ │ │ │ +
182 out[0][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[0];
│ │ │ │ +
183 out[0][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[0];
│ │ │ │ +
184 out[0][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
│ │ │ │ +
185
│ │ │ │ +
186 out[1][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[0];
│ │ │ │ +
187 out[1][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[0];
│ │ │ │ +
188 out[1][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
│ │ │ │ +
189
│ │ │ │ +
190 out[2][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[0];
│ │ │ │ +
191 out[2][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[0];
│ │ │ │ +
192 out[2][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
│ │ │ │ +
193
│ │ │ │ +
194 //upper triangle
│ │ │ │ +
195 out[3][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[2];
│ │ │ │ +
196 out[3][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[2];
│ │ │ │ +
197 out[3][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
│ │ │ │ +
198
│ │ │ │ +
199 out[4][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[2];
│ │ │ │ +
200 out[4][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[2];
│ │ │ │ +
201 out[4][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
│ │ │ │ +
202
│ │ │ │ +
203 out[5][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[2];
│ │ │ │ +
204 out[5][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[2];
│ │ │ │ +
205 out[5][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
│ │ │ │ +
206
│ │ │ │ +
207 // vertical edges
│ │ │ │ +
208 out[6][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[1];
│ │ │ │ +
209 out[6][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[1];
│ │ │ │ +
210 out[6][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
│ │ │ │ +
211
│ │ │ │ +
212 out[7][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[1];
│ │ │ │ +
213 out[7][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[1];
│ │ │ │ +
214 out[7][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
│ │ │ │ +
215
│ │ │ │ +
216 out[8][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[1];
│ │ │ │ +
217 out[8][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[1];
│ │ │ │ +
218 out[8][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
│ │ │ │ +
219
│ │ │ │ +
220 // lower triangle edges
│ │ │ │ +
221 out[9][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[0];
│ │ │ │ +
222 out[9][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[0];
│ │ │ │ +
223 out[9][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
│ │ │ │ +
224
│ │ │ │ +
225 out[10][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[0];
│ │ │ │ +
226 out[10][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[0];
│ │ │ │ +
227 out[10][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
│ │ │ │ +
228
│ │ │ │ +
229 out[11][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[0];
│ │ │ │ +
230 out[11][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[0];
│ │ │ │ +
231 out[11][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
│ │ │ │ +
232
│ │ │ │ +
233 // upper triangle edges
│ │ │ │ +
234 out[12][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[2];
│ │ │ │ +
235 out[12][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[2];
│ │ │ │ +
236 out[12][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
│ │ │ │ +
237
│ │ │ │ +
238 out[13][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[2];
│ │ │ │ +
239 out[13][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[2];
│ │ │ │ +
240 out[13][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
│ │ │ │ +
241
│ │ │ │ +
242 out[14][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[2];
│ │ │ │ +
243 out[14][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[2];
│ │ │ │ +
244 out[14][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
│ │ │ │ +
245
│ │ │ │ +
246 // quadrilateral sides
│ │ │ │ +
247 out[15][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[1];
│ │ │ │ +
248 out[15][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[1];
│ │ │ │ +
249 out[15][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
│ │ │ │ +
250
│ │ │ │ +
251 out[16][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[1];
│ │ │ │ +
252 out[16][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[1];
│ │ │ │ +
253 out[16][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
│ │ │ │ +
254
│ │ │ │ +
255 out[17][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[1];
│ │ │ │ +
256 out[17][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[1];
│ │ │ │ +
257 out[17][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
│ │ │ │ +
258
│ │ │ │ +
259 return;
│ │ │ │ +
260 }
│ │ │ │ +
261
│ │ │ │ +
262 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateJacobian for order " << k);
│ │ │ │ +
263 }
│ │ │ │ +
264
│ │ │ │ +
271 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ +
272 const typename Traits::DomainType& in,
│ │ │ │ +
273 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
274 {
│ │ │ │ +
275 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
276
│ │ │ │ +
277 out.resize(size());
│ │ │ │ +
278
│ │ │ │ +
279 if (totalOrder == 0)
│ │ │ │ +
280 {
│ │ │ │ +
281 evaluateFunction(in, out);
│ │ │ │ +
282 return;
│ │ │ │ +
283 }
│ │ │ │ +
284
│ │ │ │ +
285 // Specialization for zero-order finite elements
│ │ │ │ +
286 if (k==0)
│ │ │ │ +
287 {
│ │ │ │ +
288 out[0] = 0;
│ │ │ │ +
289 return;
│ │ │ │ +
290 }
│ │ │ │ +
291
│ │ │ │ +
292 // Specialization for first-order finite elements
│ │ │ │ +
293 if (k==1)
│ │ │ │ +
294 {
│ │ │ │ +
295 if (totalOrder == 1)
│ │ │ │ +
296 {
│ │ │ │ +
297 auto direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
298
│ │ │ │ +
299 switch (direction) {
│ │ │ │ +
300 case 0:
│ │ │ │ +
301 out[0] = in[2]-1;
│ │ │ │ +
302 out[1] = 1-in[2];
│ │ │ │ +
303 out[2] = 0;
│ │ │ │ +
304 out[3] = -in[2];
│ │ │ │ +
305 out[4] = in[2];
│ │ │ │ +
306 out[5] = 0;
│ │ │ │ +
307 break;
│ │ │ │ +
308 case 1:
│ │ │ │ +
309 out[0] = in[2]-1;
│ │ │ │ +
310 out[1] = 0;
│ │ │ │ +
311 out[2] = 1-in[2];
│ │ │ │ +
312 out[3] = -in[2];
│ │ │ │ +
313 out[4] = 0;
│ │ │ │ +
314 out[5] = in[2];
│ │ │ │ +
315 break;
│ │ │ │ +
316 case 2:
│ │ │ │ +
317 out[0] = in[0]+in[1]-1;
│ │ │ │ +
318 out[1] = -in[0];
│ │ │ │ +
319 out[2] = -in[1];
│ │ │ │ +
320 out[3] = 1-in[0]-in[1];
│ │ │ │ +
321 out[4] = in[0];
│ │ │ │ +
322 out[5] = in[1];
│ │ │ │ +
323 break;
│ │ │ │ +
324 default:
│ │ │ │ +
325 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
326 }
│ │ │ │ +
327 } else if (totalOrder == 2) {
│ │ │ │ +
328 out.resize(size());
│ │ │ │ +
329 if (order[0] == 1 && order[2] == 1) {
│ │ │ │ +
330 out[0] = 1;
│ │ │ │ +
331 out[1] =-1;
│ │ │ │ +
332 out[2] = 0;
│ │ │ │ +
333 out[3] =-1;
│ │ │ │ +
334 out[4] = 1;
│ │ │ │ +
335 out[5] = 0;
│ │ │ │ +
336 } else if (order[1] == 1 && order[2] == 1) {
│ │ │ │ +
337 out[0] = 1;
│ │ │ │ +
338 out[1] = 0;
│ │ │ │ +
339 out[2] =-1;
│ │ │ │ +
340 out[3] =-1;
│ │ │ │ +
341 out[4] = 0;
│ │ │ │ +
342 out[5] = 1;
│ │ │ │ +
343 } else {
│ │ │ │ +
344 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
345 out[i] = 0;
│ │ │ │ +
346 }
│ │ │ │ +
347 } else {
│ │ │ │ +
348 out.resize(size());
│ │ │ │ +
349 std::fill(out.begin(), out.end(), 0.0);
│ │ │ │ +
350 }
│ │ │ │ +
351
│ │ │ │ +
352 return;
│ │ │ │ +
353 }
│ │ │ │ +
354
│ │ │ │ +
355 // Specialization for second-order finite elements
│ │ │ │ +
356 if (k==2)
│ │ │ │ +
357 {
│ │ │ │ +
358 if (totalOrder == 1)
│ │ │ │ +
359 {
│ │ │ │ +
360 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
361 switch (direction)
│ │ │ │ +
362 {
│ │ │ │ +
363 case 0:
│ │ │ │ +
364 {
│ │ │ │ +
365 FieldVector<R,6> triangleShapeFunctionDerX;
│ │ │ │ +
366 triangleShapeFunctionDerX[0] = -3 + 4*(in[0] + in[1]);
│ │ │ │ +
367 triangleShapeFunctionDerX[1] = -1 + 4* in[0];
│ │ │ │ +
368 triangleShapeFunctionDerX[2] = 0;
│ │ │ │ +
369 triangleShapeFunctionDerX[3] = 4 - 8* in[0] - 4*in[1];
│ │ │ │ +
370 triangleShapeFunctionDerX[4] = -4*in[1];
│ │ │ │ +
371 triangleShapeFunctionDerX[5] = 4*in[1];
│ │ │ │ +
372
│ │ │ │ +
373 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ +
374 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ +
375 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ +
376 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ +
377
│ │ │ │ +
378 out[0] = triangleShapeFunctionDerX[0] * segmentShapeFunction[0];
│ │ │ │ +
379 out[1] = triangleShapeFunctionDerX[1] * segmentShapeFunction[0];
│ │ │ │ +
380 out[2] = triangleShapeFunctionDerX[2] * segmentShapeFunction[0];
│ │ │ │ +
381 out[3] = triangleShapeFunctionDerX[0] * segmentShapeFunction[2];
│ │ │ │ +
382 out[4] = triangleShapeFunctionDerX[1] * segmentShapeFunction[2];
│ │ │ │ +
383 out[5] = triangleShapeFunctionDerX[2] * segmentShapeFunction[2];
│ │ │ │ +
384 out[6] = triangleShapeFunctionDerX[0] * segmentShapeFunction[1];
│ │ │ │ +
385 out[7] = triangleShapeFunctionDerX[1] * segmentShapeFunction[1];
│ │ │ │ +
386 out[8] = triangleShapeFunctionDerX[2] * segmentShapeFunction[1];
│ │ │ │ +
387 out[9] = triangleShapeFunctionDerX[3] * segmentShapeFunction[0];
│ │ │ │ +
388 out[10] = triangleShapeFunctionDerX[4] * segmentShapeFunction[0];
│ │ │ │ +
389 out[11] = triangleShapeFunctionDerX[5] * segmentShapeFunction[0];
│ │ │ │ +
390 out[12] = triangleShapeFunctionDerX[3] * segmentShapeFunction[2];
│ │ │ │ +
391 out[13] = triangleShapeFunctionDerX[4] * segmentShapeFunction[2];
│ │ │ │ +
392 out[14] = triangleShapeFunctionDerX[5] * segmentShapeFunction[2];
│ │ │ │ +
393 out[15] = triangleShapeFunctionDerX[3] * segmentShapeFunction[1];
│ │ │ │ +
394 out[16] = triangleShapeFunctionDerX[4] * segmentShapeFunction[1];
│ │ │ │ +
395 out[17] = triangleShapeFunctionDerX[5] * segmentShapeFunction[1];
│ │ │ │ +
396 break;
│ │ │ │ +
397 }
│ │ │ │ +
398 case 1:
│ │ │ │ +
399 {
│ │ │ │ +
400 FieldVector<R,6> triangleShapeFunctionDerY;
│ │ │ │ +
401 triangleShapeFunctionDerY[0] = -3 + 4*(in[0] + in[1]);
│ │ │ │ +
402 triangleShapeFunctionDerY[1] = 0;
│ │ │ │ +
403 triangleShapeFunctionDerY[2] = -1 + 4* in[1];
│ │ │ │ +
404 triangleShapeFunctionDerY[3] = -4* in[0];
│ │ │ │ +
405 triangleShapeFunctionDerY[4] = 4 - 4* in[0] - 8*in[1];
│ │ │ │ +
406 triangleShapeFunctionDerY[5] = 4* in[0];
│ │ │ │ +
407
│ │ │ │ +
408 FieldVector<R,k+1> segmentShapeFunction;
│ │ │ │ +
409 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]);
│ │ │ │ +
410 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]);
│ │ │ │ +
411 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]);
│ │ │ │ +
412
│ │ │ │ +
413 out[0] = triangleShapeFunctionDerY[0] * segmentShapeFunction[0];
│ │ │ │ +
414 out[1] = triangleShapeFunctionDerY[1] * segmentShapeFunction[0];
│ │ │ │ +
415 out[2] = triangleShapeFunctionDerY[2] * segmentShapeFunction[0];
│ │ │ │ +
416 out[3] = triangleShapeFunctionDerY[0] * segmentShapeFunction[2];
│ │ │ │ +
417 out[4] = triangleShapeFunctionDerY[1] * segmentShapeFunction[2];
│ │ │ │ +
418 out[5] = triangleShapeFunctionDerY[2] * segmentShapeFunction[2];
│ │ │ │ +
419 out[6] = triangleShapeFunctionDerY[0] * segmentShapeFunction[1];
│ │ │ │ +
420 out[7] = triangleShapeFunctionDerY[1] * segmentShapeFunction[1];
│ │ │ │ +
421 out[8] = triangleShapeFunctionDerY[2] * segmentShapeFunction[1];
│ │ │ │ +
422 out[9] = triangleShapeFunctionDerY[3] * segmentShapeFunction[0];
│ │ │ │ +
423 out[10] = triangleShapeFunctionDerY[4] * segmentShapeFunction[0];
│ │ │ │ +
424 out[11] = triangleShapeFunctionDerY[5] * segmentShapeFunction[0];
│ │ │ │ +
425 out[12] = triangleShapeFunctionDerY[3] * segmentShapeFunction[2];
│ │ │ │ +
426 out[13] = triangleShapeFunctionDerY[4] * segmentShapeFunction[2];
│ │ │ │ +
427 out[14] = triangleShapeFunctionDerY[5] * segmentShapeFunction[2];
│ │ │ │ +
428 out[15] = triangleShapeFunctionDerY[3] * segmentShapeFunction[1];
│ │ │ │ +
429 out[16] = triangleShapeFunctionDerY[4] * segmentShapeFunction[1];
│ │ │ │ +
430 out[17] = triangleShapeFunctionDerY[5] * segmentShapeFunction[1];
│ │ │ │ +
431 break;
│ │ │ │ +
432 }
│ │ │ │ +
433 case 2:
│ │ │ │ +
434 {
│ │ │ │ +
435 FieldVector<R, 6> triangleShapeFunction;
│ │ │ │ +
436 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]);
│ │ │ │ +
437 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]);
│ │ │ │ +
438 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]);
│ │ │ │ +
439 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]);
│ │ │ │ +
440 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]);
│ │ │ │ +
441 triangleShapeFunction[5] = 4*in[0]*in[1];
│ │ │ │ +
442
│ │ │ │ +
443 FieldVector<R,k+1> segmentShapeFunctionDer;
│ │ │ │ +
444 segmentShapeFunctionDer[0] = -3 + 4*in[2];
│ │ │ │ +
445 segmentShapeFunctionDer[1] = 4 - 8*in[2];
│ │ │ │ +
446 segmentShapeFunctionDer[2] = -1 + 4*in[2];
│ │ │ │ +
447
│ │ │ │ +
448 out[0] = triangleShapeFunction[0] * segmentShapeFunctionDer[0];
│ │ │ │ +
449 out[1] = triangleShapeFunction[1] * segmentShapeFunctionDer[0];
│ │ │ │ +
450 out[2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0];
│ │ │ │ +
451 out[3] = triangleShapeFunction[0] * segmentShapeFunctionDer[2];
│ │ │ │ +
452 out[4] = triangleShapeFunction[1] * segmentShapeFunctionDer[2];
│ │ │ │ +
453 out[5] = triangleShapeFunction[2] * segmentShapeFunctionDer[2];
│ │ │ │ +
454 out[6] = triangleShapeFunction[0] * segmentShapeFunctionDer[1];
│ │ │ │ +
455 out[7] = triangleShapeFunction[1] * segmentShapeFunctionDer[1];
│ │ │ │ +
456 out[8] = triangleShapeFunction[2] * segmentShapeFunctionDer[1];
│ │ │ │ +
457 out[9] = triangleShapeFunction[3] * segmentShapeFunctionDer[0];
│ │ │ │ +
458 out[10] = triangleShapeFunction[4] * segmentShapeFunctionDer[0];
│ │ │ │ +
459 out[11] = triangleShapeFunction[5] * segmentShapeFunctionDer[0];
│ │ │ │ +
460 out[12] = triangleShapeFunction[3] * segmentShapeFunctionDer[2];
│ │ │ │ +
461 out[13] = triangleShapeFunction[4] * segmentShapeFunctionDer[2];
│ │ │ │ +
462 out[14] = triangleShapeFunction[5] * segmentShapeFunctionDer[2];
│ │ │ │ +
463 out[15] = triangleShapeFunction[3] * segmentShapeFunctionDer[1];
│ │ │ │ +
464 out[16] = triangleShapeFunction[4] * segmentShapeFunctionDer[1];
│ │ │ │ +
465 out[17] = triangleShapeFunction[5] * segmentShapeFunctionDer[1];
│ │ │ │ +
466 break;
│ │ │ │ +
467 }
│ │ │ │ +
468 default:
│ │ │ │ +
469 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
470 }
│ │ │ │ +
471 } else {
│ │ │ │ +
472 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
473 }
│ │ │ │ +
474
│ │ │ │ +
475 return;
│ │ │ │ +
476 }
│ │ │ │ +
477
│ │ │ │ +
478 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::partial not implemented for order " << k);
│ │ │ │ +
479 }
│ │ │ │ +
480
│ │ │ │ +
482 static constexpr unsigned int order ()
│ │ │ │ +
483 {
│ │ │ │ +
484 return k;
│ │ │ │ +
485 }
│ │ │ │ +
486 };
│ │ │ │ +
487
│ │ │ │ +
492 template<unsigned int k>
│ │ │ │ +
493 class LagrangePrismLocalCoefficients
│ │ │ │ +
494 {
│ │ │ │ +
495 public:
│ │ │ │ +
497 LagrangePrismLocalCoefficients ()
│ │ │ │ +
498 : localKeys_(size())
│ │ │ │ +
499 {
│ │ │ │ +
500 if (k==0)
│ │ │ │ +
501 {
│ │ │ │ +
502 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ +
503 return;
│ │ │ │ +
504 }
│ │ │ │ +
505
│ │ │ │ +
506 if (k==1)
│ │ │ │ +
507 {
│ │ │ │ +
508 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
509 localKeys_[i] = LocalKey(i,3,0);
│ │ │ │ +
510 return;
│ │ │ │ +
511 }
│ │ │ │ +
512
│ │ │ │ +
513 if (k==2)
│ │ │ │ +
514 {
│ │ │ │ +
515 // Vertex shape functions
│ │ │ │ +
516 localKeys_[0] = LocalKey(0,3,0);
│ │ │ │ +
517 localKeys_[1] = LocalKey(1,3,0);
│ │ │ │ +
518 localKeys_[2] = LocalKey(2,3,0);
│ │ │ │ +
519 localKeys_[3] = LocalKey(3,3,0);
│ │ │ │ +
520 localKeys_[4] = LocalKey(4,3,0);
│ │ │ │ +
521 localKeys_[5] = LocalKey(5,3,0);
│ │ │ │ +
522
│ │ │ │ +
523 // Edge shape functions
│ │ │ │ +
524 localKeys_[6] = LocalKey(0,2,0);
│ │ │ │ +
525 localKeys_[7] = LocalKey(1,2,0);
│ │ │ │ +
526 localKeys_[8] = LocalKey(2,2,0);
│ │ │ │ +
527 localKeys_[9] = LocalKey(3,2,0);
│ │ │ │ +
528 localKeys_[10] = LocalKey(4,2,0);
│ │ │ │ +
529 localKeys_[11] = LocalKey(5,2,0);
│ │ │ │ +
530 localKeys_[12] = LocalKey(6,2,0);
│ │ │ │ +
531 localKeys_[13] = LocalKey(7,2,0);
│ │ │ │ +
532 localKeys_[14] = LocalKey(8,2,0);
│ │ │ │ +
533
│ │ │ │ +
534 // Quadrilateral sides shape functions
│ │ │ │ +
535 localKeys_[15] = LocalKey(0,1,0);
│ │ │ │ +
536 localKeys_[16] = LocalKey(1,1,0);
│ │ │ │ +
537 localKeys_[17] = LocalKey(2,1,0);
│ │ │ │ +
538
│ │ │ │ +
539 return;
│ │ │ │ +
540 }
│ │ │ │ +
541
│ │ │ │ +
542 // Now: the general case
│ │ │ │ +
543 DUNE_THROW(NotImplemented, "LagrangePrismLocalCoefficients not implemented for order " << k);
│ │ │ │ +
544
│ │ │ │ +
545 }
│ │ │ │ +
546
│ │ │ │ +
548 static constexpr std::size_t size ()
│ │ │ │ +
549 {
│ │ │ │ +
550 return binomial(k+2,2u) * (k+1);
│ │ │ │ +
551 }
│ │ │ │ +
552
│ │ │ │ +
554 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
555 {
│ │ │ │ +
556 return localKeys_[i];
│ │ │ │ +
557 }
│ │ │ │ +
558
│ │ │ │ +
559 private:
│ │ │ │ +
560 std::vector<LocalKey> localKeys_;
│ │ │ │ +
561 };
│ │ │ │ +
562
│ │ │ │ +
567 template<class LocalBasis>
│ │ │ │ +
568 class LagrangePrismLocalInterpolation
│ │ │ │ +
569 {
│ │ │ │ +
570 public:
│ │ │ │ +
571
│ │ │ │ +
579 template<typename F, typename C>
│ │ │ │ +
580 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
581 {
│ │ │ │ +
582 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ +
583 constexpr auto k = LocalBasis::order();
│ │ │ │ +
584 using D = typename LocalBasis::Traits::DomainType;
│ │ │ │ +
585 using DF = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ +
586
│ │ │ │ +
587 out.resize(LocalBasis::size());
│ │ │ │ +
588
│ │ │ │ +
589 // Specialization for zero-order case
│ │ │ │ +
590 if (k==0)
│ │ │ │ +
591 {
│ │ │ │ +
592 auto center = ReferenceElements<DF,dim>::general(GeometryTypes::prism).position(0,0);
│ │ │ │ +
593 out[0] = f(center);
│ │ │ │ +
594 return;
│ │ │ │ +
595 }
│ │ │ │ +
596
│ │ │ │ +
597 // Specialization for first-order case
│ │ │ │ +
598 if (k==1)
│ │ │ │ +
599 {
│ │ │ │ +
600 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ +
601 {
│ │ │ │ +
602 auto vertex = ReferenceElements<DF,3>::general(GeometryTypes::prism).position(i,3);
│ │ │ │ +
603 out[i] = f(vertex);
│ │ │ │ +
604 }
│ │ │ │ +
605 return;
│ │ │ │ +
606 }
│ │ │ │ +
607
│ │ │ │ +
608 if (k==2)
│ │ │ │ +
609 {
│ │ │ │ +
610 out[0] = f( D( {0.0, 0.0, 0.0} ) );
│ │ │ │ +
611 out[1] = f( D( {1.0, 0.0, 0.0} ) );
│ │ │ │ +
612 out[2] = f( D( {0.0, 1.0, 0.0} ) );
│ │ │ │ +
613 out[3] = f( D( {0.0, 0.0, 1.0} ) );
│ │ │ │ +
614 out[4] = f( D( {1.0, 0.0, 1.0} ) );
│ │ │ │ +
615 out[5] = f( D( {0.0, 1.0, 1.0} ) );
│ │ │ │ +
616 out[6] = f( D( {0.0, 0.0, 0.5} ) );
│ │ │ │ +
617 out[7] = f( D( {1.0, 0.0, 0.5} ) );
│ │ │ │ +
618 out[8] = f( D( {0.0, 1.0, 0.5} ) );
│ │ │ │ +
619 out[9] = f( D( {0.5, 0.0, 0.0} ) );
│ │ │ │ +
620 out[10] = f( D( {0.0, 0.5, 0.0} ) );
│ │ │ │ +
621 out[11] = f( D( {0.5, 0.5, 0.0} ) );
│ │ │ │ +
622 out[12] = f( D( {0.5, 0.0, 1.0} ) );
│ │ │ │ +
623 out[13] = f( D( {0.0, 0.5, 1.0} ) );
│ │ │ │ +
624 out[14] = f( D( {0.5, 0.5, 1.0} ) );
│ │ │ │ +
625 out[15] = f( D( {0.5, 0.0, 0.5} ) );
│ │ │ │ +
626 out[16] = f( D( {0.0, 0.5, 0.5} ) );
│ │ │ │ +
627 out[17] = f( D( {0.5, 0.5, 0.5} ) );
│ │ │ │ +
628
│ │ │ │ +
629 return;
│ │ │ │ +
630 }
│ │ │ │ +
631
│ │ │ │ +
632 DUNE_THROW(NotImplemented, "LagrangePrismLocalInterpolation not implemented for order " << k);
│ │ │ │ +
633 }
│ │ │ │ +
634
│ │ │ │ +
635 };
│ │ │ │ +
636
│ │ │ │ +
637} } // namespace Dune::Impl
│ │ │ │ +
638
│ │ │ │ +
639namespace Dune
│ │ │ │ +
640{
│ │ │ │ +
647 template<class D, class R, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
649 {
│ │ │ │ +
650 public:
│ │ │ │ + │ │ │ │ +
654 Impl::LagrangePrismLocalCoefficients<k>,
│ │ │ │ +
655 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > >;
│ │ │ │ +
656
│ │ │ │ +
│ │ │ │ +
659 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
660 {
│ │ │ │ +
661 return basis_;
│ │ │ │ +
662 }
│ │ │ │ +
│ │ │ │ +
663
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
667 {
│ │ │ │ +
668 return coefficients_;
│ │ │ │ +
669 }
│ │ │ │ +
│ │ │ │ +
670
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
674 {
│ │ │ │ +
675 return interpolation_;
│ │ │ │ +
676 }
│ │ │ │ +
│ │ │ │ +
677
│ │ │ │ +
│ │ │ │ +
679 static constexpr std::size_t size ()
│ │ │ │ +
680 {
│ │ │ │ +
681 return binomial(k+2,2) * (k+1);
│ │ │ │ +
682 }
│ │ │ │ +
│ │ │ │ +
683
│ │ │ │ +
│ │ │ │ +
686 static constexpr GeometryType type ()
│ │ │ │ +
687 {
│ │ │ │ +
688 return GeometryTypes::prism;
│ │ │ │ +
689 }
│ │ │ │ +
│ │ │ │ +
690
│ │ │ │ +
691 private:
│ │ │ │ +
692 Impl::LagrangePrismLocalBasis<D,R,k> basis_;
│ │ │ │ +
693 Impl::LagrangePrismLocalCoefficients<k> coefficients_;
│ │ │ │ +
694 Impl::LagrangePrismLocalInterpolation<Impl::LagrangePrismLocalBasis<D,R,k> > interpolation_;
│ │ │ │ +
695 };
│ │ │ │ +
│ │ │ │ +
696
│ │ │ │ +
697} // namespace Dune
│ │ │ │ +
698
│ │ │ │ +
699#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ -
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ -
The local dual p1 finite element on simplices.
Definition dualp1.hh:35
│ │ │ │ -
Definition dualpq1factory.hh:19
│ │ │ │ -
Dune::DualP1LocalFiniteElement< D, R, dim, faceDual > DualP1
Definition dualpq1factory.hh:21
│ │ │ │ -
~DualPQ1LocalFiniteElementCache()
Definition dualpq1factory.hh:31
│ │ │ │ -
FEMap cache_
Definition dualpq1factory.hh:67
│ │ │ │ -
DualP1::Traits::LocalBasisType::Traits T
Definition dualpq1factory.hh:23
│ │ │ │ -
static FE * create(const Dune::GeometryType &gt)
create finite element for given GeometryType
Definition dualpq1factory.hh:40
│ │ │ │ -
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition dualpq1factory.hh:29
│ │ │ │ -
const FiniteElementType & get(const Dune::GeometryType &gt) const
Get local finite element for given GeometryType.
Definition dualpq1factory.hh:50
│ │ │ │ -
Dune::LocalFiniteElementVirtualInterface< T > FE
Definition dualpq1factory.hh:24
│ │ │ │ -
std::map< Dune::GeometryType, FE * > FEMap
Definition dualpq1factory.hh:25
│ │ │ │ -
Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual > DualQ1
Definition dualpq1factory.hh:22
│ │ │ │ -
The local dual Q1 finite element on cubes.
Definition dualq1.hh:42
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition lagrangeprism.hh:649
│ │ │ │ +
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangeprism.hh:679
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangeprism.hh:673
│ │ │ │ +
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangeprism.hh:686
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangeprism.hh:666
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangeprism.hh:659
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,712 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualpq1factory.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangeprism.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -15namespace _D_u_n_e { │ │ │ │ │ +15#include │ │ │ │ │ 16 │ │ │ │ │ -17template │ │ │ │ │ -_1_8class _D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -19{ │ │ │ │ │ -20protected: │ │ │ │ │ -_2_1 typedef _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> _D_u_a_l_P_1; │ │ │ │ │ -_2_2 typedef _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> _D_u_a_l_Q_1; │ │ │ │ │ -_2_3 typedef typename _D_u_a_l_P_1_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s _T; │ │ │ │ │ -_2_4 typedef _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_E; │ │ │ │ │ -_2_5 typedef std::map _F_E_M_a_p; │ │ │ │ │ -26 │ │ │ │ │ -27public: │ │ │ │ │ -_2_9 typedef _F_E _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ -30 │ │ │ │ │ -_3_1 _~_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() │ │ │ │ │ -32 { │ │ │ │ │ -33 typename FEMap::iterator it = _c_a_c_h_e__.begin(); │ │ │ │ │ -34 typename FEMap::iterator end = _c_a_c_h_e__.end(); │ │ │ │ │ -35 for(; it!=end; ++it) │ │ │ │ │ -36 delete it->second; │ │ │ │ │ -37 } │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e { namespace Impl │ │ │ │ │ +22{ │ │ │ │ │ +32 template │ │ │ │ │ +33 class LagrangePrismLocalBasis │ │ │ │ │ +34 { │ │ │ │ │ +35 static constexpr std::size_t dim = 3; │ │ │ │ │ +36 public: │ │ │ │ │ +37 using Traits = │ │ │ │ │ +LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ +>; │ │ │ │ │ 38 │ │ │ │ │ -_4_0 static _F_E* _c_r_e_a_t_e(const Dune::GeometryType& gt) │ │ │ │ │ -41 { │ │ │ │ │ -42 if (gt.isSimplex()) │ │ │ │ │ -43 return new _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_D_u_a_l_P_1_>(_D_u_a_l_P_1()); │ │ │ │ │ -44 if (gt.isCube()) │ │ │ │ │ -45 return new _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_D_u_a_l_Q_1_>(_D_u_a_l_Q_1()); │ │ │ │ │ -46 return 0; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t(const Dune::GeometryType& gt) const │ │ │ │ │ -51 { │ │ │ │ │ -52 typename FEMap::const_iterator it = _c_a_c_h_e__.find(gt); │ │ │ │ │ -53 if (it==_c_a_c_h_e__.end()) │ │ │ │ │ +41 static constexpr unsigned int size () │ │ │ │ │ +42 { │ │ │ │ │ +43 return binomial(k+2,2u) * (k+1); │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +47 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +48 std::vector& out) const │ │ │ │ │ +49 { │ │ │ │ │ +50 out.resize(size()); │ │ │ │ │ +51 │ │ │ │ │ +52 // Specialization for zero-order case │ │ │ │ │ +53 if (k==0) │ │ │ │ │ 54 { │ │ │ │ │ -55 _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* fe = _c_r_e_a_t_e(gt); │ │ │ │ │ -56 │ │ │ │ │ -57 if (fe==0) │ │ │ │ │ -58 DUNE_THROW(Dune::NotImplemented,"No Dual P/Q1 like local finite element │ │ │ │ │ -available for geometry type " << gt); │ │ │ │ │ -59 │ │ │ │ │ -60 _c_a_c_h_e__[gt] = fe; │ │ │ │ │ -61 return *fe; │ │ │ │ │ -62 } │ │ │ │ │ -63 return *(it->second); │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -66protected: │ │ │ │ │ -_6_7 mutable _F_E_M_a_p _c_a_c_h_e__; │ │ │ │ │ -68}; │ │ │ │ │ -69 │ │ │ │ │ -70} // namespace Dune │ │ │ │ │ -71 │ │ │ │ │ -72#endif // DUNE_LOCALFUNCTIONS_DUAL_P1_Q1_FACTORY_HH │ │ │ │ │ -_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ -_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ -_d_u_a_l_m_o_r_t_a_r_b_a_s_i_s_._h_h │ │ │ │ │ +55 out[0] = 1; │ │ │ │ │ +56 return; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 if (k==1) │ │ │ │ │ +60 { │ │ │ │ │ +61 out[0] = (1.0-in[0]-in[1])*(1.0-in[2]); │ │ │ │ │ +62 out[1] = in[0]*(1-in[2]); │ │ │ │ │ +63 out[2] = in[1]*(1-in[2]); │ │ │ │ │ +64 out[3] = in[2]*(1.0-in[0]-in[1]); │ │ │ │ │ +65 out[4] = in[0]*in[2]; │ │ │ │ │ +66 out[5] = in[1]*in[2]; │ │ │ │ │ +67 │ │ │ │ │ +68 return; │ │ │ │ │ +69 } │ │ │ │ │ +70 │ │ │ │ │ +71 if (k==2) │ │ │ │ │ +72 { │ │ │ │ │ +73 FieldVector segmentShapeFunction; │ │ │ │ │ +74 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ +75 segmentShapeFunction[1] = in[2] * (4 - 4*in[2]); │ │ │ │ │ +76 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ +77 │ │ │ │ │ +78 FieldVector triangleShapeFunction; │ │ │ │ │ +79 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ +80 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ +81 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ +82 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ +83 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ +84 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ +85 │ │ │ │ │ +86 // lower triangle: │ │ │ │ │ +87 out[0] = triangleShapeFunction[0] * segmentShapeFunction[0]; │ │ │ │ │ +88 out[1] = triangleShapeFunction[1] * segmentShapeFunction[0]; │ │ │ │ │ +89 out[2] = triangleShapeFunction[2] * segmentShapeFunction[0]; │ │ │ │ │ +90 │ │ │ │ │ +91 //upper triangle │ │ │ │ │ +92 out[3] = triangleShapeFunction[0] * segmentShapeFunction[2]; │ │ │ │ │ +93 out[4] = triangleShapeFunction[1] * segmentShapeFunction[2]; │ │ │ │ │ +94 out[5] = triangleShapeFunction[2] * segmentShapeFunction[2]; │ │ │ │ │ +95 │ │ │ │ │ +96 // vertical edges │ │ │ │ │ +97 out[6] = triangleShapeFunction[0] * segmentShapeFunction[1]; │ │ │ │ │ +98 out[7] = triangleShapeFunction[1] * segmentShapeFunction[1]; │ │ │ │ │ +99 out[8] = triangleShapeFunction[2] * segmentShapeFunction[1]; │ │ │ │ │ +100 │ │ │ │ │ +101 // lower triangle edges │ │ │ │ │ +102 out[9] = triangleShapeFunction[3] * segmentShapeFunction[0]; │ │ │ │ │ +103 out[10] = triangleShapeFunction[4] * segmentShapeFunction[0]; │ │ │ │ │ +104 out[11] = triangleShapeFunction[5] * segmentShapeFunction[0]; │ │ │ │ │ +105 │ │ │ │ │ +106 // upper triangle edges │ │ │ │ │ +107 out[12] = triangleShapeFunction[3] * segmentShapeFunction[2]; │ │ │ │ │ +108 out[13] = triangleShapeFunction[4] * segmentShapeFunction[2]; │ │ │ │ │ +109 out[14] = triangleShapeFunction[5] * segmentShapeFunction[2]; │ │ │ │ │ +110 │ │ │ │ │ +111 // quadrilateral sides │ │ │ │ │ +112 out[15] = triangleShapeFunction[3] * segmentShapeFunction[1]; │ │ │ │ │ +113 out[16] = triangleShapeFunction[4] * segmentShapeFunction[1]; │ │ │ │ │ +114 out[17] = triangleShapeFunction[5] * segmentShapeFunction[1]; │ │ │ │ │ +115 │ │ │ │ │ +116 return; │ │ │ │ │ +117 } │ │ │ │ │ +118 │ │ │ │ │ +119 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateFunction for │ │ │ │ │ +order " << k); │ │ │ │ │ +120 } │ │ │ │ │ +121 │ │ │ │ │ +127 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +128 std::vector& out) const │ │ │ │ │ +129 { │ │ │ │ │ +130 out.resize(size()); │ │ │ │ │ +131 │ │ │ │ │ +132 // Specialization for k==0 │ │ │ │ │ +133 if (k==0) │ │ │ │ │ +134 { │ │ │ │ │ +135 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ +136 return; │ │ │ │ │ +137 } │ │ │ │ │ +138 │ │ │ │ │ +139 if (k==1) │ │ │ │ │ +140 { │ │ │ │ │ +141 out[0][0] = {in[2]-1, in[2]-1, in[0]+in[1]-1}; │ │ │ │ │ +142 out[1][0] = {1-in[2], 0, -in[0]}; │ │ │ │ │ +143 out[2][0] = { 0, 1-in[2], -in[1]}; │ │ │ │ │ +144 out[3][0] = { -in[2], -in[2], 1-in[0]-in[1]}; │ │ │ │ │ +145 out[4][0] = { in[2], 0, in[0]}; │ │ │ │ │ +146 out[5][0] = { 0, in[2], in[1]}; │ │ │ │ │ +147 │ │ │ │ │ +148 return; │ │ │ │ │ +149 } │ │ │ │ │ +150 │ │ │ │ │ +151 if (k==2) │ │ │ │ │ +152 { │ │ │ │ │ +153 // Second-order shape functions on a triangle, and the first derivatives │ │ │ │ │ +154 FieldVector triangleShapeFunction; │ │ │ │ │ +155 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ +156 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ +157 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ +158 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ +159 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ +160 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ +161 │ │ │ │ │ +162 std::array,6> triangleShapeFunctionDer; │ │ │ │ │ +163 triangleShapeFunctionDer[0] = {-3 + 4*(in[0] + in[1]), -3 + 4*(in[0] + in │ │ │ │ │ +[1])}; │ │ │ │ │ +164 triangleShapeFunctionDer[1] = { -1 + 4*in[0], 0}; │ │ │ │ │ +165 triangleShapeFunctionDer[2] = { 0, -1 + 4*in[1]}; │ │ │ │ │ +166 triangleShapeFunctionDer[3] = { 4 - 8*in[0] - 4*in[1], -4*in[0]}; │ │ │ │ │ +167 triangleShapeFunctionDer[4] = { -4*in[1], 4 - 4*in[0] - 8*in[1]}; │ │ │ │ │ +168 triangleShapeFunctionDer[5] = { 4*in[1], 4*in[0]}; │ │ │ │ │ +169 │ │ │ │ │ +170 // Second-order shape functions on a line, and the first derivatives │ │ │ │ │ +171 FieldVector segmentShapeFunction; │ │ │ │ │ +172 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ +173 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ +174 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ +175 │ │ │ │ │ +176 FieldVector segmentShapeFunctionDer; │ │ │ │ │ +177 segmentShapeFunctionDer[0] = -3 + 4*in[2]; │ │ │ │ │ +178 segmentShapeFunctionDer[1] = 4 - 8*in[2]; │ │ │ │ │ +179 segmentShapeFunctionDer[2] = -1 + 4*in[2]; │ │ │ │ │ +180 │ │ │ │ │ +181 // lower triangle: │ │ │ │ │ +182 out[0][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[0]; │ │ │ │ │ +183 out[0][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[0]; │ │ │ │ │ +184 out[0][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[0]; │ │ │ │ │ +185 │ │ │ │ │ +186 out[1][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[0]; │ │ │ │ │ +187 out[1][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[0]; │ │ │ │ │ +188 out[1][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[0]; │ │ │ │ │ +189 │ │ │ │ │ +190 out[2][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[0]; │ │ │ │ │ +191 out[2][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[0]; │ │ │ │ │ +192 out[2][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0]; │ │ │ │ │ +193 │ │ │ │ │ +194 //upper triangle │ │ │ │ │ +195 out[3][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[2]; │ │ │ │ │ +196 out[3][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[2]; │ │ │ │ │ +197 out[3][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[2]; │ │ │ │ │ +198 │ │ │ │ │ +199 out[4][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[2]; │ │ │ │ │ +200 out[4][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[2]; │ │ │ │ │ +201 out[4][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[2]; │ │ │ │ │ +202 │ │ │ │ │ +203 out[5][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[2]; │ │ │ │ │ +204 out[5][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[2]; │ │ │ │ │ +205 out[5][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[2]; │ │ │ │ │ +206 │ │ │ │ │ +207 // vertical edges │ │ │ │ │ +208 out[6][0][0] = triangleShapeFunctionDer[0][0] * segmentShapeFunction[1]; │ │ │ │ │ +209 out[6][0][1] = triangleShapeFunctionDer[0][1] * segmentShapeFunction[1]; │ │ │ │ │ +210 out[6][0][2] = triangleShapeFunction[0] * segmentShapeFunctionDer[1]; │ │ │ │ │ +211 │ │ │ │ │ +212 out[7][0][0] = triangleShapeFunctionDer[1][0] * segmentShapeFunction[1]; │ │ │ │ │ +213 out[7][0][1] = triangleShapeFunctionDer[1][1] * segmentShapeFunction[1]; │ │ │ │ │ +214 out[7][0][2] = triangleShapeFunction[1] * segmentShapeFunctionDer[1]; │ │ │ │ │ +215 │ │ │ │ │ +216 out[8][0][0] = triangleShapeFunctionDer[2][0] * segmentShapeFunction[1]; │ │ │ │ │ +217 out[8][0][1] = triangleShapeFunctionDer[2][1] * segmentShapeFunction[1]; │ │ │ │ │ +218 out[8][0][2] = triangleShapeFunction[2] * segmentShapeFunctionDer[1]; │ │ │ │ │ +219 │ │ │ │ │ +220 // lower triangle edges │ │ │ │ │ +221 out[9][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[0]; │ │ │ │ │ +222 out[9][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[0]; │ │ │ │ │ +223 out[9][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[0]; │ │ │ │ │ +224 │ │ │ │ │ +225 out[10][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[0]; │ │ │ │ │ +226 out[10][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[0]; │ │ │ │ │ +227 out[10][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[0]; │ │ │ │ │ +228 │ │ │ │ │ +229 out[11][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[0]; │ │ │ │ │ +230 out[11][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[0]; │ │ │ │ │ +231 out[11][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[0]; │ │ │ │ │ +232 │ │ │ │ │ +233 // upper triangle edges │ │ │ │ │ +234 out[12][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[2]; │ │ │ │ │ +235 out[12][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[2]; │ │ │ │ │ +236 out[12][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[2]; │ │ │ │ │ +237 │ │ │ │ │ +238 out[13][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[2]; │ │ │ │ │ +239 out[13][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[2]; │ │ │ │ │ +240 out[13][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[2]; │ │ │ │ │ +241 │ │ │ │ │ +242 out[14][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[2]; │ │ │ │ │ +243 out[14][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[2]; │ │ │ │ │ +244 out[14][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[2]; │ │ │ │ │ +245 │ │ │ │ │ +246 // quadrilateral sides │ │ │ │ │ +247 out[15][0][0] = triangleShapeFunctionDer[3][0] * segmentShapeFunction[1]; │ │ │ │ │ +248 out[15][0][1] = triangleShapeFunctionDer[3][1] * segmentShapeFunction[1]; │ │ │ │ │ +249 out[15][0][2] = triangleShapeFunction[3] * segmentShapeFunctionDer[1]; │ │ │ │ │ +250 │ │ │ │ │ +251 out[16][0][0] = triangleShapeFunctionDer[4][0] * segmentShapeFunction[1]; │ │ │ │ │ +252 out[16][0][1] = triangleShapeFunctionDer[4][1] * segmentShapeFunction[1]; │ │ │ │ │ +253 out[16][0][2] = triangleShapeFunction[4] * segmentShapeFunctionDer[1]; │ │ │ │ │ +254 │ │ │ │ │ +255 out[17][0][0] = triangleShapeFunctionDer[5][0] * segmentShapeFunction[1]; │ │ │ │ │ +256 out[17][0][1] = triangleShapeFunctionDer[5][1] * segmentShapeFunction[1]; │ │ │ │ │ +257 out[17][0][2] = triangleShapeFunction[5] * segmentShapeFunctionDer[1]; │ │ │ │ │ +258 │ │ │ │ │ +259 return; │ │ │ │ │ +260 } │ │ │ │ │ +261 │ │ │ │ │ +262 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::evaluateJacobian for │ │ │ │ │ +order " << k); │ │ │ │ │ +263 } │ │ │ │ │ +264 │ │ │ │ │ +271 void partial(const std::array& order, │ │ │ │ │ +272 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +273 std::vector& out) const │ │ │ │ │ +274 { │ │ │ │ │ +275 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +276 │ │ │ │ │ +277 out.resize(size()); │ │ │ │ │ +278 │ │ │ │ │ +279 if (totalOrder == 0) │ │ │ │ │ +280 { │ │ │ │ │ +281 evaluateFunction(in, out); │ │ │ │ │ +282 return; │ │ │ │ │ +283 } │ │ │ │ │ +284 │ │ │ │ │ +285 // Specialization for zero-order finite elements │ │ │ │ │ +286 if (k==0) │ │ │ │ │ +287 { │ │ │ │ │ +288 out[0] = 0; │ │ │ │ │ +289 return; │ │ │ │ │ +290 } │ │ │ │ │ +291 │ │ │ │ │ +292 // Specialization for first-order finite elements │ │ │ │ │ +293 if (k==1) │ │ │ │ │ +294 { │ │ │ │ │ +295 if (totalOrder == 1) │ │ │ │ │ +296 { │ │ │ │ │ +297 auto direction = std::distance(order.begin(), std::find(order.begin(), │ │ │ │ │ +order.end(), 1)); │ │ │ │ │ +298 │ │ │ │ │ +299 switch (direction) { │ │ │ │ │ +300 case 0: │ │ │ │ │ +301 out[0] = in[2]-1; │ │ │ │ │ +302 out[1] = 1-in[2]; │ │ │ │ │ +303 out[2] = 0; │ │ │ │ │ +304 out[3] = -in[2]; │ │ │ │ │ +305 out[4] = in[2]; │ │ │ │ │ +306 out[5] = 0; │ │ │ │ │ +307 break; │ │ │ │ │ +308 case 1: │ │ │ │ │ +309 out[0] = in[2]-1; │ │ │ │ │ +310 out[1] = 0; │ │ │ │ │ +311 out[2] = 1-in[2]; │ │ │ │ │ +312 out[3] = -in[2]; │ │ │ │ │ +313 out[4] = 0; │ │ │ │ │ +314 out[5] = in[2]; │ │ │ │ │ +315 break; │ │ │ │ │ +316 case 2: │ │ │ │ │ +317 out[0] = in[0]+in[1]-1; │ │ │ │ │ +318 out[1] = -in[0]; │ │ │ │ │ +319 out[2] = -in[1]; │ │ │ │ │ +320 out[3] = 1-in[0]-in[1]; │ │ │ │ │ +321 out[4] = in[0]; │ │ │ │ │ +322 out[5] = in[1]; │ │ │ │ │ +323 break; │ │ │ │ │ +324 default: │ │ │ │ │ +325 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +326 } │ │ │ │ │ +327 } else if (totalOrder == 2) { │ │ │ │ │ +328 out.resize(size()); │ │ │ │ │ +329 if (order[0] == 1 && order[2] == 1) { │ │ │ │ │ +330 out[0] = 1; │ │ │ │ │ +331 out[1] =-1; │ │ │ │ │ +332 out[2] = 0; │ │ │ │ │ +333 out[3] =-1; │ │ │ │ │ +334 out[4] = 1; │ │ │ │ │ +335 out[5] = 0; │ │ │ │ │ +336 } else if (order[1] == 1 && order[2] == 1) { │ │ │ │ │ +337 out[0] = 1; │ │ │ │ │ +338 out[1] = 0; │ │ │ │ │ +339 out[2] =-1; │ │ │ │ │ +340 out[3] =-1; │ │ │ │ │ +341 out[4] = 0; │ │ │ │ │ +342 out[5] = 1; │ │ │ │ │ +343 } else { │ │ │ │ │ +344 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +345 out[i] = 0; │ │ │ │ │ +346 } │ │ │ │ │ +347 } else { │ │ │ │ │ +348 out.resize(size()); │ │ │ │ │ +349 std::fill(out.begin(), out.end(), 0.0); │ │ │ │ │ +350 } │ │ │ │ │ +351 │ │ │ │ │ +352 return; │ │ │ │ │ +353 } │ │ │ │ │ +354 │ │ │ │ │ +355 // Specialization for second-order finite elements │ │ │ │ │ +356 if (k==2) │ │ │ │ │ +357 { │ │ │ │ │ +358 if (totalOrder == 1) │ │ │ │ │ +359 { │ │ │ │ │ +360 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +361 switch (direction) │ │ │ │ │ +362 { │ │ │ │ │ +363 case 0: │ │ │ │ │ +364 { │ │ │ │ │ +365 FieldVector triangleShapeFunctionDerX; │ │ │ │ │ +366 triangleShapeFunctionDerX[0] = -3 + 4*(in[0] + in[1]); │ │ │ │ │ +367 triangleShapeFunctionDerX[1] = -1 + 4* in[0]; │ │ │ │ │ +368 triangleShapeFunctionDerX[2] = 0; │ │ │ │ │ +369 triangleShapeFunctionDerX[3] = 4 - 8* in[0] - 4*in[1]; │ │ │ │ │ +370 triangleShapeFunctionDerX[4] = -4*in[1]; │ │ │ │ │ +371 triangleShapeFunctionDerX[5] = 4*in[1]; │ │ │ │ │ +372 │ │ │ │ │ +373 FieldVector segmentShapeFunction; │ │ │ │ │ +374 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ +375 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ +376 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ +377 │ │ │ │ │ +378 out[0] = triangleShapeFunctionDerX[0] * segmentShapeFunction[0]; │ │ │ │ │ +379 out[1] = triangleShapeFunctionDerX[1] * segmentShapeFunction[0]; │ │ │ │ │ +380 out[2] = triangleShapeFunctionDerX[2] * segmentShapeFunction[0]; │ │ │ │ │ +381 out[3] = triangleShapeFunctionDerX[0] * segmentShapeFunction[2]; │ │ │ │ │ +382 out[4] = triangleShapeFunctionDerX[1] * segmentShapeFunction[2]; │ │ │ │ │ +383 out[5] = triangleShapeFunctionDerX[2] * segmentShapeFunction[2]; │ │ │ │ │ +384 out[6] = triangleShapeFunctionDerX[0] * segmentShapeFunction[1]; │ │ │ │ │ +385 out[7] = triangleShapeFunctionDerX[1] * segmentShapeFunction[1]; │ │ │ │ │ +386 out[8] = triangleShapeFunctionDerX[2] * segmentShapeFunction[1]; │ │ │ │ │ +387 out[9] = triangleShapeFunctionDerX[3] * segmentShapeFunction[0]; │ │ │ │ │ +388 out[10] = triangleShapeFunctionDerX[4] * segmentShapeFunction[0]; │ │ │ │ │ +389 out[11] = triangleShapeFunctionDerX[5] * segmentShapeFunction[0]; │ │ │ │ │ +390 out[12] = triangleShapeFunctionDerX[3] * segmentShapeFunction[2]; │ │ │ │ │ +391 out[13] = triangleShapeFunctionDerX[4] * segmentShapeFunction[2]; │ │ │ │ │ +392 out[14] = triangleShapeFunctionDerX[5] * segmentShapeFunction[2]; │ │ │ │ │ +393 out[15] = triangleShapeFunctionDerX[3] * segmentShapeFunction[1]; │ │ │ │ │ +394 out[16] = triangleShapeFunctionDerX[4] * segmentShapeFunction[1]; │ │ │ │ │ +395 out[17] = triangleShapeFunctionDerX[5] * segmentShapeFunction[1]; │ │ │ │ │ +396 break; │ │ │ │ │ +397 } │ │ │ │ │ +398 case 1: │ │ │ │ │ +399 { │ │ │ │ │ +400 FieldVector triangleShapeFunctionDerY; │ │ │ │ │ +401 triangleShapeFunctionDerY[0] = -3 + 4*(in[0] + in[1]); │ │ │ │ │ +402 triangleShapeFunctionDerY[1] = 0; │ │ │ │ │ +403 triangleShapeFunctionDerY[2] = -1 + 4* in[1]; │ │ │ │ │ +404 triangleShapeFunctionDerY[3] = -4* in[0]; │ │ │ │ │ +405 triangleShapeFunctionDerY[4] = 4 - 4* in[0] - 8*in[1]; │ │ │ │ │ +406 triangleShapeFunctionDerY[5] = 4* in[0]; │ │ │ │ │ +407 │ │ │ │ │ +408 FieldVector segmentShapeFunction; │ │ │ │ │ +409 segmentShapeFunction[0] = 1 + in[2] * (-3 + 2*in[2]); │ │ │ │ │ +410 segmentShapeFunction[1] = in[2] * ( 4 - 4*in[2]); │ │ │ │ │ +411 segmentShapeFunction[2] = in[2] * (-1 + 2*in[2]); │ │ │ │ │ +412 │ │ │ │ │ +413 out[0] = triangleShapeFunctionDerY[0] * segmentShapeFunction[0]; │ │ │ │ │ +414 out[1] = triangleShapeFunctionDerY[1] * segmentShapeFunction[0]; │ │ │ │ │ +415 out[2] = triangleShapeFunctionDerY[2] * segmentShapeFunction[0]; │ │ │ │ │ +416 out[3] = triangleShapeFunctionDerY[0] * segmentShapeFunction[2]; │ │ │ │ │ +417 out[4] = triangleShapeFunctionDerY[1] * segmentShapeFunction[2]; │ │ │ │ │ +418 out[5] = triangleShapeFunctionDerY[2] * segmentShapeFunction[2]; │ │ │ │ │ +419 out[6] = triangleShapeFunctionDerY[0] * segmentShapeFunction[1]; │ │ │ │ │ +420 out[7] = triangleShapeFunctionDerY[1] * segmentShapeFunction[1]; │ │ │ │ │ +421 out[8] = triangleShapeFunctionDerY[2] * segmentShapeFunction[1]; │ │ │ │ │ +422 out[9] = triangleShapeFunctionDerY[3] * segmentShapeFunction[0]; │ │ │ │ │ +423 out[10] = triangleShapeFunctionDerY[4] * segmentShapeFunction[0]; │ │ │ │ │ +424 out[11] = triangleShapeFunctionDerY[5] * segmentShapeFunction[0]; │ │ │ │ │ +425 out[12] = triangleShapeFunctionDerY[3] * segmentShapeFunction[2]; │ │ │ │ │ +426 out[13] = triangleShapeFunctionDerY[4] * segmentShapeFunction[2]; │ │ │ │ │ +427 out[14] = triangleShapeFunctionDerY[5] * segmentShapeFunction[2]; │ │ │ │ │ +428 out[15] = triangleShapeFunctionDerY[3] * segmentShapeFunction[1]; │ │ │ │ │ +429 out[16] = triangleShapeFunctionDerY[4] * segmentShapeFunction[1]; │ │ │ │ │ +430 out[17] = triangleShapeFunctionDerY[5] * segmentShapeFunction[1]; │ │ │ │ │ +431 break; │ │ │ │ │ +432 } │ │ │ │ │ +433 case 2: │ │ │ │ │ +434 { │ │ │ │ │ +435 FieldVector triangleShapeFunction; │ │ │ │ │ +436 triangleShapeFunction[0] = 2 * (1 - in[0] - in[1]) * (0.5 - in[0] - in[1]); │ │ │ │ │ +437 triangleShapeFunction[1] = 2 * in[0] * (-0.5 + in[0]); │ │ │ │ │ +438 triangleShapeFunction[2] = 2 * in[1] * (-0.5 + in[1]); │ │ │ │ │ +439 triangleShapeFunction[3] = 4*in[0] * (1 - in[0] - in[1]); │ │ │ │ │ +440 triangleShapeFunction[4] = 4*in[1] * (1 - in[0] - in[1]); │ │ │ │ │ +441 triangleShapeFunction[5] = 4*in[0]*in[1]; │ │ │ │ │ +442 │ │ │ │ │ +443 FieldVector segmentShapeFunctionDer; │ │ │ │ │ +444 segmentShapeFunctionDer[0] = -3 + 4*in[2]; │ │ │ │ │ +445 segmentShapeFunctionDer[1] = 4 - 8*in[2]; │ │ │ │ │ +446 segmentShapeFunctionDer[2] = -1 + 4*in[2]; │ │ │ │ │ +447 │ │ │ │ │ +448 out[0] = triangleShapeFunction[0] * segmentShapeFunctionDer[0]; │ │ │ │ │ +449 out[1] = triangleShapeFunction[1] * segmentShapeFunctionDer[0]; │ │ │ │ │ +450 out[2] = triangleShapeFunction[2] * segmentShapeFunctionDer[0]; │ │ │ │ │ +451 out[3] = triangleShapeFunction[0] * segmentShapeFunctionDer[2]; │ │ │ │ │ +452 out[4] = triangleShapeFunction[1] * segmentShapeFunctionDer[2]; │ │ │ │ │ +453 out[5] = triangleShapeFunction[2] * segmentShapeFunctionDer[2]; │ │ │ │ │ +454 out[6] = triangleShapeFunction[0] * segmentShapeFunctionDer[1]; │ │ │ │ │ +455 out[7] = triangleShapeFunction[1] * segmentShapeFunctionDer[1]; │ │ │ │ │ +456 out[8] = triangleShapeFunction[2] * segmentShapeFunctionDer[1]; │ │ │ │ │ +457 out[9] = triangleShapeFunction[3] * segmentShapeFunctionDer[0]; │ │ │ │ │ +458 out[10] = triangleShapeFunction[4] * segmentShapeFunctionDer[0]; │ │ │ │ │ +459 out[11] = triangleShapeFunction[5] * segmentShapeFunctionDer[0]; │ │ │ │ │ +460 out[12] = triangleShapeFunction[3] * segmentShapeFunctionDer[2]; │ │ │ │ │ +461 out[13] = triangleShapeFunction[4] * segmentShapeFunctionDer[2]; │ │ │ │ │ +462 out[14] = triangleShapeFunction[5] * segmentShapeFunctionDer[2]; │ │ │ │ │ +463 out[15] = triangleShapeFunction[3] * segmentShapeFunctionDer[1]; │ │ │ │ │ +464 out[16] = triangleShapeFunction[4] * segmentShapeFunctionDer[1]; │ │ │ │ │ +465 out[17] = triangleShapeFunction[5] * segmentShapeFunctionDer[1]; │ │ │ │ │ +466 break; │ │ │ │ │ +467 } │ │ │ │ │ +468 default: │ │ │ │ │ +469 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +470 } │ │ │ │ │ +471 } else { │ │ │ │ │ +472 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +473 } │ │ │ │ │ +474 │ │ │ │ │ +475 return; │ │ │ │ │ +476 } │ │ │ │ │ +477 │ │ │ │ │ +478 DUNE_THROW(NotImplemented, "LagrangePrismLocalBasis::partial not │ │ │ │ │ +implemented for order " << k); │ │ │ │ │ +479 } │ │ │ │ │ +480 │ │ │ │ │ +482 static constexpr unsigned int order () │ │ │ │ │ +483 { │ │ │ │ │ +484 return k; │ │ │ │ │ +485 } │ │ │ │ │ +486 }; │ │ │ │ │ +487 │ │ │ │ │ +492 template │ │ │ │ │ +493 class LagrangePrismLocalCoefficients │ │ │ │ │ +494 { │ │ │ │ │ +495 public: │ │ │ │ │ +497 LagrangePrismLocalCoefficients () │ │ │ │ │ +498 : localKeys_(size()) │ │ │ │ │ +499 { │ │ │ │ │ +500 if (k==0) │ │ │ │ │ +501 { │ │ │ │ │ +502 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ +503 return; │ │ │ │ │ +504 } │ │ │ │ │ +505 │ │ │ │ │ +506 if (k==1) │ │ │ │ │ +507 { │ │ │ │ │ +508 for (std::size_t i=0; i localKeys_; │ │ │ │ │ +561 }; │ │ │ │ │ +562 │ │ │ │ │ +567 template │ │ │ │ │ +568 class LagrangePrismLocalInterpolation │ │ │ │ │ +569 { │ │ │ │ │ +570 public: │ │ │ │ │ +571 │ │ │ │ │ +579 template │ │ │ │ │ +580 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +581 { │ │ │ │ │ +582 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ +583 constexpr auto k = LocalBasis::order(); │ │ │ │ │ +584 using D = typename LocalBasis::Traits::DomainType; │ │ │ │ │ +585 using DF = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ +586 │ │ │ │ │ +587 out.resize(LocalBasis::size()); │ │ │ │ │ +588 │ │ │ │ │ +589 // Specialization for zero-order case │ │ │ │ │ +590 if (k==0) │ │ │ │ │ +591 { │ │ │ │ │ +592 auto center = ReferenceElements::general(GeometryTypes:: │ │ │ │ │ +prism).position(0,0); │ │ │ │ │ +593 out[0] = f(center); │ │ │ │ │ +594 return; │ │ │ │ │ +595 } │ │ │ │ │ +596 │ │ │ │ │ +597 // Specialization for first-order case │ │ │ │ │ +598 if (k==1) │ │ │ │ │ +599 { │ │ │ │ │ +600 for (unsigned int i=0; i::general(GeometryTypes:: │ │ │ │ │ +prism).position(i,3); │ │ │ │ │ +603 out[i] = f(vertex); │ │ │ │ │ +604 } │ │ │ │ │ +605 return; │ │ │ │ │ +606 } │ │ │ │ │ +607 │ │ │ │ │ +608 if (k==2) │ │ │ │ │ +609 { │ │ │ │ │ +610 out[0] = f( D( {0.0, 0.0, 0.0} ) ); │ │ │ │ │ +611 out[1] = f( D( {1.0, 0.0, 0.0} ) ); │ │ │ │ │ +612 out[2] = f( D( {0.0, 1.0, 0.0} ) ); │ │ │ │ │ +613 out[3] = f( D( {0.0, 0.0, 1.0} ) ); │ │ │ │ │ +614 out[4] = f( D( {1.0, 0.0, 1.0} ) ); │ │ │ │ │ +615 out[5] = f( D( {0.0, 1.0, 1.0} ) ); │ │ │ │ │ +616 out[6] = f( D( {0.0, 0.0, 0.5} ) ); │ │ │ │ │ +617 out[7] = f( D( {1.0, 0.0, 0.5} ) ); │ │ │ │ │ +618 out[8] = f( D( {0.0, 1.0, 0.5} ) ); │ │ │ │ │ +619 out[9] = f( D( {0.5, 0.0, 0.0} ) ); │ │ │ │ │ +620 out[10] = f( D( {0.0, 0.5, 0.0} ) ); │ │ │ │ │ +621 out[11] = f( D( {0.5, 0.5, 0.0} ) ); │ │ │ │ │ +622 out[12] = f( D( {0.5, 0.0, 1.0} ) ); │ │ │ │ │ +623 out[13] = f( D( {0.0, 0.5, 1.0} ) ); │ │ │ │ │ +624 out[14] = f( D( {0.5, 0.5, 1.0} ) ); │ │ │ │ │ +625 out[15] = f( D( {0.5, 0.0, 0.5} ) ); │ │ │ │ │ +626 out[16] = f( D( {0.0, 0.5, 0.5} ) ); │ │ │ │ │ +627 out[17] = f( D( {0.5, 0.5, 0.5} ) ); │ │ │ │ │ +628 │ │ │ │ │ +629 return; │ │ │ │ │ +630 } │ │ │ │ │ +631 │ │ │ │ │ +632 DUNE_THROW(NotImplemented, "LagrangePrismLocalInterpolation not implemented │ │ │ │ │ +for order " << k); │ │ │ │ │ +633 } │ │ │ │ │ +634 │ │ │ │ │ +635 }; │ │ │ │ │ +636 │ │ │ │ │ +637} } // namespace Dune::Impl │ │ │ │ │ +638 │ │ │ │ │ +639namespace _D_u_n_e │ │ │ │ │ +640{ │ │ │ │ │ +647 template │ │ │ │ │ +_6_4_8 class _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +649 { │ │ │ │ │ +650 public: │ │ │ │ │ +_6_5_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_k_>, │ │ │ │ │ +654 Impl::LagrangePrismLocalCoefficients, │ │ │ │ │ +655 Impl::LagrangePrismLocalInterpolation │ │ │ │ │ +> >; │ │ │ │ │ +656 │ │ │ │ │ +_6_5_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +660 { │ │ │ │ │ +661 return basis_; │ │ │ │ │ +662 } │ │ │ │ │ +663 │ │ │ │ │ +_6_6_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +667 { │ │ │ │ │ +668 return coefficients_; │ │ │ │ │ +669 } │ │ │ │ │ +670 │ │ │ │ │ +_6_7_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +674 { │ │ │ │ │ +675 return interpolation_; │ │ │ │ │ +676 } │ │ │ │ │ +677 │ │ │ │ │ +_6_7_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ +680 { │ │ │ │ │ +681 return binomial(k+2,2) * (k+1); │ │ │ │ │ +682 } │ │ │ │ │ +683 │ │ │ │ │ +_6_8_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +687 { │ │ │ │ │ +688 return GeometryTypes::prism; │ │ │ │ │ +689 } │ │ │ │ │ +690 │ │ │ │ │ +691 private: │ │ │ │ │ +692 Impl::LagrangePrismLocalBasis basis_; │ │ │ │ │ +693 Impl::LagrangePrismLocalCoefficients coefficients_; │ │ │ │ │ +694 Impl::LagrangePrismLocalInterpolation │ │ │ │ │ +> interpolation_; │ │ │ │ │ +695 }; │ │ │ │ │ +696 │ │ │ │ │ +697} // namespace Dune │ │ │ │ │ +698 │ │ │ │ │ +699#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPRISM_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ -virtual base class for local finite elements with functions │ │ │ │ │ -DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ -class for wrapping a finite element using the virtual interface │ │ │ │ │ -DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -The local dual p1 finite element on simplices. │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:19 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_D_u_a_l_P_1 │ │ │ │ │ -Dune::DualP1LocalFiniteElement< D, R, dim, faceDual > DualP1 │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:21 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_~_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ -~DualPQ1LocalFiniteElementCache() │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_a_c_h_e__ │ │ │ │ │ -FEMap cache_ │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_T │ │ │ │ │ -DualP1::Traits::LocalBasisType::Traits T │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_r_e_a_t_e │ │ │ │ │ -static FE * create(const Dune::GeometryType >) │ │ │ │ │ -create finite element for given GeometryType │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ -FE FiniteElementType │ │ │ │ │ -Type of the finite elements stored in this cache. │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ -const FiniteElementType & get(const Dune::GeometryType >) const │ │ │ │ │ -Get local finite element for given GeometryType. │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E │ │ │ │ │ -Dune::LocalFiniteElementVirtualInterface< T > FE │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E_M_a_p │ │ │ │ │ -std::map< Dune::GeometryType, FE * > FEMap │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_D_u_a_l_Q_1 │ │ │ │ │ -Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual > DualQ1 │ │ │ │ │ -DDeeffiinniittiioonn dualpq1factory.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -The local dual Q1 finite element on cubes. │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for 3d prisms with arbitrary compile-time polynomial │ │ │ │ │ +order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:649 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() │ │ │ │ │ +The number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:679 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:673 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The reference element that the local finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:686 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:666 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:659 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1.hh File Reference │ │ │ │ +dune-localfunctions: q2.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualp1.hh File Reference
│ │ │ │ +
q2.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "dualp1/dualp1localbasis.hh"
│ │ │ │ -#include "dualp1/dualp1localcoefficients.hh"
│ │ │ │ -#include "dualp1/dualp1localinterpolation.hh"
│ │ │ │ +
#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualP1LocalFiniteElement< D, R, dim, faceDual >
 The local dual p1 finite element on simplices. More...
class  Dune::Q2FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q23D elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualp1.hh File Reference │ │ │ │ │ +q2.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │ -  The local dual p1 finite element on simplices. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ +  Factory for global-valued Q23D elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00410_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualp1.hh Source File │ │ │ │ +dune-localfunctions: q2.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,118 +70,77 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualp1.hh
│ │ │ │ +
q2.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH
│ │ │ │ +
5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_Q2_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
33 template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {
│ │ │ │ -
36 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
41
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 {}
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
│ │ │ │ -
49 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return basis;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
57 {
│ │ │ │ -
58 return coefficients;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
64 {
│ │ │ │ -
65 return interpolation;
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
69 unsigned int size () const
│ │ │ │ -
70 {
│ │ │ │ -
71 return basis.size();
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
│ │ │ │ -
76 static constexpr GeometryType type ()
│ │ │ │ -
77 {
│ │ │ │ -
78 return GeometryTypes::simplex(dim);
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
81 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
85 };
│ │ │ │ -
│ │ │ │ -
86
│ │ │ │ -
87
│ │ │ │ -
88
│ │ │ │ -
89}
│ │ │ │ -
90
│ │ │ │ -
91#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <dune/common/typetraits.hh>
│ │ │ │ +
9#include <dune/geometry/type.hh>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │ + │ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
20
│ │ │ │ +
25 template<class Geometry, class RF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
28 typename std::conditional<Geometry::mydimension == 1,
│ │ │ │ +
29 LagrangeSimplexLocalFiniteElement<typename Geometry::ctype, RF, 1, 2>,
│ │ │ │ +
30 LagrangeCubeLocalFiniteElement<typename Geometry::ctype, RF, Geometry::mydimension, 2> >::type,
│ │ │ │ +
31 Geometry>
│ │ │ │ +
32 {
│ │ │ │ +
33 typedef typename std::conditional<Geometry::mydimension == 1,
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
37
│ │ │ │ +
38 static const LFE lfe;
│ │ │ │ +
39
│ │ │ │ +
40 public:
│ │ │ │ + │ │ │ │ +
43 };
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
45 template<class Geometry, class RF>
│ │ │ │ +
46 const typename Q2FiniteElementFactory<Geometry, RF>::LFE
│ │ │ │ +
47 Q2FiniteElementFactory<Geometry, RF>::lfe;
│ │ │ │ +
48}
│ │ │ │ +
49
│ │ │ │ +
50#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
The local dual p1 finite element on simplices.
Definition dualp1.hh:35
│ │ │ │ -
DualP1LocalFiniteElement()
Definition dualp1.hh:44
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition dualp1.hh:69
│ │ │ │ -
LocalFiniteElementTraits< DualP1LocalBasis< D, R, dim, faceDual >, DualP1LocalCoefficients< dim >, DualP1LocalInterpolation< dim, DualP1LocalBasis< D, R, dim, faceDual > > > Traits
Definition dualp1.hh:40
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition dualp1.hh:63
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition dualp1.hh:49
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition dualp1.hh:56
│ │ │ │ -
static constexpr GeometryType type()
Definition dualp1.hh:76
│ │ │ │ -
Dual Lagrange shape functions on the simplex.
Definition dualp1localbasis.hh:35
│ │ │ │ -
Local coefficients for dual simplex P1 elements.
Definition dualp1localcoefficients.hh:24
│ │ │ │ -
Definition dualp1localinterpolation.hh:17
│ │ │ │ +
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ +
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ +
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ +
Factory for global-valued Q23D elements.
Definition q2.hh:32
│ │ │ │ +
Q2FiniteElementFactory()
default constructor
Definition q2.hh:42
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,130 +1,82 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualp1.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +q2.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_DUALMORTARBASIS_DUALP1_HH │ │ │ │ │ +5#ifndef DUNE_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_Q2_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -12#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -13#include "_d_u_a_l_p_1_/_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -33 template │ │ │ │ │ -_3_4 class _D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -35 { │ │ │ │ │ -36 public: │ │ │ │ │ -39 typedef │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_>,_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>, │ │ │ │ │ -_4_0 _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> > > _T_r_a_i_t_s; │ │ │ │ │ -41 │ │ │ │ │ -_4_4 _D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -45 {} │ │ │ │ │ -46 │ │ │ │ │ -_4_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return basis; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return coefficients; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -64 { │ │ │ │ │ -65 return interpolation; │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ -70 { │ │ │ │ │ -71 return basis.size(); │ │ │ │ │ -72 } │ │ │ │ │ -73 │ │ │ │ │ -_7_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -77 { │ │ │ │ │ -78 return GeometryTypes::simplex(dim); │ │ │ │ │ -79 } │ │ │ │ │ -80 │ │ │ │ │ -81 private: │ │ │ │ │ -82 _D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> basis; │ │ │ │ │ -83 _D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_> coefficients; │ │ │ │ │ -84 _D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_f_a_c_e_D_u_a_l_> > │ │ │ │ │ -interpolation; │ │ │ │ │ -85 }; │ │ │ │ │ -86 │ │ │ │ │ -87 │ │ │ │ │ -88 │ │ │ │ │ -89} │ │ │ │ │ -90 │ │ │ │ │ -91#endif │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +20 │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y : │ │ │ │ │ +27 public _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y< │ │ │ │ │ +28 typename std::conditional, │ │ │ │ │ +30 LagrangeCubeLocalFiniteElement >::type, │ │ │ │ │ +31 Geometry> │ │ │ │ │ +32 { │ │ │ │ │ +33 typedef typename std::conditional, │ │ │ │ │ +35 _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_t_y_p_e_n_a_m_e_ _G_e_o_m_e_t_r_y_:_:_c_t_y_p_e_,_ _R_F_,_ _G_e_o_m_e_t_r_y_:_: │ │ │ │ │ +_m_y_d_i_m_e_n_s_i_o_n_,_ _2_> >::type LFE; │ │ │ │ │ +36 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_<_L_F_E_,_ _G_e_o_m_e_t_r_y_> _B_a_s_e; │ │ │ │ │ +37 │ │ │ │ │ +38 static const LFE lfe; │ │ │ │ │ +39 │ │ │ │ │ +40 public: │ │ │ │ │ +_4_2 _Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() : _B_a_s_e(lfe) {} │ │ │ │ │ +43 }; │ │ │ │ │ +44 │ │ │ │ │ +45 template │ │ │ │ │ +46 const typename Q2FiniteElementFactory::LFE │ │ │ │ │ +47 Q2FiniteElementFactory::lfe; │ │ │ │ │ +48} │ │ │ │ │ +49 │ │ │ │ │ +50#endif │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ _l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_d_u_a_l_p_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_d_u_a_l_p_1_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_d_u_a_l_p_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -The local dual p1 finite element on simplices. │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DualP1LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< DualP1LocalBasis< D, R, dim, faceDual >, │ │ │ │ │ -DualP1LocalCoefficients< dim >, DualP1LocalInterpolation< dim, │ │ │ │ │ -DualP1LocalBasis< D, R, dim, faceDual > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn dualp1.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Dual Lagrange shape functions on the simplex. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Local coefficients for dual simplex P1 elements. │ │ │ │ │ -DDeeffiinniittiioonn dualp1localcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_P_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn dualp1localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ +Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:244 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ +_D_u_n_e_:_:_Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for global-valued Q23D elements. │ │ │ │ │ +DDeeffiinniittiioonn q2.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_Q_2_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Q2FiniteElementFactory() │ │ │ │ │ +default constructor │ │ │ │ │ +DDeeffiinniittiioonn q2.hh:42 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: q1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localbasis.hh File Reference
│ │ │ │ +
q1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualQ1LocalBasis< D, R, dim >
 Dual Lagrange shape functions of order 1 on the reference cube. More...
class  Dune::Q1FiniteElementFactory< Geometry, RF >
 Factory for global-valued Q1 elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualq1localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +q1.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Dual Lagrange shape functions of order 1 on the reference cube. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ +  Factory for global-valued Q1 elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00413_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localbasis.hh Source File │ │ │ │ +dune-localfunctions: q1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,171 +70,75 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localbasis.hh
│ │ │ │ +
q1.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_Q1_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
7#define DUNE_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <dune/geometry/type.hh>
│ │ │ │
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
28 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
33 Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
35 void setCoefficients(const std::array<Dune::FieldVector<R, (1<<dim)> ,(1<<dim)>& coefficients)
│ │ │ │ -
36 {
│ │ │ │ -
37 coefficients_ = coefficients;
│ │ │ │ -
38 }
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
19
│ │ │ │ +
24 template<class Geometry, class RF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
27 LagrangeCubeLocalFiniteElement<
│ │ │ │ +
28 typename Geometry::ctype, RF, Geometry::mydimension, 1
│ │ │ │ +
29 >,
│ │ │ │ +
30 Geometry
│ │ │ │ +
31 >
│ │ │ │ +
32 {
│ │ │ │ + │ │ │ │ +
34 typename Geometry::ctype, RF, Geometry::mydimension, 1
│ │ │ │ +
35 > LFE;
│ │ │ │ + │ │ │ │ +
37
│ │ │ │ +
38 static const LFE lfe;
│ │ │ │
39
│ │ │ │ -
│ │ │ │ -
41 unsigned int size () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return 1<<dim;
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ -
47 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
48 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
49 {
│ │ │ │ -
50 // compute q1 values
│ │ │ │ -
51 std::vector<typename Traits::RangeType> q1Values(size());
│ │ │ │ -
52
│ │ │ │ -
53 for (size_t i=0; i<size(); i++) {
│ │ │ │ -
54
│ │ │ │ -
55 q1Values[i] = 1;
│ │ │ │ -
56
│ │ │ │ -
57 for (int j=0; j<dim; j++)
│ │ │ │ -
58 // if j-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ -
59 q1Values[i] *= (i & (1<<j)) ? in[j] : 1-in[j];
│ │ │ │ -
60
│ │ │ │ -
61 }
│ │ │ │ -
62
│ │ │ │ -
63 // compute the dual values by using that they are linear combinations of q1 functions
│ │ │ │ -
64 out.resize(size());
│ │ │ │ -
65 for (size_t i=0; i<size(); i++)
│ │ │ │ -
66 out[i] = 0;
│ │ │ │ -
67
│ │ │ │ -
68 for (size_t i=0; i<size(); i++)
│ │ │ │ -
69 for (size_t j=0; j<size(); j++)
│ │ │ │ -
70 out[i] += coefficients_[i][j]*q1Values[j];
│ │ │ │ -
71
│ │ │ │ -
72
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
76 inline void
│ │ │ │ -
│ │ │ │ -
77 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
78 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
79 {
│ │ │ │ -
80 // compute q1 jacobians
│ │ │ │ -
81 std::vector<typename Traits::JacobianType> q1Jacs(size());
│ │ │ │ -
82
│ │ │ │ -
83 // Loop over all shape functions
│ │ │ │ -
84 for (size_t i=0; i<size(); i++) {
│ │ │ │ -
85
│ │ │ │ -
86 // Loop over all coordinate directions
│ │ │ │ -
87 for (int j=0; j<dim; j++) {
│ │ │ │ -
88
│ │ │ │ -
89 // Initialize: the overall expression is a product
│ │ │ │ -
90 // if j-th bit of i is set to -1, else 1
│ │ │ │ -
91 q1Jacs[i][0][j] = (i & (1<<j)) ? 1 : -1;
│ │ │ │ -
92
│ │ │ │ -
93 for (int k=0; k<dim; k++) {
│ │ │ │ -
94
│ │ │ │ -
95 if (j!=k)
│ │ │ │ -
96 // if k-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ -
97 q1Jacs[i][0][j] *= (i & (1<<k)) ? in[k] : 1-in[k];
│ │ │ │ -
98
│ │ │ │ -
99 }
│ │ │ │ -
100
│ │ │ │ -
101 }
│ │ │ │ -
102
│ │ │ │ -
103 }
│ │ │ │ -
104
│ │ │ │ -
105 // compute the dual jacobians by using that they are linear combinations of q1 functions
│ │ │ │ -
106 out.resize(size());
│ │ │ │ -
107 for (size_t i=0; i<size(); i++)
│ │ │ │ -
108 out[i] = 0;
│ │ │ │ -
109
│ │ │ │ -
110 for (size_t i=0; i<size(); i++)
│ │ │ │ -
111 for (size_t j=0; j<size(); j++)
│ │ │ │ -
112 out[i].axpy(coefficients_[i][j],q1Jacs[j]);
│ │ │ │ -
113
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
115
│ │ │ │ -
│ │ │ │ -
117 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
118 const typename Traits::DomainType& in, // position
│ │ │ │ -
119 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
120 {
│ │ │ │ -
121 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
122 if (totalOrder == 0) {
│ │ │ │ -
123 evaluateFunction(in, out);
│ │ │ │ -
124 } else {
│ │ │ │ -
125 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
126 }
│ │ │ │ -
127 }
│ │ │ │ -
│ │ │ │ -
128
│ │ │ │ -
│ │ │ │ -
130 unsigned int order () const
│ │ │ │ -
131 {
│ │ │ │ -
132 return 1;
│ │ │ │ -
133 }
│ │ │ │ -
│ │ │ │ -
134
│ │ │ │ -
135 private:
│ │ │ │ -
136 std::array<Dune::FieldVector<R, (1<<dim)> ,(1<<dim)> coefficients_;
│ │ │ │ -
137 };
│ │ │ │ -
│ │ │ │ -
138}
│ │ │ │ -
139#endif
│ │ │ │ +
40 public:
│ │ │ │ + │ │ │ │ +
43 };
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
45 template<class Geometry, class RF>
│ │ │ │ +
46 const typename Q1FiniteElementFactory<Geometry, RF>::LFE
│ │ │ │ +
47 Q1FiniteElementFactory<Geometry, RF>::lfe;
│ │ │ │ +
48}
│ │ │ │ +
49
│ │ │ │ +
50#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Dual Lagrange shape functions of order 1 on the reference cube.
Definition dualq1localbasis.hh:30
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition dualq1localbasis.hh:41
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition dualq1localbasis.hh:130
│ │ │ │ -
void setCoefficients(const std::array< Dune::FieldVector< R,(1<< dim)>,(1<< dim)> &coefficients)
Definition dualq1localbasis.hh:35
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition dualq1localbasis.hh:47
│ │ │ │ -
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
Definition dualq1localbasis.hh:33
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition dualq1localbasis.hh:77
│ │ │ │ -
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition dualq1localbasis.hh:117
│ │ │ │ - │ │ │ │ +
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ +
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ +
Factory for global-valued Q1 elements.
Definition q1.hh:32
│ │ │ │ +
Q1FiniteElementFactory()
default constructor
Definition q1.hh:42
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,185 +1,75 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ -dualq1localbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +q1.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +7#define DUNE_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -28 template │ │ │ │ │ -_2_9 class _D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -30 { │ │ │ │ │ -31 public: │ │ │ │ │ -32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_3_3 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_5 void _s_e_t_C_o_e_f_f_i_c_i_e_n_t_s(const std::array , │ │ │ │ │ -(1<& coefficients) │ │ │ │ │ -36 { │ │ │ │ │ -37 coefficients_ = coefficients; │ │ │ │ │ -38 } │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +19 │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 class _Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y : │ │ │ │ │ +26 public _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y< │ │ │ │ │ +27 LagrangeCubeLocalFiniteElement< │ │ │ │ │ +28 typename Geometry::ctype, RF, Geometry::mydimension, 1 │ │ │ │ │ +29 >, │ │ │ │ │ +30 Geometry │ │ │ │ │ +31 > │ │ │ │ │ +32 { │ │ │ │ │ +33 typedef _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< │ │ │ │ │ +34 typename Geometry::ctype, RF, Geometry::mydimension, 1 │ │ │ │ │ +35 > _L_F_E; │ │ │ │ │ +36 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_<_L_F_E_,_ _G_e_o_m_e_t_r_y_> _B_a_s_e; │ │ │ │ │ +37 │ │ │ │ │ +38 static const _L_F_E lfe; │ │ │ │ │ 39 │ │ │ │ │ -_4_1 unsigned int _s_i_z_e () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return 1<& out) const │ │ │ │ │ -49 { │ │ │ │ │ -50 // compute q1 values │ │ │ │ │ -51 std::vector q1Values(_s_i_z_e()); │ │ │ │ │ -52 │ │ │ │ │ -53 for (size_t i=0; i<_s_i_z_e(); i++) { │ │ │ │ │ -54 │ │ │ │ │ -55 q1Values[i] = 1; │ │ │ │ │ -56 │ │ │ │ │ -57 for (int j=0; j& out) const // return value │ │ │ │ │ -79 { │ │ │ │ │ -80 // compute q1 jacobians │ │ │ │ │ -81 std::vector q1Jacs(_s_i_z_e()); │ │ │ │ │ -82 │ │ │ │ │ -83 // Loop over all shape functions │ │ │ │ │ -84 for (size_t i=0; i<_s_i_z_e(); i++) { │ │ │ │ │ -85 │ │ │ │ │ -86 // Loop over all coordinate directions │ │ │ │ │ -87 for (int j=0; j& _o_r_d_e_r, │ │ │ │ │ -118 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -119 std::vector& out) const // return value │ │ │ │ │ -120 { │ │ │ │ │ -121 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -122 if (totalOrder == 0) { │ │ │ │ │ -123 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -124 } else { │ │ │ │ │ -125 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -126 } │ │ │ │ │ -127 } │ │ │ │ │ -128 │ │ │ │ │ -_1_3_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ -131 { │ │ │ │ │ -132 return 1; │ │ │ │ │ -133 } │ │ │ │ │ -134 │ │ │ │ │ -135 private: │ │ │ │ │ -136 std::array ,(1< coefficients_; │ │ │ │ │ -137 }; │ │ │ │ │ -138} │ │ │ │ │ -139#endif │ │ │ │ │ +40 public: │ │ │ │ │ +_4_2 _Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y() : _B_a_s_e(lfe) {} │ │ │ │ │ +43 }; │ │ │ │ │ +44 │ │ │ │ │ +45 template │ │ │ │ │ +46 const typename Q1FiniteElementFactory::LFE │ │ │ │ │ +47 Q1FiniteElementFactory::lfe; │ │ │ │ │ +48} │ │ │ │ │ +49 │ │ │ │ │ +50#endif │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Dual Lagrange shape functions of order 1 on the reference cube. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:130 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_s_e_t_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -void setCoefficients(const std::array< Dune::FieldVector< R,(1<< dim)>,(1<< │ │ │ │ │ -dim)> &coefficients) │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ -R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:77 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:117 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ +Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:244 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ +_D_u_n_e_:_:_Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for global-valued Q1 elements. │ │ │ │ │ +DDeeffiinniittiioonn q1.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_Q_1_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Q1FiniteElementFactory() │ │ │ │ │ +default constructor │ │ │ │ │ +DDeeffiinniittiioonn q1.hh:42 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: lagrangecube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localcoefficients.hh File Reference
│ │ │ │ +
lagrangecube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualQ1LocalCoefficients< dim >
 Layout map for dual Q1 elements. More...
class  Dune::LagrangeCubeLocalFiniteElement< D, R, dim, k >
 Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualq1localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +lagrangecube.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ -  Layout map for dual Q1 elements. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ +  Lagrange finite element for cubes with arbitrary compile-time dimension │ │ │ │ │ + and polynomial order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00416_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: lagrangecube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,79 +70,741 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localcoefficients.hh
│ │ │ │ +
lagrangecube.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13#include <dune/common/math.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │
16
│ │ │ │ -
24 template <int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 for (std::size_t i=0; i<(1<<dim); i++)
│ │ │ │ -
32 li[i] = LocalKey(i,dim,0);
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
36 std::size_t size () const
│ │ │ │ -
37 {
│ │ │ │ -
38 return 1<<dim;
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ -
42 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
43 {
│ │ │ │ -
44 return li[i];
│ │ │ │ -
45 }
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47 private:
│ │ │ │ -
48 std::vector<LocalKey> li;
│ │ │ │ -
49 };
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune { namespace Impl
│ │ │ │ +
22{
│ │ │ │ +
23 // Forward declaration
│ │ │ │ +
24 template<class LocalBasis>
│ │ │ │ +
25 class LagrangeCubeLocalInterpolation;
│ │ │ │ +
26
│ │ │ │ +
37 template<class D, class R, unsigned int dim, unsigned int k>
│ │ │ │ +
38 class LagrangeCubeLocalBasis
│ │ │ │ +
39 {
│ │ │ │ +
40 friend class LagrangeCubeLocalInterpolation<LagrangeCubeLocalBasis<D,R,dim,k> >;
│ │ │ │ +
41
│ │ │ │ +
42 // i-th Lagrange polynomial of degree k in one dimension
│ │ │ │ +
43 static R p(unsigned int i, D x)
│ │ │ │ +
44 {
│ │ │ │ +
45 R result(1.0);
│ │ │ │ +
46 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
47 if (j!=i) result *= (k*x-j)/((int)i-(int)j);
│ │ │ │ +
48 return result;
│ │ │ │ +
49 }
│ │ │ │
50
│ │ │ │ -
51}
│ │ │ │ -
52
│ │ │ │ -
53#endif
│ │ │ │ - │ │ │ │ +
51 // derivative of ith Lagrange polynomial of degree k in one dimension
│ │ │ │ +
52 static R dp(unsigned int i, D x)
│ │ │ │ +
53 {
│ │ │ │ +
54 R result(0.0);
│ │ │ │ +
55
│ │ │ │ +
56 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
57 {
│ │ │ │ +
58 if (j!=i)
│ │ │ │ +
59 {
│ │ │ │ +
60 R prod( (k*1.0)/((int)i-(int)j) );
│ │ │ │ +
61 for (unsigned int l=0; l<=k; l++)
│ │ │ │ +
62 if (l!=i && l!=j)
│ │ │ │ +
63 prod *= (k*x-l)/((int)i-(int)l);
│ │ │ │ +
64 result += prod;
│ │ │ │ +
65 }
│ │ │ │ +
66 }
│ │ │ │ +
67 return result;
│ │ │ │ +
68 }
│ │ │ │ +
69
│ │ │ │ +
70 // Second derivative of j-th Lagrange polynomial of degree k in one dimension
│ │ │ │ +
71 // Formula and notation taken from https://en.wikipedia.org/wiki/Lagrange_polynomial#Derivatives
│ │ │ │ +
72 static R ddp(unsigned int j, D x)
│ │ │ │ +
73 {
│ │ │ │ +
74 R result(0.0);
│ │ │ │ +
75
│ │ │ │ +
76 for (unsigned int i=0; i<=k; i++)
│ │ │ │ +
77 {
│ │ │ │ +
78 if (i==j)
│ │ │ │ +
79 continue;
│ │ │ │ +
80
│ │ │ │ +
81 R sum(0);
│ │ │ │ +
82
│ │ │ │ +
83 for (unsigned int m=0; m<=k; m++)
│ │ │ │ +
84 {
│ │ │ │ +
85 if (m==i || m==j)
│ │ │ │ +
86 continue;
│ │ │ │ +
87
│ │ │ │ +
88 R prod( (k*1.0)/((int)j-(int)m) );
│ │ │ │ +
89 for (unsigned int l=0; l<=k; l++)
│ │ │ │ +
90 if (l!=i && l!=j && l!=m)
│ │ │ │ +
91 prod *= (k*x-l)/((int)j-(int)l);
│ │ │ │ +
92 sum += prod;
│ │ │ │ +
93 }
│ │ │ │ +
94
│ │ │ │ +
95 result += sum * ( (k*1.0)/((int)j-(int)i) );
│ │ │ │ +
96 }
│ │ │ │ +
97
│ │ │ │ +
98 return result;
│ │ │ │ +
99 }
│ │ │ │ +
100
│ │ │ │ +
101 // Return i as a d-digit number in the (k+1)-nary system
│ │ │ │ +
102 static std::array<unsigned int,dim> multiindex (unsigned int i)
│ │ │ │ +
103 {
│ │ │ │ +
104 std::array<unsigned int,dim> alpha;
│ │ │ │ +
105 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
106 {
│ │ │ │ +
107 alpha[j] = i % (k+1);
│ │ │ │ +
108 i = i/(k+1);
│ │ │ │ +
109 }
│ │ │ │ +
110 return alpha;
│ │ │ │ +
111 }
│ │ │ │ +
112
│ │ │ │ +
113 public:
│ │ │ │ +
114 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ +
115
│ │ │ │ +
118 static constexpr unsigned int size ()
│ │ │ │ +
119 {
│ │ │ │ +
120 return power(k+1, dim);
│ │ │ │ +
121 }
│ │ │ │ +
122
│ │ │ │ +
124 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ +
125 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
126 {
│ │ │ │ +
127 out.resize(size());
│ │ │ │ +
128
│ │ │ │ +
129 // Specialization for zero-order case
│ │ │ │ +
130 if (k==0)
│ │ │ │ +
131 {
│ │ │ │ +
132 out[0] = 1;
│ │ │ │ +
133 return;
│ │ │ │ +
134 }
│ │ │ │ +
135
│ │ │ │ +
136 if (k==1)
│ │ │ │ +
137 {
│ │ │ │ +
138 for (size_t i=0; i<size(); i++)
│ │ │ │ +
139 {
│ │ │ │ +
140 out[i] = 1;
│ │ │ │ +
141
│ │ │ │ +
142 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
143 // if j-th bit of i is set multiply with x[j], else with 1-x[j]
│ │ │ │ +
144 out[i] *= (i & (1<<j)) ? x[j] : 1-x[j];
│ │ │ │ +
145 }
│ │ │ │ +
146 return;
│ │ │ │ +
147 }
│ │ │ │ +
148
│ │ │ │ +
149 // General case
│ │ │ │ +
150 for (size_t i=0; i<size(); i++)
│ │ │ │ +
151 {
│ │ │ │ +
152 // convert index i to multiindex
│ │ │ │ +
153 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ +
154
│ │ │ │ +
155 // initialize product
│ │ │ │ +
156 out[i] = 1.0;
│ │ │ │ +
157
│ │ │ │ +
158 // dimension by dimension
│ │ │ │ +
159 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
160 out[i] *= p(alpha[j],x[j]);
│ │ │ │ +
161 }
│ │ │ │ +
162 }
│ │ │ │ +
163
│ │ │ │ +
169 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ +
170 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
171 {
│ │ │ │ +
172 out.resize(size());
│ │ │ │ +
173
│ │ │ │ +
174 // Specialization for k==0
│ │ │ │ +
175 if (k==0)
│ │ │ │ +
176 {
│ │ │ │ +
177 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ +
178 return;
│ │ │ │ +
179 }
│ │ │ │ +
180
│ │ │ │ +
181 // Specialization for k==1
│ │ │ │ +
182 if (k==1)
│ │ │ │ +
183 {
│ │ │ │ +
184 // Loop over all shape functions
│ │ │ │ +
185 for (size_t i=0; i<size(); i++)
│ │ │ │ +
186 {
│ │ │ │ +
187 // Loop over all coordinate directions
│ │ │ │ +
188 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
189 {
│ │ │ │ +
190 // Initialize: the overall expression is a product
│ │ │ │ +
191 // if j-th bit of i is set to 1, else -11
│ │ │ │ +
192 out[i][0][j] = (i & (1<<j)) ? 1 : -1;
│ │ │ │ +
193
│ │ │ │ +
194 for (unsigned int l=0; l<dim; l++)
│ │ │ │ +
195 {
│ │ │ │ +
196 if (j!=l)
│ │ │ │ +
197 // if l-th bit of i is set multiply with x[l], else with 1-x[l]
│ │ │ │ +
198 out[i][0][j] *= (i & (1<<l)) ? x[l] : 1-x[l];
│ │ │ │ +
199 }
│ │ │ │ +
200 }
│ │ │ │ +
201 }
│ │ │ │ +
202 return;
│ │ │ │ +
203 }
│ │ │ │ +
204
│ │ │ │ +
205 // The general case
│ │ │ │ +
206
│ │ │ │ +
207 // Loop over all shape functions
│ │ │ │ +
208 for (size_t i=0; i<size(); i++)
│ │ │ │ +
209 {
│ │ │ │ +
210 // convert index i to multiindex
│ │ │ │ +
211 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ +
212
│ │ │ │ +
213 // Loop over all coordinate directions
│ │ │ │ +
214 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
215 {
│ │ │ │ +
216 // Initialize: the overall expression is a product
│ │ │ │ +
217 // if j-th bit of i is set to -1, else 1
│ │ │ │ +
218 out[i][0][j] = dp(alpha[j],x[j]);
│ │ │ │ +
219
│ │ │ │ +
220 // rest of the product
│ │ │ │ +
221 for (unsigned int l=0; l<dim; l++)
│ │ │ │ +
222 if (l!=j)
│ │ │ │ +
223 out[i][0][j] *= p(alpha[l],x[l]);
│ │ │ │ +
224 }
│ │ │ │ +
225 }
│ │ │ │ +
226 }
│ │ │ │ +
227
│ │ │ │ +
234 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ +
235 const typename Traits::DomainType& in,
│ │ │ │ +
236 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
237 {
│ │ │ │ +
238 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
239
│ │ │ │ +
240 out.resize(size());
│ │ │ │ +
241
│ │ │ │ +
242 if (k==0)
│ │ │ │ +
243 {
│ │ │ │ +
244 out[0] = (totalOrder==0);
│ │ │ │ +
245 return;
│ │ │ │ +
246 }
│ │ │ │ +
247
│ │ │ │ +
248 if (k==1)
│ │ │ │ +
249 {
│ │ │ │ +
250 if (totalOrder == 0)
│ │ │ │ +
251 {
│ │ │ │ +
252 evaluateFunction(in, out);
│ │ │ │ +
253 }
│ │ │ │ +
254 else if (totalOrder == 1)
│ │ │ │ +
255 {
│ │ │ │ +
256 out.resize(size());
│ │ │ │ +
257
│ │ │ │ +
258 auto direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
259 if (direction >= dim)
│ │ │ │ +
260 DUNE_THROW(RangeError, "Direction of partial derivative not found!");
│ │ │ │ +
261
│ │ │ │ +
262 // Loop over all shape functions
│ │ │ │ +
263 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
264 {
│ │ │ │ +
265 // Initialize: the overall expression is a product
│ │ │ │ +
266 // if j-th bit of i is set to 1, otherwise to -1
│ │ │ │ +
267 out[i] = (i & (1<<direction)) ? 1 : -1;
│ │ │ │ +
268
│ │ │ │ +
269 for (unsigned int j = 0; j < dim; ++j)
│ │ │ │ +
270 {
│ │ │ │ +
271 if (direction != j)
│ │ │ │ +
272 // if j-th bit of i is set multiply with in[j], else with 1-in[j]
│ │ │ │ +
273 out[i] *= (i & (1<<j)) ? in[j] : 1-in[j];
│ │ │ │ +
274 }
│ │ │ │ +
275 }
│ │ │ │ +
276 }
│ │ │ │ +
277 else if (totalOrder == 2)
│ │ │ │ +
278 {
│ │ │ │ +
279
│ │ │ │ +
280 for (size_t i=0; i<size(); i++)
│ │ │ │ +
281 {
│ │ │ │ +
282 // convert index i to multiindex
│ │ │ │ +
283 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ +
284
│ │ │ │ +
285 // Initialize: the overall expression is a product
│ │ │ │ +
286 out[i][0] = 1.0;
│ │ │ │ +
287
│ │ │ │ +
288 // rest of the product
│ │ │ │ +
289 for (std::size_t l=0; l<dim; l++)
│ │ │ │ +
290 {
│ │ │ │ +
291 switch (order[l])
│ │ │ │ +
292 {
│ │ │ │ +
293 case 0:
│ │ │ │ +
294 out[i][0] *= p(alpha[l],in[l]);
│ │ │ │ +
295 break;
│ │ │ │ +
296 case 1:
│ │ │ │ +
297 //std::cout << "dp: " << dp(alpha[l],in[l]) << std::endl;
│ │ │ │ +
298 out[i][0] *= dp(alpha[l],in[l]);
│ │ │ │ +
299 break;
│ │ │ │ +
300 case 2:
│ │ │ │ +
301 out[i][0] *= 0;
│ │ │ │ +
302 break;
│ │ │ │ +
303 default:
│ │ │ │ +
304 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
305 }
│ │ │ │ +
306 }
│ │ │ │ +
307 }
│ │ │ │ +
308 }
│ │ │ │ +
309 else
│ │ │ │ +
310 DUNE_THROW(NotImplemented, "Partial derivative of order " << totalOrder << " is not implemented!");
│ │ │ │ +
311
│ │ │ │ +
312 return;
│ │ │ │ +
313 }
│ │ │ │ +
314
│ │ │ │ +
315 // The case k>1
│ │ │ │ +
316
│ │ │ │ +
317 // Loop over all shape functions
│ │ │ │ +
318 for (size_t i=0; i<size(); i++)
│ │ │ │ +
319 {
│ │ │ │ +
320 // convert index i to multiindex
│ │ │ │ +
321 std::array<unsigned int,dim> alpha(multiindex(i));
│ │ │ │ +
322
│ │ │ │ +
323 // Initialize: the overall expression is a product
│ │ │ │ +
324 out[i][0] = 1.0;
│ │ │ │ +
325
│ │ │ │ +
326 // rest of the product
│ │ │ │ +
327 for (std::size_t l=0; l<dim; l++)
│ │ │ │ +
328 {
│ │ │ │ +
329 switch (order[l])
│ │ │ │ +
330 {
│ │ │ │ +
331 case 0:
│ │ │ │ +
332 out[i][0] *= p(alpha[l],in[l]);
│ │ │ │ +
333 break;
│ │ │ │ +
334 case 1:
│ │ │ │ +
335 out[i][0] *= dp(alpha[l],in[l]);
│ │ │ │ +
336 break;
│ │ │ │ +
337 case 2:
│ │ │ │ +
338 out[i][0] *= ddp(alpha[l],in[l]);
│ │ │ │ +
339 break;
│ │ │ │ +
340 default:
│ │ │ │ +
341 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
342 }
│ │ │ │ +
343 }
│ │ │ │ +
344 }
│ │ │ │ +
345 }
│ │ │ │ +
346
│ │ │ │ +
348 static constexpr unsigned int order ()
│ │ │ │ +
349 {
│ │ │ │ +
350 return k;
│ │ │ │ +
351 }
│ │ │ │ +
352 };
│ │ │ │ +
353
│ │ │ │ +
359 template<unsigned int dim, unsigned int k>
│ │ │ │ +
360 class LagrangeCubeLocalCoefficients
│ │ │ │ +
361 {
│ │ │ │ +
362 // Return i as a d-digit number in the (k+1)-nary system
│ │ │ │ +
363 static std::array<unsigned int,dim> multiindex (unsigned int i)
│ │ │ │ +
364 {
│ │ │ │ +
365 std::array<unsigned int,dim> alpha;
│ │ │ │ +
366 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
367 {
│ │ │ │ +
368 alpha[j] = i % (k+1);
│ │ │ │ +
369 i = i/(k+1);
│ │ │ │ +
370 }
│ │ │ │ +
371 return alpha;
│ │ │ │ +
372 }
│ │ │ │ +
373
│ │ │ │ +
375 void setup1d(std::vector<unsigned int>& subEntity)
│ │ │ │ +
376 {
│ │ │ │ +
377 assert(k>0);
│ │ │ │ +
378
│ │ │ │ +
379 unsigned lastIndex=0;
│ │ │ │ +
380
│ │ │ │ +
381 /* edge and vertex numbering
│ │ │ │ +
382 0----0----1
│ │ │ │ +
383 */
│ │ │ │ +
384
│ │ │ │ +
385 // edge (0)
│ │ │ │ +
386 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ +
387 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
388 subEntity[lastIndex++] = 0; // inner dofs of element (0)
│ │ │ │ +
389
│ │ │ │ +
390 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ +
391
│ │ │ │ +
392 assert(power(k+1,dim)==lastIndex);
│ │ │ │ +
393 }
│ │ │ │ +
394
│ │ │ │ +
395 void setup2d(std::vector<unsigned int>& subEntity)
│ │ │ │ +
396 {
│ │ │ │ +
397 assert(k>0);
│ │ │ │ +
398
│ │ │ │ +
399 unsigned lastIndex=0;
│ │ │ │ +
400
│ │ │ │ +
401 // LocalKey: entity number, entity codim, dof indices within each entity
│ │ │ │ +
402 /* edge and vertex numbering
│ │ │ │ +
403 2----3----3
│ │ │ │ +
404 | |
│ │ │ │ +
405 | |
│ │ │ │ +
406 0 1
│ │ │ │ +
407 | |
│ │ │ │ +
408 | |
│ │ │ │ +
409 0----2----1
│ │ │ │ +
410 */
│ │ │ │ +
411
│ │ │ │ +
412 // lower edge (2)
│ │ │ │ +
413 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ +
414 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
415 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2)
│ │ │ │ +
416
│ │ │ │ +
417 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ +
418
│ │ │ │ +
419 // iterate from bottom to top over inner edge dofs
│ │ │ │ +
420 for (unsigned e = 0; e < k - 1; ++e) {
│ │ │ │ +
421 subEntity[lastIndex++] = 0; // left edge (0)
│ │ │ │ +
422 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
423 subEntity[lastIndex++] = 0; // face dofs
│ │ │ │ +
424 subEntity[lastIndex++] = 1; // right edge (1)
│ │ │ │ +
425 }
│ │ │ │ +
426
│ │ │ │ +
427 // upper edge (3)
│ │ │ │ +
428 subEntity[lastIndex++] = 2; // corner 2
│ │ │ │ +
429 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
430 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3)
│ │ │ │ +
431
│ │ │ │ +
432 subEntity[lastIndex++] = 3; // corner 3
│ │ │ │ +
433
│ │ │ │ +
434 assert(power(k+1,dim)==lastIndex);
│ │ │ │ +
435 }
│ │ │ │ +
436
│ │ │ │ +
437 void setup3d(std::vector<unsigned int>& subEntity)
│ │ │ │ +
438 {
│ │ │ │ +
439 assert(k>0);
│ │ │ │ +
440
│ │ │ │ +
441 unsigned lastIndex=0;
│ │ │ │ +
442#ifndef NDEBUG
│ │ │ │ +
443 const unsigned numIndices = power(k+1,dim);
│ │ │ │ +
444 const unsigned numFaceIndices = power(k+1,dim-1);
│ │ │ │ +
445#endif
│ │ │ │ +
446 const unsigned numInnerEdgeDofs = k-1;
│ │ │ │ +
447
│ │ │ │ +
448 // LocalKey: entity number, entity codim, dof indices within each entity
│ │ │ │ +
449 /* edge and vertex numbering
│ │ │ │ +
450
│ │ │ │ +
451 6---(11)--7 6---------7
│ │ │ │ +
452 /| /| /| (5) /|
│ │ │ │ +
453 (8)| (9)| / | top / |
│ │ │ │ +
454 / (2) / (3) / |(3)bac/k |
│ │ │ │ +
455 4---(10)--5 | 4---------5 |
│ │ │ │ +
456 | | | | left|(0)| |(1)|right
│ │ │ │ +
457 | 2--(7)|---3 | 2-----|---3
│ │ │ │ +
458 (0) / (1) / |(2)front | /
│ │ │ │ +
459 |(4) |(5) | / (4) | /
│ │ │ │ +
460 |/ |/ |/ bottom |/
│ │ │ │ +
461 0---(6)---1 0---------1
│ │ │ │ +
462 */
│ │ │ │ +
463
│ │ │ │ +
464 // bottom face (4)
│ │ │ │ +
465 lastIndex=0;
│ │ │ │ +
466 // lower edge (6)
│ │ │ │ +
467 subEntity[lastIndex++] = 0; // corner 0
│ │ │ │ +
468 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ +
469 subEntity[lastIndex++] = 6; // inner dofs of lower edge (6)
│ │ │ │ +
470
│ │ │ │ +
471 subEntity[lastIndex++] = 1; // corner 1
│ │ │ │ +
472
│ │ │ │ +
473 // iterate from bottom to top over inner edge dofs
│ │ │ │ +
474 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) {
│ │ │ │ +
475 subEntity[lastIndex++] = 4; // left edge (4)
│ │ │ │ +
476 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ +
477 subEntity[lastIndex++] = 4; // inner face dofs
│ │ │ │ +
478 subEntity[lastIndex++] = 5; // right edge (5)
│ │ │ │ +
479 }
│ │ │ │ +
480
│ │ │ │ +
481 // upper edge (7)
│ │ │ │ +
482 subEntity[lastIndex++] = 2; // corner 2
│ │ │ │ +
483 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
484 subEntity[lastIndex++] = 7; // inner dofs of upper edge (7)
│ │ │ │ +
485 subEntity[lastIndex++] = 3; // corner 3
│ │ │ │ +
486
│ │ │ │ +
487 assert(numFaceIndices==lastIndex); // added 1 face so far
│ │ │ │ +
489
│ │ │ │ +
491 for(unsigned f = 0; f < numInnerEdgeDofs; ++f) {
│ │ │ │ +
492
│ │ │ │ +
493 // lower edge (connecting edges 0 and 1)
│ │ │ │ +
494 subEntity[lastIndex++] = 0; // dof on edge 0
│ │ │ │ +
495 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ +
496 subEntity[lastIndex++] = 2; // dof in front face
│ │ │ │ +
497 subEntity[lastIndex++] = 1; // dof on edge 1
│ │ │ │ +
498
│ │ │ │ +
499 // iterate from bottom to top over inner edge dofs
│ │ │ │ +
500 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) {
│ │ │ │ +
501 subEntity[lastIndex++] = 0; // on left face (0)
│ │ │ │ +
502 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ +
503 subEntity[lastIndex++] = 0; // volume dofs
│ │ │ │ +
504 subEntity[lastIndex++] = 1; // right face (1)
│ │ │ │ +
505 }
│ │ │ │ +
506
│ │ │ │ +
507 // upper edge (connecting edges 0 and 1)
│ │ │ │ +
508 subEntity[lastIndex++] = 2; // dof on edge 2
│ │ │ │ +
509 for (unsigned i = 0; i < numInnerEdgeDofs; ++i)
│ │ │ │ +
510 subEntity[lastIndex++] = 3; // dof on rear face (3)
│ │ │ │ +
511 subEntity[lastIndex++] = 3; // dof on edge 3
│ │ │ │ +
512
│ │ │ │ +
513 assert(lastIndex==(f+1+1)*numFaceIndices);
│ │ │ │ +
514 }
│ │ │ │ +
515
│ │ │ │ +
517 // lower edge (10)
│ │ │ │ +
518 subEntity[lastIndex++] = 4; // corner 4
│ │ │ │ +
519 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
520 subEntity[lastIndex++] = 10; // inner dofs on lower edge (10)
│ │ │ │ +
521 subEntity[lastIndex++] = 5; // corner 5
│ │ │ │ +
522
│ │ │ │ +
523 // iterate from bottom to top over inner edge dofs
│ │ │ │ +
524 for (unsigned e = 0; e < k - 1; ++e) {
│ │ │ │ +
525 subEntity[lastIndex++] = 8; // left edge (8)
│ │ │ │ +
526 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
527 subEntity[lastIndex++] = 5; // face dofs
│ │ │ │ +
528 subEntity[lastIndex++] = 9; // right edge (9)
│ │ │ │ +
529 }
│ │ │ │ +
530
│ │ │ │ +
531 // upper edge (11)
│ │ │ │ +
532 subEntity[lastIndex++] = 6; // corner 6
│ │ │ │ +
533 for (unsigned i = 0; i < k - 1; ++i)
│ │ │ │ +
534 subEntity[lastIndex++] = 11; // inner dofs of upper edge (11)
│ │ │ │ +
535 subEntity[lastIndex++] = 7; // corner 7
│ │ │ │ +
536
│ │ │ │ +
537 assert(numIndices==lastIndex);
│ │ │ │ +
538 }
│ │ │ │ +
539
│ │ │ │ +
540 public:
│ │ │ │ +
542 LagrangeCubeLocalCoefficients ()
│ │ │ │ +
543 : localKeys_(size())
│ │ │ │ +
544 {
│ │ │ │ +
545 if (k==0)
│ │ │ │ +
546 {
│ │ │ │ +
547 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ +
548 return;
│ │ │ │ +
549 }
│ │ │ │ +
550
│ │ │ │ +
551 if (k==1)
│ │ │ │ +
552 {
│ │ │ │ +
553 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
554 localKeys_[i] = LocalKey(i,dim,0);
│ │ │ │ +
555 return;
│ │ │ │ +
556 }
│ │ │ │ +
557
│ │ │ │ +
558 // Now: the general case
│ │ │ │ +
559
│ │ │ │ +
560 // Set up array of codimension-per-dof-number
│ │ │ │ +
561 std::vector<unsigned int> codim(size());
│ │ │ │ +
562
│ │ │ │ +
563 for (std::size_t i=0; i<codim.size(); i++)
│ │ │ │ +
564 {
│ │ │ │ +
565 codim[i] = 0;
│ │ │ │ +
566
│ │ │ │ +
567 // Codimension gets increased by 1 for each coordinate direction
│ │ │ │ +
568 // where dof is on boundary
│ │ │ │ +
569 std::array<unsigned int,dim> mIdx = multiindex(i);
│ │ │ │ +
570 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
571 if (mIdx[j]==0 or mIdx[j]==k)
│ │ │ │ +
572 codim[i]++;
│ │ │ │ +
573 }
│ │ │ │ +
574
│ │ │ │ +
575 // Set up index vector (the index of the dof in the set of dofs of a given subentity)
│ │ │ │ +
576 // Algorithm: the 'index' has the same ordering as the dof number 'i'.
│ │ │ │ +
577 // To make it consecutive we interpret 'i' in the (k+1)-adic system, omit all digits
│ │ │ │ +
578 // that correspond to axes where the dof is on the element boundary, and transform the
│ │ │ │ +
579 // rest to the (k-1)-adic system.
│ │ │ │ +
580 std::vector<unsigned int> index(size());
│ │ │ │ +
581
│ │ │ │ +
582 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
583 {
│ │ │ │ +
584 index[i] = 0;
│ │ │ │ +
585
│ │ │ │ +
586 std::array<unsigned int,dim> mIdx = multiindex(i);
│ │ │ │ +
587
│ │ │ │ +
588 for (int j=dim-1; j>=0; j--)
│ │ │ │ +
589 if (mIdx[j]>0 && mIdx[j]<k)
│ │ │ │ +
590 index[i] = (k-1)*index[i] + (mIdx[j]-1);
│ │ │ │ +
591 }
│ │ │ │ +
592
│ │ │ │ +
593 // Set up entity and dof numbers for each (supported) dimension separately
│ │ │ │ +
594 std::vector<unsigned int> subEntity(size());
│ │ │ │ +
595
│ │ │ │ +
596 if (dim==1) {
│ │ │ │ +
597
│ │ │ │ +
598 setup1d(subEntity);
│ │ │ │ +
599
│ │ │ │ +
600 } else if (dim==2) {
│ │ │ │ +
601
│ │ │ │ +
602 setup2d(subEntity);
│ │ │ │ +
603
│ │ │ │ +
604 } else if (dim==3) {
│ │ │ │ +
605
│ │ │ │ +
606 setup3d(subEntity);
│ │ │ │ +
607
│ │ │ │ +
608 } else
│ │ │ │ +
609 DUNE_THROW(Dune::NotImplemented, "LagrangeCubeLocalCoefficients for order " << k << " and dim == " << dim);
│ │ │ │ +
610
│ │ │ │ +
611 for (size_t i=0; i<size(); i++)
│ │ │ │ +
612 localKeys_[i] = LocalKey(subEntity[i], codim[i], index[i]);
│ │ │ │ +
613 }
│ │ │ │ +
614
│ │ │ │ +
616 static constexpr std::size_t size ()
│ │ │ │ +
617 {
│ │ │ │ +
618 return power(k+1,dim);
│ │ │ │ +
619 }
│ │ │ │ +
620
│ │ │ │ +
622 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
623 {
│ │ │ │ +
624 return localKeys_[i];
│ │ │ │ +
625 }
│ │ │ │ +
626
│ │ │ │ +
627 private:
│ │ │ │ +
628 std::vector<LocalKey> localKeys_;
│ │ │ │ +
629 };
│ │ │ │ +
630
│ │ │ │ +
635 template<class LocalBasis>
│ │ │ │ +
636 class LagrangeCubeLocalInterpolation
│ │ │ │ +
637 {
│ │ │ │ +
638 public:
│ │ │ │ +
639
│ │ │ │ +
647 template<typename F, typename C>
│ │ │ │ +
648 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
649 {
│ │ │ │ +
650 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ +
651 constexpr auto k = LocalBasis::order();
│ │ │ │ +
652 using D = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ +
653
│ │ │ │ +
654 typename LocalBasis::Traits::DomainType x;
│ │ │ │ +
655
│ │ │ │ +
656 out.resize(LocalBasis::size());
│ │ │ │ +
657
│ │ │ │ +
658 // Specialization for zero-order case
│ │ │ │ +
659 if (k==0)
│ │ │ │ +
660 {
│ │ │ │ +
661 auto center = ReferenceElements<D,dim>::cube().position(0,0);
│ │ │ │ +
662 out[0] = f(center);
│ │ │ │ +
663 return;
│ │ │ │ +
664 }
│ │ │ │ +
665
│ │ │ │ +
666 // Specialization for first-order case
│ │ │ │ +
667 if (k==1)
│ │ │ │ +
668 {
│ │ │ │ +
669 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ +
670 {
│ │ │ │ +
671 // Generate coordinate of the i-th corner of the reference cube
│ │ │ │ +
672 for (int j=0; j<dim; j++)
│ │ │ │ +
673 x[j] = (i & (1<<j)) ? 1.0 : 0.0;
│ │ │ │ +
674
│ │ │ │ +
675 out[i] = f(x);
│ │ │ │ +
676 }
│ │ │ │ +
677 return;
│ │ │ │ +
678 }
│ │ │ │ +
679
│ │ │ │ +
680 // The general case
│ │ │ │ +
681 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ +
682 {
│ │ │ │ +
683 // convert index i to multiindex
│ │ │ │ +
684 std::array<unsigned int,dim> alpha(LocalBasis::multiindex(i));
│ │ │ │ +
685
│ │ │ │ +
686 // Generate coordinate of the i-th Lagrange point
│ │ │ │ +
687 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
688 x[j] = (1.0*alpha[j])/k;
│ │ │ │ +
689
│ │ │ │ +
690 out[i] = f(x);
│ │ │ │ +
691 }
│ │ │ │ +
692 }
│ │ │ │ +
693
│ │ │ │ +
694 };
│ │ │ │ +
695
│ │ │ │ +
696} } // namespace Dune::Impl
│ │ │ │ +
697
│ │ │ │ +
698namespace Dune
│ │ │ │ +
699{
│ │ │ │ +
707 template<class D, class R, int dim, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
709 {
│ │ │ │ +
710 public:
│ │ │ │ + │ │ │ │ +
714 Impl::LagrangeCubeLocalCoefficients<dim,k>,
│ │ │ │ +
715 Impl::LagrangeCubeLocalInterpolation<Impl::LagrangeCubeLocalBasis<D,R,dim,k> > >;
│ │ │ │ +
716
│ │ │ │ +
│ │ │ │ +
719 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
720 {
│ │ │ │ +
721 return basis_;
│ │ │ │ +
722 }
│ │ │ │ +
│ │ │ │ +
723
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
727 {
│ │ │ │ +
728 return coefficients_;
│ │ │ │ +
729 }
│ │ │ │ +
│ │ │ │ +
730
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
734 {
│ │ │ │ +
735 return interpolation_;
│ │ │ │ +
736 }
│ │ │ │ +
│ │ │ │ +
737
│ │ │ │ +
│ │ │ │ +
739 static constexpr std::size_t size ()
│ │ │ │ +
740 {
│ │ │ │ +
741 return power(k+1,dim);
│ │ │ │ +
742 }
│ │ │ │ +
│ │ │ │ +
743
│ │ │ │ +
│ │ │ │ +
746 static constexpr GeometryType type ()
│ │ │ │ +
747 {
│ │ │ │ +
748 return GeometryTypes::cube(dim);
│ │ │ │ +
749 }
│ │ │ │ +
│ │ │ │ +
750
│ │ │ │ +
751 private:
│ │ │ │ +
752 Impl::LagrangeCubeLocalBasis<D,R,dim,k> basis_;
│ │ │ │ +
753 Impl::LagrangeCubeLocalCoefficients<dim,k> coefficients_;
│ │ │ │ +
754 Impl::LagrangeCubeLocalInterpolation<Impl::LagrangeCubeLocalBasis<D,R,dim,k> > interpolation_;
│ │ │ │ +
755 };
│ │ │ │ +
│ │ │ │ +
756
│ │ │ │ +
757} // namespace Dune
│ │ │ │ +
758
│ │ │ │ +
759#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for dual Q1 elements.
Definition dualq1localcoefficients.hh:26
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition dualq1localcoefficients.hh:36
│ │ │ │ -
DualQ1LocalCoefficients()
Standard constructor.
Definition dualq1localcoefficients.hh:29
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition dualq1localcoefficients.hh:42
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangecube.hh:719
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangecube.hh:733
│ │ │ │ +
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangecube.hh:746
│ │ │ │ +
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangecube.hh:739
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangecube.hh:726
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,77 +1,764 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ -dualq1localcoefficients.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangecube.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include │ │ │ │ │ 16 │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 class _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -26 { │ │ │ │ │ -27 public: │ │ │ │ │ -_2_9 _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(1< li; │ │ │ │ │ -49 }; │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e { namespace Impl │ │ │ │ │ +22{ │ │ │ │ │ +23 // Forward declaration │ │ │ │ │ +24 template │ │ │ │ │ +25 class LagrangeCubeLocalInterpolation; │ │ │ │ │ +26 │ │ │ │ │ +37 template │ │ │ │ │ +38 class LagrangeCubeLocalBasis │ │ │ │ │ +39 { │ │ │ │ │ +40 friend class │ │ │ │ │ +LagrangeCubeLocalInterpolation >; │ │ │ │ │ +41 │ │ │ │ │ +42 // i-th Lagrange polynomial of degree k in one dimension │ │ │ │ │ +43 static R p(unsigned int i, D x) │ │ │ │ │ +44 { │ │ │ │ │ +45 R result(1.0); │ │ │ │ │ +46 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ +47 if (j!=i) result *= (k*x-j)/((int)i-(int)j); │ │ │ │ │ +48 return result; │ │ │ │ │ +49 } │ │ │ │ │ 50 │ │ │ │ │ -51} │ │ │ │ │ -52 │ │ │ │ │ -53#endif │ │ │ │ │ +51 // derivative of ith Lagrange polynomial of degree k in one dimension │ │ │ │ │ +52 static R dp(unsigned int i, D x) │ │ │ │ │ +53 { │ │ │ │ │ +54 R result(0.0); │ │ │ │ │ +55 │ │ │ │ │ +56 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ +57 { │ │ │ │ │ +58 if (j!=i) │ │ │ │ │ +59 { │ │ │ │ │ +60 R prod( (k*1.0)/((int)i-(int)j) ); │ │ │ │ │ +61 for (unsigned int l=0; l<=k; l++) │ │ │ │ │ +62 if (l!=i && l!=j) │ │ │ │ │ +63 prod *= (k*x-l)/((int)i-(int)l); │ │ │ │ │ +64 result += prod; │ │ │ │ │ +65 } │ │ │ │ │ +66 } │ │ │ │ │ +67 return result; │ │ │ │ │ +68 } │ │ │ │ │ +69 │ │ │ │ │ +70 // Second derivative of j-th Lagrange polynomial of degree k in one │ │ │ │ │ +dimension │ │ │ │ │ +71 // Formula and notation taken from https://en.wikipedia.org/wiki/ │ │ │ │ │ +Lagrange_polynomial#Derivatives │ │ │ │ │ +72 static R ddp(unsigned int j, D x) │ │ │ │ │ +73 { │ │ │ │ │ +74 R result(0.0); │ │ │ │ │ +75 │ │ │ │ │ +76 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ +77 { │ │ │ │ │ +78 if (i==j) │ │ │ │ │ +79 continue; │ │ │ │ │ +80 │ │ │ │ │ +81 R sum(0); │ │ │ │ │ +82 │ │ │ │ │ +83 for (unsigned int m=0; m<=k; m++) │ │ │ │ │ +84 { │ │ │ │ │ +85 if (m==i || m==j) │ │ │ │ │ +86 continue; │ │ │ │ │ +87 │ │ │ │ │ +88 R prod( (k*1.0)/((int)j-(int)m) ); │ │ │ │ │ +89 for (unsigned int l=0; l<=k; l++) │ │ │ │ │ +90 if (l!=i && l!=j && l!=m) │ │ │ │ │ +91 prod *= (k*x-l)/((int)j-(int)l); │ │ │ │ │ +92 sum += prod; │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +95 result += sum * ( (k*1.0)/((int)j-(int)i) ); │ │ │ │ │ +96 } │ │ │ │ │ +97 │ │ │ │ │ +98 return result; │ │ │ │ │ +99 } │ │ │ │ │ +100 │ │ │ │ │ +101 // Return i as a d-digit number in the (k+1)-nary system │ │ │ │ │ +102 static std::array multiindex (unsigned int i) │ │ │ │ │ +103 { │ │ │ │ │ +104 std::array alpha; │ │ │ │ │ +105 for (unsigned int j=0; j,R,1,FieldVector,FieldMatrix │ │ │ │ │ +>; │ │ │ │ │ +115 │ │ │ │ │ +118 static constexpr unsigned int size () │ │ │ │ │ +119 { │ │ │ │ │ +120 return power(k+1, dim); │ │ │ │ │ +121 } │ │ │ │ │ +122 │ │ │ │ │ +124 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ +125 std::vector& out) const │ │ │ │ │ +126 { │ │ │ │ │ +127 out.resize(size()); │ │ │ │ │ +128 │ │ │ │ │ +129 // Specialization for zero-order case │ │ │ │ │ +130 if (k==0) │ │ │ │ │ +131 { │ │ │ │ │ +132 out[0] = 1; │ │ │ │ │ +133 return; │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +136 if (k==1) │ │ │ │ │ +137 { │ │ │ │ │ +138 for (size_t i=0; i alpha(multiindex(i)); │ │ │ │ │ +154 │ │ │ │ │ +155 // initialize product │ │ │ │ │ +156 out[i] = 1.0; │ │ │ │ │ +157 │ │ │ │ │ +158 // dimension by dimension │ │ │ │ │ +159 for (unsigned int j=0; j& out) const │ │ │ │ │ +171 { │ │ │ │ │ +172 out.resize(size()); │ │ │ │ │ +173 │ │ │ │ │ +174 // Specialization for k==0 │ │ │ │ │ +175 if (k==0) │ │ │ │ │ +176 { │ │ │ │ │ +177 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ +178 return; │ │ │ │ │ +179 } │ │ │ │ │ +180 │ │ │ │ │ +181 // Specialization for k==1 │ │ │ │ │ +182 if (k==1) │ │ │ │ │ +183 { │ │ │ │ │ +184 // Loop over all shape functions │ │ │ │ │ +185 for (size_t i=0; i alpha(multiindex(i)); │ │ │ │ │ +212 │ │ │ │ │ +213 // Loop over all coordinate directions │ │ │ │ │ +214 for (unsigned int j=0; j& order, │ │ │ │ │ +235 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +236 std::vector& out) const │ │ │ │ │ +237 { │ │ │ │ │ +238 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +239 │ │ │ │ │ +240 out.resize(size()); │ │ │ │ │ +241 │ │ │ │ │ +242 if (k==0) │ │ │ │ │ +243 { │ │ │ │ │ +244 out[0] = (totalOrder==0); │ │ │ │ │ +245 return; │ │ │ │ │ +246 } │ │ │ │ │ +247 │ │ │ │ │ +248 if (k==1) │ │ │ │ │ +249 { │ │ │ │ │ +250 if (totalOrder == 0) │ │ │ │ │ +251 { │ │ │ │ │ +252 evaluateFunction(in, out); │ │ │ │ │ +253 } │ │ │ │ │ +254 else if (totalOrder == 1) │ │ │ │ │ +255 { │ │ │ │ │ +256 out.resize(size()); │ │ │ │ │ +257 │ │ │ │ │ +258 auto direction = std::distance(order.begin(), std::find(order.begin(), │ │ │ │ │ +order.end(), 1)); │ │ │ │ │ +259 if (direction >= dim) │ │ │ │ │ +260 DUNE_THROW(RangeError, "Direction of partial derivative not found!"); │ │ │ │ │ +261 │ │ │ │ │ +262 // Loop over all shape functions │ │ │ │ │ +263 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +264 { │ │ │ │ │ +265 // Initialize: the overall expression is a product │ │ │ │ │ +266 // if j-th bit of i is set to 1, otherwise to -1 │ │ │ │ │ +267 out[i] = (i & (1< alpha(multiindex(i)); │ │ │ │ │ +284 │ │ │ │ │ +285 // Initialize: the overall expression is a product │ │ │ │ │ +286 out[i][0] = 1.0; │ │ │ │ │ +287 │ │ │ │ │ +288 // rest of the product │ │ │ │ │ +289 for (std::size_t l=0; l1 │ │ │ │ │ +316 │ │ │ │ │ +317 // Loop over all shape functions │ │ │ │ │ +318 for (size_t i=0; i alpha(multiindex(i)); │ │ │ │ │ +322 │ │ │ │ │ +323 // Initialize: the overall expression is a product │ │ │ │ │ +324 out[i][0] = 1.0; │ │ │ │ │ +325 │ │ │ │ │ +326 // rest of the product │ │ │ │ │ +327 for (std::size_t l=0; l │ │ │ │ │ +360 class LagrangeCubeLocalCoefficients │ │ │ │ │ +361 { │ │ │ │ │ +362 // Return i as a d-digit number in the (k+1)-nary system │ │ │ │ │ +363 static std::array multiindex (unsigned int i) │ │ │ │ │ +364 { │ │ │ │ │ +365 std::array alpha; │ │ │ │ │ +366 for (unsigned int j=0; j& subEntity) │ │ │ │ │ +376 { │ │ │ │ │ +377 assert(k>0); │ │ │ │ │ +378 │ │ │ │ │ +379 unsigned lastIndex=0; │ │ │ │ │ +380 │ │ │ │ │ +381 /* edge and vertex numbering │ │ │ │ │ +382 0----0----1 │ │ │ │ │ +383 */ │ │ │ │ │ +384 │ │ │ │ │ +385 // edge (0) │ │ │ │ │ +386 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ +387 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +388 subEntity[lastIndex++] = 0; // inner dofs of element (0) │ │ │ │ │ +389 │ │ │ │ │ +390 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ +391 │ │ │ │ │ +392 assert(power(k+1,dim)==lastIndex); │ │ │ │ │ +393 } │ │ │ │ │ +394 │ │ │ │ │ +395 void setup2d(std::vector& subEntity) │ │ │ │ │ +396 { │ │ │ │ │ +397 assert(k>0); │ │ │ │ │ +398 │ │ │ │ │ +399 unsigned lastIndex=0; │ │ │ │ │ +400 │ │ │ │ │ +401 // LocalKey: entity number, entity codim, dof indices within each entity │ │ │ │ │ +402 /* edge and vertex numbering │ │ │ │ │ +403 2----3----3 │ │ │ │ │ +404 | | │ │ │ │ │ +405 | | │ │ │ │ │ +406 0 1 │ │ │ │ │ +407 | | │ │ │ │ │ +408 | | │ │ │ │ │ +409 0----2----1 │ │ │ │ │ +410 */ │ │ │ │ │ +411 │ │ │ │ │ +412 // lower edge (2) │ │ │ │ │ +413 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ +414 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +415 subEntity[lastIndex++] = 2; // inner dofs of lower edge (2) │ │ │ │ │ +416 │ │ │ │ │ +417 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ +418 │ │ │ │ │ +419 // iterate from bottom to top over inner edge dofs │ │ │ │ │ +420 for (unsigned e = 0; e < k - 1; ++e) { │ │ │ │ │ +421 subEntity[lastIndex++] = 0; // left edge (0) │ │ │ │ │ +422 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +423 subEntity[lastIndex++] = 0; // face dofs │ │ │ │ │ +424 subEntity[lastIndex++] = 1; // right edge (1) │ │ │ │ │ +425 } │ │ │ │ │ +426 │ │ │ │ │ +427 // upper edge (3) │ │ │ │ │ +428 subEntity[lastIndex++] = 2; // corner 2 │ │ │ │ │ +429 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +430 subEntity[lastIndex++] = 3; // inner dofs of upper edge (3) │ │ │ │ │ +431 │ │ │ │ │ +432 subEntity[lastIndex++] = 3; // corner 3 │ │ │ │ │ +433 │ │ │ │ │ +434 assert(power(k+1,dim)==lastIndex); │ │ │ │ │ +435 } │ │ │ │ │ +436 │ │ │ │ │ +437 void setup3d(std::vector& subEntity) │ │ │ │ │ +438 { │ │ │ │ │ +439 assert(k>0); │ │ │ │ │ +440 │ │ │ │ │ +441 unsigned lastIndex=0; │ │ │ │ │ +442#ifndef NDEBUG │ │ │ │ │ +443 const unsigned numIndices = power(k+1,dim); │ │ │ │ │ +444 const unsigned numFaceIndices = power(k+1,dim-1); │ │ │ │ │ +445#endif │ │ │ │ │ +446 const unsigned numInnerEdgeDofs = k-1; │ │ │ │ │ +447 │ │ │ │ │ +448 // LocalKey: entity number, entity codim, dof indices within each entity │ │ │ │ │ +449 /* edge and vertex numbering │ │ │ │ │ +450 │ │ │ │ │ +451 6---(11)--7 6---------7 │ │ │ │ │ +452 /| /| /| (5) /| │ │ │ │ │ +453 (8)| (9)| / | top / | │ │ │ │ │ +454 / (2) / (3) / |(3)bac/k | │ │ │ │ │ +455 4---(10)--5 | 4---------5 | │ │ │ │ │ +456 | | | | left|(0)| |(1)|right │ │ │ │ │ +457 | 2--(7)|---3 | 2-----|---3 │ │ │ │ │ +458 (0) / (1) / |(2)front | / │ │ │ │ │ +459 |(4) |(5) | / (4) | / │ │ │ │ │ +460 |/ |/ |/ bottom |/ │ │ │ │ │ +461 0---(6)---1 0---------1 │ │ │ │ │ +462 */ │ │ │ │ │ +463 │ │ │ │ │ +464 // bottom face (4) │ │ │ │ │ +465 lastIndex=0; │ │ │ │ │ +466 // lower edge (6) │ │ │ │ │ +467 subEntity[lastIndex++] = 0; // corner 0 │ │ │ │ │ +468 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ +469 subEntity[lastIndex++] = 6; // inner dofs of lower edge (6) │ │ │ │ │ +470 │ │ │ │ │ +471 subEntity[lastIndex++] = 1; // corner 1 │ │ │ │ │ +472 │ │ │ │ │ +473 // iterate from bottom to top over inner edge dofs │ │ │ │ │ +474 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) { │ │ │ │ │ +475 subEntity[lastIndex++] = 4; // left edge (4) │ │ │ │ │ +476 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ +477 subEntity[lastIndex++] = 4; // inner face dofs │ │ │ │ │ +478 subEntity[lastIndex++] = 5; // right edge (5) │ │ │ │ │ +479 } │ │ │ │ │ +480 │ │ │ │ │ +481 // upper edge (7) │ │ │ │ │ +482 subEntity[lastIndex++] = 2; // corner 2 │ │ │ │ │ +483 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +484 subEntity[lastIndex++] = 7; // inner dofs of upper edge (7) │ │ │ │ │ +485 subEntity[lastIndex++] = 3; // corner 3 │ │ │ │ │ +486 │ │ │ │ │ +487 assert(numFaceIndices==lastIndex); // added 1 face so far │ │ │ │ │ +489 │ │ │ │ │ +491 for(unsigned f = 0; f < numInnerEdgeDofs; ++f) { │ │ │ │ │ +492 │ │ │ │ │ +493 // lower edge (connecting edges 0 and 1) │ │ │ │ │ +494 subEntity[lastIndex++] = 0; // dof on edge 0 │ │ │ │ │ +495 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ +496 subEntity[lastIndex++] = 2; // dof in front face │ │ │ │ │ +497 subEntity[lastIndex++] = 1; // dof on edge 1 │ │ │ │ │ +498 │ │ │ │ │ +499 // iterate from bottom to top over inner edge dofs │ │ │ │ │ +500 for (unsigned e = 0; e < numInnerEdgeDofs; ++e) { │ │ │ │ │ +501 subEntity[lastIndex++] = 0; // on left face (0) │ │ │ │ │ +502 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ +503 subEntity[lastIndex++] = 0; // volume dofs │ │ │ │ │ +504 subEntity[lastIndex++] = 1; // right face (1) │ │ │ │ │ +505 } │ │ │ │ │ +506 │ │ │ │ │ +507 // upper edge (connecting edges 0 and 1) │ │ │ │ │ +508 subEntity[lastIndex++] = 2; // dof on edge 2 │ │ │ │ │ +509 for (unsigned i = 0; i < numInnerEdgeDofs; ++i) │ │ │ │ │ +510 subEntity[lastIndex++] = 3; // dof on rear face (3) │ │ │ │ │ +511 subEntity[lastIndex++] = 3; // dof on edge 3 │ │ │ │ │ +512 │ │ │ │ │ +513 assert(lastIndex==(f+1+1)*numFaceIndices); │ │ │ │ │ +514 } │ │ │ │ │ +515 │ │ │ │ │ +517 // lower edge (10) │ │ │ │ │ +518 subEntity[lastIndex++] = 4; // corner 4 │ │ │ │ │ +519 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +520 subEntity[lastIndex++] = 10; // inner dofs on lower edge (10) │ │ │ │ │ +521 subEntity[lastIndex++] = 5; // corner 5 │ │ │ │ │ +522 │ │ │ │ │ +523 // iterate from bottom to top over inner edge dofs │ │ │ │ │ +524 for (unsigned e = 0; e < k - 1; ++e) { │ │ │ │ │ +525 subEntity[lastIndex++] = 8; // left edge (8) │ │ │ │ │ +526 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +527 subEntity[lastIndex++] = 5; // face dofs │ │ │ │ │ +528 subEntity[lastIndex++] = 9; // right edge (9) │ │ │ │ │ +529 } │ │ │ │ │ +530 │ │ │ │ │ +531 // upper edge (11) │ │ │ │ │ +532 subEntity[lastIndex++] = 6; // corner 6 │ │ │ │ │ +533 for (unsigned i = 0; i < k - 1; ++i) │ │ │ │ │ +534 subEntity[lastIndex++] = 11; // inner dofs of upper edge (11) │ │ │ │ │ +535 subEntity[lastIndex++] = 7; // corner 7 │ │ │ │ │ +536 │ │ │ │ │ +537 assert(numIndices==lastIndex); │ │ │ │ │ +538 } │ │ │ │ │ +539 │ │ │ │ │ +540 public: │ │ │ │ │ +542 LagrangeCubeLocalCoefficients () │ │ │ │ │ +543 : localKeys_(size()) │ │ │ │ │ +544 { │ │ │ │ │ +545 if (k==0) │ │ │ │ │ +546 { │ │ │ │ │ +547 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ +548 return; │ │ │ │ │ +549 } │ │ │ │ │ +550 │ │ │ │ │ +551 if (k==1) │ │ │ │ │ +552 { │ │ │ │ │ +553 for (std::size_t i=0; i codim(size()); │ │ │ │ │ +562 │ │ │ │ │ +563 for (std::size_t i=0; i mIdx = multiindex(i); │ │ │ │ │ +570 for (unsigned int j=0; j index(size()); │ │ │ │ │ +581 │ │ │ │ │ +582 for (std::size_t i=0; i mIdx = multiindex(i); │ │ │ │ │ +587 │ │ │ │ │ +588 for (int j=dim-1; j>=0; j--) │ │ │ │ │ +589 if (mIdx[j]>0 && mIdx[j] subEntity(size()); │ │ │ │ │ +595 │ │ │ │ │ +596 if (dim==1) { │ │ │ │ │ +597 │ │ │ │ │ +598 setup1d(subEntity); │ │ │ │ │ +599 │ │ │ │ │ +600 } else if (dim==2) { │ │ │ │ │ +601 │ │ │ │ │ +602 setup2d(subEntity); │ │ │ │ │ +603 │ │ │ │ │ +604 } else if (dim==3) { │ │ │ │ │ +605 │ │ │ │ │ +606 setup3d(subEntity); │ │ │ │ │ +607 │ │ │ │ │ +608 } else │ │ │ │ │ +609 DUNE_THROW(Dune::NotImplemented, "LagrangeCubeLocalCoefficients for order " │ │ │ │ │ +<< k << " and dim == " << dim); │ │ │ │ │ +610 │ │ │ │ │ +611 for (size_t i=0; i localKeys_; │ │ │ │ │ +629 }; │ │ │ │ │ +630 │ │ │ │ │ +635 template │ │ │ │ │ +636 class LagrangeCubeLocalInterpolation │ │ │ │ │ +637 { │ │ │ │ │ +638 public: │ │ │ │ │ +639 │ │ │ │ │ +647 template │ │ │ │ │ +648 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +649 { │ │ │ │ │ +650 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ +651 constexpr auto k = LocalBasis::order(); │ │ │ │ │ +652 using D = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ +653 │ │ │ │ │ +654 typename LocalBasis::Traits::DomainType x; │ │ │ │ │ +655 │ │ │ │ │ +656 out.resize(LocalBasis::size()); │ │ │ │ │ +657 │ │ │ │ │ +658 // Specialization for zero-order case │ │ │ │ │ +659 if (k==0) │ │ │ │ │ +660 { │ │ │ │ │ +661 auto center = ReferenceElements::cube().position(0,0); │ │ │ │ │ +662 out[0] = f(center); │ │ │ │ │ +663 return; │ │ │ │ │ +664 } │ │ │ │ │ +665 │ │ │ │ │ +666 // Specialization for first-order case │ │ │ │ │ +667 if (k==1) │ │ │ │ │ +668 { │ │ │ │ │ +669 for (unsigned int i=0; i alpha(LocalBasis::multiindex(i)); │ │ │ │ │ +685 │ │ │ │ │ +686 // Generate coordinate of the i-th Lagrange point │ │ │ │ │ +687 for (unsigned int j=0; j │ │ │ │ │ +_7_0_8 class _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +709 { │ │ │ │ │ +710 public: │ │ │ │ │ +_7_1_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ +714 Impl::LagrangeCubeLocalCoefficients, │ │ │ │ │ +715 Impl::LagrangeCubeLocalInterpolation > >; │ │ │ │ │ +716 │ │ │ │ │ +_7_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +720 { │ │ │ │ │ +721 return basis_; │ │ │ │ │ +722 } │ │ │ │ │ +723 │ │ │ │ │ +_7_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +727 { │ │ │ │ │ +728 return coefficients_; │ │ │ │ │ +729 } │ │ │ │ │ +730 │ │ │ │ │ +_7_3_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +734 { │ │ │ │ │ +735 return interpolation_; │ │ │ │ │ +736 } │ │ │ │ │ +737 │ │ │ │ │ +_7_3_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ +740 { │ │ │ │ │ +741 return power(k+1,dim); │ │ │ │ │ +742 } │ │ │ │ │ +743 │ │ │ │ │ +_7_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +747 { │ │ │ │ │ +748 return GeometryTypes::cube(dim); │ │ │ │ │ +749 } │ │ │ │ │ +750 │ │ │ │ │ +751 private: │ │ │ │ │ +752 Impl::LagrangeCubeLocalBasis basis_; │ │ │ │ │ +753 Impl::LagrangeCubeLocalCoefficients coefficients_; │ │ │ │ │ +754 Impl::LagrangeCubeLocalInterpolation > interpolation_; │ │ │ │ │ +755 }; │ │ │ │ │ +756 │ │ │ │ │ +757} // namespace Dune │ │ │ │ │ +758 │ │ │ │ │ +759#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGECUBE_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for dual Q1 elements. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localcoefficients.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn dualq1localcoefficients.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DualQ1LocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localcoefficients.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn dualq1localcoefficients.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:719 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:733 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The reference element that the local finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:746 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() │ │ │ │ │ +The number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:739 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:726 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: p0localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,33 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1localinterpolation.hh File Reference
│ │ │ │ +
p0localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualQ1LocalInterpolation< dim, LB >
class  Dune::P0LocalBasis< D, R, d >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualq1localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +p0localbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_,_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00419_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: p0localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,106 +70,109 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1localinterpolation.hh
│ │ │ │ +
p0localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_P0LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │
13
│ │ │ │
14namespace Dune
│ │ │ │
15{
│ │ │ │ -
16
│ │ │ │ -
20 template<int dim, class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 {
│ │ │ │ -
23 public:
│ │ │ │ -
24
│ │ │ │ -
│ │ │ │ -
25 void setCoefficients(const std::array<Dune::FieldVector<typename LB::Traits::RangeFieldType, (1<<dim)> ,(1<<dim)>& coefficients)
│ │ │ │ -
26 {
│ │ │ │ -
27 coefficients_ = coefficients;
│ │ │ │ -
28 }
│ │ │ │ -
│ │ │ │ -
29
│ │ │ │ -
30
│ │ │ │ -
32 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
33 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
34 {
│ │ │ │ -
35 typename LB::Traits::DomainType x;
│ │ │ │ +
29 template<class D, class R, int d>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 {
│ │ │ │ +
32 public:
│ │ │ │ +
34 typedef LocalBasisTraits<D,d,Dune::FieldVector<D,d>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
35 Dune::FieldMatrix<R,1,d> > Traits;
│ │ │ │
36
│ │ │ │ -
37 const int size = 1<<dim;
│ │ │ │ -
38
│ │ │ │ -
39 // compute Q1 interpolation coefficients
│ │ │ │ -
40 Dune::FieldVector<C,size> q1Coefficients;
│ │ │ │ -
41
│ │ │ │ -
42 for (int i=0; i< (1<<dim); i++) {
│ │ │ │ -
43
│ │ │ │ -
44 // Generate coordinate of the i-th corner of the reference cube
│ │ │ │ -
45 // We could use the ReferenceElement for this as well, but it is
│ │ │ │ -
46 // still not clear how dune-localfunctions should have access to them.
│ │ │ │ -
47 for (int j=0; j<dim; j++)
│ │ │ │ -
48 x[j] = (i & (1<<j)) ? 1.0 : 0.0;
│ │ │ │ -
49
│ │ │ │ -
50 q1Coefficients[i] = f(x);
│ │ │ │ -
51
│ │ │ │ -
52 }
│ │ │ │ -
53
│ │ │ │ -
54 out.resize(size);
│ │ │ │ -
55
│ │ │ │ -
56 // solve a linear system to compute the dual coefficients
│ │ │ │ -
57 Dune::FieldMatrix<C,size,size> mat;
│ │ │ │ -
58
│ │ │ │ -
59 for (int i=0; i<size; i++)
│ │ │ │ -
60 for (int j=0; j<size; j++)
│ │ │ │ -
61 mat[i][j] = coefficients_[j][i];
│ │ │ │ -
62
│ │ │ │ -
63 // now solve for the weights
│ │ │ │ -
64 Dune::FieldVector<C,size> sol(0);
│ │ │ │ -
65
│ │ │ │ -
66 mat.solve(sol,q1Coefficients);
│ │ │ │ -
67
│ │ │ │ -
68 // write result in out vector
│ │ │ │ -
69 for (int i=0; i<size; i++)
│ │ │ │ -
70 out[i] = sol[i];
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73 private:
│ │ │ │ -
74 std::array<Dune::FieldVector<typename LB::Traits::RangeFieldType, (1<<dim)> ,(1<<dim)> coefficients_;
│ │ │ │ -
75 };
│ │ │ │ +
│ │ │ │ +
38 unsigned int size () const
│ │ │ │ +
39 {
│ │ │ │ +
40 return 1;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
│ │ │ │ +
44 inline void evaluateFunction (const typename Traits::DomainType&,
│ │ │ │ +
45 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
46 {
│ │ │ │ +
47 out.resize(1);
│ │ │ │ +
48 out[0] = 1;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
52 inline void
│ │ │ │ +
│ │ │ │ +
53 evaluateJacobian (const typename Traits::DomainType&, // position
│ │ │ │ +
54 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
55 {
│ │ │ │ +
56 out.resize(1);
│ │ │ │ +
57 for (int i=0; i<d; i++)
│ │ │ │ +
58 out[0][0][i] = 0;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ +
66 void partial(const std::array<unsigned int,d>& order,
│ │ │ │ +
67 const typename Traits::DomainType& in,
│ │ │ │ +
68 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
69 {
│ │ │ │ +
70 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
71 if (totalOrder == 0) {
│ │ │ │ +
72 evaluateFunction(in, out);
│ │ │ │ +
73 } else {
│ │ │ │ +
74 out.resize(1);
│ │ │ │ +
75 out[0] = 0;
│ │ │ │ +
76 }
│ │ │ │ +
77 }
│ │ │ │
│ │ │ │ -
76
│ │ │ │ -
77}
│ │ │ │
78
│ │ │ │ -
79#endif
│ │ │ │ +
│ │ │ │ +
80 unsigned int order () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return 0;
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86}
│ │ │ │ +
87
│ │ │ │ +
88#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition dualq1localinterpolation.hh:22
│ │ │ │ -
void setCoefficients(const std::array< Dune::FieldVector< typename LB::Traits::RangeFieldType,(1<< dim)>,(1<< dim)> &coefficients)
Definition dualq1localinterpolation.hh:25
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Local interpolation of a function.
Definition dualq1localinterpolation.hh:33
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition p0localbasis.hh:31
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition p0localbasis.hh:80
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition p0localbasis.hh:53
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition p0localbasis.hh:44
│ │ │ │ +
void partial(const std::array< unsigned int, d > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition p0localbasis.hh:66
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition p0localbasis.hh:38
│ │ │ │ +
LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
export type traits for function signature
Definition p0localbasis.hh:35
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,102 +1,119 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ - * _d_u_a_l_q_1 │ │ │ │ │ -dualq1localinterpolation.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ +p0localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_P0LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 13 │ │ │ │ │ 14namespace _D_u_n_e │ │ │ │ │ 15{ │ │ │ │ │ -16 │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 class _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -22 { │ │ │ │ │ -23 public: │ │ │ │ │ -24 │ │ │ │ │ -_2_5 void _s_e_t_C_o_e_f_f_i_c_i_e_n_t_s(const std::array ,(1<& coefficients) │ │ │ │ │ -26 { │ │ │ │ │ -27 coefficients_ = coefficients; │ │ │ │ │ -28 } │ │ │ │ │ -29 │ │ │ │ │ -30 │ │ │ │ │ -32 template │ │ │ │ │ -_3_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -34 { │ │ │ │ │ -35 typename LB::Traits::DomainType x; │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 class _P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +31 { │ │ │ │ │ +32 public: │ │ │ │ │ +34 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_3_5 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 36 │ │ │ │ │ -37 const int size = 1< q1Coefficients; │ │ │ │ │ -41 │ │ │ │ │ -42 for (int i=0; i< (1< mat; │ │ │ │ │ -58 │ │ │ │ │ -59 for (int i=0; i sol(0); │ │ │ │ │ -65 │ │ │ │ │ -66 mat.solve(sol,q1Coefficients); │ │ │ │ │ -67 │ │ │ │ │ -68 // write result in out vector │ │ │ │ │ -69 for (int i=0; i │ │ │ │ │ -,(1< coefficients_; │ │ │ │ │ -75 }; │ │ │ │ │ -76 │ │ │ │ │ -77} │ │ │ │ │ +_3_8 unsigned int _s_i_z_e () const │ │ │ │ │ +39 { │ │ │ │ │ +40 return 1; │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ +_4_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&, │ │ │ │ │ +45 std::vector& out) const │ │ │ │ │ +46 { │ │ │ │ │ +47 out.resize(1); │ │ │ │ │ +48 out[0] = 1; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +52 inline void │ │ │ │ │ +_5_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&, // position │ │ │ │ │ +54 std::vector& out) const // return value │ │ │ │ │ +55 { │ │ │ │ │ +56 out.resize(1); │ │ │ │ │ +57 for (int i=0; i& _o_r_d_e_r, │ │ │ │ │ +67 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +68 std::vector& out) const │ │ │ │ │ +69 { │ │ │ │ │ +70 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +71 if (totalOrder == 0) { │ │ │ │ │ +72 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +73 } else { │ │ │ │ │ +74 out.resize(1); │ │ │ │ │ +75 out[0] = 0; │ │ │ │ │ +76 } │ │ │ │ │ +77 } │ │ │ │ │ 78 │ │ │ │ │ -79#endif │ │ │ │ │ +_8_0 unsigned int _o_r_d_e_r () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return 0; │ │ │ │ │ +83 } │ │ │ │ │ +84 }; │ │ │ │ │ +85 │ │ │ │ │ +86} │ │ │ │ │ +87 │ │ │ │ │ +88#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn dualq1localinterpolation.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -void setCoefficients(const std::array< Dune::FieldVector< typename LB::Traits:: │ │ │ │ │ -RangeFieldType,(1<< dim)>,(1<< dim)> &coefficients) │ │ │ │ │ -DDeeffiinniittiioonn dualq1localinterpolation.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Local interpolation of a function. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localinterpolation.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, d > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, d > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:35 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1.hh File Reference │ │ │ │ +dune-localfunctions: p0localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dualq1.hh File Reference
│ │ │ │ +
p0localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include "dualq1/dualq1localbasis.hh"
│ │ │ │ -#include "dualq1/dualq1localcoefficients.hh"
│ │ │ │ -#include "dualq1/dualq1localinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual >
 The local dual Q1 finite element on cubes. More...
class  Dune::P0LocalCoefficients
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dualq1.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +p0localcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _f_a_c_e_D_u_a_l_ _> │ │ │ │ │ -  The local dual Q1 finite element on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00422_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dualq1.hh Source File │ │ │ │ +dune-localfunctions: p0localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,74 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dualq1.hh
│ │ │ │ +
p0localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_P0LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ -
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
15#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
22
│ │ │ │ -
23namespace Dune
│ │ │ │ -
24{
│ │ │ │ -
40 template<class D, class R, int dim, bool faceDual=false>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
42 {
│ │ │ │ -
43 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
48
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
52 {
│ │ │ │ -
53 if (faceDual)
│ │ │ │ -
54 setupFaceDualCoefficients();
│ │ │ │ -
55 else
│ │ │ │ -
56 setupDualCoefficients();
│ │ │ │ -
57 }
│ │ │ │ -
│ │ │ │ -
58
│ │ │ │ -
│ │ │ │ -
61 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
62 {
│ │ │ │ -
63 return basis;
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
69 {
│ │ │ │ -
70 return coefficients;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
76 {
│ │ │ │ -
77 return interpolation;
│ │ │ │ -
78 }
│ │ │ │ -
│ │ │ │ -
79
│ │ │ │ -
│ │ │ │ -
81 unsigned int size () const
│ │ │ │ -
82 {
│ │ │ │ -
83 return basis.size();
│ │ │ │ -
84 }
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
│ │ │ │ -
88 static constexpr GeometryType type ()
│ │ │ │ -
89 {
│ │ │ │ -
90 return GeometryTypes::cube(dim);
│ │ │ │ -
91 }
│ │ │ │ -
│ │ │ │ -
92
│ │ │ │ -
93 private:
│ │ │ │ -
95 void setupFaceDualCoefficients();
│ │ │ │ -
96
│ │ │ │ -
98 void setupDualCoefficients();
│ │ │ │ -
99
│ │ │ │ - │ │ │ │ -
101 DualQ1LocalCoefficients<dim> coefficients;
│ │ │ │ - │ │ │ │ -
103 };
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
105 template<class D, class R, int dim, bool faceDual>
│ │ │ │ -
106 void DualQ1LocalFiniteElement<D,R,dim,faceDual>::setupDualCoefficients()
│ │ │ │ -
107 {
│ │ │ │ -
108
│ │ │ │ -
109 const int size = 1 <<dim;
│ │ │ │ -
110 std::array<Dune::FieldVector<R, size>, size> coeffs;
│ │ │ │ -
111
│ │ │ │ -
112 // dual basis functions are linear combinations of Lagrange elements
│ │ │ │ -
113 // compute these coefficients here because the basis and the local interpolation needs them
│ │ │ │ -
114 const auto& quad = Dune::QuadratureRules<D,dim>::rule(type(), 2*dim);
│ │ │ │ -
115
│ │ │ │ -
116 // assemble mass matrix on the reference element
│ │ │ │ -
117 Dune::FieldMatrix<R, size, size> massMat;
│ │ │ │ -
118 massMat = 0;
│ │ │ │ -
119
│ │ │ │ -
120 // and the integrals of the lagrange shape functions
│ │ │ │ -
121 std::vector<Dune::FieldVector<R,1> > integral(size);
│ │ │ │ -
122 for (int i=0; i<size; i++)
│ │ │ │ -
123 integral[i] = 0;
│ │ │ │ -
124
│ │ │ │ -
125 Dune::Impl::LagrangeCubeLocalBasis<D,R,dim,1> q1Basis;
│ │ │ │ -
126 for(size_t pt=0; pt<quad.size(); pt++) {
│ │ │ │ -
127
│ │ │ │ -
128 const Dune::FieldVector<D ,dim>& pos = quad[pt].position();
│ │ │ │ -
129 std::vector<Dune::FieldVector<R,1> > q1Values(size);
│ │ │ │ -
130 q1Basis.evaluateFunction(pos,q1Values);
│ │ │ │ -
131
│ │ │ │ -
132 D weight = quad[pt].weight();
│ │ │ │ -
133
│ │ │ │ -
134 for (int k=0; k<size; k++) {
│ │ │ │ -
135 integral[k] += q1Values[k]*weight;
│ │ │ │ -
136
│ │ │ │ -
137 for (int l=0; l<=k; l++)
│ │ │ │ -
138 massMat[k][l] += weight*(q1Values[k]*q1Values[l]);
│ │ │ │ -
139 }
│ │ │ │ -
140 }
│ │ │ │ -
141
│ │ │ │ -
142 // make matrix symmetric
│ │ │ │ -
143 for (int i=0; i<size-1; i++)
│ │ │ │ -
144 for (int j=i+1; j<size; j++)
│ │ │ │ -
145 massMat[i][j] = massMat[j][i];
│ │ │ │ -
146
│ │ │ │ -
147 //solve for the coefficients
│ │ │ │ -
148
│ │ │ │ -
149 for (int i=0; i<size; i++) {
│ │ │ │ -
150
│ │ │ │ -
151 Dune::FieldVector<R, size> rhs(0);
│ │ │ │ -
152 rhs[i] = integral[i];
│ │ │ │ -
153
│ │ │ │ -
154 coeffs[i] = 0;
│ │ │ │ -
155 massMat.solve(coeffs[i] ,rhs);
│ │ │ │ -
156
│ │ │ │ -
157 }
│ │ │ │ -
158
│ │ │ │ -
159 basis.setCoefficients(coeffs);
│ │ │ │ -
160 interpolation.setCoefficients(coeffs);
│ │ │ │ -
161 }
│ │ │ │ -
162
│ │ │ │ -
163 template<class D, class R, int dim, bool faceDual>
│ │ │ │ -
164 void DualQ1LocalFiniteElement<D,R,dim,faceDual>::setupFaceDualCoefficients()
│ │ │ │ -
165 {
│ │ │ │ -
166
│ │ │ │ -
167 const int size = 1 <<dim;
│ │ │ │ -
168 std::array<Dune::FieldVector<R, size>, size> coeffs;
│ │ │ │ -
169
│ │ │ │ -
170 // dual basis functions are linear combinations of Lagrange elements
│ │ │ │ -
171 Dune::Impl::LagrangeCubeLocalBasis<D,R,dim,1> q1Basis;
│ │ │ │ -
172
│ │ │ │ -
173 const auto& refElement = Dune::ReferenceElements<D,dim>::general(type());
│ │ │ │ -
174
│ │ │ │ -
175 // loop over faces
│ │ │ │ -
176 for (int i=0; i<refElement.size(1);i++) {
│ │ │ │ -
177
│ │ │ │ -
178 const auto& quad = Dune::QuadratureRules<D,dim-1>::rule(refElement.type(i,1),2*dim);
│ │ │ │ -
179
│ │ │ │ -
180 // for each face assemble the mass matrix over the face of all
│ │ │ │ -
181 // non-vanishing basis functions,
│ │ │ │ -
182 // for cubes refElement.size(i,1,dim)=size/2
│ │ │ │ -
183 Dune::FieldMatrix<R, size/2, size/2> massMat;
│ │ │ │ -
184 massMat = 0;
│ │ │ │ -
185
│ │ │ │ -
186 // get geometry
│ │ │ │ -
187 const auto& geometry = refElement.template geometry<1>(i);
│ │ │ │ -
188
│ │ │ │ -
189 // and the integrals of the lagrange shape functions
│ │ │ │ -
190 std::vector<Dune::FieldVector<R,1> > integral(size/2);
│ │ │ │ -
191 for (int k=0; k<size/2; k++)
│ │ │ │ -
192 integral[k] = 0;
│ │ │ │ -
193
│ │ │ │ -
194 for(size_t pt=0; pt<quad.size(); pt++) {
│ │ │ │ -
195
│ │ │ │ -
196 const auto& pos = quad[pt].position();
│ │ │ │ -
197 const auto& elementPos = geometry.global(pos);
│ │ │ │ -
198
│ │ │ │ -
199 std::vector<Dune::FieldVector<R,1> > q1Values(size);
│ │ │ │ -
200 q1Basis.evaluateFunction(elementPos,q1Values);
│ │ │ │ -
201
│ │ │ │ -
202 D weight = quad[pt].weight();
│ │ │ │ -
203
│ │ │ │ -
204 for (int k=0; k<refElement.size(i,1,dim); k++) {
│ │ │ │ -
205 int row = refElement.subEntity(i,1,k,dim);
│ │ │ │ -
206 integral[k] += q1Values[row]*weight;
│ │ │ │ -
207
│ │ │ │ -
208 for (int l=0; l<refElement.size(i,1,dim); l++) {
│ │ │ │ -
209 int col = refElement.subEntity(i,1,l,dim);
│ │ │ │ -
210 massMat[k][l] += weight*(q1Values[row]*q1Values[col]);
│ │ │ │ -
211 }
│ │ │ │ -
212 }
│ │ │ │ -
213 }
│ │ │ │ -
214
│ │ │ │ -
215 // solve for the coefficients
│ │ │ │ -
216 // note that we possibly overwrite coefficients for neighbouring faces
│ │ │ │ -
217 // this is okay since the coefficients are symmetric
│ │ │ │ -
218 for (int l=0; l<refElement.size(i,1,dim); l++) {
│ │ │ │ -
219
│ │ │ │ -
220 int row = refElement.subEntity(i,1,l,dim);
│ │ │ │ -
221 Dune::FieldVector<R, size/2> rhs(0);
│ │ │ │ -
222 rhs[l] = integral[l];
│ │ │ │ -
223
│ │ │ │ -
224 Dune::FieldVector<R, size/2> x(0);
│ │ │ │ -
225 massMat.solve(x ,rhs);
│ │ │ │ -
226
│ │ │ │ -
227 for (int k=0; k<refElement.size(i,1,dim); k++) {
│ │ │ │ -
228 int col = refElement.subEntity(i,1,k,dim);
│ │ │ │ -
229 coeffs[row][col]=x[k];
│ │ │ │ -
230 }
│ │ │ │ -
231 }
│ │ │ │ -
232 }
│ │ │ │ -
233
│ │ │ │ -
234 basis.setCoefficients(coeffs);
│ │ │ │ -
235 interpolation.setCoefficients(coeffs);
│ │ │ │ -
236 }
│ │ │ │ -
237}
│ │ │ │ -
238#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ +
│ │ │ │ +
28 P0LocalCoefficients () : index(0,0,0)
│ │ │ │ +
29 {}
│ │ │ │ +
│ │ │ │ +
30
│ │ │ │ +
│ │ │ │ +
32 std::size_t size () const
│ │ │ │ +
33 {
│ │ │ │ +
34 return 1;
│ │ │ │ +
35 }
│ │ │ │ +
│ │ │ │ +
36
│ │ │ │ +
│ │ │ │ +
38 const LocalKey& localKey ([[maybe_unused]] std::size_t i) const
│ │ │ │ +
39 {
│ │ │ │ +
40 return index;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
43 private:
│ │ │ │ +
44 LocalKey index;
│ │ │ │ +
45 };
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47}
│ │ │ │ +
48#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
The local dual Q1 finite element on cubes.
Definition dualq1.hh:42
│ │ │ │ -
LocalFiniteElementTraits< DualQ1LocalBasis< D, R, dim >, DualQ1LocalCoefficients< dim >, DualQ1LocalInterpolation< dim, DualQ1LocalBasis< D, R, dim > > > Traits
Definition dualq1.hh:47
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition dualq1.hh:81
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition dualq1.hh:75
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition dualq1.hh:61
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition dualq1.hh:68
│ │ │ │ -
DualQ1LocalFiniteElement()
Definition dualq1.hh:51
│ │ │ │ -
static constexpr GeometryType type()
Definition dualq1.hh:88
│ │ │ │ -
Dual Lagrange shape functions of order 1 on the reference cube.
Definition dualq1localbasis.hh:30
│ │ │ │ -
Layout map for dual Q1 elements.
Definition dualq1localcoefficients.hh:26
│ │ │ │ -
Definition dualq1localinterpolation.hh:22
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition p0localcoefficients.hh:25
│ │ │ │ +
P0LocalCoefficients()
Standard constructor.
Definition p0localcoefficients.hh:28
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition p0localcoefficients.hh:38
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition p0localcoefficients.hh:32
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,278 +1,71 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _d_u_a_l_m_o_r_t_a_r_b_a_s_i_s │ │ │ │ │ -dualq1.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ +p0localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_DUAL_Q1_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_P0LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ 16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -19#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -20#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -21#include "_d_u_a_l_q_1_/_d_u_a_l_q_1_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -22 │ │ │ │ │ -23namespace _D_u_n_e │ │ │ │ │ -24{ │ │ │ │ │ -40 template │ │ │ │ │ -_4_1 class _D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -42 { │ │ │ │ │ -43 public: │ │ │ │ │ -46 typedef │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>,_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>, │ │ │ │ │ -_4_7 _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > > _T_r_a_i_t_s; │ │ │ │ │ -48 │ │ │ │ │ -_5_1 _D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -52 { │ │ │ │ │ -53 if (faceDual) │ │ │ │ │ -54 setupFaceDualCoefficients(); │ │ │ │ │ -55 else │ │ │ │ │ -56 setupDualCoefficients(); │ │ │ │ │ -57 } │ │ │ │ │ -58 │ │ │ │ │ -_6_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -62 { │ │ │ │ │ -63 return basis; │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -69 { │ │ │ │ │ -70 return coefficients; │ │ │ │ │ -71 } │ │ │ │ │ -72 │ │ │ │ │ -_7_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -76 { │ │ │ │ │ -77 return interpolation; │ │ │ │ │ -78 } │ │ │ │ │ -79 │ │ │ │ │ -_8_1 unsigned int _s_i_z_e () const │ │ │ │ │ -82 { │ │ │ │ │ -83 return basis.size(); │ │ │ │ │ -84 } │ │ │ │ │ -85 │ │ │ │ │ -_8_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -89 { │ │ │ │ │ -90 return GeometryTypes::cube(dim); │ │ │ │ │ -91 } │ │ │ │ │ -92 │ │ │ │ │ -93 private: │ │ │ │ │ -95 void setupFaceDualCoefficients(); │ │ │ │ │ -96 │ │ │ │ │ -98 void setupDualCoefficients(); │ │ │ │ │ -99 │ │ │ │ │ -100 _D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ -101 _D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_> coefficients; │ │ │ │ │ -102 _D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > interpolation; │ │ │ │ │ -103 }; │ │ │ │ │ -104 │ │ │ │ │ -105 template │ │ │ │ │ -106 void DualQ1LocalFiniteElement::setupDualCoefficients() │ │ │ │ │ -107 { │ │ │ │ │ -108 │ │ │ │ │ -109 const int size = 1 <, size> coeffs; │ │ │ │ │ -111 │ │ │ │ │ -112 // dual basis functions are linear combinations of Lagrange elements │ │ │ │ │ -113 // compute these coefficients here because the basis and the local │ │ │ │ │ -interpolation needs them │ │ │ │ │ -114 const auto& quad = Dune::QuadratureRules::rule(type(), 2*dim); │ │ │ │ │ -115 │ │ │ │ │ -116 // assemble mass matrix on the reference element │ │ │ │ │ -117 Dune::FieldMatrix massMat; │ │ │ │ │ -118 massMat = 0; │ │ │ │ │ -119 │ │ │ │ │ -120 // and the integrals of the lagrange shape functions │ │ │ │ │ -121 std::vector > integral(size); │ │ │ │ │ -122 for (int i=0; i q1Basis; │ │ │ │ │ -126 for(size_t pt=0; pt& pos = quad[pt].position(); │ │ │ │ │ -129 std::vector > q1Values(size); │ │ │ │ │ -130 q1Basis.evaluateFunction(pos,q1Values); │ │ │ │ │ -131 │ │ │ │ │ -132 D weight = quad[pt].weight(); │ │ │ │ │ -133 │ │ │ │ │ -134 for (int k=0; k rhs(0); │ │ │ │ │ -152 rhs[i] = integral[i]; │ │ │ │ │ -153 │ │ │ │ │ -154 coeffs[i] = 0; │ │ │ │ │ -155 massMat.solve(coeffs[i] ,rhs); │ │ │ │ │ -156 │ │ │ │ │ -157 } │ │ │ │ │ -158 │ │ │ │ │ -159 basis.setCoefficients(coeffs); │ │ │ │ │ -160 interpolation.setCoefficients(coeffs); │ │ │ │ │ -161 } │ │ │ │ │ -162 │ │ │ │ │ -163 template │ │ │ │ │ -164 void DualQ1LocalFiniteElement::setupFaceDualCoefficients │ │ │ │ │ -() │ │ │ │ │ -165 { │ │ │ │ │ -166 │ │ │ │ │ -167 const int size = 1 <, size> coeffs; │ │ │ │ │ -169 │ │ │ │ │ -170 // dual basis functions are linear combinations of Lagrange elements │ │ │ │ │ -171 Dune::Impl::LagrangeCubeLocalBasis q1Basis; │ │ │ │ │ -172 │ │ │ │ │ -173 const auto& refElement = Dune::ReferenceElements::general(type()); │ │ │ │ │ -174 │ │ │ │ │ -175 // loop over faces │ │ │ │ │ -176 for (int i=0; i::rule(refElement.type │ │ │ │ │ -(i,1),2*dim); │ │ │ │ │ -179 │ │ │ │ │ -180 // for each face assemble the mass matrix over the face of all │ │ │ │ │ -181 // non-vanishing basis functions, │ │ │ │ │ -182 // for cubes refElement.size(i,1,dim)=size/2 │ │ │ │ │ -183 Dune::FieldMatrix massMat; │ │ │ │ │ -184 massMat = 0; │ │ │ │ │ -185 │ │ │ │ │ -186 // get geometry │ │ │ │ │ -187 const auto& geometry = refElement.template geometry<1>(i); │ │ │ │ │ -188 │ │ │ │ │ -189 // and the integrals of the lagrange shape functions │ │ │ │ │ -190 std::vector > integral(size/2); │ │ │ │ │ -191 for (int k=0; k > q1Values(size); │ │ │ │ │ -200 q1Basis.evaluateFunction(elementPos,q1Values); │ │ │ │ │ -201 │ │ │ │ │ -202 D weight = quad[pt].weight(); │ │ │ │ │ -203 │ │ │ │ │ -204 for (int k=0; k rhs(0); │ │ │ │ │ -222 rhs[l] = integral[l]; │ │ │ │ │ -223 │ │ │ │ │ -224 Dune::FieldVector x(0); │ │ │ │ │ -225 massMat.solve(x ,rhs); │ │ │ │ │ -226 │ │ │ │ │ -227 for (int k=0; k, │ │ │ │ │ -DualQ1LocalCoefficients< dim >, DualQ1LocalInterpolation< dim, │ │ │ │ │ -DualQ1LocalBasis< D, R, dim > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:81 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DualQ1LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn dualq1.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Dual Lagrange shape functions of order 1 on the reference cube. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for dual Q1 elements. │ │ │ │ │ -DDeeffiinniittiioonn dualq1localcoefficients.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_D_u_a_l_Q_1_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn dualq1localinterpolation.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn p0localcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +P0LocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn p0localcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn p0localcoefficients.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn p0localcoefficients.hh:32 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: p0localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,32 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomiallocalcoefficients.hh File Reference
│ │ │ │ +
p0localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "../common/localkey.hh"
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MonomialLocalCoefficients< static_size >
class  Dune::P0LocalInterpolation< LB >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,21 +1,21 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomiallocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +p0localinterpolation.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h" │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _s_t_a_t_i_c___s_i_z_e_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00425_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: p0localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,77 +70,72 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalcoefficients.hh
│ │ │ │ +
p0localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_P0LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <cstddef>
│ │ │ │ -
9#include <vector>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9#include <dune/geometry/referenceelements.hh>
│ │ │ │
10
│ │ │ │ -
11#include "../common/localkey.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
23 template<int static_size>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
25 {
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 : index(static_size, LocalKey(0,0,0))
│ │ │ │ -
30 {
│ │ │ │ -
31 for(int i = 0; i < static_size; ++i)
│ │ │ │ -
32 index[i].index(i);
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
14
│ │ │ │ +
18 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
20 {
│ │ │ │ +
21 public:
│ │ │ │ +
│ │ │ │ +
22 P0LocalInterpolation (const GeometryType& gt) : gt_(gt)
│ │ │ │ +
23 {}
│ │ │ │ +
│ │ │ │ +
24
│ │ │ │ +
26 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
27 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
28 {
│ │ │ │ +
29 typedef typename LB::Traits::DomainType DomainType;
│ │ │ │ +
30 typedef typename LB::Traits::DomainFieldType DF;
│ │ │ │ +
31 const int dim=LB::Traits::dimDomain;
│ │ │ │ +
32
│ │ │ │ +
33 DomainType x = Dune::ReferenceElements<DF,dim>::general(gt_).position(0,0);
│ │ │ │
34
│ │ │ │ -
│ │ │ │ -
36 std::size_t size () const
│ │ │ │ -
37 {
│ │ │ │ -
38 return static_size;
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ -
42 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
43 {
│ │ │ │ -
44 return index[i];
│ │ │ │ -
45 }
│ │ │ │ -
│ │ │ │ -
46
│ │ │ │ -
47 private:
│ │ │ │ -
48 std::vector<LocalKey> index;
│ │ │ │ -
49 };
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
51}
│ │ │ │ -
52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH
│ │ │ │ +
35 out.resize(1);
│ │ │ │ +
36 out[0] = f(x);
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
39 private:
│ │ │ │ +
40 GeometryType gt_;
│ │ │ │ +
41 };
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
43}
│ │ │ │ +
44
│ │ │ │ +
45#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Definition monomiallocalcoefficients.hh:25
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition monomiallocalcoefficients.hh:36
│ │ │ │ -
MonomialLocalCoefficients()
Standard constructor.
Definition monomiallocalcoefficients.hh:28
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition monomiallocalcoefficients.hh:42
│ │ │ │ +
Definition p0localinterpolation.hh:20
│ │ │ │ +
P0LocalInterpolation(const GeometryType &gt)
Definition p0localinterpolation.hh:22
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
determine coefficients interpolating a given function
Definition p0localinterpolation.hh:27
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,73 +1,65 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalcoefficients.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _p_0 │ │ │ │ │ +p0localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_P0LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include "../common/localkey.hh" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -23 template │ │ │ │ │ -_2_4 class _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -25 { │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ -29 : index(static_size, _L_o_c_a_l_K_e_y(0,0,0)) │ │ │ │ │ -30 { │ │ │ │ │ -31 for(int i = 0; i < static_size; ++i) │ │ │ │ │ -32 index[i].index(i); │ │ │ │ │ -33 } │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +14 │ │ │ │ │ +18 template │ │ │ │ │ +_1_9 class _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +20 { │ │ │ │ │ +21 public: │ │ │ │ │ +_2_2 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (const GeometryType& gt) : gt_(gt) │ │ │ │ │ +23 {} │ │ │ │ │ +24 │ │ │ │ │ +26 template │ │ │ │ │ +_2_7 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +28 { │ │ │ │ │ +29 typedef typename LB::Traits::DomainType DomainType; │ │ │ │ │ +30 typedef typename LB::Traits::DomainFieldType DF; │ │ │ │ │ +31 const int dim=LB::Traits::dimDomain; │ │ │ │ │ +32 │ │ │ │ │ +33 DomainType x = Dune::ReferenceElements::general(gt_).position(0,0); │ │ │ │ │ 34 │ │ │ │ │ -_3_6 std::size_t _s_i_z_e () const │ │ │ │ │ -37 { │ │ │ │ │ -38 return static_size; │ │ │ │ │ -39 } │ │ │ │ │ -40 │ │ │ │ │ -_4_2 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ -43 { │ │ │ │ │ -44 return index[i]; │ │ │ │ │ -45 } │ │ │ │ │ -46 │ │ │ │ │ -47 private: │ │ │ │ │ -48 std::vector index; │ │ │ │ │ -49 }; │ │ │ │ │ -50 │ │ │ │ │ -51} │ │ │ │ │ -52#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALCOEFFICIENTS_HH │ │ │ │ │ +35 out.resize(1); │ │ │ │ │ +36 out[0] = f(x); │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +39 private: │ │ │ │ │ +40 GeometryType gt_; │ │ │ │ │ +41 }; │ │ │ │ │ +42 │ │ │ │ │ +43} │ │ │ │ │ +44 │ │ │ │ │ +45#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalcoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalcoefficients.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -MonomialLocalCoefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalcoefficients.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn p0localinterpolation.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +P0LocalInterpolation(const GeometryType >) │ │ │ │ │ +DDeeffiinniittiioonn p0localinterpolation.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +DDeeffiinniittiioonn p0localinterpolation.hh:27 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: cache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,55 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomiallocalbasis.hh File Reference
│ │ │ │ +
cache.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include "../common/localbasis.hh"
│ │ │ │ +
#include <map>
│ │ │ │ +#include <optional>
│ │ │ │ +#include <type_traits>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/typeindex.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/equidistantpoints.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangelfecache.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MonomImp::EvalAccess< Traits >
 Access output vector of evaluateFunction() and evaluate() More...
class  Dune::DynamicLagrangeLocalFiniteElementCache< Domain, Range, dim >
 A cache that stores Lagrange finite elements for the given dimension and order. More...
 
class  Dune::MonomImp::JacobianAccess< Traits >
 Access output vector of evaluateJacobian() More...
class  Dune::StaticLagrangeLocalFiniteElementCache< id, Domain, Range, dim, order >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order for the case that the GeometryType is fixed and has the given Id. More...
 
struct  Dune::MonomImp::Evaluate< Traits, c >
 
struct  Dune::MonomImp::Evaluate< Traits, 1 >
 
class  Dune::MonomialLocalBasis< D, R, d, p >
class  Dune::StaticLagrangeLocalFiniteElementCache< GeometryType::Id(~0u), Domain, Range, dim, order >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
namespace  Dune::MonomImp
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,36 +1,43 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomiallocalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_._._/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +cache.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_ _T_r_a_i_t_s_ _> │ │ │ │ │ -  Access output vector of evaluateFunction() and evaluate() _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_<_ _T_r_a_i_t_s_ _> │ │ │ │ │ -  Access output vector of evaluateJacobian() _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _c_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _1_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_,_ _p_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_ _> │ │ │ │ │ +  A cache that stores Lagrange finite elements for the given dimension │ │ │ │ │ + and order. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _i_d_,_ _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_, │ │ │ │ │ + _o_r_d_e_r_ _> │ │ │ │ │ + A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ +  the given dimension and order for the case that the GeometryType is │ │ │ │ │ + fixed and has the given Id. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _G_e_o_m_e_t_r_y_T_y_p_e_:_:_I_d_(_~_0_u_)_, │ │ │ │ │ + _D_o_m_a_i_n_,_ _R_a_n_g_e_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ +  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ + the given dimension and order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -namespace   _D_u_n_e_:_:_M_o_n_o_m_I_m_p │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00428_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalbasis.hh Source File │ │ │ │ +dune-localfunctions: cache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,304 +70,146 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalbasis.hh
│ │ │ │ +
cache.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <cassert>
│ │ │ │ -
10#include <numeric>
│ │ │ │ +
8#include <map>
│ │ │ │ +
9#include <optional>
│ │ │ │ +
10#include <type_traits>
│ │ │ │
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13#include <dune/common/math.hh>
│ │ │ │ +
12#include <dune/geometry/type.hh>
│ │ │ │ +
13#include <dune/geometry/typeindex.hh>
│ │ │ │
14
│ │ │ │ -
15#include "../common/localbasis.hh"
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
│ │ │ │ -
19 namespace MonomImp
│ │ │ │ -
20 {
│ │ │ │ -
22 template <typename Traits>
│ │ │ │ -
│ │ │ │ -
23 class EvalAccess {
│ │ │ │ -
24 std::vector<typename Traits::RangeType> &out;
│ │ │ │ -
25#ifndef NDEBUG
│ │ │ │ -
26 unsigned int first_unused_index;
│ │ │ │ -
27#endif
│ │ │ │ -
28
│ │ │ │ -
29 public:
│ │ │ │ -
│ │ │ │ -
30 EvalAccess(std::vector<typename Traits::RangeType> &out_)
│ │ │ │ -
31 : out(out_)
│ │ │ │ -
32#ifndef NDEBUG
│ │ │ │ -
33 , first_unused_index(0)
│ │ │ │ -
34#endif
│ │ │ │ -
35 { }
│ │ │ │ -
│ │ │ │ -
36#ifndef NDEBUG
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 assert(first_unused_index == out.size());
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40#endif
│ │ │ │ -
│ │ │ │ -
41 typename Traits::RangeFieldType &operator[](unsigned int index)
│ │ │ │ -
42 {
│ │ │ │ -
43 assert(index < out.size());
│ │ │ │ -
44#ifndef NDEBUG
│ │ │ │ -
45 if(first_unused_index <= index)
│ │ │ │ -
46 first_unused_index = index+1;
│ │ │ │ -
47#endif
│ │ │ │ -
48 return out[index][0];
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50 };
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
53 template <typename Traits>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 std::vector<typename Traits::JacobianType> &out;
│ │ │ │ -
56 unsigned int row;
│ │ │ │ -
57#ifndef NDEBUG
│ │ │ │ -
58 unsigned int first_unused_index;
│ │ │ │ -
59#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
22
│ │ │ │ +
23
│ │ │ │ +
24namespace Dune {
│ │ │ │ +
25
│ │ │ │ +
37template <class Domain, class Range, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39{
│ │ │ │ +
40public:
│ │ │ │ + │ │ │ │ +
42
│ │ │ │ +
│ │ │ │ +
44 explicit DynamicLagrangeLocalFiniteElementCache (unsigned int order)
│ │ │ │ +
45 : order_(order)
│ │ │ │ +
46 , data_()
│ │ │ │ +
47 {}
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ +
55 const FiniteElementType& get (GeometryType type) const
│ │ │ │ +
56 {
│ │ │ │ +
57 auto [it,_] = data_.try_emplace(type,type,order_);
│ │ │ │ +
58 return it->second;
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │
60
│ │ │ │ -
61 public:
│ │ │ │ -
│ │ │ │ -
62 JacobianAccess(std::vector<typename Traits::JacobianType> &out_,
│ │ │ │ -
63 unsigned int row_)
│ │ │ │ -
64 : out(out_), row(row_)
│ │ │ │ -
65#ifndef NDEBUG
│ │ │ │ -
66 , first_unused_index(0)
│ │ │ │ -
67#endif
│ │ │ │ -
68 { }
│ │ │ │ -
│ │ │ │ -
69#ifndef NDEBUG
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
71 assert(first_unused_index == out.size());
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73#endif
│ │ │ │ -
│ │ │ │ -
74 typename Traits::RangeFieldType &operator[](unsigned int index)
│ │ │ │ -
75 {
│ │ │ │ -
76 assert(index < out.size());
│ │ │ │ -
77#ifndef NDEBUG
│ │ │ │ -
78 if(first_unused_index <= index)
│ │ │ │ -
79 first_unused_index = index+1;
│ │ │ │ -
80#endif
│ │ │ │ -
81 return out[index][0][row];
│ │ │ │ -
82 }
│ │ │ │ -
│ │ │ │ -
83 };
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
97 template <typename Traits, int c>
│ │ │ │ -
│ │ │ │ -
98 struct Evaluate
│ │ │ │ -
99 {
│ │ │ │ -
101 constexpr static int d = Traits::dimDomain - c;
│ │ │ │ -
102
│ │ │ │ -
109 template <typename Access>
│ │ │ │ -
│ │ │ │ -
110 static void eval (
│ │ │ │ -
111 const typename Traits::DomainType &in,
│ │ │ │ -
114 const std::array<unsigned int, Traits::dimDomain> &derivatives,
│ │ │ │ -
117 typename Traits::RangeFieldType prod,
│ │ │ │ -
119 int bound,
│ │ │ │ -
121 int& index,
│ │ │ │ -
123 Access &access)
│ │ │ │ -
124 {
│ │ │ │ -
125 // start with the highest exponent for this dimension, then work down
│ │ │ │ -
126 for (int e = bound; e >= 0; --e)
│ │ │ │ -
127 {
│ │ │ │ -
128 // the rest of the available exponents, to be used by the other
│ │ │ │ -
129 // dimensions
│ │ │ │ -
130 int newbound = bound - e;
│ │ │ │ -
131 if(e < (int)derivatives[d])
│ │ │ │ - │ │ │ │ -
133 eval(in, derivatives, 0, newbound, index, access);
│ │ │ │ -
134 else {
│ │ │ │ -
135 int coeff = 1;
│ │ │ │ -
136 for(int i = e - derivatives[d] + 1; i <= e; ++i)
│ │ │ │ -
137 coeff *= i;
│ │ │ │ -
138 // call the evaluator for the next dimension
│ │ │ │ - │ │ │ │ -
140 eval( // pass the coordinate and the derivatives unchanged
│ │ │ │ -
141 in, derivatives,
│ │ │ │ -
142 // also pass the product accumulated so far, but also
│ │ │ │ -
143 // include the current dimension
│ │ │ │ -
144 prod * power(in[d], e-derivatives[d]) * coeff,
│ │ │ │ -
145 // pass the number of remaining exponents to the next
│ │ │ │ -
146 // dimension
│ │ │ │ -
147 newbound,
│ │ │ │ -
148 // pass the next index to fill and the output access
│ │ │ │ -
149 // wrapper
│ │ │ │ -
150 index, access);
│ │ │ │ -
151 }
│ │ │ │ -
152 }
│ │ │ │ -
153 }
│ │ │ │ -
│ │ │ │ -
154 };
│ │ │ │ -
│ │ │ │ -
155
│ │ │ │ -
160 template <typename Traits>
│ │ │ │ -
│ │ │ │ -
161 struct Evaluate<Traits, 1>
│ │ │ │ -
162 {
│ │ │ │ -
163 constexpr static int d = Traits::dimDomain-1;
│ │ │ │ -
165 template <typename Access>
│ │ │ │ -
│ │ │ │ -
166 static void eval (const typename Traits::DomainType &in,
│ │ │ │ -
167 const std::array<unsigned int, Traits::dimDomain> &derivatives,
│ │ │ │ -
168 typename Traits::RangeFieldType prod,
│ │ │ │ -
169 int bound, int& index, Access &access)
│ │ │ │ -
170 {
│ │ │ │ -
171 if(bound < (int)derivatives[d])
│ │ │ │ -
172 prod = 0;
│ │ │ │ -
173 else {
│ │ │ │ -
174 int coeff = 1;
│ │ │ │ -
175 for(int i = bound - derivatives[d] + 1; i <= bound; ++i)
│ │ │ │ -
176 coeff *= i;
│ │ │ │ -
177 prod *= power(in[d], bound-derivatives[d]) * coeff;
│ │ │ │ -
178 }
│ │ │ │ -
179 access[index] = prod;
│ │ │ │ -
180 ++index;
│ │ │ │ -
181 }
│ │ │ │ -
│ │ │ │ -
182 };
│ │ │ │ -
│ │ │ │ -
183
│ │ │ │ -
184 } //namespace MonomImp
│ │ │ │ -
│ │ │ │ -
185
│ │ │ │ -
200 template<class D, class R, unsigned int d, unsigned int p>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
202 {
│ │ │ │ -
203 // Helper: Number of shape functions for a k-th order element in dimension dd
│ │ │ │ -
204 static constexpr unsigned int size (int dd, int k)
│ │ │ │ -
205 {
│ │ │ │ -
206 if (dd==0 || k==0)
│ │ │ │ -
207 return 1;
│ │ │ │ -
208 return size(dd,k-1) + size(dd-1,k);
│ │ │ │ -
209 }
│ │ │ │ -
210
│ │ │ │ -
211 public:
│ │ │ │ -
213 typedef LocalBasisTraits<D,d,Dune::FieldVector<D,d>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
214 Dune::FieldMatrix<R,1,d> > Traits;
│ │ │ │ -
215
│ │ │ │ -
│ │ │ │ -
217 static constexpr unsigned int size ()
│ │ │ │ -
218 {
│ │ │ │ -
219 return size(d,p);
│ │ │ │ -
220 }
│ │ │ │ -
│ │ │ │ -
221
│ │ │ │ -
│ │ │ │ -
223 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
224 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
225 {
│ │ │ │ -
226 out.resize(size());
│ │ │ │ -
227 int index = 0;
│ │ │ │ -
228 std::array<unsigned int, d> derivatives;
│ │ │ │ -
229 std::fill(derivatives.begin(), derivatives.end(), 0);
│ │ │ │ - │ │ │ │ -
231 for (unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ -
232 MonomImp::Evaluate<Traits, d>::eval(in, derivatives, 1, lp, index, access);
│ │ │ │ -
233 }
│ │ │ │ -
│ │ │ │ -
234
│ │ │ │ -
│ │ │ │ -
240 inline void partial(const std::array<unsigned int,d>& order,
│ │ │ │ -
241 const typename Traits::DomainType& in,
│ │ │ │ -
242 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
243 {
│ │ │ │ -
244 out.resize(size());
│ │ │ │ -
245 int index = 0;
│ │ │ │ - │ │ │ │ -
247 for (unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ -
248 MonomImp::Evaluate<Traits, d>::eval(in, order, 1, lp, index, access);
│ │ │ │ -
249 }
│ │ │ │ -
│ │ │ │ -
250
│ │ │ │ -
252 inline void
│ │ │ │ -
│ │ │ │ -
253 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
254 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
255 {
│ │ │ │ -
256 out.resize(size());
│ │ │ │ -
257 std::array<unsigned int, d> derivatives;
│ │ │ │ -
258 for(unsigned int i = 0; i < d; ++i)
│ │ │ │ -
259 derivatives[i] = 0;
│ │ │ │ -
260 for(unsigned int i = 0; i < d; ++i)
│ │ │ │ -
261 {
│ │ │ │ -
262 derivatives[i] = 1;
│ │ │ │ -
263 int index = 0;
│ │ │ │ - │ │ │ │ -
265 for(unsigned int lp = 0; lp <= p; ++lp)
│ │ │ │ -
266 MonomImp::Evaluate<Traits, d>::eval(in, derivatives, 1, lp, index, access);
│ │ │ │ -
267 derivatives[i] = 0;
│ │ │ │ -
268 }
│ │ │ │ -
269 }
│ │ │ │ -
│ │ │ │ -
270
│ │ │ │ -
│ │ │ │ -
272 unsigned int order () const
│ │ │ │ -
273 {
│ │ │ │ -
274 return p;
│ │ │ │ -
275 }
│ │ │ │ -
│ │ │ │ -
276 };
│ │ │ │ -
│ │ │ │ -
277
│ │ │ │ -
278}
│ │ │ │ -
279
│ │ │ │ -
280#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH
│ │ │ │ +
61private:
│ │ │ │ +
62 unsigned int order_;
│ │ │ │ +
63 mutable std::map<GeometryType, FiniteElementType> data_;
│ │ │ │ +
64};
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66
│ │ │ │ +
78template <GeometryType::Id id, class Domain, class Range, std::size_t dim, std::size_t order>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
80{
│ │ │ │ +
81 struct UnknownToplogy {};
│ │ │ │ +
82
│ │ │ │ +
83 static constexpr bool isSimplex = GeometryType(id).isSimplex();
│ │ │ │ +
84 static constexpr bool isCube = GeometryType(id).isCube();
│ │ │ │ +
85 static constexpr bool isPrism = GeometryType(id).isPrism();
│ │ │ │ +
86 static constexpr bool isPyramid = GeometryType(id).isPyramid();
│ │ │ │ +
87
│ │ │ │ +
88public:
│ │ │ │ + │ │ │ │ +
90 = std::conditional_t<isSimplex, LagrangeSimplexLocalFiniteElement<Domain,Range,dim,order>,
│ │ │ │ +
91 std::conditional_t<isCube, LagrangeCubeLocalFiniteElement<Domain,Range,dim,order>,
│ │ │ │ +
92 std::conditional_t<isPrism, LagrangePrismLocalFiniteElement<Domain,Range,order>,
│ │ │ │ +
93 std::conditional_t<isPyramid, LagrangePyramidLocalFiniteElement<Domain,Range,order>, UnknownToplogy> > > >;
│ │ │ │ +
94
│ │ │ │ +
│ │ │ │ +
96 explicit StaticLagrangeLocalFiniteElementCache (std::integral_constant<std::size_t,order> = {})
│ │ │ │ +
97 {
│ │ │ │ +
98 lfe_.emplace();
│ │ │ │ +
99 }
│ │ │ │ +
│ │ │ │ +
100
│ │ │ │ +
│ │ │ │ +
102 const FiniteElementType& get ([[maybe_unused]] GeometryType type) const
│ │ │ │ +
103 {
│ │ │ │ +
104 assert(GeometryType::Id(type) == id);
│ │ │ │ +
105 assert(!!lfe_);
│ │ │ │ +
106 return *lfe_;
│ │ │ │ +
107 }
│ │ │ │ +
│ │ │ │ +
108
│ │ │ │ +
109private:
│ │ │ │ +
110 std::optional<FiniteElementType> lfe_{};
│ │ │ │ +
111};
│ │ │ │ +
│ │ │ │ +
112
│ │ │ │ +
113
│ │ │ │ +
127template <class Domain, class Range, std::size_t dim, std::size_t order>
│ │ │ │ +
│ │ │ │ +
128class StaticLagrangeLocalFiniteElementCache<GeometryType::Id(~0u), Domain, Range, dim, order>
│ │ │ │ +
129 : public LagrangeLocalFiniteElementCache<Domain,Range,dim,order>
│ │ │ │ +
130{
│ │ │ │ + │ │ │ │ +
132public:
│ │ │ │ +
133 using Base::Base;
│ │ │ │ +
134};
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
136} // namespace Dune
│ │ │ │ +
137
│ │ │ │ +
138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH
│ │ │ │ +
Convenience header that includes all implementations of Lagrange finite elements.
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Access output vector of evaluateFunction() and evaluate()
Definition monomiallocalbasis.hh:23
│ │ │ │ -
Traits::RangeFieldType & operator[](unsigned int index)
Definition monomiallocalbasis.hh:41
│ │ │ │ -
~EvalAccess()
Definition monomiallocalbasis.hh:37
│ │ │ │ -
EvalAccess(std::vector< typename Traits::RangeType > &out_)
Definition monomiallocalbasis.hh:30
│ │ │ │ -
Access output vector of evaluateJacobian()
Definition monomiallocalbasis.hh:54
│ │ │ │ -
~JacobianAccess()
Definition monomiallocalbasis.hh:70
│ │ │ │ -
Traits::RangeFieldType & operator[](unsigned int index)
Definition monomiallocalbasis.hh:74
│ │ │ │ -
JacobianAccess(std::vector< typename Traits::JacobianType > &out_, unsigned int row_)
Definition monomiallocalbasis.hh:62
│ │ │ │ -
Definition monomiallocalbasis.hh:99
│ │ │ │ -
static constexpr int d
The next dimension to try for factors.
Definition monomiallocalbasis.hh:101
│ │ │ │ -
static void eval(const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
Definition monomiallocalbasis.hh:110
│ │ │ │ -
static void eval(const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
Definition monomiallocalbasis.hh:166
│ │ │ │ -
Definition monomiallocalbasis.hh:202
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition monomiallocalbasis.hh:272
│ │ │ │ -
void partial(const std::array< unsigned int, d > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition monomiallocalbasis.hh:240
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition monomiallocalbasis.hh:253
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition monomiallocalbasis.hh:223
│ │ │ │ -
LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
export type traits for function signature
Definition monomiallocalbasis.hh:214
│ │ │ │ -
static constexpr unsigned int size()
Number of shape functions.
Definition monomiallocalbasis.hh:217
│ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
Lagrange local finite elements for a given set of interpolation points.
Definition lagrange.hh:66
│ │ │ │ +
A cache that stores Lagrange finite elements for the given dimension and order.
Definition cache.hh:39
│ │ │ │ +
DynamicLagrangeLocalFiniteElementCache(unsigned int order)
Construct an empty cache.
Definition cache.hh:44
│ │ │ │ +
const FiniteElementType & get(GeometryType type) const
Obtain the cached local finite-element.
Definition cache.hh:55
│ │ │ │ +
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order ...
Definition cache.hh:80
│ │ │ │ +
const FiniteElementType & get(GeometryType type) const
Obtain the cached local finite-element.
Definition cache.hh:102
│ │ │ │ +
std::conditional_t< isSimplex, LagrangeSimplexLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isCube, LagrangeCubeLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isPrism, LagrangePrismLocalFiniteElement< Domain, Range, order >, std::conditional_t< isPyramid, LagrangePyramidLocalFiniteElement< Domain, Range, order >, UnknownToplogy > > > > FiniteElementType
Definition cache.hh:93
│ │ │ │ +
StaticLagrangeLocalFiniteElementCache(std::integral_constant< std::size_t, order >={})
Construct the local-finite element for the order specified as template parameter.
Definition cache.hh:96
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,317 +1,167 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +cache.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ 14 │ │ │ │ │ -15#include "../common/localbasis.hh" │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -_1_9 namespace MonomImp │ │ │ │ │ -20 { │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _E_v_a_l_A_c_c_e_s_s { │ │ │ │ │ -24 std::vector &out; │ │ │ │ │ -25#ifndef NDEBUG │ │ │ │ │ -26 unsigned int first_unused_index; │ │ │ │ │ -27#endif │ │ │ │ │ -28 │ │ │ │ │ -29 public: │ │ │ │ │ -_3_0 _E_v_a_l_A_c_c_e_s_s(std::vector &out_) │ │ │ │ │ -31 : out(out_) │ │ │ │ │ -32#ifndef NDEBUG │ │ │ │ │ -33 , first_unused_index(0) │ │ │ │ │ -34#endif │ │ │ │ │ -35 { } │ │ │ │ │ -36#ifndef NDEBUG │ │ │ │ │ -_3_7 _~_E_v_a_l_A_c_c_e_s_s() { │ │ │ │ │ -38 assert(first_unused_index == out.size()); │ │ │ │ │ -39 } │ │ │ │ │ -40#endif │ │ │ │ │ -_4_1 typename Traits::RangeFieldType &_o_p_e_r_a_t_o_r_[_](unsigned int index) │ │ │ │ │ -42 { │ │ │ │ │ -43 assert(index < out.size()); │ │ │ │ │ -44#ifndef NDEBUG │ │ │ │ │ -45 if(first_unused_index <= index) │ │ │ │ │ -46 first_unused_index = index+1; │ │ │ │ │ -47#endif │ │ │ │ │ -48 return out[index][0]; │ │ │ │ │ -49 } │ │ │ │ │ -50 }; │ │ │ │ │ -51 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 class _J_a_c_o_b_i_a_n_A_c_c_e_s_s { │ │ │ │ │ -55 std::vector &out; │ │ │ │ │ -56 unsigned int row; │ │ │ │ │ -57#ifndef NDEBUG │ │ │ │ │ -58 unsigned int first_unused_index; │ │ │ │ │ -59#endif │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +22 │ │ │ │ │ +23 │ │ │ │ │ +24namespace _D_u_n_e { │ │ │ │ │ +25 │ │ │ │ │ +37template │ │ │ │ │ +_3_8class _D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +39{ │ │ │ │ │ +40public: │ │ │ │ │ +_4_1 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e = _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_, │ │ │ │ │ +_d_i_m_,_ _D_o_m_a_i_n_,_ _R_a_n_g_e_>; │ │ │ │ │ +42 │ │ │ │ │ +_4_4 explicit _D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e (unsigned int order) │ │ │ │ │ +45 : order_(order) │ │ │ │ │ +46 , data_() │ │ │ │ │ +47 {} │ │ │ │ │ +48 │ │ │ │ │ +_5_5 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t (GeometryType type) const │ │ │ │ │ +56 { │ │ │ │ │ +57 auto [it,_] = data_.try_emplace(type,type,order_); │ │ │ │ │ +58 return it->second; │ │ │ │ │ +59 } │ │ │ │ │ 60 │ │ │ │ │ -61 public: │ │ │ │ │ -_6_2 _J_a_c_o_b_i_a_n_A_c_c_e_s_s(std::vector &out_, │ │ │ │ │ -63 unsigned int row_) │ │ │ │ │ -64 : out(out_), row(row_) │ │ │ │ │ -65#ifndef NDEBUG │ │ │ │ │ -66 , first_unused_index(0) │ │ │ │ │ -67#endif │ │ │ │ │ -68 { } │ │ │ │ │ -69#ifndef NDEBUG │ │ │ │ │ -_7_0 _~_J_a_c_o_b_i_a_n_A_c_c_e_s_s() { │ │ │ │ │ -71 assert(first_unused_index == out.size()); │ │ │ │ │ -72 } │ │ │ │ │ -73#endif │ │ │ │ │ -_7_4 typename Traits::RangeFieldType &_o_p_e_r_a_t_o_r_[_](unsigned int index) │ │ │ │ │ -75 { │ │ │ │ │ -76 assert(index < out.size()); │ │ │ │ │ -77#ifndef NDEBUG │ │ │ │ │ -78 if(first_unused_index <= index) │ │ │ │ │ -79 first_unused_index = index+1; │ │ │ │ │ -80#endif │ │ │ │ │ -81 return out[index][0][row]; │ │ │ │ │ -82 } │ │ │ │ │ -83 }; │ │ │ │ │ -84 │ │ │ │ │ -97 template │ │ │ │ │ -_9_8 struct _E_v_a_l_u_a_t_e │ │ │ │ │ -99 { │ │ │ │ │ -_1_0_1 constexpr static int _d = Traits::dimDomain - c; │ │ │ │ │ -102 │ │ │ │ │ -109 template │ │ │ │ │ -_1_1_0 static void _e_v_a_l ( │ │ │ │ │ -111 const typename Traits::DomainType &in, │ │ │ │ │ -114 const std::array &derivatives, │ │ │ │ │ -117 typename Traits::RangeFieldType prod, │ │ │ │ │ -119 int bound, │ │ │ │ │ -121 int& index, │ │ │ │ │ -123 Access &access) │ │ │ │ │ -124 { │ │ │ │ │ -125 // start with the highest exponent for this dimension, then work down │ │ │ │ │ -126 for (int e = bound; e >= 0; --e) │ │ │ │ │ -127 { │ │ │ │ │ -128 // the rest of the available exponents, to be used by the other │ │ │ │ │ -129 // dimensions │ │ │ │ │ -130 int newbound = bound - e; │ │ │ │ │ -131 if(e < (int)derivatives[_d]) │ │ │ │ │ -132 _E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_c_-_1_>_:_: │ │ │ │ │ -133_ _e_v_a_l(in, derivatives, 0, newbound, index, access); │ │ │ │ │ -134 else { │ │ │ │ │ -135 int coeff = 1; │ │ │ │ │ -136 for(int i = e - derivatives[_d] + 1; i <= e; ++i) │ │ │ │ │ -137 coeff *= i; │ │ │ │ │ -138 // call the evaluator for the next dimension │ │ │ │ │ -139 _E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_c_-_1_>_:_: │ │ │ │ │ -140_ _e_v_a_l( // pass the coordinate and the derivatives unchanged │ │ │ │ │ -141 in, derivatives, │ │ │ │ │ -142 // also pass the product accumulated so far, but also │ │ │ │ │ -143 // include the current dimension │ │ │ │ │ -144 prod * power(in[_d], e-derivatives[_d]) * coeff, │ │ │ │ │ -145 // pass the number of remaining exponents to the next │ │ │ │ │ -146 // dimension │ │ │ │ │ -147 newbound, │ │ │ │ │ -148 // pass the next index to fill and the output access │ │ │ │ │ -149 // wrapper │ │ │ │ │ -150 index, access); │ │ │ │ │ -151 } │ │ │ │ │ -152 } │ │ │ │ │ -153 } │ │ │ │ │ -154 }; │ │ │ │ │ -155 │ │ │ │ │ -160 template │ │ │ │ │ -_1_6_1 struct _E_v_a_l_u_a_t_e │ │ │ │ │ -162 { │ │ │ │ │ -_1_6_3 constexpr static int _d = Traits::dimDomain-1; │ │ │ │ │ -165 template │ │ │ │ │ -_1_6_6 static void _e_v_a_l (const typename Traits::DomainType &in, │ │ │ │ │ -167 const std::array &derivatives, │ │ │ │ │ -168 typename Traits::RangeFieldType prod, │ │ │ │ │ -169 int bound, int& index, Access &access) │ │ │ │ │ -170 { │ │ │ │ │ -171 if(bound < (int)derivatives[_d]) │ │ │ │ │ -172 prod = 0; │ │ │ │ │ -173 else { │ │ │ │ │ -174 int coeff = 1; │ │ │ │ │ -175 for(int i = bound - derivatives[_d] + 1; i <= bound; ++i) │ │ │ │ │ -176 coeff *= i; │ │ │ │ │ -177 prod *= power(in[_d], bound-derivatives[_d]) * coeff; │ │ │ │ │ -178 } │ │ │ │ │ -179 access[index] = prod; │ │ │ │ │ -180 ++index; │ │ │ │ │ -181 } │ │ │ │ │ -182 }; │ │ │ │ │ -183 │ │ │ │ │ -184 } //namespace MonomImp │ │ │ │ │ -185 │ │ │ │ │ -200 template │ │ │ │ │ -_2_0_1 class _M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -202 { │ │ │ │ │ -203 // Helper: Number of shape functions for a k-th order element in dimension │ │ │ │ │ -dd │ │ │ │ │ -204 static constexpr unsigned int _s_i_z_e (int dd, int k) │ │ │ │ │ -205 { │ │ │ │ │ -206 if (dd==0 || k==0) │ │ │ │ │ -207 return 1; │ │ │ │ │ -208 return _s_i_z_e(dd,k-1) + _s_i_z_e(dd-1,k); │ │ │ │ │ -209 } │ │ │ │ │ -210 │ │ │ │ │ -211 public: │ │ │ │ │ -213 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_2_1_4 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -215 │ │ │ │ │ -_2_1_7 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -218 { │ │ │ │ │ -219 return _s_i_z_e(d,p); │ │ │ │ │ -220 } │ │ │ │ │ -221 │ │ │ │ │ -_2_2_3 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -224 std::vector& out) const │ │ │ │ │ -225 { │ │ │ │ │ -226 out.resize(_s_i_z_e()); │ │ │ │ │ -227 int index = 0; │ │ │ │ │ -228 std::array derivatives; │ │ │ │ │ -229 std::fill(derivatives.begin(), derivatives.end(), 0); │ │ │ │ │ -230 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out); │ │ │ │ │ -231 for (unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ -232 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, derivatives, 1, lp, index, access); │ │ │ │ │ -233 } │ │ │ │ │ -234 │ │ │ │ │ -_2_4_0 inline void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ -241 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -242 std::vector& out) const │ │ │ │ │ -243 { │ │ │ │ │ -244 out.resize(_s_i_z_e()); │ │ │ │ │ -245 int index = 0; │ │ │ │ │ -246 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out); │ │ │ │ │ -247 for (unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ -248 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, _o_r_d_e_r, 1, lp, index, access); │ │ │ │ │ -249 } │ │ │ │ │ -250 │ │ │ │ │ -252 inline void │ │ │ │ │ -_2_5_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -254 std::vector& out) const // return value │ │ │ │ │ -255 { │ │ │ │ │ -256 out.resize(_s_i_z_e()); │ │ │ │ │ -257 std::array derivatives; │ │ │ │ │ -258 for(unsigned int i = 0; i < d; ++i) │ │ │ │ │ -259 derivatives[i] = 0; │ │ │ │ │ -260 for(unsigned int i = 0; i < d; ++i) │ │ │ │ │ -261 { │ │ │ │ │ -262 derivatives[i] = 1; │ │ │ │ │ -263 int index = 0; │ │ │ │ │ -264 _M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_<_T_r_a_i_t_s_> access(out, i); │ │ │ │ │ -265 for(unsigned int lp = 0; lp <= p; ++lp) │ │ │ │ │ -266 _M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_T_r_a_i_t_s_,_ _d_>_:_:_e_v_a_l(in, derivatives, 1, lp, index, access); │ │ │ │ │ -267 derivatives[i] = 0; │ │ │ │ │ -268 } │ │ │ │ │ -269 } │ │ │ │ │ -270 │ │ │ │ │ -_2_7_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ -273 { │ │ │ │ │ -274 return p; │ │ │ │ │ -275 } │ │ │ │ │ -276 }; │ │ │ │ │ -277 │ │ │ │ │ -278} │ │ │ │ │ -279 │ │ │ │ │ -280#endif // DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALBASIS_HH │ │ │ │ │ +61private: │ │ │ │ │ +62 unsigned int order_; │ │ │ │ │ +63 mutable std::map data_; │ │ │ │ │ +64}; │ │ │ │ │ +65 │ │ │ │ │ +66 │ │ │ │ │ +78template │ │ │ │ │ +_7_9class _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +80{ │ │ │ │ │ +81 struct UnknownToplogy {}; │ │ │ │ │ +82 │ │ │ │ │ +83 static constexpr bool isSimplex = GeometryType(id).isSimplex(); │ │ │ │ │ +84 static constexpr bool isCube = GeometryType(id).isCube(); │ │ │ │ │ +85 static constexpr bool isPrism = GeometryType(id).isPrism(); │ │ │ │ │ +86 static constexpr bool isPyramid = GeometryType(id).isPyramid(); │ │ │ │ │ +87 │ │ │ │ │ +88public: │ │ │ │ │ +_8_9 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +90 = std::conditional_t, │ │ │ │ │ +91 std::conditional_t, │ │ │ │ │ +92 std::conditional_t, │ │ │ │ │ +93 std::conditional_t, UnknownToplogy> > > >; │ │ │ │ │ +94 │ │ │ │ │ +_9_6 explicit _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e (std::integral_constant = {}) │ │ │ │ │ +97 { │ │ │ │ │ +98 lfe_.emplace(); │ │ │ │ │ +99 } │ │ │ │ │ +100 │ │ │ │ │ +_1_0_2 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t ([[maybe_unused]] GeometryType type) const │ │ │ │ │ +103 { │ │ │ │ │ +104 assert(GeometryType::Id(type) == id); │ │ │ │ │ +105 assert(!!lfe_); │ │ │ │ │ +106 return *lfe_; │ │ │ │ │ +107 } │ │ │ │ │ +108 │ │ │ │ │ +109private: │ │ │ │ │ +110 std::optional lfe_{}; │ │ │ │ │ +111}; │ │ │ │ │ +112 │ │ │ │ │ +113 │ │ │ │ │ +127template │ │ │ │ │ +_1_2_8class _S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +129 : public _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +130{ │ │ │ │ │ +131 using _B_a_s_e = _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_D_o_m_a_i_n_,_R_a_n_g_e_,_d_i_m_,_o_r_d_e_r_>; │ │ │ │ │ +132public: │ │ │ │ │ +133 using Base::Base; │ │ │ │ │ +134}; │ │ │ │ │ +135 │ │ │ │ │ +136} // namespace Dune │ │ │ │ │ +137 │ │ │ │ │ +138#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_CACHE_HH │ │ │ │ │ +_l_a_g_r_a_n_g_e_._h_h │ │ │ │ │ +Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ +elements. │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_e_q_u_i_d_i_s_t_a_n_t_p_o_i_n_t_s_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_l_f_e_c_a_c_h_e_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ -Access output vector of evaluateFunction() and evaluate() │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -Traits::RangeFieldType & operator[](unsigned int index) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_~_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ -~EvalAccess() │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_A_c_c_e_s_s_:_:_E_v_a_l_A_c_c_e_s_s │ │ │ │ │ -EvalAccess(std::vector< typename Traits::RangeType > &out_) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ -Access output vector of evaluateJacobian() │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_~_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ -~JacobianAccess() │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -Traits::RangeFieldType & operator[](unsigned int index) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s_:_:_J_a_c_o_b_i_a_n_A_c_c_e_s_s │ │ │ │ │ -JacobianAccess(std::vector< typename Traits::JacobianType > &out_, unsigned int │ │ │ │ │ -row_) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:99 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_:_:_d │ │ │ │ │ -static constexpr int d │ │ │ │ │ -The next dimension to try for factors. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:101 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_:_:_e_v_a_l │ │ │ │ │ -static void eval(const typename Traits::DomainType &in, const std::array< │ │ │ │ │ -unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType │ │ │ │ │ -prod, int bound, int &index, Access &access) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_I_m_p_:_:_E_v_a_l_u_a_t_e_<_ _T_r_a_i_t_s_,_ _1_ _>_:_:_e_v_a_l │ │ │ │ │ -static void eval(const typename Traits::DomainType &in, const std::array< │ │ │ │ │ -unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType │ │ │ │ │ -prod, int bound, int &index, Access &access) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:166 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:202 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:272 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, d > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:253 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:223 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, d > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:214 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalbasis.hh:217 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +A cache storing a compile time selection of local finite element │ │ │ │ │ +implementations. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ +DDeeffiinniittiioonn lagrange.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +A cache that stores Lagrange finite elements for the given dimension and order. │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_: │ │ │ │ │ +_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +DynamicLagrangeLocalFiniteElementCache(unsigned int order) │ │ │ │ │ +Construct an empty cache. │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_D_y_n_a_m_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ +const FiniteElementType & get(GeometryType type) const │ │ │ │ │ +Obtain the cached local finite-element. │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +A cache that stores all available Pk/Qk like local finite elements for the │ │ │ │ │ +given dimension and order ... │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ +const FiniteElementType & get(GeometryType type) const │ │ │ │ │ +Obtain the cached local finite-element. │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:102 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +std::conditional_t< isSimplex, LagrangeSimplexLocalFiniteElement< Domain, │ │ │ │ │ +Range, dim, order >, std::conditional_t< isCube, │ │ │ │ │ +LagrangeCubeLocalFiniteElement< Domain, Range, dim, order >, std:: │ │ │ │ │ +conditional_t< isPrism, LagrangePrismLocalFiniteElement< Domain, Range, order │ │ │ │ │ +>, std::conditional_t< isPyramid, LagrangePyramidLocalFiniteElement< Domain, │ │ │ │ │ +Range, order >, UnknownToplogy > > > > FiniteElementType │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:93 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_: │ │ │ │ │ +_S_t_a_t_i_c_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +StaticLagrangeLocalFiniteElementCache(std::integral_constant< std::size_t, │ │ │ │ │ +order >={}) │ │ │ │ │ +Construct the local-finite element for the order specified as template │ │ │ │ │ +parameter. │ │ │ │ │ +DDeeffiinniittiioonn cache.hh:96 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: lagrangecoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
monomiallocalinterpolation.hh File Reference
│ │ │ │ +
lagrangecoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MonomialLocalInterpolation< LB, size >
struct  Dune::LagrangeCoefficientsFactory< LP, dim, F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomiallocalinterpolation.hh File Reference │ │ │ │ │ +lagrangecoefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_,_ _s_i_z_e_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00431_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomiallocalinterpolation.hh Source File │ │ │ │ +dune-localfunctions: lagrangecoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,114 +70,81 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomiallocalinterpolation.hh
│ │ │ │ +
lagrangecoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │
8#include <vector>
│ │ │ │
9
│ │ │ │
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ -
14#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
22 template<class LB, unsigned int size>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25 typedef typename LB::Traits::DomainType D;
│ │ │ │ -
26 typedef typename LB::Traits::DomainFieldType DF;
│ │ │ │ -
27 static const int dimD=LB::Traits::dimDomain;
│ │ │ │ -
28 typedef typename LB::Traits::RangeType R;
│ │ │ │ -
29 typedef typename LB::Traits::RangeFieldType RF;
│ │ │ │ -
30
│ │ │ │ -
31 typedef QuadratureRule<DF,dimD> QR;
│ │ │ │ -
32 typedef typename QR::iterator QRiterator;
│ │ │ │ -
33
│ │ │ │ -
34 public:
│ │ │ │ -
│ │ │ │ -
35 MonomialLocalInterpolation (const GeometryType &gt_,
│ │ │ │ -
36 const LB &lb_)
│ │ │ │ -
37 : gt(gt_), lb(lb_), Minv(0)
│ │ │ │ -
38 , qr(QuadratureRules<DF,dimD>::rule(gt, 2*lb.order()))
│ │ │ │ -
39 {
│ │ │ │ -
40 // Compute inverse of the mass matrix of the local basis, and store it in Minv
│ │ │ │ -
41 if(size != lb.size())
│ │ │ │ -
42 DUNE_THROW(Exception, "size template parameter does not match size of "
│ │ │ │ -
43 "local basis");
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/geometry/type.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
19
│ │ │ │ +
20 template< template <class,unsigned int> class LP,
│ │ │ │ +
21 unsigned int dim, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24 static const unsigned int dimension = dim;
│ │ │ │ +
25 const typedef LP<F,dim> Object;
│ │ │ │ +
26 typedef std::size_t Key;
│ │ │ │ +
27
│ │ │ │ +
28 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
29 static Object *create ( const Key &order )
│ │ │ │ +
30 {
│ │ │ │ +
31 if (order == 0 || !Object::template supports<geometryId>(order))
│ │ │ │ +
32 return 0;
│ │ │ │ +
33 typedef typename std::remove_const<Object>::type LagrangeCoefficients;
│ │ │ │ +
34 LagrangeCoefficients *object = new LagrangeCoefficients(order);
│ │ │ │ +
35 if ( !object->template build<geometryId>() )
│ │ │ │ +
36 {
│ │ │ │ +
37 delete object;
│ │ │ │ +
38 object = nullptr;
│ │ │ │ +
39 }
│ │ │ │ +
40 return object;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42 static void release( Object *object ) { delete object; }
│ │ │ │ +
43 };
│ │ │ │ +
│ │ │ │
44
│ │ │ │ -
45 const QRiterator qrend = qr.end();
│ │ │ │ -
46 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) {
│ │ │ │ -
47 std::vector<R> base;
│ │ │ │ -
48 lb.evaluateFunction(qrit->position(),base);
│ │ │ │ -
49
│ │ │ │ -
50 for(unsigned int i = 0; i < size; ++i)
│ │ │ │ -
51 for(unsigned int j = 0; j < size; ++j)
│ │ │ │ -
52 Minv[i][j] += qrit->weight() * base[i] * base[j];
│ │ │ │ -
53 }
│ │ │ │ -
54 Minv.invert();
│ │ │ │ -
55 }
│ │ │ │ -
│ │ │ │ -
56
│ │ │ │ -
64 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
65 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
66 {
│ │ │ │ -
67 out.clear();
│ │ │ │ -
68 out.resize(size, 0);
│ │ │ │ -
69
│ │ │ │ -
70 const QRiterator qrend = qr.end();
│ │ │ │ -
71 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) {
│ │ │ │ -
72 //TODO: mass matrix
│ │ │ │ -
73 R y = f(qrit->position());
│ │ │ │ -
74
│ │ │ │ -
75 std::vector<R> base;
│ │ │ │ -
76 lb.evaluateFunction(qrit->position(),base);
│ │ │ │ -
77
│ │ │ │ -
78 for(unsigned int i = 0; i < size; ++i)
│ │ │ │ -
79 for(unsigned int j = 0; j < size; ++j)
│ │ │ │ -
80 out[i] += Minv[i][j] * qrit->weight() * y * base[j];
│ │ │ │ -
81 }
│ │ │ │ -
82 }
│ │ │ │ -
│ │ │ │ -
83
│ │ │ │ -
84 private:
│ │ │ │ -
85 GeometryType gt;
│ │ │ │ -
86 const LB &lb;
│ │ │ │ -
87 FieldMatrix<RF, size, size> Minv;
│ │ │ │ -
88 const QR &qr;
│ │ │ │ -
89 };
│ │ │ │ -
│ │ │ │ -
90
│ │ │ │ -
91}
│ │ │ │ -
92
│ │ │ │ -
93#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH
│ │ │ │ +
45}
│ │ │ │ +
46
│ │ │ │ +
47#endif // DUNE_LAGRANGECOEFFICIENTS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition monomiallocalinterpolation.hh:24
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
Definition monomiallocalinterpolation.hh:65
│ │ │ │ -
MonomialLocalInterpolation(const GeometryType &gt_, const LB &lb_)
Definition monomiallocalinterpolation.hh:35
│ │ │ │ +
Definition lagrangecoefficients.hh:23
│ │ │ │ +
static const unsigned int dimension
Definition lagrangecoefficients.hh:24
│ │ │ │ +
static void release(Object *object)
Definition lagrangecoefficients.hh:42
│ │ │ │ +
const typedef LP< F, dim > Object
Definition lagrangecoefficients.hh:25
│ │ │ │ +
static Object * create(const Key &order)
Definition lagrangecoefficients.hh:29
│ │ │ │ +
std::size_t Key
Definition lagrangecoefficients.hh:26
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,107 +1,80 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_o_n_o_m_i_a_l │ │ │ │ │ -monomiallocalinterpolation.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangecoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ 9 │ │ │ │ │ 10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -24 { │ │ │ │ │ -25 typedef typename LB::Traits::DomainType D; │ │ │ │ │ -26 typedef typename LB::Traits::DomainFieldType DF; │ │ │ │ │ -27 static const int dimD=LB::Traits::dimDomain; │ │ │ │ │ -28 typedef typename LB::Traits::RangeType R; │ │ │ │ │ -29 typedef typename LB::Traits::RangeFieldType RF; │ │ │ │ │ -30 │ │ │ │ │ -31 typedef QuadratureRule QR; │ │ │ │ │ -32 typedef typename QR::iterator QRiterator; │ │ │ │ │ -33 │ │ │ │ │ -34 public: │ │ │ │ │ -_3_5 _M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n (const GeometryType >_, │ │ │ │ │ -36 const LB &lb_) │ │ │ │ │ -37 : gt(gt_), lb(lb_), Minv(0) │ │ │ │ │ -38 , qr(QuadratureRules::rule(gt, 2*lb.order())) │ │ │ │ │ -39 { │ │ │ │ │ -40 // Compute inverse of the mass matrix of the local basis, and store it in │ │ │ │ │ -Minv │ │ │ │ │ -41 if(size != lb.size()) │ │ │ │ │ -42 DUNE_THROW(Exception, "size template parameter does not match size of " │ │ │ │ │ -43 "local basis"); │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +19 │ │ │ │ │ +20 template< template class LP, │ │ │ │ │ +21 unsigned int dim, class F> │ │ │ │ │ +_2_2 struct _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +23 { │ │ │ │ │ +_2_4 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +_2_5 const typedef LP _O_b_j_e_c_t; │ │ │ │ │ +_2_6 typedef std::size_t _K_e_y; │ │ │ │ │ +27 │ │ │ │ │ +28 template< GeometryType::Id geometryId > │ │ │ │ │ +_2_9 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ +30 { │ │ │ │ │ +31 if (order == 0 || !Object::template supports(order)) │ │ │ │ │ +32 return 0; │ │ │ │ │ +33 typedef typename std::remove_const::type LagrangeCoefficients; │ │ │ │ │ +34 LagrangeCoefficients *object = new LagrangeCoefficients(order); │ │ │ │ │ +35 if ( !object->template build() ) │ │ │ │ │ +36 { │ │ │ │ │ +37 delete object; │ │ │ │ │ +38 object = nullptr; │ │ │ │ │ +39 } │ │ │ │ │ +40 return object; │ │ │ │ │ +41 } │ │ │ │ │ +_4_2 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +43 }; │ │ │ │ │ 44 │ │ │ │ │ -45 const QRiterator qrend = qr.end(); │ │ │ │ │ -46 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) { │ │ │ │ │ -47 std::vector base; │ │ │ │ │ -48 lb.evaluateFunction(qrit->position(),base); │ │ │ │ │ -49 │ │ │ │ │ -50 for(unsigned int i = 0; i < size; ++i) │ │ │ │ │ -51 for(unsigned int j = 0; j < size; ++j) │ │ │ │ │ -52 Minv[i][j] += qrit->weight() * base[i] * base[j]; │ │ │ │ │ -53 } │ │ │ │ │ -54 Minv.invert(); │ │ │ │ │ -55 } │ │ │ │ │ -56 │ │ │ │ │ -64 template │ │ │ │ │ -_6_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -66 { │ │ │ │ │ -67 out.clear(); │ │ │ │ │ -68 out.resize(size, 0); │ │ │ │ │ -69 │ │ │ │ │ -70 const QRiterator qrend = qr.end(); │ │ │ │ │ -71 for(QRiterator qrit = qr.begin(); qrit != qrend; ++qrit) { │ │ │ │ │ -72 //TODO: mass matrix │ │ │ │ │ -73 R y = f(qrit->position()); │ │ │ │ │ -74 │ │ │ │ │ -75 std::vector base; │ │ │ │ │ -76 lb.evaluateFunction(qrit->position(),base); │ │ │ │ │ -77 │ │ │ │ │ -78 for(unsigned int i = 0; i < size; ++i) │ │ │ │ │ -79 for(unsigned int j = 0; j < size; ++j) │ │ │ │ │ -80 out[i] += Minv[i][j] * qrit->weight() * y * base[j]; │ │ │ │ │ -81 } │ │ │ │ │ -82 } │ │ │ │ │ -83 │ │ │ │ │ -84 private: │ │ │ │ │ -85 GeometryType gt; │ │ │ │ │ -86 const LB &lb; │ │ │ │ │ -87 FieldMatrix Minv; │ │ │ │ │ -88 const QR &qr; │ │ │ │ │ -89 }; │ │ │ │ │ -90 │ │ │ │ │ -91} │ │ │ │ │ -92 │ │ │ │ │ -93#endif //DUNE_LOCALFUNCTIONS_MONOMIAL_MONOMIALLOCALINTERPOLATION_HH │ │ │ │ │ +45} │ │ │ │ │ +46 │ │ │ │ │ +47#endif // DUNE_LAGRANGECOEFFICIENTS_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalinterpolation.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Determine coefficients interpolating a given function. │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalinterpolation.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_M_o_n_o_m_i_a_l_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -MonomialLocalInterpolation(const GeometryType >_, const LB &lb_) │ │ │ │ │ -DDeeffiinniittiioonn monomiallocalinterpolation.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const typedef LP< F, dim > Object │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &order) │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:26 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedsimplexlocalbasis.hh File Reference │ │ │ │ +dune-localfunctions: equidistantpoints.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,53 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces
│ │ │ │ -
refinedsimplexlocalbasis.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Functions
│ │ │ │ +
equidistantpoints.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ - │ │ │ │ -

Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ -More...

│ │ │ │ -
#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <algorithm>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/emptypoints.hh>
│ │ │ │ +#include <dune/localfunctions/utility/field.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedSimplexLocalBasis< D, dim >
 
class  Dune::RefinedSimplexLocalBasis< D, 1 >
 Base class for LocalBasis classes based on uniform refinement in 1D; provides numbering and local coordinates of subelements. More...
 
class  Dune::RefinedSimplexLocalBasis< D, 2 >
 Base class for LocalBasis classes based on uniform refinement in 2D; provides numbering and local coordinates of subelements. More...
 
class  Dune::RefinedSimplexLocalBasis< D, 3 >
 Base class for LocalBasis classes based on uniform refinement in 3D; provides numbering and local coordinates of subelements. More...
class  Dune::EquidistantPointSet< F, dim >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Functions

std::size_t Dune::numLagrangePoints (const GeometryType &gt, std::size_t order)
 
template<class ct , unsigned int cdim>
static unsigned int Dune::equidistantLagrangePoints (const GeometryType &gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points)
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Contains a base class for LocalBasis classes based on uniform refinement.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,38 +1,34 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedsimplexlocalbasis.hh File Reference │ │ │ │ │ -Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ -_M_o_r_e_._._. │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ +equidistantpoints.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_m_p_t_y_p_o_i_n_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _> │ │ │ │ │ -  Base class for LocalBasis classes based on uniform refinement in 1D; │ │ │ │ │ - provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _> │ │ │ │ │ -  Base class for LocalBasis classes based on uniform refinement in 2D; │ │ │ │ │ - provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _> │ │ │ │ │ -  Base class for LocalBasis classes based on uniform refinement in 3D; │ │ │ │ │ - provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ +FFuunnccttiioonnss │ │ │ │ │ + std::size_t  _D_u_n_e_:_:_n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s (const GeometryType >, std:: │ │ │ │ │ + size_t order) │ │ │ │ │ +  │ │ │ │ │ +template │ │ │ │ │ +static unsigned int  _D_u_n_e_:_:_e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s (const GeometryType >, │ │ │ │ │ + unsigned int codim, std::size_t order, unsigned int │ │ │ │ │ + *count, _L_a_g_r_a_n_g_e_P_o_i_n_t< ct, cdim > *points) │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00434_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedsimplexlocalbasis.hh Source File │ │ │ │ +dune-localfunctions: equidistantpoints.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,291 +70,259 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedsimplexlocalbasis.hh
│ │ │ │ +
equidistantpoints.hh
│ │ │ │
│ │ │ │
│ │ │ │ -Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │ -
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │ -
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ -
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ +Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ +
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ +
3#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ +
4#define DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ +
5
│ │ │ │ +
6#include <cstddef>
│ │ │ │
7
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13#include <dune/common/exceptions.hh>
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18 template<class D, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
20 {
│ │ │ │ -
21 protected:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24 DUNE_THROW(Dune::NotImplemented,"RefinedSimplexLocalBasis not implemented for dim > 3.");
│ │ │ │ -
25 }
│ │ │ │ -
│ │ │ │ -
26 };
│ │ │ │ -
│ │ │ │ -
27
│ │ │ │ -
36 template<class D>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {
│ │ │ │ -
39 protected:
│ │ │ │ -
40
│ │ │ │ - │ │ │ │ +
8#include <algorithm>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
12#include <dune/geometry/type.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │ +
19
│ │ │ │ +
20 // numLagrangePoints
│ │ │ │ +
21 // -----------------
│ │ │ │ +
22
│ │ │ │ +
│ │ │ │ +
23 inline std::size_t numLagrangePoints ( const GeometryType& gt, std::size_t order )
│ │ │ │ +
24 {
│ │ │ │ +
25 const int dim = gt.dim();
│ │ │ │ +
26 if( dim > 0 )
│ │ │ │ +
27 {
│ │ │ │ +
28 const GeometryType baseGeometryType = Impl::getBase( gt );
│ │ │ │ +
29 if( gt.isConical() )
│ │ │ │ +
30 {
│ │ │ │ +
31 std::size_t size = 0;
│ │ │ │ +
32 for( unsigned int o = 0; o <= order; ++o )
│ │ │ │ +
33 size += numLagrangePoints( baseGeometryType, o );
│ │ │ │ +
34 return size;
│ │ │ │ +
35 }
│ │ │ │ +
36 else
│ │ │ │ +
37 return numLagrangePoints( baseGeometryType, order ) * (order+1);
│ │ │ │ +
38 }
│ │ │ │ +
39 else
│ │ │ │ +
40 return 1;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │
43
│ │ │ │ -
│ │ │ │ -
54 static int getSubElement(const FieldVector<D,1>& global)
│ │ │ │ +
44
│ │ │ │ +
45 // equidistantLagrangePoints
│ │ │ │ +
46 // -------------------------
│ │ │ │ +
47
│ │ │ │ +
48 template< class ct, unsigned int cdim >
│ │ │ │ +
│ │ │ │ +
49 inline static unsigned int equidistantLagrangePoints ( const GeometryType& gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points )
│ │ │ │ +
50 {
│ │ │ │ +
51 const unsigned int dim = gt.dim();
│ │ │ │ +
52 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) );
│ │ │ │ +
53
│ │ │ │ +
54 if( dim > 0 )
│ │ │ │
55 {
│ │ │ │ -
56 if (global[0] <= 0.5)
│ │ │ │ -
57 return 0;
│ │ │ │ -
58 else if (global[0] <= 1.0)
│ │ │ │ -
59 return 1;
│ │ │ │ -
60
│ │ │ │ -
61 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
70 static void getSubElement(const FieldVector<D,1>& global,
│ │ │ │ -
71 int& subElement,
│ │ │ │ -
72 FieldVector<D,1>& local)
│ │ │ │ -
73 {
│ │ │ │ -
74 if (global[0] <= 0.5) {
│ │ │ │ -
75 subElement = 0;
│ │ │ │ -
76 local[0] = 2.0 * global[0];
│ │ │ │ -
77 return;
│ │ │ │ -
78 }
│ │ │ │ -
79
│ │ │ │ -
80 subElement = 1;
│ │ │ │ -
81 local[0] = 2.0 * global[0] - 1.0;
│ │ │ │ -
82 }
│ │ │ │ -
│ │ │ │ -
83
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ +
56 const GeometryType baseGeometryType = Impl::getBase( gt );
│ │ │ │ +
57 const unsigned int numBaseN = (codim < dim ? Geo::Impl::size( baseGeometryType.id(), baseGeometryType.dim(), codim ) : 0);
│ │ │ │ +
58 const unsigned int numBaseM = (codim > 0 ? Geo::Impl::size( baseGeometryType.id(), baseGeometryType.dim(), codim-1 ) : 0);
│ │ │ │ +
59
│ │ │ │ +
60 if( gt.isPrismatic() )
│ │ │ │ +
61 {
│ │ │ │ +
62 unsigned int size = 0;
│ │ │ │ +
63 if( codim < dim )
│ │ │ │ +
64 {
│ │ │ │ +
65 for( unsigned int i = 1; i < order; ++i )
│ │ │ │ +
66 {
│ │ │ │ +
67 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim, order, count, points );
│ │ │ │ +
68 for( unsigned int j = 0; j < n; ++j )
│ │ │ │ +
69 {
│ │ │ │ +
70 LocalKey &key = points->localKey_;
│ │ │ │ +
71 key = LocalKey( key.subEntity(), codim, key.index() );
│ │ │ │ +
72 points->point_[ dim-1 ] = ct( i ) / ct( order );
│ │ │ │ +
73 ++points;
│ │ │ │ +
74 }
│ │ │ │ +
75 size += n;
│ │ │ │ +
76 }
│ │ │ │ +
77 }
│ │ │ │ +
78
│ │ │ │ +
79 if( codim > 0 )
│ │ │ │ +
80 {
│ │ │ │ +
81 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim-1, order, count+numBaseN, points );
│ │ │ │ +
82 for( unsigned int j = 0; j < n; ++j )
│ │ │ │ +
83 {
│ │ │ │ +
84 LocalKey &key = points[ j ].localKey_;
│ │ │ │ +
85 key = LocalKey( key.subEntity() + numBaseN, codim, key.index() );
│ │ │ │
86
│ │ │ │ -
98 template<class D>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
100 {
│ │ │ │ -
101 protected:
│ │ │ │ -
102
│ │ │ │ - │ │ │ │ -
105
│ │ │ │ -
│ │ │ │ -
121 static int getSubElement(const FieldVector<D,2>& global)
│ │ │ │ -
122 {
│ │ │ │ -
123 if (global[0] + global[1] <= 0.5)
│ │ │ │ -
124 return 0;
│ │ │ │ -
125 else if (global[0] >= 0.5)
│ │ │ │ -
126 return 1;
│ │ │ │ -
127 else if (global[1] >= 0.5)
│ │ │ │ -
128 return 2;
│ │ │ │ -
129
│ │ │ │ -
130 return 3;
│ │ │ │ -
131 }
│ │ │ │ -
│ │ │ │ -
132
│ │ │ │ -
│ │ │ │ -
139 static void getSubElement(const FieldVector<D,2>& global,
│ │ │ │ -
140 int& subElement,
│ │ │ │ -
141 FieldVector<D,2>& local)
│ │ │ │ -
142 {
│ │ │ │ -
143 if (global[0] + global[1] <= 0.5) {
│ │ │ │ -
144 subElement = 0;
│ │ │ │ -
145 local[0] = 2*global[0];
│ │ │ │ -
146 local[1] = 2*global[1];
│ │ │ │ -
147 return;
│ │ │ │ -
148 } else if (global[0] >= 0.5) {
│ │ │ │ -
149 subElement = 1;
│ │ │ │ -
150 local[0] = 2*global[0]-1;
│ │ │ │ -
151 local[1] = 2*global[1];
│ │ │ │ -
152 return;
│ │ │ │ -
153 } else if (global[1] >= 0.5) {
│ │ │ │ -
154 subElement = 2;
│ │ │ │ -
155 local[0] = 2*global[0];
│ │ │ │ -
156 local[1] = 2*global[1]-1;
│ │ │ │ -
157 return;
│ │ │ │ -
158 }
│ │ │ │ -
159
│ │ │ │ -
160 subElement = 3;
│ │ │ │ -
161 local[0] = -2 * global[0] + 1;
│ │ │ │ -
162 local[1] = -2 * global[1] + 1;
│ │ │ │ -
163
│ │ │ │ -
164 }
│ │ │ │ -
│ │ │ │ -
165
│ │ │ │ -
166
│ │ │ │ -
167 };
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
180 template<class D>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
182 {
│ │ │ │ -
183 protected:
│ │ │ │ -
184
│ │ │ │ - │ │ │ │ +
87 points[ j + n ].point_ = points[ j ].point_;
│ │ │ │ +
88 points[ j + n ].point_[ dim-1 ] = ct( 1 );
│ │ │ │ +
89 points[ j + n ].localKey_ = LocalKey( key.subEntity() + numBaseM, codim, key.index() );
│ │ │ │ +
90 ++count[ key.subEntity() + numBaseM ];
│ │ │ │ +
91 }
│ │ │ │ +
92 size += 2*n;
│ │ │ │ +
93 }
│ │ │ │ +
94
│ │ │ │ +
95 return size;
│ │ │ │ +
96 }
│ │ │ │ +
97 else
│ │ │ │ +
98 {
│ │ │ │ +
99 unsigned int size = (codim > 0 ? equidistantLagrangePoints( baseGeometryType, codim-1, order, count, points ) : 0);
│ │ │ │ +
100 LagrangePoint< ct, cdim > *const end = points + size;
│ │ │ │ +
101 for( ; points != end; ++points )
│ │ │ │ +
102 points->localKey_ = LocalKey( points->localKey_.subEntity(), codim, points->localKey_.index() );
│ │ │ │ +
103
│ │ │ │ +
104 if( codim < dim )
│ │ │ │ +
105 {
│ │ │ │ +
106 for( unsigned int i = order-1; i > 0; --i )
│ │ │ │ +
107 {
│ │ │ │ +
108 const unsigned int n = equidistantLagrangePoints( baseGeometryType, codim, i, count+numBaseM, points );
│ │ │ │ +
109 LagrangePoint< ct, cdim > *const end = points + n;
│ │ │ │ +
110 for( ; points != end; ++points )
│ │ │ │ +
111 {
│ │ │ │ +
112 points->localKey_ = LocalKey( points->localKey_.subEntity()+numBaseM, codim, points->localKey_.index() );
│ │ │ │ +
113 for( unsigned int j = 0; j < dim-1; ++j )
│ │ │ │ +
114 points->point_[ j ] *= ct( i ) / ct( order );
│ │ │ │ +
115 points->point_[ dim-1 ] = ct( order - i ) / ct( order );
│ │ │ │ +
116 }
│ │ │ │ +
117 size += n;
│ │ │ │ +
118 }
│ │ │ │ +
119 }
│ │ │ │ +
120 else
│ │ │ │ +
121 {
│ │ │ │ +
122 points->localKey_ = LocalKey( numBaseM, dim, count[ numBaseM ]++ );
│ │ │ │ +
123 points->point_ = 0;
│ │ │ │ +
124 points->point_[ dim-1 ] = ct( 1 );
│ │ │ │ +
125 ++size;
│ │ │ │ +
126 }
│ │ │ │ +
127
│ │ │ │ +
128 return size;
│ │ │ │ +
129 }
│ │ │ │ +
130 }
│ │ │ │ +
131 else
│ │ │ │ +
132 {
│ │ │ │ +
133 points->localKey_ = LocalKey( 0, 0, count[ 0 ]++ );
│ │ │ │ +
134 points->point_ = 0;
│ │ │ │ +
135 return 1;
│ │ │ │ +
136 }
│ │ │ │ +
137 }
│ │ │ │ +
│ │ │ │ +
138
│ │ │ │ +
139
│ │ │ │ +
140
│ │ │ │ +
141 // EquidistantPointSet
│ │ │ │ +
142 // -------------------
│ │ │ │ +
143
│ │ │ │ +
144 template< class F, unsigned int dim >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
146 : public EmptyPointSet< F, dim >
│ │ │ │ +
147 {
│ │ │ │ + │ │ │ │ +
149
│ │ │ │ +
150 public:
│ │ │ │ +
151 static const unsigned int dimension = dim;
│ │ │ │ +
152
│ │ │ │ +
153 using Base::order;
│ │ │ │ +
154
│ │ │ │ +
155 EquidistantPointSet ( std::size_t order ) : Base( order ) {}
│ │ │ │ +
156
│ │ │ │ +
│ │ │ │ +
157 void build ( GeometryType gt )
│ │ │ │ +
158 {
│ │ │ │ +
159 assert( gt.dim() == dimension );
│ │ │ │ +
160 points_.resize( numLagrangePoints( gt, order() ) );
│ │ │ │ +
161
│ │ │ │ +
162 typename Base::LagrangePoint *p = points_.data();
│ │ │ │ +
163 std::vector< unsigned int > count;
│ │ │ │ +
164 for( unsigned int mydim = 0; mydim <= dimension; ++mydim )
│ │ │ │ +
165 {
│ │ │ │ +
166 count.resize( Geo::Impl::size( gt.id(), dimension, dimension-mydim ) );
│ │ │ │ +
167 std::fill( count.begin(), count.end(), 0u );
│ │ │ │ +
168 p += equidistantLagrangePoints( gt, dimension-mydim, order(), count.data(), p );
│ │ │ │ +
169 }
│ │ │ │ +
170 const auto &refElement = referenceElement<F,dimension>(gt);
│ │ │ │ +
171 F weight = refElement.volume()/F(double(points_.size()));
│ │ │ │ +
172 for (auto &p : points_)
│ │ │ │ +
173 p.weight_ = weight;
│ │ │ │ +
174 }
│ │ │ │ +
│ │ │ │ +
175
│ │ │ │ +
176 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
177 bool build ()
│ │ │ │ +
178 {
│ │ │ │ +
179 build( GeometryType( geometryId ) );
│ │ │ │ +
180 return true;
│ │ │ │ +
181 }
│ │ │ │ +
│ │ │ │ +
182
│ │ │ │ +
│ │ │ │ +
183 bool buildCube ()
│ │ │ │ +
184 {
│ │ │ │ +
185 return build< GeometryTypes::cube(dim) > ();
│ │ │ │ +
186 }
│ │ │ │ +
│ │ │ │
187
│ │ │ │ -
│ │ │ │ -
218 static int getSubElement(const FieldVector<D,3>& global)
│ │ │ │ -
219 {
│ │ │ │ -
220 if (global[0] + global[1] + global[2] <= 0.5)
│ │ │ │ -
221 return 0;
│ │ │ │ -
222 else if (global[0] >= 0.5)
│ │ │ │ -
223 return 1;
│ │ │ │ -
224 else if (global[1] >= 0.5)
│ │ │ │ -
225 return 2;
│ │ │ │ -
226 else if (global[2] >= 0.5)
│ │ │ │ -
227 return 3;
│ │ │ │ -
228 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5))
│ │ │ │ -
229 return 4;
│ │ │ │ -
230 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5))
│ │ │ │ -
231 return 5;
│ │ │ │ -
232 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5))
│ │ │ │ -
233 return 6;
│ │ │ │ -
234 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5))
│ │ │ │ -
235 return 7;
│ │ │ │ -
236
│ │ │ │ -
237 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ -
238
│ │ │ │ -
239 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
246 static void getSubElement(const FieldVector<D,3>& global,
│ │ │ │ -
247 int& subElement,
│ │ │ │ -
248 FieldVector<D,3>& local)
│ │ │ │ -
249 {
│ │ │ │ -
250 if (global[0] + global[1] + global[2] <= 0.5) {
│ │ │ │ -
251 subElement = 0;
│ │ │ │ -
252 local = global;
│ │ │ │ -
253 local *= 2.0;
│ │ │ │ -
254 return;
│ │ │ │ -
255 } else if (global[0] >= 0.5) {
│ │ │ │ -
256 subElement = 1;
│ │ │ │ -
257 local = global;
│ │ │ │ -
258 local[0] -= 0.5;
│ │ │ │ -
259 local *= 2.0;
│ │ │ │ -
260 return;
│ │ │ │ -
261 } else if (global[1] >= 0.5) {
│ │ │ │ -
262 subElement = 2;
│ │ │ │ -
263 local = global;
│ │ │ │ -
264 local[1] -= 0.5;
│ │ │ │ -
265 local *= 2.0;
│ │ │ │ -
266 return;
│ │ │ │ -
267 } else if (global[2] >= 0.5) {
│ │ │ │ -
268 subElement = 3;
│ │ │ │ -
269 local = global;
│ │ │ │ -
270 local[2] -= 0.5;
│ │ │ │ -
271 local *= 2.0;
│ │ │ │ -
272 return;
│ │ │ │ -
273 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5)) {
│ │ │ │ -
274 subElement = 4;
│ │ │ │ -
275 local[0] = 2.0 * global[1];
│ │ │ │ -
276 local[1] = 2.0 * (0.5 - global[0] - global[1]);
│ │ │ │ -
277 local[2] = 2.0 * (-0.5 + global[0] + global[1] + global[2]);
│ │ │ │ -
278 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ -
279 // A[0][1] = 2.0;
│ │ │ │ -
280 // A[1][0] = -2.0;
│ │ │ │ -
281 // A[1][1] = -2.0;
│ │ │ │ -
282 // A[2][0] = 2.0;
│ │ │ │ -
283 // A[2][1] = 2.0;
│ │ │ │ -
284 // A[2][2] = 2.0;
│ │ │ │ -
285 // A.mv(global,local);
│ │ │ │ -
286 // local[1] += 1.0;
│ │ │ │ -
287 // local[2] -= 1.0;
│ │ │ │ -
288 return;
│ │ │ │ -
289 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5)) {
│ │ │ │ -
290 subElement = 5;
│ │ │ │ -
291 local[0] = 2.0 * (0.5 - global[0]);
│ │ │ │ -
292 local[1] = 2.0 * (0.5 - global[1] - global[2]);
│ │ │ │ -
293 local[2] = 2.0 * global[2];
│ │ │ │ -
294 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ -
295 // A[0][0] = -2.0;
│ │ │ │ -
296 // A[1][1] = -2.0;
│ │ │ │ -
297 // A[1][2] = -2.0;
│ │ │ │ -
298 // A[2][2] = 2.0;
│ │ │ │ -
299 // A.mv(global,local);
│ │ │ │ -
300 // local[0] += 1.0;
│ │ │ │ -
301 // local[1] += 1.0;
│ │ │ │ -
302 return;
│ │ │ │ -
303 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5)) {
│ │ │ │ -
304 subElement = 6;
│ │ │ │ -
305 local[0] = 2.0 * (0.5 - global[0] - global[1]);
│ │ │ │ -
306 local[1] = 2.0 * global[0];
│ │ │ │ -
307 local[2] = 2.0 * (-0.5 + global[1] + global[2]);
│ │ │ │ -
308 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ -
309 // A[0][0] = -2.0;
│ │ │ │ -
310 // A[0][1] = -2.0;
│ │ │ │ -
311 // A[1][0] = 2.0;
│ │ │ │ -
312 // A[2][1] = 2.0;
│ │ │ │ -
313 // A[2][2] = 2.0;
│ │ │ │ -
314 // A.mv(global,local);
│ │ │ │ -
315 // local[0] += 1.0;
│ │ │ │ -
316 // local[2] -= 1.0;
│ │ │ │ -
317 return;
│ │ │ │ -
318 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5)) {
│ │ │ │ -
319 subElement = 7;
│ │ │ │ -
320 local[0] = 2.0 * (-0.5 + global[1] + global[2]);
│ │ │ │ -
321 local[1] = 2.0 * (0.5 - global[1]);
│ │ │ │ -
322 local[2] = 2.0 * (-0.5 + global[0] + global[1]);
│ │ │ │ -
323 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ -
324 // A[0][1] = 2.0;
│ │ │ │ -
325 // A[0][2] = 2.0;
│ │ │ │ -
326 // A[1][1] = -2.0;
│ │ │ │ -
327 // A[2][0] = 2.0;
│ │ │ │ -
328 // A[2][1] = 2.0;
│ │ │ │ -
329 // A.mv(global,local);
│ │ │ │ -
330 // local[0] -= 1.0;
│ │ │ │ -
331 // local[1] += 1.0;
│ │ │ │ -
332 // local[2] -= 1.0;
│ │ │ │ -
333 return;
│ │ │ │ -
334 }
│ │ │ │ -
335
│ │ │ │ -
336 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ -
337
│ │ │ │ -
338 }
│ │ │ │ -
│ │ │ │ -
339
│ │ │ │ -
340 };
│ │ │ │ -
│ │ │ │ -
341
│ │ │ │ -
342
│ │ │ │ -
343}
│ │ │ │ -
344
│ │ │ │ -
345#endif
│ │ │ │ +
188 static bool supports ( GeometryType, std::size_t /*order*/ ) { return true; }
│ │ │ │ +
189 template< GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
190 static bool supports ( std::size_t order ) {
│ │ │ │ +
191 return supports( GeometryType( geometryId ), order );
│ │ │ │ +
192 }
│ │ │ │ +
│ │ │ │ +
193
│ │ │ │ +
194 private:
│ │ │ │ +
195 using Base::points_;
│ │ │ │ +
196 };
│ │ │ │ +
│ │ │ │ +
197
│ │ │ │ +
198} // namespace Dune
│ │ │ │ +
199
│ │ │ │ +
200#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ -
RefinedSimplexLocalBasis()
Definition refinedsimplexlocalbasis.hh:22
│ │ │ │ -
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:42
│ │ │ │ -
static void getSubElement(const FieldVector< D, 1 > &global, int &subElement, FieldVector< D, 1 > &local)
Get local coordinates in the subelement.
Definition refinedsimplexlocalbasis.hh:70
│ │ │ │ -
static int getSubElement(const FieldVector< D, 1 > &global)
Get the number of the subelement containing a given point.
Definition refinedsimplexlocalbasis.hh:54
│ │ │ │ -
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:104
│ │ │ │ -
static int getSubElement(const FieldVector< D, 2 > &global)
Get the number of the subtriangle containing a given point.
Definition refinedsimplexlocalbasis.hh:121
│ │ │ │ -
static void getSubElement(const FieldVector< D, 2 > &global, int &subElement, FieldVector< D, 2 > &local)
Get local coordinates in the subtriangle.
Definition refinedsimplexlocalbasis.hh:139
│ │ │ │ -
static void getSubElement(const FieldVector< D, 3 > &global, int &subElement, FieldVector< D, 3 > &local)
Get local coordinates in the subsimplex.
Definition refinedsimplexlocalbasis.hh:246
│ │ │ │ -
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:186
│ │ │ │ -
static int getSubElement(const FieldVector< D, 3 > &global)
Get the number of the subsimplex containing a given point in the reference element.
Definition refinedsimplexlocalbasis.hh:218
│ │ │ │ - │ │ │ │ +
std::size_t numLagrangePoints(const GeometryType &gt, std::size_t order)
Definition equidistantpoints.hh:23
│ │ │ │ +
static unsigned int equidistantLagrangePoints(const GeometryType &gt, unsigned int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > *points)
Definition equidistantpoints.hh:49
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ +
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ +
Definition emptypoints.hh:18
│ │ │ │ +
Field weight_
Definition emptypoints.hh:48
│ │ │ │ +
Vector point_
Definition emptypoints.hh:46
│ │ │ │ +
LocalKey localKey_
Definition emptypoints.hh:47
│ │ │ │ +
Definition emptypoints.hh:56
│ │ │ │ +
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ +
std::vector< LagrangePoint > points_
Definition emptypoints.hh:107
│ │ │ │ +
Definition equidistantpoints.hh:147
│ │ │ │ +
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ +
bool build()
Definition equidistantpoints.hh:177
│ │ │ │ +
static bool supports(std::size_t order)
Definition equidistantpoints.hh:190
│ │ │ │ +
static const unsigned int dimension
Definition equidistantpoints.hh:151
│ │ │ │ +
static bool supports(GeometryType, std::size_t)
Definition equidistantpoints.hh:188
│ │ │ │ +
void build(GeometryType gt)
Definition equidistantpoints.hh:157
│ │ │ │ +
bool buildCube()
Definition equidistantpoints.hh:183
│ │ │ │ +
EquidistantPointSet(std::size_t order)
Definition equidistantpoints.hh:155
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,304 +1,294 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -refinedsimplexlocalbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +equidistantpoints.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ -2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ -3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ +1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ -4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ +2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ +3#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ +4#define DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ +5 │ │ │ │ │ +6#include │ │ │ │ │ 7 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 template │ │ │ │ │ -_1_9 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -20 { │ │ │ │ │ -21 protected: │ │ │ │ │ -_2_2 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ -23 { │ │ │ │ │ -24 DUNE_THROW(Dune::NotImplemented,"RefinedSimplexLocalBasis not implemented │ │ │ │ │ -for dim > 3."); │ │ │ │ │ -25 } │ │ │ │ │ -26 }; │ │ │ │ │ -27 │ │ │ │ │ -36 template │ │ │ │ │ -_3_7 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -38 { │ │ │ │ │ -39 protected: │ │ │ │ │ -40 │ │ │ │ │ -_4_2 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_e_m_p_t_y_p_o_i_n_t_s_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ +19 │ │ │ │ │ +20 // numLagrangePoints │ │ │ │ │ +21 // ----------------- │ │ │ │ │ +22 │ │ │ │ │ +_2_3 inline std::size_t _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s ( const GeometryType& gt, std::size_t │ │ │ │ │ +order ) │ │ │ │ │ +24 { │ │ │ │ │ +25 const int dim = gt.dim(); │ │ │ │ │ +26 if( dim > 0 ) │ │ │ │ │ +27 { │ │ │ │ │ +28 const GeometryType baseGeometryType = Impl::getBase( gt ); │ │ │ │ │ +29 if( gt.isConical() ) │ │ │ │ │ +30 { │ │ │ │ │ +31 std::size_t size = 0; │ │ │ │ │ +32 for( unsigned int o = 0; o <= order; ++o ) │ │ │ │ │ +33 size += _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, o ); │ │ │ │ │ +34 return size; │ │ │ │ │ +35 } │ │ │ │ │ +36 else │ │ │ │ │ +37 return _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, order ) * (order+1); │ │ │ │ │ +38 } │ │ │ │ │ +39 else │ │ │ │ │ +40 return 1; │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ 43 │ │ │ │ │ -_5_4 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ +44 │ │ │ │ │ +45 // equidistantLagrangePoints │ │ │ │ │ +46 // ------------------------- │ │ │ │ │ +47 │ │ │ │ │ +48 template< class ct, unsigned int cdim > │ │ │ │ │ +_4_9 inline static unsigned int _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s ( const GeometryType& │ │ │ │ │ +gt, unsigned int codim, std::size_t order, unsigned int *count, _L_a_g_r_a_n_g_e_P_o_i_n_t_< │ │ │ │ │ +_c_t_,_ _c_d_i_m_ _> *points ) │ │ │ │ │ +50 { │ │ │ │ │ +51 const unsigned int dim = gt.dim(); │ │ │ │ │ +52 assert( (0 <= codim) && (codim <= dim) && (dim <= cdim) ); │ │ │ │ │ +53 │ │ │ │ │ +54 if( dim > 0 ) │ │ │ │ │ 55 { │ │ │ │ │ -56 if (global[0] <= 0.5) │ │ │ │ │ -57 return 0; │ │ │ │ │ -58 else if (global[0] <= 1.0) │ │ │ │ │ -59 return 1; │ │ │ │ │ -60 │ │ │ │ │ -61 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -_7_0 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ -71 int& subElement, │ │ │ │ │ -72 FieldVector& local) │ │ │ │ │ -73 { │ │ │ │ │ -74 if (global[0] <= 0.5) { │ │ │ │ │ -75 subElement = 0; │ │ │ │ │ -76 local[0] = 2.0 * global[0]; │ │ │ │ │ -77 return; │ │ │ │ │ -78 } │ │ │ │ │ -79 │ │ │ │ │ -80 subElement = 1; │ │ │ │ │ -81 local[0] = 2.0 * global[0] - 1.0; │ │ │ │ │ -82 } │ │ │ │ │ -83 │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ +56 const GeometryType baseGeometryType = Impl::getBase( gt ); │ │ │ │ │ +57 const unsigned int numBaseN = (codim < dim ? Geo::Impl::size │ │ │ │ │ +( baseGeometryType.id(), baseGeometryType.dim(), codim ) : 0); │ │ │ │ │ +58 const unsigned int numBaseM = (codim > 0 ? Geo::Impl::size │ │ │ │ │ +( baseGeometryType.id(), baseGeometryType.dim(), codim-1 ) : 0); │ │ │ │ │ +59 │ │ │ │ │ +60 if( gt.isPrismatic() ) │ │ │ │ │ +61 { │ │ │ │ │ +62 unsigned int size = 0; │ │ │ │ │ +63 if( codim < dim ) │ │ │ │ │ +64 { │ │ │ │ │ +65 for( unsigned int i = 1; i < order; ++i ) │ │ │ │ │ +66 { │ │ │ │ │ +67 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim, │ │ │ │ │ +order, count, points ); │ │ │ │ │ +68 for( unsigned int j = 0; j < n; ++j ) │ │ │ │ │ +69 { │ │ │ │ │ +70 _L_o_c_a_l_K_e_y &key = points->_l_o_c_a_l_K_e_y__; │ │ │ │ │ +71 key = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y(), codim, key._i_n_d_e_x() ); │ │ │ │ │ +72 points->_p_o_i_n_t__[ dim-1 ] = ct( i ) / ct( order ); │ │ │ │ │ +73 ++points; │ │ │ │ │ +74 } │ │ │ │ │ +75 size += n; │ │ │ │ │ +76 } │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +79 if( codim > 0 ) │ │ │ │ │ +80 { │ │ │ │ │ +81 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim-1, │ │ │ │ │ +order, count+numBaseN, points ); │ │ │ │ │ +82 for( unsigned int j = 0; j < n; ++j ) │ │ │ │ │ +83 { │ │ │ │ │ +84 _L_o_c_a_l_K_e_y &key = points[ j ]._l_o_c_a_l_K_e_y__; │ │ │ │ │ +85 key = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y() + numBaseN, codim, key._i_n_d_e_x() ); │ │ │ │ │ 86 │ │ │ │ │ -98 template │ │ │ │ │ -_9_9 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -100 { │ │ │ │ │ -101 protected: │ │ │ │ │ -102 │ │ │ │ │ -_1_0_4 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ -105 │ │ │ │ │ -_1_2_1 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ -122 { │ │ │ │ │ -123 if (global[0] + global[1] <= 0.5) │ │ │ │ │ -124 return 0; │ │ │ │ │ -125 else if (global[0] >= 0.5) │ │ │ │ │ -126 return 1; │ │ │ │ │ -127 else if (global[1] >= 0.5) │ │ │ │ │ -128 return 2; │ │ │ │ │ -129 │ │ │ │ │ -130 return 3; │ │ │ │ │ -131 } │ │ │ │ │ -132 │ │ │ │ │ -_1_3_9 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ -140 int& subElement, │ │ │ │ │ -141 FieldVector& local) │ │ │ │ │ -142 { │ │ │ │ │ -143 if (global[0] + global[1] <= 0.5) { │ │ │ │ │ -144 subElement = 0; │ │ │ │ │ -145 local[0] = 2*global[0]; │ │ │ │ │ -146 local[1] = 2*global[1]; │ │ │ │ │ -147 return; │ │ │ │ │ -148 } else if (global[0] >= 0.5) { │ │ │ │ │ -149 subElement = 1; │ │ │ │ │ -150 local[0] = 2*global[0]-1; │ │ │ │ │ -151 local[1] = 2*global[1]; │ │ │ │ │ -152 return; │ │ │ │ │ -153 } else if (global[1] >= 0.5) { │ │ │ │ │ -154 subElement = 2; │ │ │ │ │ -155 local[0] = 2*global[0]; │ │ │ │ │ -156 local[1] = 2*global[1]-1; │ │ │ │ │ -157 return; │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -160 subElement = 3; │ │ │ │ │ -161 local[0] = -2 * global[0] + 1; │ │ │ │ │ -162 local[1] = -2 * global[1] + 1; │ │ │ │ │ -163 │ │ │ │ │ -164 } │ │ │ │ │ -165 │ │ │ │ │ -166 │ │ │ │ │ -167 }; │ │ │ │ │ -168 │ │ │ │ │ -180 template │ │ │ │ │ -_1_8_1 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -182 { │ │ │ │ │ -183 protected: │ │ │ │ │ -184 │ │ │ │ │ -_1_8_6 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ +87 points[ j + n ]._p_o_i_n_t__ = points[ j ]._p_o_i_n_t__; │ │ │ │ │ +88 points[ j + n ]._p_o_i_n_t__[ dim-1 ] = ct( 1 ); │ │ │ │ │ +89 points[ j + n ]._l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( key._s_u_b_E_n_t_i_t_y() + numBaseM, codim, │ │ │ │ │ +key._i_n_d_e_x() ); │ │ │ │ │ +90 ++count[ key._s_u_b_E_n_t_i_t_y() + numBaseM ]; │ │ │ │ │ +91 } │ │ │ │ │ +92 size += 2*n; │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +95 return size; │ │ │ │ │ +96 } │ │ │ │ │ +97 else │ │ │ │ │ +98 { │ │ │ │ │ +99 unsigned int size = (codim > 0 ? _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ +( baseGeometryType, codim-1, order, count, points ) : 0); │ │ │ │ │ +100 _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _c_t_,_ _c_d_i_m_ _> *const end = points + size; │ │ │ │ │ +101 for( ; points != end; ++points ) │ │ │ │ │ +102 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( points->_l_o_c_a_l_K_e_y__._s_u_b_E_n_t_i_t_y(), codim, points- │ │ │ │ │ +>_l_o_c_a_l_K_e_y__._i_n_d_e_x() ); │ │ │ │ │ +103 │ │ │ │ │ +104 if( codim < dim ) │ │ │ │ │ +105 { │ │ │ │ │ +106 for( unsigned int i = order-1; i > 0; --i ) │ │ │ │ │ +107 { │ │ │ │ │ +108 const unsigned int n = _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( baseGeometryType, codim, │ │ │ │ │ +i, count+numBaseM, points ); │ │ │ │ │ +109 _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _c_t_,_ _c_d_i_m_ _> *const end = points + n; │ │ │ │ │ +110 for( ; points != end; ++points ) │ │ │ │ │ +111 { │ │ │ │ │ +112 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( points->_l_o_c_a_l_K_e_y__._s_u_b_E_n_t_i_t_y()+numBaseM, │ │ │ │ │ +codim, points->_l_o_c_a_l_K_e_y__._i_n_d_e_x() ); │ │ │ │ │ +113 for( unsigned int j = 0; j < dim-1; ++j ) │ │ │ │ │ +114 points->_p_o_i_n_t__[ j ] *= ct( i ) / ct( order ); │ │ │ │ │ +115 points->_p_o_i_n_t__[ dim-1 ] = ct( order - i ) / ct( order ); │ │ │ │ │ +116 } │ │ │ │ │ +117 size += n; │ │ │ │ │ +118 } │ │ │ │ │ +119 } │ │ │ │ │ +120 else │ │ │ │ │ +121 { │ │ │ │ │ +122 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( numBaseM, dim, count[ numBaseM ]++ ); │ │ │ │ │ +123 points->_p_o_i_n_t__ = 0; │ │ │ │ │ +124 points->_p_o_i_n_t__[ dim-1 ] = ct( 1 ); │ │ │ │ │ +125 ++size; │ │ │ │ │ +126 } │ │ │ │ │ +127 │ │ │ │ │ +128 return size; │ │ │ │ │ +129 } │ │ │ │ │ +130 } │ │ │ │ │ +131 else │ │ │ │ │ +132 { │ │ │ │ │ +133 points->_l_o_c_a_l_K_e_y__ = _L_o_c_a_l_K_e_y( 0, 0, count[ 0 ]++ ); │ │ │ │ │ +134 points->_p_o_i_n_t__ = 0; │ │ │ │ │ +135 return 1; │ │ │ │ │ +136 } │ │ │ │ │ +137 } │ │ │ │ │ +138 │ │ │ │ │ +139 │ │ │ │ │ +140 │ │ │ │ │ +141 // EquidistantPointSet │ │ │ │ │ +142 // ------------------- │ │ │ │ │ +143 │ │ │ │ │ +144 template< class F, unsigned int dim > │ │ │ │ │ +_1_4_5 class _E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ +146 : public _E_m_p_t_y_P_o_i_n_t_S_e_t< F, dim > │ │ │ │ │ +147 { │ │ │ │ │ +148 typedef _E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> _B_a_s_e; │ │ │ │ │ +149 │ │ │ │ │ +150 public: │ │ │ │ │ +_1_5_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +152 │ │ │ │ │ +153 using _B_a_s_e_:_:_o_r_d_e_r; │ │ │ │ │ +154 │ │ │ │ │ +_1_5_5 _E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t ( std::size_t _o_r_d_e_r ) : _B_a_s_e( _o_r_d_e_r ) {} │ │ │ │ │ +156 │ │ │ │ │ +_1_5_7 void _b_u_i_l_d ( GeometryType gt ) │ │ │ │ │ +158 { │ │ │ │ │ +159 assert( gt.dim() == _d_i_m_e_n_s_i_o_n ); │ │ │ │ │ +160 points_.resize( _n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s( gt, _o_r_d_e_r() ) ); │ │ │ │ │ +161 │ │ │ │ │ +162 typename _B_a_s_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t *p = points_.data(); │ │ │ │ │ +163 std::vector< unsigned int > count; │ │ │ │ │ +164 for( unsigned int mydim = 0; mydim <= _d_i_m_e_n_s_i_o_n; ++mydim ) │ │ │ │ │ +165 { │ │ │ │ │ +166 count.resize( Geo::Impl::size( gt.id(), _d_i_m_e_n_s_i_o_n, _d_i_m_e_n_s_i_o_n-mydim ) ); │ │ │ │ │ +167 std::fill( count.begin(), count.end(), 0u ); │ │ │ │ │ +168 p += _e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s( gt, _d_i_m_e_n_s_i_o_n-mydim, _o_r_d_e_r(), count.data(), │ │ │ │ │ +p ); │ │ │ │ │ +169 } │ │ │ │ │ +170 const auto &refElement = referenceElement(gt); │ │ │ │ │ +171 F weight = refElement.volume()/F(double(points_.size())); │ │ │ │ │ +172 for (auto &p : points_) │ │ │ │ │ +173 p._w_e_i_g_h_t__ = weight; │ │ │ │ │ +174 } │ │ │ │ │ +175 │ │ │ │ │ +176 template< GeometryType::Id geometryId > │ │ │ │ │ +_1_7_7 bool _b_u_i_l_d () │ │ │ │ │ +178 { │ │ │ │ │ +179 _b_u_i_l_d( GeometryType( geometryId ) ); │ │ │ │ │ +180 return true; │ │ │ │ │ +181 } │ │ │ │ │ +182 │ │ │ │ │ +_1_8_3 bool _b_u_i_l_d_C_u_b_e () │ │ │ │ │ +184 { │ │ │ │ │ +185 return build< GeometryTypes::cube(dim) > (); │ │ │ │ │ +186 } │ │ │ │ │ 187 │ │ │ │ │ -_2_1_8 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ -219 { │ │ │ │ │ -220 if (global[0] + global[1] + global[2] <= 0.5) │ │ │ │ │ -221 return 0; │ │ │ │ │ -222 else if (global[0] >= 0.5) │ │ │ │ │ -223 return 1; │ │ │ │ │ -224 else if (global[1] >= 0.5) │ │ │ │ │ -225 return 2; │ │ │ │ │ -226 else if (global[2] >= 0.5) │ │ │ │ │ -227 return 3; │ │ │ │ │ -228 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5)) │ │ │ │ │ -229 return 4; │ │ │ │ │ -230 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5)) │ │ │ │ │ -231 return 5; │ │ │ │ │ -232 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5)) │ │ │ │ │ -233 return 6; │ │ │ │ │ -234 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5)) │ │ │ │ │ -235 return 7; │ │ │ │ │ -236 │ │ │ │ │ -237 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ -238 │ │ │ │ │ -239 } │ │ │ │ │ -_2_4_6 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ -247 int& subElement, │ │ │ │ │ -248 FieldVector& local) │ │ │ │ │ -249 { │ │ │ │ │ -250 if (global[0] + global[1] + global[2] <= 0.5) { │ │ │ │ │ -251 subElement = 0; │ │ │ │ │ -252 local = global; │ │ │ │ │ -253 local *= 2.0; │ │ │ │ │ -254 return; │ │ │ │ │ -255 } else if (global[0] >= 0.5) { │ │ │ │ │ -256 subElement = 1; │ │ │ │ │ -257 local = global; │ │ │ │ │ -258 local[0] -= 0.5; │ │ │ │ │ -259 local *= 2.0; │ │ │ │ │ -260 return; │ │ │ │ │ -261 } else if (global[1] >= 0.5) { │ │ │ │ │ -262 subElement = 2; │ │ │ │ │ -263 local = global; │ │ │ │ │ -264 local[1] -= 0.5; │ │ │ │ │ -265 local *= 2.0; │ │ │ │ │ -266 return; │ │ │ │ │ -267 } else if (global[2] >= 0.5) { │ │ │ │ │ -268 subElement = 3; │ │ │ │ │ -269 local = global; │ │ │ │ │ -270 local[2] -= 0.5; │ │ │ │ │ -271 local *= 2.0; │ │ │ │ │ -272 return; │ │ │ │ │ -273 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= │ │ │ │ │ -0.5)) { │ │ │ │ │ -274 subElement = 4; │ │ │ │ │ -275 local[0] = 2.0 * global[1]; │ │ │ │ │ -276 local[1] = 2.0 * (0.5 - global[0] - global[1]); │ │ │ │ │ -277 local[2] = 2.0 * (-0.5 + global[0] + global[1] + global[2]); │ │ │ │ │ -278 // Dune::FieldMatrix A(0.0); │ │ │ │ │ -279 // A[0][1] = 2.0; │ │ │ │ │ -280 // A[1][0] = -2.0; │ │ │ │ │ -281 // A[1][1] = -2.0; │ │ │ │ │ -282 // A[2][0] = 2.0; │ │ │ │ │ -283 // A[2][1] = 2.0; │ │ │ │ │ -284 // A[2][2] = 2.0; │ │ │ │ │ -285 // A.mv(global,local); │ │ │ │ │ -286 // local[1] += 1.0; │ │ │ │ │ -287 // local[2] -= 1.0; │ │ │ │ │ -288 return; │ │ │ │ │ -289 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= │ │ │ │ │ -0.5)) { │ │ │ │ │ -290 subElement = 5; │ │ │ │ │ -291 local[0] = 2.0 * (0.5 - global[0]); │ │ │ │ │ -292 local[1] = 2.0 * (0.5 - global[1] - global[2]); │ │ │ │ │ -293 local[2] = 2.0 * global[2]; │ │ │ │ │ -294 // Dune::FieldMatrix A(0.0); │ │ │ │ │ -295 // A[0][0] = -2.0; │ │ │ │ │ -296 // A[1][1] = -2.0; │ │ │ │ │ -297 // A[1][2] = -2.0; │ │ │ │ │ -298 // A[2][2] = 2.0; │ │ │ │ │ -299 // A.mv(global,local); │ │ │ │ │ -300 // local[0] += 1.0; │ │ │ │ │ -301 // local[1] += 1.0; │ │ │ │ │ -302 return; │ │ │ │ │ -303 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= │ │ │ │ │ -0.5)) { │ │ │ │ │ -304 subElement = 6; │ │ │ │ │ -305 local[0] = 2.0 * (0.5 - global[0] - global[1]); │ │ │ │ │ -306 local[1] = 2.0 * global[0]; │ │ │ │ │ -307 local[2] = 2.0 * (-0.5 + global[1] + global[2]); │ │ │ │ │ -308 // Dune::FieldMatrix A(0.0); │ │ │ │ │ -309 // A[0][0] = -2.0; │ │ │ │ │ -310 // A[0][1] = -2.0; │ │ │ │ │ -311 // A[1][0] = 2.0; │ │ │ │ │ -312 // A[2][1] = 2.0; │ │ │ │ │ -313 // A[2][2] = 2.0; │ │ │ │ │ -314 // A.mv(global,local); │ │ │ │ │ -315 // local[0] += 1.0; │ │ │ │ │ -316 // local[2] -= 1.0; │ │ │ │ │ -317 return; │ │ │ │ │ -318 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= │ │ │ │ │ -0.5)) { │ │ │ │ │ -319 subElement = 7; │ │ │ │ │ -320 local[0] = 2.0 * (-0.5 + global[1] + global[2]); │ │ │ │ │ -321 local[1] = 2.0 * (0.5 - global[1]); │ │ │ │ │ -322 local[2] = 2.0 * (-0.5 + global[0] + global[1]); │ │ │ │ │ -323 // Dune::FieldMatrix A(0.0); │ │ │ │ │ -324 // A[0][1] = 2.0; │ │ │ │ │ -325 // A[0][2] = 2.0; │ │ │ │ │ -326 // A[1][1] = -2.0; │ │ │ │ │ -327 // A[2][0] = 2.0; │ │ │ │ │ -328 // A[2][1] = 2.0; │ │ │ │ │ -329 // A.mv(global,local); │ │ │ │ │ -330 // local[0] -= 1.0; │ │ │ │ │ -331 // local[1] += 1.0; │ │ │ │ │ -332 // local[2] -= 1.0; │ │ │ │ │ -333 return; │ │ │ │ │ -334 } │ │ │ │ │ -335 │ │ │ │ │ -336 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ -337 │ │ │ │ │ -338 } │ │ │ │ │ -339 │ │ │ │ │ -340 }; │ │ │ │ │ -341 │ │ │ │ │ -342 │ │ │ │ │ -343} │ │ │ │ │ -344 │ │ │ │ │ -345#endif │ │ │ │ │ +_1_8_8 static bool _s_u_p_p_o_r_t_s ( GeometryType, std::size_t /*order*/ ) { return true; │ │ │ │ │ +} │ │ │ │ │ +189 template< GeometryType::Id geometryId> │ │ │ │ │ +_1_9_0 static bool _s_u_p_p_o_r_t_s ( std::size_t _o_r_d_e_r ) { │ │ │ │ │ +191 return _s_u_p_p_o_r_t_s( GeometryType( geometryId ), _o_r_d_e_r ); │ │ │ │ │ +192 } │ │ │ │ │ +193 │ │ │ │ │ +194 private: │ │ │ │ │ +195 using _B_a_s_e_:_:_p_o_i_n_t_s__; │ │ │ │ │ +196 }; │ │ │ │ │ +197 │ │ │ │ │ +198} // namespace Dune │ │ │ │ │ +199 │ │ │ │ │ +200#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_EQUIDISTANTPOINTS_HH │ │ │ │ │ +_f_i_e_l_d_._h_h │ │ │ │ │ +_e_m_p_t_y_p_o_i_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RefinedSimplexLocalBasis() │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RefinedSimplexLocalBasis() │ │ │ │ │ -Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ -class. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static void getSubElement(const FieldVector< D, 1 > &global, int &subElement, │ │ │ │ │ -FieldVector< D, 1 > &local) │ │ │ │ │ -Get local coordinates in the subelement. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static int getSubElement(const FieldVector< D, 1 > &global) │ │ │ │ │ -Get the number of the subelement containing a given point. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RefinedSimplexLocalBasis() │ │ │ │ │ -Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ -class. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:104 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static int getSubElement(const FieldVector< D, 2 > &global) │ │ │ │ │ -Get the number of the subtriangle containing a given point. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:121 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static void getSubElement(const FieldVector< D, 2 > &global, int &subElement, │ │ │ │ │ -FieldVector< D, 2 > &local) │ │ │ │ │ -Get local coordinates in the subtriangle. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:139 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static void getSubElement(const FieldVector< D, 3 > &global, int &subElement, │ │ │ │ │ -FieldVector< D, 3 > &local) │ │ │ │ │ -Get local coordinates in the subsimplex. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:246 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RefinedSimplexLocalBasis() │ │ │ │ │ -Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ -class. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:186 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ -static int getSubElement(const FieldVector< D, 3 > &global) │ │ │ │ │ -Get the number of the subsimplex containing a given point in the reference │ │ │ │ │ -element. │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:218 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_n_u_m_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ +std::size_t numLagrangePoints(const GeometryType >, std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_e_q_u_i_d_i_s_t_a_n_t_L_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ +static unsigned int equidistantLagrangePoints(const GeometryType >, unsigned │ │ │ │ │ +int codim, std::size_t order, unsigned int *count, LagrangePoint< ct, cdim > │ │ │ │ │ +*points) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ +constexpr unsigned int index() const noexcept │ │ │ │ │ +Return offset within subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ +constexpr unsigned int subEntity() const noexcept │ │ │ │ │ +Return number of associated subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t__ │ │ │ │ │ +Field weight_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t__ │ │ │ │ │ +Vector point_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y__ │ │ │ │ │ +LocalKey localKey_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_p_o_i_n_t_s__ │ │ │ │ │ +std::vector< LagrangePoint > points_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:147 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d │ │ │ │ │ +bool build() │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:177 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:190 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:151 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(GeometryType, std::size_t) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:188 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d │ │ │ │ │ +void build(GeometryType gt) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:157 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_b_u_i_l_d_C_u_b_e │ │ │ │ │ +bool buildCube() │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:183 │ │ │ │ │ +_D_u_n_e_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t_:_:_E_q_u_i_d_i_s_t_a_n_t_P_o_i_n_t_S_e_t │ │ │ │ │ +EquidistantPointSet(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn equidistantpoints.hh:155 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: pq22d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0localinterpolation.hh File Reference
│ │ │ │ +
pq22d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/refined/refinedp0/refinedp0localbasis.hh>
│ │ │ │ +
#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementvariant.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedP0LocalInterpolation< LB >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > >
class  Dune::PQ22DLocalFiniteElement< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp0localinterpolation.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +pq22d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00437_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: pq22d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,197 +70,132 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localinterpolation.hh
│ │ │ │ +
pq22d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PQ22DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ +
8#include <dune/common/fmatrix.hh>
│ │ │ │
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
15 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
17 {};
│ │ │ │ -
│ │ │ │ -
18
│ │ │ │ -
22 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ - │ │ │ │ -
26 typedef typename LB::Traits::DomainType DT;
│ │ │ │ -
27
│ │ │ │ -
28 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 interpolationPoints_(2)
│ │ │ │ -
31 {
│ │ │ │ -
32 // Interpolation is done by evaluating at the halved segments centers
│ │ │ │ -
33 interpolationPoints_[0][0] = 1.0/4.0;
│ │ │ │ -
34
│ │ │ │ -
35 interpolationPoints_[1][0] = 3.0/4.0;
│ │ │ │ -
36 }
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
38
│ │ │ │ -
39 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
40 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
41 {
│ │ │ │ -
42 out.resize(interpolationPoints_.size());
│ │ │ │ -
43 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ -
44 {
│ │ │ │ -
45 out[i] = f(interpolationPoints_[i]);
│ │ │ │ -
46 }
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
49 private:
│ │ │ │ -
50 std::vector<DT> interpolationPoints_;
│ │ │ │ -
51 };
│ │ │ │ -
│ │ │ │ -
52
│ │ │ │ -
56 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
58 {
│ │ │ │ - │ │ │ │ -
60 typedef typename LB::Traits::DomainType DT;
│ │ │ │ + │ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
19 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
22 public:
│ │ │ │ +
23 using Traits = typename LFEVariant::Traits;
│ │ │ │ +
24
│ │ │ │ +
│ │ │ │ +
25 PQ22DLocalFiniteElement ( const GeometryType &gt )
│ │ │ │ +
26 {
│ │ │ │ +
27 if ( gt.isTriangle() )
│ │ │ │ + │ │ │ │ +
29 else if ( gt.isQuadrilateral() )
│ │ │ │ + │ │ │ │ +
31 }
│ │ │ │ +
│ │ │ │ +
32
│ │ │ │ +
│ │ │ │ +
33 PQ22DLocalFiniteElement ( const GeometryType &gt, const std::vector<unsigned int> vertexmap )
│ │ │ │ +
34 {
│ │ │ │ +
35 if ( gt.isTriangle() )
│ │ │ │ +
36 lfeVariant_ = LagrangeSimplexLocalFiniteElement<D,R,2,2>(vertexmap);
│ │ │ │ +
37 else if ( gt.isQuadrilateral() )
│ │ │ │ + │ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return lfeVariant_.localBasis();
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ +
│ │ │ │ +
46 const typename Traits::LocalCoefficientsType& localCoefficients () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return lfeVariant_.localCoefficients();
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
51 const typename Traits::LocalInterpolationType& localInterpolation () const
│ │ │ │ +
52 {
│ │ │ │ +
53 return lfeVariant_.localInterpolation();
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
57 unsigned int size () const
│ │ │ │ +
58 {
│ │ │ │ +
59 return lfeVariant_.size();
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │
61
│ │ │ │ -
62 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
64 interpolationPoints_(4)
│ │ │ │ -
65 {
│ │ │ │ -
66 // Interpolation is done by evaluating at the subtriangle centers
│ │ │ │ -
67 interpolationPoints_[0][0] = 1.0/6;
│ │ │ │ -
68 interpolationPoints_[0][1] = 1.0/6;
│ │ │ │ -
69
│ │ │ │ -
70 interpolationPoints_[1][0] = 4.0/6;
│ │ │ │ -
71 interpolationPoints_[1][1] = 1.0/6;
│ │ │ │ -
72
│ │ │ │ -
73 interpolationPoints_[2][0] = 1.0/6;
│ │ │ │ -
74 interpolationPoints_[2][1] = 4.0/6;
│ │ │ │ -
75
│ │ │ │ -
76 interpolationPoints_[3][0] = 2.0/6;
│ │ │ │ -
77 interpolationPoints_[3][1] = 2.0/6;
│ │ │ │ -
78 }
│ │ │ │ -
│ │ │ │ -
79
│ │ │ │ -
80
│ │ │ │ -
81 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
82 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
83 {
│ │ │ │ -
84 out.resize(interpolationPoints_.size());
│ │ │ │ -
85 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ -
86 {
│ │ │ │ -
87 out[i] = f(interpolationPoints_[i]);
│ │ │ │ -
88 }
│ │ │ │ -
89 }
│ │ │ │ -
│ │ │ │ -
90
│ │ │ │ -
91 private:
│ │ │ │ -
92 std::vector<DT> interpolationPoints_;
│ │ │ │ -
93 };
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
98 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
100 {
│ │ │ │ - │ │ │ │ -
102 typedef typename LB::Traits::DomainType DT;
│ │ │ │ -
103
│ │ │ │ -
104 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
106 interpolationPoints_(8)
│ │ │ │ -
107 {
│ │ │ │ -
108 // Interpolation is done by evaluating at the subtriangle centers
│ │ │ │ -
109 interpolationPoints_[0][0] = 1.0/8;
│ │ │ │ -
110 interpolationPoints_[0][1] = 1.0/8;
│ │ │ │ -
111 interpolationPoints_[0][2] = 1.0/8;
│ │ │ │ -
112
│ │ │ │ -
113 interpolationPoints_[1][0] = 5.0/8;
│ │ │ │ -
114 interpolationPoints_[1][1] = 1.0/8;
│ │ │ │ -
115 interpolationPoints_[1][2] = 1.0/8;
│ │ │ │ -
116
│ │ │ │ -
117 interpolationPoints_[2][0] = 1.0/8;
│ │ │ │ -
118 interpolationPoints_[2][1] = 5.0/8;
│ │ │ │ -
119 interpolationPoints_[2][2] = 1.0/8;
│ │ │ │ -
120
│ │ │ │ -
121 interpolationPoints_[3][0] = 1.0/8;
│ │ │ │ -
122 interpolationPoints_[3][1] = 1.0/8;
│ │ │ │ -
123 interpolationPoints_[3][2] = 5.0/8;
│ │ │ │ -
124
│ │ │ │ -
125 interpolationPoints_[4][0] = 1.0/4;
│ │ │ │ -
126 interpolationPoints_[4][1] = 1.0/8;
│ │ │ │ -
127 interpolationPoints_[4][2] = 1.0/4;
│ │ │ │ -
128
│ │ │ │ -
129 interpolationPoints_[5][0] = 3.0/8;
│ │ │ │ -
130 interpolationPoints_[5][1] = 1.0/4;
│ │ │ │ -
131 interpolationPoints_[5][2] = 1.0/8;
│ │ │ │ -
132
│ │ │ │ -
133 interpolationPoints_[6][0] = 1.0/8;
│ │ │ │ -
134 interpolationPoints_[6][1] = 1.0/4;
│ │ │ │ -
135 interpolationPoints_[6][2] = 3.0/8;
│ │ │ │ -
136
│ │ │ │ -
137 interpolationPoints_[7][0] = 1.0/4;
│ │ │ │ -
138 interpolationPoints_[7][1] = 3.0/8;
│ │ │ │ -
139 interpolationPoints_[7][2] = 1.0/4;
│ │ │ │ -
140 }
│ │ │ │ -
│ │ │ │ -
141
│ │ │ │ -
142
│ │ │ │ -
143 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
144 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
145 {
│ │ │ │ -
146 out.resize(interpolationPoints_.size());
│ │ │ │ -
147 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ -
148 {
│ │ │ │ -
149 out[i] = f(interpolationPoints_[i]);
│ │ │ │ -
150 }
│ │ │ │ -
151 }
│ │ │ │ -
│ │ │ │ -
152
│ │ │ │ -
153 private:
│ │ │ │ -
154 std::vector<DT> interpolationPoints_;
│ │ │ │ -
155 };
│ │ │ │ -
│ │ │ │ -
156}
│ │ │ │ -
157
│ │ │ │ -
158#endif
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
62 GeometryType type () const
│ │ │ │ +
63 {
│ │ │ │ +
64 return lfeVariant_.type();
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
67 private:
│ │ │ │ +
68
│ │ │ │ +
69 LFEVariant lfeVariant_;
│ │ │ │ +
70 };
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
72}
│ │ │ │ +
73
│ │ │ │ +
74#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ -
Definition refinedp0localinterpolation.hh:17
│ │ │ │ -
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:29
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:40
│ │ │ │ -
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:63
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:82
│ │ │ │ -
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:105
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:144
│ │ │ │ + │ │ │ │ +
typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation > Traits
Export LocalFiniteElementTraits.
Definition localfiniteelementvariant.hh:269
│ │ │ │ +
unsigned int size() const
Number of shape functions.
Definition localfiniteelementvariant.hh:374
│ │ │ │ +
constexpr GeometryType type() const
Number of shape functions.
Definition localfiniteelementvariant.hh:382
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Provide access to LocalBasis implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:350
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Provide access to LocalCoefficients implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:358
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Provide access to LocalInterpolation implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:366
│ │ │ │ +
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ +
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ +
Definition pq22d.hh:19
│ │ │ │ +
typename LFEVariant::Traits Traits
Definition pq22d.hh:23
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition pq22d.hh:46
│ │ │ │ +
PQ22DLocalFiniteElement(const GeometryType &gt, const std::vector< unsigned int > vertexmap)
Definition pq22d.hh:33
│ │ │ │ +
PQ22DLocalFiniteElement(const GeometryType &gt)
Definition pq22d.hh:25
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition pq22d.hh:57
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition pq22d.hh:51
│ │ │ │ +
GeometryType type() const
Definition pq22d.hh:62
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition pq22d.hh:41
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,191 +1,156 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ -refinedp0localinterpolation.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +pq22d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PQ22DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -15 template │ │ │ │ │ -_1_6 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -17 {}; │ │ │ │ │ -18 │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ -24 { │ │ │ │ │ -25 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> _L_B; │ │ │ │ │ -26 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ -27 │ │ │ │ │ -28 public: │ │ │ │ │ -_2_9 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ -30 interpolationPoints_(2) │ │ │ │ │ -31 { │ │ │ │ │ -32 // Interpolation is done by evaluating at the halved segments centers │ │ │ │ │ -33 interpolationPoints_[0][0] = 1.0/4.0; │ │ │ │ │ -34 │ │ │ │ │ -35 interpolationPoints_[1][0] = 3.0/4.0; │ │ │ │ │ -36 } │ │ │ │ │ -37 │ │ │ │ │ -38 │ │ │ │ │ -39 template │ │ │ │ │ -_4_0 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -41 { │ │ │ │ │ -42 out.resize(interpolationPoints_.size()); │ │ │ │ │ -43 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ -44 { │ │ │ │ │ -45 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ -46 } │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -49 private: │ │ │ │ │ -50 std::vector
interpolationPoints_; │ │ │ │ │ -51 }; │ │ │ │ │ -52 │ │ │ │ │ -56 template │ │ │ │ │ -_5_7 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 template │ │ │ │ │ +_1_8 class _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +19 { │ │ │ │ │ +20 using _L_F_E_V_a_r_i_a_n_t = │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>, │ │ │ │ │ +21 _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_> >; │ │ │ │ │ +22 public: │ │ │ │ │ +_2_3 using _T_r_a_i_t_s = typename _L_F_E_V_a_r_i_a_n_t_:_:_T_r_a_i_t_s; │ │ │ │ │ +24 │ │ │ │ │ +_2_5 _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType > ) │ │ │ │ │ +26 { │ │ │ │ │ +27 if ( gt.isTriangle() ) │ │ │ │ │ +28 lfeVariant_ = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ +29 else if ( gt.isQuadrilateral() ) │ │ │ │ │ +30 lfeVariant_ = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ +31 } │ │ │ │ │ +32 │ │ │ │ │ +_3_3 _P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, const std::vector vertexmap ) │ │ │ │ │ +34 { │ │ │ │ │ +35 if ( gt.isTriangle() ) │ │ │ │ │ +36 lfeVariant_ = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(vertexmap); │ │ │ │ │ +37 else if ( gt.isQuadrilateral() ) │ │ │ │ │ +38 lfeVariant_ = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_,_2_>(); │ │ │ │ │ +39 } │ │ │ │ │ +40 │ │ │ │ │ +_4_1 const typename Traits::LocalBasisType& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +42 { │ │ │ │ │ +43 return lfeVariant_._l_o_c_a_l_B_a_s_i_s(); │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_6 const typename Traits::LocalCoefficientsType& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return lfeVariant_._l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s(); │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_1 const typename Traits::LocalInterpolationType& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +52 { │ │ │ │ │ +53 return lfeVariant_._l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n(); │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_7 unsigned int _s_i_z_e () const │ │ │ │ │ 58 { │ │ │ │ │ -59 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> _L_B; │ │ │ │ │ -60 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ +59 return lfeVariant_._s_i_z_e(); │ │ │ │ │ +60 } │ │ │ │ │ 61 │ │ │ │ │ -62 public: │ │ │ │ │ -_6_3 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ -64 interpolationPoints_(4) │ │ │ │ │ -65 { │ │ │ │ │ -66 // Interpolation is done by evaluating at the subtriangle centers │ │ │ │ │ -67 interpolationPoints_[0][0] = 1.0/6; │ │ │ │ │ -68 interpolationPoints_[0][1] = 1.0/6; │ │ │ │ │ -69 │ │ │ │ │ -70 interpolationPoints_[1][0] = 4.0/6; │ │ │ │ │ -71 interpolationPoints_[1][1] = 1.0/6; │ │ │ │ │ -72 │ │ │ │ │ -73 interpolationPoints_[2][0] = 1.0/6; │ │ │ │ │ -74 interpolationPoints_[2][1] = 4.0/6; │ │ │ │ │ -75 │ │ │ │ │ -76 interpolationPoints_[3][0] = 2.0/6; │ │ │ │ │ -77 interpolationPoints_[3][1] = 2.0/6; │ │ │ │ │ -78 } │ │ │ │ │ -79 │ │ │ │ │ -80 │ │ │ │ │ -81 template │ │ │ │ │ -_8_2 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -83 { │ │ │ │ │ -84 out.resize(interpolationPoints_.size()); │ │ │ │ │ -85 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ -86 { │ │ │ │ │ -87 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ -88 } │ │ │ │ │ -89 } │ │ │ │ │ -90 │ │ │ │ │ -91 private: │ │ │ │ │ -92 std::vector
interpolationPoints_; │ │ │ │ │ -93 }; │ │ │ │ │ -94 │ │ │ │ │ -98 template │ │ │ │ │ -_9_9 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ -100 { │ │ │ │ │ -101 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> _L_B; │ │ │ │ │ -102 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ -103 │ │ │ │ │ -104 public: │ │ │ │ │ -_1_0_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ -106 interpolationPoints_(8) │ │ │ │ │ -107 { │ │ │ │ │ -108 // Interpolation is done by evaluating at the subtriangle centers │ │ │ │ │ -109 interpolationPoints_[0][0] = 1.0/8; │ │ │ │ │ -110 interpolationPoints_[0][1] = 1.0/8; │ │ │ │ │ -111 interpolationPoints_[0][2] = 1.0/8; │ │ │ │ │ -112 │ │ │ │ │ -113 interpolationPoints_[1][0] = 5.0/8; │ │ │ │ │ -114 interpolationPoints_[1][1] = 1.0/8; │ │ │ │ │ -115 interpolationPoints_[1][2] = 1.0/8; │ │ │ │ │ -116 │ │ │ │ │ -117 interpolationPoints_[2][0] = 1.0/8; │ │ │ │ │ -118 interpolationPoints_[2][1] = 5.0/8; │ │ │ │ │ -119 interpolationPoints_[2][2] = 1.0/8; │ │ │ │ │ -120 │ │ │ │ │ -121 interpolationPoints_[3][0] = 1.0/8; │ │ │ │ │ -122 interpolationPoints_[3][1] = 1.0/8; │ │ │ │ │ -123 interpolationPoints_[3][2] = 5.0/8; │ │ │ │ │ -124 │ │ │ │ │ -125 interpolationPoints_[4][0] = 1.0/4; │ │ │ │ │ -126 interpolationPoints_[4][1] = 1.0/8; │ │ │ │ │ -127 interpolationPoints_[4][2] = 1.0/4; │ │ │ │ │ -128 │ │ │ │ │ -129 interpolationPoints_[5][0] = 3.0/8; │ │ │ │ │ -130 interpolationPoints_[5][1] = 1.0/4; │ │ │ │ │ -131 interpolationPoints_[5][2] = 1.0/8; │ │ │ │ │ -132 │ │ │ │ │ -133 interpolationPoints_[6][0] = 1.0/8; │ │ │ │ │ -134 interpolationPoints_[6][1] = 1.0/4; │ │ │ │ │ -135 interpolationPoints_[6][2] = 3.0/8; │ │ │ │ │ -136 │ │ │ │ │ -137 interpolationPoints_[7][0] = 1.0/4; │ │ │ │ │ -138 interpolationPoints_[7][1] = 3.0/8; │ │ │ │ │ -139 interpolationPoints_[7][2] = 1.0/4; │ │ │ │ │ -140 } │ │ │ │ │ -141 │ │ │ │ │ -142 │ │ │ │ │ -143 template │ │ │ │ │ -_1_4_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -145 { │ │ │ │ │ -146 out.resize(interpolationPoints_.size()); │ │ │ │ │ -147 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ -148 { │ │ │ │ │ -149 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ -150 } │ │ │ │ │ -151 } │ │ │ │ │ -152 │ │ │ │ │ -153 private: │ │ │ │ │ -154 std::vector
interpolationPoints_; │ │ │ │ │ -155 }; │ │ │ │ │ -156} │ │ │ │ │ -157 │ │ │ │ │ -158#endif │ │ │ │ │ -_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_6_2 GeometryType _t_y_p_e () const │ │ │ │ │ +63 { │ │ │ │ │ +64 return lfeVariant_._t_y_p_e(); │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +67 private: │ │ │ │ │ +68 │ │ │ │ │ +69 LFEVariant lfeVariant_; │ │ │ │ │ +70 }; │ │ │ │ │ +71 │ │ │ │ │ +72} │ │ │ │ │ +73 │ │ │ │ │ +74#endif │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:17 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _>_:_: │ │ │ │ │ -_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RefinedP0LocalInterpolation() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _>_:_: │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _>_:_: │ │ │ │ │ -_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RefinedP0LocalInterpolation() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _>_:_: │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:82 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _>_:_: │ │ │ │ │ -_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -RefinedP0LocalInterpolation() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _>_:_: │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:144 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2 │ │ │ │ │ +_>_,_ _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_ _> │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2 │ │ │ │ │ +_>_,_ _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_,_ _2_ _>_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, │ │ │ │ │ +LocalInterpolation > Traits │ │ │ │ │ +Export LocalFiniteElementTraits. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:269 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:374 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_t_y_p_e │ │ │ │ │ +constexpr GeometryType type() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:382 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Provide access to LocalBasis implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:350 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Provide access to LocalCoefficients implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:358 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Provide access to LocalInterpolation implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:366 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:19 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +typename LFEVariant::Traits Traits │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +PQ22DLocalFiniteElement(const GeometryType >, const std::vector< unsigned int │ │ │ │ │ +> vertexmap) │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +PQ22DLocalFiniteElement(const GeometryType >) │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_2_2_D_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn pq22d.hh:41 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localbasis.hh File Reference │ │ │ │ +dune-localfunctions: lagrangelfecache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,48 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
refinedp0localbasis.hh File Reference
│ │ │ │ +Namespaces | │ │ │ │ +Typedefs
│ │ │ │ +
lagrangelfecache.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>
│ │ │ │ +
#include <tuple>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/typeindex.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::RefinedP0LocalBasis< D, R, dim >
 Uniformly refined constant shape functions on a unit simplex in R^dim. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │

│ │ │ │ +Typedefs

template<class D , class R , std::size_t dim, std::size_t order>
using Dune::LagrangeLocalFiniteElementCache = LocalFiniteElementVariantCache< Impl::ImplementedLagrangeFiniteElements< D, R, dim, order > >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,32 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp0localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ +lagrangelfecache.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +TTyyppeeddeeffss │ │ │ │ │ +template │ │ │ │ │ +using  _D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e< │ │ │ │ │ + Impl::ImplementedLagrangeFiniteElements< D, R, dim, order > > │ │ │ │ │ +  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ + the given dimension and order. │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00440_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localbasis.hh Source File │ │ │ │ +dune-localfunctions: lagrangelfecache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,119 +70,145 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localbasis.hh
│ │ │ │ +
lagrangelfecache.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
38 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 : public RefinedSimplexLocalBasis<D,dim>
│ │ │ │ -
41 {
│ │ │ │ -
42 // 2 to the k-th power
│ │ │ │ -
43 constexpr static int N = 1<<dim;
│ │ │ │ -
44 public:
│ │ │ │ -
46 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ -
49 unsigned int size () const
│ │ │ │ -
50 {
│ │ │ │ -
51 return N;
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
55 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
56 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
57 {
│ │ │ │ -
58 int subElement = this->getSubElement(in);
│ │ │ │ -
59 out.resize(N);
│ │ │ │ -
60 for(int i=0; i<N; ++i)
│ │ │ │ -
61 out[i] = (i==subElement) ? 1 : 0;
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
64 inline void
│ │ │ │ -
│ │ │ │ -
65 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
66 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
67 {
│ │ │ │ -
68 out.resize(N);
│ │ │ │ -
69 for(int i=0; i<N; ++i)
│ │ │ │ -
70 out[i][0] = 0;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
│ │ │ │ -
74 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
75 const typename Traits::DomainType& in, // position
│ │ │ │ -
76 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
8#include <tuple>
│ │ │ │ +
9#include <utility>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │ +
12#include <dune/geometry/typeindex.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21
│ │ │ │ +
22namespace Dune {
│ │ │ │ +
23
│ │ │ │ +
24
│ │ │ │ +
25
│ │ │ │ +
26namespace Impl {
│ │ │ │ +
27
│ │ │ │ +
28 // Provide implemented Lagrange local finite elements
│ │ │ │ +
29
│ │ │ │ +
30 template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ +
31 struct ImplementedLagrangeFiniteElements : public FixedDimLocalGeometryTypeIndex<dim>
│ │ │ │ +
32 {
│ │ │ │ +
33 using FixedDimLocalGeometryTypeIndex<dim>::index;
│ │ │ │ +
34 static auto getImplementations()
│ │ │ │ +
35 {
│ │ │ │ +
36 return std::make_tuple(
│ │ │ │ +
37 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return LagrangeSimplexLocalFiniteElement<D,R,dim,order>(); }),
│ │ │ │ +
38 std::make_pair(index(GeometryTypes::cube(dim)), []() { return LagrangeCubeLocalFiniteElement<D,R,dim,order>(); })
│ │ │ │ +
39 );
│ │ │ │ +
40 }
│ │ │ │ +
41 };
│ │ │ │ +
42
│ │ │ │ +
43 template<class D, class R, std::size_t dim>
│ │ │ │ +
44 struct ImplementedLagrangeFiniteElements<D,R,dim,0> : public FixedDimLocalGeometryTypeIndex<dim>
│ │ │ │ +
45 {
│ │ │ │ +
46 using FixedDimLocalGeometryTypeIndex<dim>::index;
│ │ │ │ +
47 static auto getImplementations()
│ │ │ │ +
48 {
│ │ │ │ +
49 return std::make_tuple(
│ │ │ │ +
50 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::simplex(dim)); }),
│ │ │ │ +
51 std::make_pair(index(GeometryTypes::cube(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::cube(dim)); }),
│ │ │ │ +
52 std::make_pair(index(GeometryTypes::none(dim)), []() { return P0LocalFiniteElement<D,R,dim>(GeometryTypes::none(dim)); })
│ │ │ │ +
53 );
│ │ │ │ +
54 }
│ │ │ │ +
55 };
│ │ │ │ +
56
│ │ │ │ +
57 template<class D, class R>
│ │ │ │ +
58 struct ImplementedLagrangeFiniteElements<D,R,3,0> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ +
59 {
│ │ │ │ +
60 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ +
61 static auto getImplementations()
│ │ │ │ +
62 {
│ │ │ │ +
63 return std::make_tuple(
│ │ │ │ +
64 std::make_pair(index(GeometryTypes::tetrahedron), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::tetrahedron); }),
│ │ │ │ +
65 std::make_pair(index(GeometryTypes::hexahedron), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::hexahedron); }),
│ │ │ │ +
66 std::make_pair(index(GeometryTypes::prism), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::prism); }),
│ │ │ │ +
67 std::make_pair(index(GeometryTypes::pyramid), []() { return P0LocalFiniteElement<D,R,3>(GeometryTypes::pyramid); })
│ │ │ │ +
68 );
│ │ │ │ +
69 }
│ │ │ │ +
70 };
│ │ │ │ +
71
│ │ │ │ +
72 template<class D, class R>
│ │ │ │ +
73 struct ImplementedLagrangeFiniteElements<D,R,3,1> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ +
74 {
│ │ │ │ +
75 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ +
76 static auto getImplementations()
│ │ │ │
77 {
│ │ │ │ -
78 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
79 if (totalOrder == 0) {
│ │ │ │ -
80 evaluateFunction(in, out);
│ │ │ │ -
81 } else {
│ │ │ │ -
82 out.resize(size());
│ │ │ │ -
83 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
84 out[i] = 0;
│ │ │ │ -
85 }
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ -
92 unsigned int order () const
│ │ │ │ -
93 {
│ │ │ │ -
94 return 0;
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
97 };
│ │ │ │ -
│ │ │ │ -
98
│ │ │ │ -
99}
│ │ │ │ -
100#endif
│ │ │ │ -
Contains a base class for LocalBasis classes based on uniform refinement.
│ │ │ │ +
78 return std::make_tuple(
│ │ │ │ +
79 std::make_pair(index(GeometryTypes::tetrahedron), []() { return LagrangeSimplexLocalFiniteElement<D,R,3,1>(); }),
│ │ │ │ +
80 std::make_pair(index(GeometryTypes::hexahedron), []() { return LagrangeCubeLocalFiniteElement<D,R,3,1>(); }),
│ │ │ │ +
81 std::make_pair(index(GeometryTypes::prism), []() { return LagrangePrismLocalFiniteElement<D,R,1>(); }),
│ │ │ │ +
82 std::make_pair(index(GeometryTypes::pyramid), []() { return LagrangePyramidLocalFiniteElement<D,R,1>(); })
│ │ │ │ +
83 );
│ │ │ │ +
84 }
│ │ │ │ +
85 };
│ │ │ │ +
86
│ │ │ │ +
87 template<class D, class R>
│ │ │ │ +
88 struct ImplementedLagrangeFiniteElements<D,R,3,2> : public FixedDimLocalGeometryTypeIndex<3>
│ │ │ │ +
89 {
│ │ │ │ +
90 using FixedDimLocalGeometryTypeIndex<3>::index;
│ │ │ │ +
91 static auto getImplementations()
│ │ │ │ +
92 {
│ │ │ │ +
93 return std::make_tuple(
│ │ │ │ +
94 std::make_pair(index(GeometryTypes::tetrahedron), []() { return LagrangeSimplexLocalFiniteElement<D,R,3,2>(); }),
│ │ │ │ +
95 std::make_pair(index(GeometryTypes::hexahedron), []() { return LagrangeCubeLocalFiniteElement<D,R,3,2>(); }),
│ │ │ │ +
96 std::make_pair(index(GeometryTypes::prism), []() { return LagrangePrismLocalFiniteElement<D,R,2>(); }),
│ │ │ │ +
97 std::make_pair(index(GeometryTypes::pyramid), []() { return LagrangePyramidLocalFiniteElement<D,R,2>(); })
│ │ │ │ +
98 );
│ │ │ │ +
99 }
│ │ │ │ +
100 };
│ │ │ │ +
101
│ │ │ │ +
102} // namespace Impl
│ │ │ │ +
103
│ │ │ │ +
104
│ │ │ │ +
105
│ │ │ │ +
117template<class D, class R, std::size_t dim, std::size_t order>
│ │ │ │ + │ │ │ │ +
119
│ │ │ │ +
120
│ │ │ │ +
121
│ │ │ │ +
122} // namespace Dune
│ │ │ │ +
123
│ │ │ │ +
124
│ │ │ │ +
125
│ │ │ │ +
126
│ │ │ │ +
127#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ -
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ -
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp0localbasis.hh:74
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp0localbasis.hh:55
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Definition refinedp0localbasis.hh:65
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition refinedp0localbasis.hh:92
│ │ │ │ -
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
export type traits for function signature
Definition refinedp0localbasis.hh:46
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition refinedp0localbasis.hh:49
│ │ │ │ - │ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,131 +1,164 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ -refinedp0localbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangelfecache.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -38 template │ │ │ │ │ -_3_9 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -40 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -41 { │ │ │ │ │ -42 // 2 to the k-th power │ │ │ │ │ -43 constexpr static int N = 1<,R,1,Dune:: │ │ │ │ │ -FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -47 │ │ │ │ │ -_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ -50 { │ │ │ │ │ -51 return N; │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -_5_5 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -56 std::vector& out) const │ │ │ │ │ -57 { │ │ │ │ │ -58 int subElement = this->getSubElement(in); │ │ │ │ │ -59 out.resize(N); │ │ │ │ │ -60 for(int i=0; i& out) const // return value │ │ │ │ │ -67 { │ │ │ │ │ -68 out.resize(N); │ │ │ │ │ -69 for(int i=0; i& _o_r_d_e_r, │ │ │ │ │ -75 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -76 std::vector& out) const // return value │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21 │ │ │ │ │ +22namespace _D_u_n_e { │ │ │ │ │ +23 │ │ │ │ │ +24 │ │ │ │ │ +25 │ │ │ │ │ +26namespace Impl { │ │ │ │ │ +27 │ │ │ │ │ +28 // Provide implemented Lagrange local finite elements │ │ │ │ │ +29 │ │ │ │ │ +30 template │ │ │ │ │ +31 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex │ │ │ │ │ +32 { │ │ │ │ │ +33 using FixedDimLocalGeometryTypeIndex::index; │ │ │ │ │ +34 static auto getImplementations() │ │ │ │ │ +35 { │ │ │ │ │ +36 return std::make_tuple( │ │ │ │ │ +37 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return │ │ │ │ │ +LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ +38 std::make_pair(index(GeometryTypes::cube(dim)), []() { return │ │ │ │ │ +LagrangeCubeLocalFiniteElement(); }) │ │ │ │ │ +39 ); │ │ │ │ │ +40 } │ │ │ │ │ +41 }; │ │ │ │ │ +42 │ │ │ │ │ +43 template │ │ │ │ │ +44 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex │ │ │ │ │ +45 { │ │ │ │ │ +46 using FixedDimLocalGeometryTypeIndex::index; │ │ │ │ │ +47 static auto getImplementations() │ │ │ │ │ +48 { │ │ │ │ │ +49 return std::make_tuple( │ │ │ │ │ +50 std::make_pair(index(GeometryTypes::simplex(dim)), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::simplex(dim)); }), │ │ │ │ │ +51 std::make_pair(index(GeometryTypes::cube(dim)), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::cube(dim)); }), │ │ │ │ │ +52 std::make_pair(index(GeometryTypes::none(dim)), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::none(dim)); }) │ │ │ │ │ +53 ); │ │ │ │ │ +54 } │ │ │ │ │ +55 }; │ │ │ │ │ +56 │ │ │ │ │ +57 template │ │ │ │ │ +58 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ +59 { │ │ │ │ │ +60 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ +61 static auto getImplementations() │ │ │ │ │ +62 { │ │ │ │ │ +63 return std::make_tuple( │ │ │ │ │ +64 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::tetrahedron); }), │ │ │ │ │ +65 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::hexahedron); }), │ │ │ │ │ +66 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::prism); }), │ │ │ │ │ +67 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ +P0LocalFiniteElement(GeometryTypes::pyramid); }) │ │ │ │ │ +68 ); │ │ │ │ │ +69 } │ │ │ │ │ +70 }; │ │ │ │ │ +71 │ │ │ │ │ +72 template │ │ │ │ │ +73 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ +74 { │ │ │ │ │ +75 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ +76 static auto getImplementations() │ │ │ │ │ 77 { │ │ │ │ │ -78 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -79 if (totalOrder == 0) { │ │ │ │ │ -80 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -81 } else { │ │ │ │ │ -82 out.resize(_s_i_z_e()); │ │ │ │ │ -83 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -84 out[i] = 0; │ │ │ │ │ -85 } │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -_9_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ -93 { │ │ │ │ │ -94 return 0; │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -97 }; │ │ │ │ │ -98 │ │ │ │ │ -99} │ │ │ │ │ -100#endif │ │ │ │ │ -_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ +78 return std::make_tuple( │ │ │ │ │ +79 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ +LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ +80 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ +LagrangeCubeLocalFiniteElement(); }), │ │ │ │ │ +81 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ +LagrangePrismLocalFiniteElement(); }), │ │ │ │ │ +82 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ +LagrangePyramidLocalFiniteElement(); }) │ │ │ │ │ +83 ); │ │ │ │ │ +84 } │ │ │ │ │ +85 }; │ │ │ │ │ +86 │ │ │ │ │ +87 template │ │ │ │ │ +88 struct ImplementedLagrangeFiniteElements : public │ │ │ │ │ +FixedDimLocalGeometryTypeIndex<3> │ │ │ │ │ +89 { │ │ │ │ │ +90 using FixedDimLocalGeometryTypeIndex<3>::index; │ │ │ │ │ +91 static auto getImplementations() │ │ │ │ │ +92 { │ │ │ │ │ +93 return std::make_tuple( │ │ │ │ │ +94 std::make_pair(index(GeometryTypes::tetrahedron), []() { return │ │ │ │ │ +LagrangeSimplexLocalFiniteElement(); }), │ │ │ │ │ +95 std::make_pair(index(GeometryTypes::hexahedron), []() { return │ │ │ │ │ +LagrangeCubeLocalFiniteElement(); }), │ │ │ │ │ +96 std::make_pair(index(GeometryTypes::prism), []() { return │ │ │ │ │ +LagrangePrismLocalFiniteElement(); }), │ │ │ │ │ +97 std::make_pair(index(GeometryTypes::pyramid), []() { return │ │ │ │ │ +LagrangePyramidLocalFiniteElement(); }) │ │ │ │ │ +98 ); │ │ │ │ │ +99 } │ │ │ │ │ +100 }; │ │ │ │ │ +101 │ │ │ │ │ +102} // namespace Impl │ │ │ │ │ +103 │ │ │ │ │ +104 │ │ │ │ │ +105 │ │ │ │ │ +117template │ │ │ │ │ +_1_1_8using _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e = │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_I_m_p_l_:_: │ │ │ │ │ +_I_m_p_l_e_m_e_n_t_e_d_L_a_g_r_a_n_g_e_F_i_n_i_t_e_E_l_e_m_e_n_t_s_<_D_,_R_,_d_i_m_,_o_r_d_e_r_>>; │ │ │ │ │ +119 │ │ │ │ │ +120 │ │ │ │ │ +121 │ │ │ │ │ +122} // namespace Dune │ │ │ │ │ +123 │ │ │ │ │ +124 │ │ │ │ │ +125 │ │ │ │ │ +126 │ │ │ │ │ +127#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGELFECACHE_HH │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ +_p_0_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_c_a_c_h_e_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:92 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ -R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:49 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +A cache storing a compile time selection of local finite element │ │ │ │ │ +implementations. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: pk2d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0localcoefficients.hh File Reference
│ │ │ │ +
pk2d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedP0LocalCoefficients< k >
 Layout map for RefinedP0 elements. More...
class  Dune::Pk2DFiniteElement< Geometry, RF, k >
 Langrange finite element of arbitrary order on triangles. More...
 
struct  Dune::Pk2DFiniteElement< Geometry, RF, k >::Traits
 
struct  Dune::Pk2DFiniteElementFactory< Geometry, RF, k >
 Factory for Pk2DFiniteElement objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp0localcoefficients.hh File Reference │ │ │ │ │ +pk2d.hh File Reference │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _k_ _> │ │ │ │ │ -  Layout map for RefinedP0 elements. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ +  Langrange finite element of arbitrary order on triangles. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ +  Factory for _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00443_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: pk2d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,85 +70,144 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0localcoefficients.hh
│ │ │ │ +
pk2d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PK2DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │
8#include <cstddef>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16
│ │ │ │ -
24 template<unsigned int k>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27 // 2 to the k-th power
│ │ │ │ -
28 constexpr static int N = 1<<k;
│ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
32 localKeys_(N)
│ │ │ │ -
33 {
│ │ │ │ -
34 // All functions are associated to the element
│ │ │ │ -
35 for (int i = 0; i < N; ++i)
│ │ │ │ -
36 localKeys_[i] = LocalKey(0,0,i);
│ │ │ │ -
37 }
│ │ │ │ -
│ │ │ │ -
38
│ │ │ │ -
│ │ │ │ -
40 std::size_t size () const
│ │ │ │ -
41 {
│ │ │ │ -
42 return N;
│ │ │ │ -
43 }
│ │ │ │ -
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
46 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
47 {
│ │ │ │ -
48 return localKeys_[i];
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
51 private:
│ │ │ │ -
52 std::vector<LocalKey> localKeys_;
│ │ │ │ -
53
│ │ │ │ -
54 };
│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
19
│ │ │ │ +
21
│ │ │ │ +
28 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 typedef typename Geometry::ctype DF;
│ │ │ │ +
31 typedef Impl::LagrangeSimplexLocalBasis<DF,RF,2,k> LocalBasis;
│ │ │ │ +
32 typedef Impl::LagrangeSimplexLocalInterpolation<LocalBasis> LocalInterpolation;
│ │ │ │ +
33
│ │ │ │ +
34 public:
│ │ │ │ +
│ │ │ │ +
38 struct Traits {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
41 LocalInterpolation,
│ │ │ │ +
42 typename Basis::Traits
│ │ │ │ + │ │ │ │ +
44 typedef Impl::LagrangeSimplexLocalCoefficients<2,k> Coefficients;
│ │ │ │ +
45 };
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47 private:
│ │ │ │ +
48 static const GeometryType gt;
│ │ │ │ +
49 static const LocalBasis localBasis;
│ │ │ │ +
50 static const LocalInterpolation localInterpolation;
│ │ │ │ +
51
│ │ │ │ +
52 typename Traits::Basis basis_;
│ │ │ │ +
53 typename Traits::Interpolation interpolation_;
│ │ │ │ +
54 typename Traits::Coefficients coefficients_;
│ │ │ │
55
│ │ │ │ -
56}
│ │ │ │ -
57
│ │ │ │ -
58#endif
│ │ │ │ - │ │ │ │ +
56 public:
│ │ │ │ +
58
│ │ │ │ +
71 template<class VertexOrder>
│ │ │ │ +
│ │ │ │ +
72 Pk2DFiniteElement(const Geometry &geometry,
│ │ │ │ +
73 const VertexOrder& vertexOrder) :
│ │ │ │ +
74 basis_(localBasis, geometry), interpolation_(localInterpolation),
│ │ │ │ +
75 coefficients_(vertexOrder.begin(0, 0))
│ │ │ │ +
76 { }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
78 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ +
│ │ │ │ +
79 const typename Traits::Interpolation& interpolation() const
│ │ │ │ +
80 { return interpolation_; }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
81 const typename Traits::Coefficients& coefficients() const
│ │ │ │ +
82 { return coefficients_; }
│ │ │ │ +
│ │ │ │ +
83 const GeometryType &type() const { return gt; }
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
87 const GeometryType
│ │ │ │ +
88 Pk2DFiniteElement<Geometry, RF, k>::gt(GeometryTypes::simplex(2));
│ │ │ │ +
89
│ │ │ │ +
90 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
91 const typename Pk2DFiniteElement<Geometry, RF, k>::LocalBasis
│ │ │ │ +
92 Pk2DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
│ │ │ │ +
93
│ │ │ │ +
94 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
95 const typename Pk2DFiniteElement<Geometry, RF, k>::LocalInterpolation
│ │ │ │ +
96 Pk2DFiniteElement<Geometry, RF, k>::localInterpolation =
│ │ │ │ +
97 LocalInterpolation();
│ │ │ │ +
98
│ │ │ │ +
100
│ │ │ │ +
110 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
113
│ │ │ │ +
115
│ │ │ │ +
129 template<class VertexOrder>
│ │ │ │ +
│ │ │ │ +
130 const FiniteElement make(const Geometry& geometry,
│ │ │ │ +
131 const VertexOrder& vertexOrder)
│ │ │ │ +
132 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ +
│ │ │ │ +
133 };
│ │ │ │ +
│ │ │ │ +
134}
│ │ │ │ +
135
│ │ │ │ +
136#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Layout map for RefinedP0 elements.
Definition refinedp0localcoefficients.hh:26
│ │ │ │ -
RefinedP0LocalCoefficients()
Definition refinedp0localcoefficients.hh:31
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition refinedp0localcoefficients.hh:40
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition refinedp0localcoefficients.hh:46
│ │ │ │ +
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ +
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ +
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ +
Langrange finite element of arbitrary order on triangles.
Definition pk2d.hh:29
│ │ │ │ +
Pk2DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder)
construct a Pk2DFiniteElement
Definition pk2d.hh:72
│ │ │ │ +
const Traits::Interpolation & interpolation() const
Definition pk2d.hh:79
│ │ │ │ +
const Traits::Basis & basis() const
Definition pk2d.hh:78
│ │ │ │ +
const Traits::Coefficients & coefficients() const
Definition pk2d.hh:81
│ │ │ │ +
const GeometryType & type() const
Definition pk2d.hh:83
│ │ │ │ +
Definition pk2d.hh:38
│ │ │ │ +
ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis
Definition pk2d.hh:39
│ │ │ │ +
Impl::LagrangeSimplexLocalCoefficients< 2, k > Coefficients
Definition pk2d.hh:44
│ │ │ │ +
LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > Interpolation
Definition pk2d.hh:43
│ │ │ │ +
Factory for Pk2DFiniteElement objects.
Definition pk2d.hh:111
│ │ │ │ +
Pk2DFiniteElement< Geometry, RF, k > FiniteElement
Definition pk2d.hh:112
│ │ │ │ +
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct Pk2DFiniteElementFactory
Definition pk2d.hh:130
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,82 +1,158 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ -refinedp0localcoefficients.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +pk2d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PK2DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ 8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ 11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -26 { │ │ │ │ │ -27 // 2 to the k-th power │ │ │ │ │ -28 constexpr static int N = 1< localKeys_; │ │ │ │ │ -53 │ │ │ │ │ -54 }; │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +19 │ │ │ │ │ +21 │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ +30 typedef typename Geometry::ctype DF; │ │ │ │ │ +31 typedef Impl::LagrangeSimplexLocalBasis LocalBasis; │ │ │ │ │ +32 typedef Impl::LagrangeSimplexLocalInterpolation │ │ │ │ │ +LocalInterpolation; │ │ │ │ │ +33 │ │ │ │ │ +34 public: │ │ │ │ │ +_3_8 struct _T_r_a_i_t_s { │ │ │ │ │ +_3_9 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _B_a_s_i_s; │ │ │ │ │ +40 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r< │ │ │ │ │ +41 LocalInterpolation, │ │ │ │ │ +42 typename _B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +_4_3 > _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_4_4 typedef Impl::LagrangeSimplexLocalCoefficients<2,k> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +45 }; │ │ │ │ │ +46 │ │ │ │ │ +47 private: │ │ │ │ │ +48 static const GeometryType gt; │ │ │ │ │ +49 static const LocalBasis localBasis; │ │ │ │ │ +50 static const LocalInterpolation localInterpolation; │ │ │ │ │ +51 │ │ │ │ │ +52 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ +53 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +54 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ 55 │ │ │ │ │ -56} │ │ │ │ │ -57 │ │ │ │ │ -58#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +56 public: │ │ │ │ │ +58 │ │ │ │ │ +71 template │ │ │ │ │ +_7_2 _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry &geometry, │ │ │ │ │ +73 const VertexOrder& vertexOrder) : │ │ │ │ │ +74 basis_(localBasis, geometry), interpolation_(localInterpolation), │ │ │ │ │ +75 coefficients_(vertexOrder.begin(0, 0)) │ │ │ │ │ +76 { } │ │ │ │ │ +77 │ │ │ │ │ +_7_8 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ +_7_9 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +80 { return interpolation_; } │ │ │ │ │ +_8_1 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +82 { return coefficients_; } │ │ │ │ │ +_8_3 const GeometryType &_t_y_p_e() const { return gt; } │ │ │ │ │ +84 }; │ │ │ │ │ +85 │ │ │ │ │ +86 template │ │ │ │ │ +87 const GeometryType │ │ │ │ │ +88 Pk2DFiniteElement::gt(GeometryTypes::simplex(2)); │ │ │ │ │ +89 │ │ │ │ │ +90 template │ │ │ │ │ +91 const typename Pk2DFiniteElement::LocalBasis │ │ │ │ │ +92 Pk2DFiniteElement::localBasis = LocalBasis(); │ │ │ │ │ +93 │ │ │ │ │ +94 template │ │ │ │ │ +95 const typename Pk2DFiniteElement::LocalInterpolation │ │ │ │ │ +96 Pk2DFiniteElement::localInterpolation = │ │ │ │ │ +97 LocalInterpolation(); │ │ │ │ │ +98 │ │ │ │ │ +100 │ │ │ │ │ +110 template │ │ │ │ │ +_1_1_1 struct _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ +_1_1_2 typedef _P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +113 │ │ │ │ │ +115 │ │ │ │ │ +129 template │ │ │ │ │ +_1_3_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ +131 const VertexOrder& vertexOrder) │ │ │ │ │ +132 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ +133 }; │ │ │ │ │ +134} │ │ │ │ │ +135 │ │ │ │ │ +136#endif │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for RefinedP0 elements. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localcoefficients.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -RefinedP0LocalCoefficients() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localcoefficients.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localcoefficients.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localcoefficients.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ +Traits class for local-to-global basis adaptors. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local basis into a global basis. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +Convert a local interpolation into a global interpolation. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Langrange finite element of arbitrary order on triangles. │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Pk2DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder) │ │ │ │ │ +construct a Pk2DFiniteElement │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::Interpolation & interpolation() const │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ +const Traits::Basis & basis() const │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::Coefficients & coefficients() const │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:81 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +const GeometryType & type() const │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Impl::LagrangeSimplexLocalCoefficients< 2, k > Coefficients │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > │ │ │ │ │ +Interpolation │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for Pk2DFiniteElement objects. │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Pk2DFiniteElement< Geometry, RF, k > FiniteElement │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:112 │ │ │ │ │ +_D_u_n_e_:_:_P_k_2_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ +&vertexOrder) │ │ │ │ │ +construct Pk2DFiniteElementFactory │ │ │ │ │ +DDeeffiinniittiioonn pk2d.hh:130 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1.hh File Reference │ │ │ │ +dune-localfunctions: lagrangebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp1.hh File Reference
│ │ │ │ +
lagrangebasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ +#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/interpolation.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedP1LocalFiniteElement< D, R, dim >
 Piecewise linear continuous Lagrange functions on a uniformly refined simplex element. More...
struct  Dune::LagrangeBasisFactory< LP, dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp1.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_/_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +lagrangebasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Piecewise linear continuous Lagrange functions on a uniformly refined │ │ │ │ │ - simplex element. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00446_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1.hh Source File │ │ │ │ +dune-localfunctions: lagrangebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,120 +70,58 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp1.hh
│ │ │ │ +
lagrangebasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ +
5#ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ +
6#define DUNE_LAGRANGEBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <dune/common/exceptions.hh>
│ │ │ │ +
10
│ │ │ │ + │ │ │ │ + │ │ │ │ +
13
│ │ │ │ + │ │ │ │
15
│ │ │ │
16namespace Dune
│ │ │ │
17{
│ │ │ │
18
│ │ │ │ -
27 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ -
34 Impl::LagrangeSimplexLocalCoefficients<dim,2>,
│ │ │ │ -
35 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,dim,2> > > Traits;
│ │ │ │ -
36
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
40 {}
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
│ │ │ │ -
44 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
45 {
│ │ │ │ -
46 return basis_;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
52 {
│ │ │ │ -
53 return coefficients_;
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
59 {
│ │ │ │ -
60 return interpolation_;
│ │ │ │ -
61 }
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
│ │ │ │ -
64 unsigned int size () const
│ │ │ │ -
65 {
│ │ │ │ -
66 return basis_.size();
│ │ │ │ -
67 }
│ │ │ │ -
│ │ │ │ -
68
│ │ │ │ -
│ │ │ │ -
71 static constexpr GeometryType type ()
│ │ │ │ -
72 {
│ │ │ │ -
73 return GeometryTypes::simplex(dim);
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
76 private:
│ │ │ │ - │ │ │ │ -
78 Impl::LagrangeSimplexLocalCoefficients<dim,2> coefficients_;
│ │ │ │ -
79 // Yes, the template argument here really is LagrangeSimplexLocalBasis, even though this is not
│ │ │ │ -
80 // the local basis of the refined locale finite element: The reason is that LagrangeSimplexLocalInterpolation
│ │ │ │ -
81 // uses this argument to determine the polynomial order, and RefinedP1LocalBasis returns order 1
│ │ │ │ -
82 // whereas order 2 is needed here.
│ │ │ │ -
83 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,dim,2> > interpolation_;
│ │ │ │ -
84 };
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86}
│ │ │ │ -
87
│ │ │ │ -
88#endif // DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Linear Lagrange shape functions on a uniformly refined reference element.
│ │ │ │ +
19 template< template <class,unsigned int> class LP,
│ │ │ │ +
20 unsigned int dim, class SF, class CF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 : public DefaultBasisFactory< MonomialBasisFactory<dim,CF>,
│ │ │ │ +
23 LagrangeInterpolationFactory<LP,dim,CF>,
│ │ │ │ +
24 dim,1,SF,CF >
│ │ │ │ +
25 {};
│ │ │ │ +
│ │ │ │ +
26
│ │ │ │ +
27}
│ │ │ │ +
28
│ │ │ │ +
29#endif // #ifndef DUNE_LAGRANGEBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Piecewise linear continuous Lagrange functions on a uniformly refined simplex element.
Definition refinedp1.hh:29
│ │ │ │ -
static constexpr GeometryType type()
The element type that this finite element is defined on.
Definition refinedp1.hh:71
│ │ │ │ -
unsigned int size() const
Number of shape functions of this finite element.
Definition refinedp1.hh:64
│ │ │ │ -
RefinedP1LocalFiniteElement()
Default constructor.
Definition refinedp1.hh:39
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Evaluates all degrees of freedom for a given function.
Definition refinedp1.hh:58
│ │ │ │ -
LocalFiniteElementTraits< RefinedP1LocalBasis< D, R, dim >, Impl::LagrangeSimplexLocalCoefficients< dim, 2 >, Impl::LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, dim, 2 > > > Traits
Export all types used by this implementation.
Definition refinedp1.hh:35
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Produces the assignments of the degrees of freedom to the element subentities.
Definition refinedp1.hh:51
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
The set of shape functions.
Definition refinedp1.hh:44
│ │ │ │ -
Definition refinedp1localbasis.hh:23
│ │ │ │ +
Definition lagrangebasis.hh:25
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,140 +1,50 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ -refinedp1.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangebasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ +5#ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ +6#define DUNE_LAGRANGEBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_/_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ 15 │ │ │ │ │ 16namespace _D_u_n_e │ │ │ │ │ 17{ │ │ │ │ │ 18 │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 public: │ │ │ │ │ -33 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ -34 Impl::LagrangeSimplexLocalCoefficients, │ │ │ │ │ -_3_5 Impl::LagrangeSimplexLocalInterpolation > > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_9 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -40 {} │ │ │ │ │ -41 │ │ │ │ │ -_4_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -45 { │ │ │ │ │ -46 return basis_; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -52 { │ │ │ │ │ -53 return coefficients_; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -59 { │ │ │ │ │ -60 return interpolation_; │ │ │ │ │ -61 } │ │ │ │ │ -62 │ │ │ │ │ -_6_4 unsigned int _s_i_z_e () const │ │ │ │ │ -65 { │ │ │ │ │ -66 return basis_.size(); │ │ │ │ │ -67 } │ │ │ │ │ -68 │ │ │ │ │ -_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -72 { │ │ │ │ │ -73 return GeometryTypes::simplex(dim); │ │ │ │ │ -74 } │ │ │ │ │ -75 │ │ │ │ │ -76 private: │ │ │ │ │ -77 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis_; │ │ │ │ │ -78 Impl::LagrangeSimplexLocalCoefficients coefficients_; │ │ │ │ │ -79 // Yes, the template argument here really is LagrangeSimplexLocalBasis, even │ │ │ │ │ -though this is not │ │ │ │ │ -80 // the local basis of the refined locale finite element: The reason is that │ │ │ │ │ -LagrangeSimplexLocalInterpolation │ │ │ │ │ -81 // uses this argument to determine the polynomial order, and │ │ │ │ │ -RefinedP1LocalBasis returns order 1 │ │ │ │ │ -82 // whereas order 2 is needed here. │ │ │ │ │ -83 Impl::LagrangeSimplexLocalInterpolation > interpolation_; │ │ │ │ │ -84 }; │ │ │ │ │ -85 │ │ │ │ │ -86} │ │ │ │ │ -87 │ │ │ │ │ -88#endif // DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_p_0_._h_h │ │ │ │ │ -_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ +19 template< template class LP, │ │ │ │ │ +20 unsigned int dim, class SF, class CF > │ │ │ │ │ +_2_1 struct _L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +22 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< MonomialBasisFactory, │ │ │ │ │ +23 LagrangeInterpolationFactory, │ │ │ │ │ +24 dim,1,SF,CF > │ │ │ │ │ +25 {}; │ │ │ │ │ +26 │ │ │ │ │ +27} │ │ │ │ │ +28 │ │ │ │ │ +29#endif // #ifndef DUNE_LAGRANGEBASIS_HH │ │ │ │ │ +_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Piecewise linear continuous Lagrange functions on a uniformly refined simplex │ │ │ │ │ -element. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The element type that this finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions of this finite element. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:64 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RefinedP1LocalFiniteElement() │ │ │ │ │ -Default constructor. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Evaluates all degrees of freedom for a given function. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:58 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RefinedP1LocalBasis< D, R, dim >, Impl:: │ │ │ │ │ -LagrangeSimplexLocalCoefficients< dim, 2 >, Impl:: │ │ │ │ │ -LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, dim, │ │ │ │ │ -2 > > > Traits │ │ │ │ │ -Export all types used by this implementation. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Produces the assignments of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -The set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrangebasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1localbasis.hh File Reference │ │ │ │ +dune-localfunctions: p0.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,43 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp1localbasis.hh File Reference
│ │ │ │ +
p0.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ -More...

│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "p0/p0localbasis.hh"
│ │ │ │ +#include "p0/p0localcoefficients.hh"
│ │ │ │ +#include "p0/p0localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedP1LocalBasis< D, R, dim >
 
class  Dune::RefinedP1LocalBasis< D, R, 1 >
 Uniformly refined linear Lagrange shape functions in 1D. More...
 
class  Dune::RefinedP1LocalBasis< D, R, 2 >
 Uniformly refined linear Lagrange shape functions on the triangle. More...
 
class  Dune::RefinedP1LocalBasis< D, R, 3 >
 Uniformly refined linear Lagrange shape functions on the 3D-simplex (tetrahedron). More...
class  Dune::P0LocalFiniteElement< D, R, d >
 The local p0 finite element on all types of reference elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Linear Lagrange shape functions on a uniformly refined reference element.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,37 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_1 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp1localbasis.hh File Reference │ │ │ │ │ -Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ -_M_o_r_e_._._. │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +p0.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_p_0_/_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_p_0_/_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_p_0_/_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ -  Uniformly refined linear Lagrange shape functions in 1D. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ -  Uniformly refined linear Lagrange shape functions on the triangle. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ -  Uniformly refined linear Lagrange shape functions on the 3D-simplex │ │ │ │ │ - (tetrahedron). _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ +  The local p0 finite element on all types of reference elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00449_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp1localbasis.hh Source File │ │ │ │ +dune-localfunctions: p0.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,831 +70,118 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp1localbasis.hh
│ │ │ │ +
p0.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_P0LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
12#include <numeric>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/common/fmatrix.hh>
│ │ │ │ -
15
│ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ +
11#include "p0/p0localbasis.hh"
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │
17
│ │ │ │ -
18namespace Dune
│ │ │ │ -
19{
│ │ │ │ -
20 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
22 : public RefinedSimplexLocalBasis<D,dim>
│ │ │ │ -
23 {
│ │ │ │ -
24 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
26 {
│ │ │ │ -
27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim > 3.");
│ │ │ │ -
28 }
│ │ │ │ -
│ │ │ │ -
29 };
│ │ │ │ -
│ │ │ │ -
30
│ │ │ │ -
53 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 : public RefinedSimplexLocalBasis<D,1>
│ │ │ │ -
56 {
│ │ │ │ -
57 public:
│ │ │ │ -
59 typedef LocalBasisTraits<D,1,Dune::FieldVector<D,1>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
60 Dune::FieldMatrix<R,1,1> > Traits;
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
63 static constexpr unsigned int size ()
│ │ │ │ -
64 {
│ │ │ │ -
65 return 3;
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
69 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
70 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
71 {
│ │ │ │ -
72 out.resize(3);
│ │ │ │ -
73
│ │ │ │ -
74 int subElement;
│ │ │ │ -
75 typename Traits::DomainType local;
│ │ │ │ -
76 this->getSubElement(in, subElement, local);
│ │ │ │ -
77
│ │ │ │ -
78 switch (subElement) {
│ │ │ │ -
79 case 0 :
│ │ │ │ +
23 template<class D, class R, int d>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ +
26 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
34 P0LocalFiniteElement (const GeometryType& type)
│ │ │ │ +
35 : interpolation(type), gt(type)
│ │ │ │ +
36 {}
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
40 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return basis;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
48 {
│ │ │ │ +
49 return coefficients;
│ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 {
│ │ │ │ +
56 return interpolation;
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
│ │ │ │ +
60 unsigned int size () const
│ │ │ │ +
61 {
│ │ │ │ +
62 return 1;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ +
67 GeometryType type () const
│ │ │ │ +
68 {
│ │ │ │ +
69 return gt;
│ │ │ │ +
70 }
│ │ │ │ +
│ │ │ │ +
71
│ │ │ │ +
72 private:
│ │ │ │ + │ │ │ │ +
74 P0LocalCoefficients coefficients;
│ │ │ │ + │ │ │ │ +
76 GeometryType gt;
│ │ │ │ +
77 };
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79}
│ │ │ │
80
│ │ │ │ -
81 out[0] = 1 - local[0];
│ │ │ │ -
82 out[1] = local[0];
│ │ │ │ -
83 out[2] = 0;
│ │ │ │ -
84 break;
│ │ │ │ -
85
│ │ │ │ -
86 case 1 :
│ │ │ │ -
87
│ │ │ │ -
88 out[0] = 0;
│ │ │ │ -
89 out[1] = 1 - local[0];
│ │ │ │ -
90 out[2] = local[0];
│ │ │ │ -
91 break;
│ │ │ │ -
92
│ │ │ │ -
93 }
│ │ │ │ -
94
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96
│ │ │ │ -
98 inline void
│ │ │ │ -
│ │ │ │ -
99 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
100 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
101 {
│ │ │ │ -
102 out.resize(3);
│ │ │ │ -
103
│ │ │ │ -
104 int subElement;
│ │ │ │ -
105 typename Traits::DomainType local;
│ │ │ │ -
106 this->getSubElement(in, subElement, local);
│ │ │ │ -
107
│ │ │ │ -
108 switch (subElement) {
│ │ │ │ -
109 case 0 :
│ │ │ │ -
110
│ │ │ │ -
111 out[0][0][0] = -2;
│ │ │ │ -
112 out[1][0][0] = 2;
│ │ │ │ -
113 out[2][0][0] = 0;
│ │ │ │ -
114 break;
│ │ │ │ -
115
│ │ │ │ -
116 case 1 :
│ │ │ │ -
117
│ │ │ │ -
118 out[0][0][0] = 0;
│ │ │ │ -
119 out[1][0][0] = -2;
│ │ │ │ -
120 out[2][0][0] = 2;
│ │ │ │ -
121 break;
│ │ │ │ -
122
│ │ │ │ -
123 }
│ │ │ │ -
124 }
│ │ │ │ -
│ │ │ │ -
125
│ │ │ │ -
│ │ │ │ -
127 void partial (const std::array<unsigned int, 1>& order,
│ │ │ │ -
128 const typename Traits::DomainType& in, // position
│ │ │ │ -
129 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
130 {
│ │ │ │ -
131 auto totalOrder = order[0];
│ │ │ │ -
132 if (totalOrder == 0) {
│ │ │ │ -
133 evaluateFunction(in, out);
│ │ │ │ -
134 } else if (totalOrder == 1)
│ │ │ │ -
135 {
│ │ │ │ -
136 out.resize(3);
│ │ │ │ -
137
│ │ │ │ -
138 int subElement;
│ │ │ │ -
139 typename Traits::DomainType local;
│ │ │ │ -
140 this->getSubElement(in, subElement, local);
│ │ │ │ -
141
│ │ │ │ -
142 switch (subElement) {
│ │ │ │ -
143 case 0:
│ │ │ │ -
144 out[0] = -2;
│ │ │ │ -
145 out[1] = 2;
│ │ │ │ -
146 out[2] = 0;
│ │ │ │ -
147 break;
│ │ │ │ -
148 case 1:
│ │ │ │ -
149 out[0] = 0;
│ │ │ │ -
150 out[1] = -2;
│ │ │ │ -
151 out[2] = 2;
│ │ │ │ -
152 break;
│ │ │ │ -
153 }
│ │ │ │ -
154 } else {
│ │ │ │ -
155 out.resize(3);
│ │ │ │ -
156 out[0] = out[1] = out[2] = 0;
│ │ │ │ -
157 }
│ │ │ │ -
158 }
│ │ │ │ -
│ │ │ │ -
159
│ │ │ │ -
│ │ │ │ -
163 static constexpr unsigned int order ()
│ │ │ │ -
164 {
│ │ │ │ -
165 return 1;
│ │ │ │ -
166 }
│ │ │ │ -
│ │ │ │ -
167
│ │ │ │ -
168 };
│ │ │ │ -
│ │ │ │ -
169
│ │ │ │ -
195 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
197 : public RefinedSimplexLocalBasis<D,2>
│ │ │ │ -
198 {
│ │ │ │ -
199 public:
│ │ │ │ -
201 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
202 Dune::FieldMatrix<R,1,2> > Traits;
│ │ │ │ -
203
│ │ │ │ -
│ │ │ │ -
205 static constexpr unsigned int size ()
│ │ │ │ -
206 {
│ │ │ │ -
207 return 6;
│ │ │ │ -
208 }
│ │ │ │ -
│ │ │ │ -
209
│ │ │ │ -
│ │ │ │ -
211 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
212 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
213 {
│ │ │ │ -
214 out.resize(6);
│ │ │ │ -
215
│ │ │ │ -
216 int subElement;
│ │ │ │ -
217 typename Traits::DomainType local;
│ │ │ │ -
218 this->getSubElement(in, subElement, local);
│ │ │ │ -
219
│ │ │ │ -
220 switch (subElement) {
│ │ │ │ -
221 case 0 :
│ │ │ │ -
222
│ │ │ │ -
223 out[0] = 1 - local[0] - local[1];
│ │ │ │ -
224 out[1] = local[0];
│ │ │ │ -
225 out[2] = 0;
│ │ │ │ -
226 out[3] = local[1];
│ │ │ │ -
227 out[4] = 0;
│ │ │ │ -
228 out[5] = 0;
│ │ │ │ -
229 break;
│ │ │ │ -
230
│ │ │ │ -
231 case 1 :
│ │ │ │ -
232
│ │ │ │ -
233 out[0] = 0;
│ │ │ │ -
234 out[1] = 1 - local[0] - local[1];
│ │ │ │ -
235 out[2] = local[0];
│ │ │ │ -
236 out[3] = 0;
│ │ │ │ -
237 out[4] = local[1];
│ │ │ │ -
238 out[5] = 0;
│ │ │ │ -
239 break;
│ │ │ │ -
240
│ │ │ │ -
241 case 2 :
│ │ │ │ -
242
│ │ │ │ -
243 out[0] = 0;
│ │ │ │ -
244 out[1] = 0;
│ │ │ │ -
245 out[2] = 0;
│ │ │ │ -
246 out[3] = 1 - local[0] - local[1];
│ │ │ │ -
247 out[4] = local[0];
│ │ │ │ -
248 out[5] = local[1];
│ │ │ │ -
249 break;
│ │ │ │ -
250 case 3 :
│ │ │ │ -
251
│ │ │ │ -
252 out[0] = 0;
│ │ │ │ -
253 out[1] = local[1];
│ │ │ │ -
254 out[2] = 0;
│ │ │ │ -
255 out[3] = local[0];
│ │ │ │ -
256 out[4] = 1 - local[0] - local[1];
│ │ │ │ -
257 out[5] = 0;
│ │ │ │ -
258 }
│ │ │ │ -
259
│ │ │ │ -
260 }
│ │ │ │ -
│ │ │ │ -
261
│ │ │ │ -
263 inline void
│ │ │ │ -
│ │ │ │ -
264 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
265 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
266 {
│ │ │ │ -
267 out.resize(6);
│ │ │ │ -
268
│ │ │ │ -
269 int subElement;
│ │ │ │ -
270 typename Traits::DomainType local;
│ │ │ │ -
271 this->getSubElement(in, subElement, local);
│ │ │ │ -
272
│ │ │ │ -
273 switch (subElement) {
│ │ │ │ -
274 case 0 :
│ │ │ │ -
275
│ │ │ │ -
276 out[0][0][0] = -2; out[0][0][1] = -2;
│ │ │ │ -
277 out[1][0][0] = 2; out[1][0][1] = 0;
│ │ │ │ -
278 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ -
279 out[3][0][0] = 0; out[3][0][1] = 2;
│ │ │ │ -
280 out[4][0][0] = 0; out[4][0][1] = 0;
│ │ │ │ -
281 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ -
282 break;
│ │ │ │ -
283
│ │ │ │ -
284 case 1 :
│ │ │ │ -
285
│ │ │ │ -
286 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ -
287 out[1][0][0] = -2; out[1][0][1] = -2;
│ │ │ │ -
288 out[2][0][0] = 2; out[2][0][1] = 0;
│ │ │ │ -
289 out[3][0][0] = 0; out[3][0][1] = 0;
│ │ │ │ -
290 out[4][0][0] = 0; out[4][0][1] = 2;
│ │ │ │ -
291 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ -
292 break;
│ │ │ │ -
293
│ │ │ │ -
294 case 2 :
│ │ │ │ -
295
│ │ │ │ -
296 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ -
297 out[1][0][0] = 0; out[1][0][1] = 0;
│ │ │ │ -
298 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ -
299 out[3][0][0] = -2; out[3][0][1] = -2;
│ │ │ │ -
300 out[4][0][0] = 2; out[4][0][1] = 0;
│ │ │ │ -
301 out[5][0][0] = 0; out[5][0][1] = 2;
│ │ │ │ -
302 break;
│ │ │ │ -
303 case 3 :
│ │ │ │ -
304
│ │ │ │ -
305 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ -
306 out[1][0][0] = 0; out[1][0][1] = -2;
│ │ │ │ -
307 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ -
308 out[3][0][0] = -2; out[3][0][1] = 0;
│ │ │ │ -
309 out[4][0][0] = 2; out[4][0][1] = 2;
│ │ │ │ -
310 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ -
311 }
│ │ │ │ -
312 }
│ │ │ │ -
│ │ │ │ -
313
│ │ │ │ -
│ │ │ │ -
315 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
316 const typename Traits::DomainType& in, // position
│ │ │ │ -
317 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
318 {
│ │ │ │ -
319 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
320 if (totalOrder == 0) {
│ │ │ │ -
321 evaluateFunction(in, out);
│ │ │ │ -
322 } else if (totalOrder == 1) {
│ │ │ │ -
323 int subElement;
│ │ │ │ -
324 typename Traits::DomainType local;
│ │ │ │ -
325 this->getSubElement(in, subElement, local);
│ │ │ │ -
326
│ │ │ │ -
327 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
328 out.resize(size());
│ │ │ │ -
329
│ │ │ │ -
330 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
331 out[i] = 0;
│ │ │ │ -
332
│ │ │ │ -
333 switch (direction) {
│ │ │ │ -
334 case 0: // direction == 0
│ │ │ │ -
335
│ │ │ │ -
336 switch (subElement) {
│ │ │ │ -
337 case 0 :
│ │ │ │ -
338 out[0] = -2;
│ │ │ │ -
339 out[1] = 2;
│ │ │ │ -
340 break;
│ │ │ │ -
341 case 1 :
│ │ │ │ -
342 out[1] = -2;
│ │ │ │ -
343 out[2] = 2;
│ │ │ │ -
344 break;
│ │ │ │ -
345 case 2 :
│ │ │ │ -
346 out[3] = -2;
│ │ │ │ -
347 out[4] = 2;
│ │ │ │ -
348 break;
│ │ │ │ -
349 case 3 :
│ │ │ │ -
350 out[3] = -2;
│ │ │ │ -
351 out[4] = 2;
│ │ │ │ -
352 }
│ │ │ │ -
353 break;
│ │ │ │ -
354
│ │ │ │ -
355 case 1: // direction == 1
│ │ │ │ -
356
│ │ │ │ -
357 switch (subElement) {
│ │ │ │ -
358 case 0 :
│ │ │ │ -
359 out[0] = -2;
│ │ │ │ -
360 out[3] = 2;
│ │ │ │ -
361 break;
│ │ │ │ -
362 case 1 :
│ │ │ │ -
363 out[1] = -2;
│ │ │ │ -
364 out[4] = 2;
│ │ │ │ -
365 break;
│ │ │ │ -
366 case 2 :
│ │ │ │ -
367 out[3] = -2;
│ │ │ │ -
368 out[5] = 2;
│ │ │ │ -
369 break;
│ │ │ │ -
370 case 3 :
│ │ │ │ -
371 out[1] = -2;
│ │ │ │ -
372 out[4] = 2;
│ │ │ │ -
373 }
│ │ │ │ -
374 break;
│ │ │ │ -
375
│ │ │ │ -
376 default:
│ │ │ │ -
377 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
378 }
│ │ │ │ -
379 } else {
│ │ │ │ -
380 out.resize(size());
│ │ │ │ -
381 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
382 out[i] = 0;
│ │ │ │ -
383 }
│ │ │ │ -
384 }
│ │ │ │ -
│ │ │ │ -
385
│ │ │ │ -
│ │ │ │ -
389 static constexpr unsigned int order ()
│ │ │ │ -
390 {
│ │ │ │ -
391 return 1;
│ │ │ │ -
392 }
│ │ │ │ -
│ │ │ │ -
393
│ │ │ │ -
394 };
│ │ │ │ -
│ │ │ │ -
395
│ │ │ │ -
425 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
427 : public RefinedSimplexLocalBasis<D,3>
│ │ │ │ -
428 {
│ │ │ │ -
429 public:
│ │ │ │ -
431 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
432 Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │ -
433
│ │ │ │ -
│ │ │ │ -
435 static constexpr unsigned int size ()
│ │ │ │ -
436 {
│ │ │ │ -
437 return 10;
│ │ │ │ -
438 }
│ │ │ │ -
│ │ │ │ -
439
│ │ │ │ -
│ │ │ │ -
441 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
442 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
443 {
│ │ │ │ -
444 out.resize(10);
│ │ │ │ -
445
│ │ │ │ -
446 int subElement;
│ │ │ │ -
447 typename Traits::DomainType local;
│ │ │ │ -
448 this->getSubElement(in, subElement, local);
│ │ │ │ -
449
│ │ │ │ -
450 switch (subElement) {
│ │ │ │ -
451 case 0 :
│ │ │ │ -
452
│ │ │ │ -
453 out[0] = 1 - local[0] - local[1] - local[2];
│ │ │ │ -
454 out[1] = local[0];
│ │ │ │ -
455 out[2] = 0;
│ │ │ │ -
456 out[3] = local[1];
│ │ │ │ -
457 out[4] = 0;
│ │ │ │ -
458 out[5] = 0;
│ │ │ │ -
459 out[6] = local[2];
│ │ │ │ -
460 out[7] = 0;
│ │ │ │ -
461 out[8] = 0;
│ │ │ │ -
462 out[9] = 0;
│ │ │ │ -
463 break;
│ │ │ │ -
464
│ │ │ │ -
465 case 1 :
│ │ │ │ -
466
│ │ │ │ -
467 out[0] = 0;
│ │ │ │ -
468 out[1] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
469 out[2] = local[0];
│ │ │ │ -
470 out[3] = 0;
│ │ │ │ -
471 out[4] = local[1];
│ │ │ │ -
472 out[5] = 0;
│ │ │ │ -
473 out[6] = 0;
│ │ │ │ -
474 out[7] = local[2];
│ │ │ │ -
475 out[8] = 0;
│ │ │ │ -
476 out[9] = 0;
│ │ │ │ -
477 break;
│ │ │ │ -
478
│ │ │ │ -
479 case 2 :
│ │ │ │ -
480
│ │ │ │ -
481 out[0] = 0;
│ │ │ │ -
482 out[1] = 0;
│ │ │ │ -
483 out[2] = 0;
│ │ │ │ -
484 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
485 out[4] = local[0];
│ │ │ │ -
486 out[5] = local[1];
│ │ │ │ -
487 out[6] = 0;
│ │ │ │ -
488 out[7] = 0;
│ │ │ │ -
489 out[8] = local[2];
│ │ │ │ -
490 out[9] = 0;
│ │ │ │ -
491 break;
│ │ │ │ -
492
│ │ │ │ -
493 case 3 :
│ │ │ │ -
494
│ │ │ │ -
495 out[0] = 0;
│ │ │ │ -
496 out[1] = 0;
│ │ │ │ -
497 out[2] = 0;
│ │ │ │ -
498 out[3] = 0;
│ │ │ │ -
499 out[4] = 0;
│ │ │ │ -
500 out[5] = 0;
│ │ │ │ -
501 out[6] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
502 out[7] = local[0];
│ │ │ │ -
503 out[8] = local[1];
│ │ │ │ -
504 out[9] = local[2];
│ │ │ │ -
505 break;
│ │ │ │ -
506
│ │ │ │ -
507 case 4 :
│ │ │ │ -
508
│ │ │ │ -
509 out[0] = 0;
│ │ │ │ -
510 out[1] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
511 out[2] = 0;
│ │ │ │ -
512 out[3] = local[0];
│ │ │ │ -
513 out[4] = 0;
│ │ │ │ -
514 out[5] = 0;
│ │ │ │ -
515 out[6] = local[1];
│ │ │ │ -
516 out[7] = local[2];
│ │ │ │ -
517 out[8] = 0;
│ │ │ │ -
518 out[9] = 0;
│ │ │ │ -
519 break;
│ │ │ │ -
520
│ │ │ │ -
521 case 5 :
│ │ │ │ -
522
│ │ │ │ -
523 out[0] = 0;
│ │ │ │ -
524 out[1] = local[1];
│ │ │ │ -
525 out[2] = 0;
│ │ │ │ -
526 out[3] = local[0];
│ │ │ │ -
527 out[4] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
528 out[5] = 0;
│ │ │ │ -
529 out[6] = 0;
│ │ │ │ -
530 out[7] = local[2];
│ │ │ │ -
531 out[8] = 0;
│ │ │ │ -
532 out[9] = 0;
│ │ │ │ -
533 break;
│ │ │ │ -
534
│ │ │ │ -
535 case 6 :
│ │ │ │ -
536
│ │ │ │ -
537 out[0] = 0;
│ │ │ │ -
538 out[1] = 0;
│ │ │ │ -
539 out[2] = 0;
│ │ │ │ -
540 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
541 out[4] = 0;
│ │ │ │ -
542 out[5] = 0;
│ │ │ │ -
543 out[6] = local[0];
│ │ │ │ -
544 out[7] = local[1];
│ │ │ │ -
545 out[8] = local[2];
│ │ │ │ -
546 out[9] = 0;
│ │ │ │ -
547 break;
│ │ │ │ -
548
│ │ │ │ -
549 case 7 :
│ │ │ │ -
550
│ │ │ │ -
551 out[0] = 0;
│ │ │ │ -
552 out[1] = 0;
│ │ │ │ -
553 out[2] = 0;
│ │ │ │ -
554 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ -
555 out[4] = local[2];
│ │ │ │ -
556 out[5] = 0;
│ │ │ │ -
557 out[6] = 0;
│ │ │ │ -
558 out[7] = local[1];
│ │ │ │ -
559 out[8] = local[0];
│ │ │ │ -
560 out[9] = 0;
│ │ │ │ -
561 break;
│ │ │ │ -
562 }
│ │ │ │ -
563
│ │ │ │ -
564 }
│ │ │ │ -
│ │ │ │ -
565
│ │ │ │ -
567 inline void
│ │ │ │ -
│ │ │ │ -
568 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
569 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
570 {
│ │ │ │ -
571 out.resize(10);
│ │ │ │ -
572
│ │ │ │ -
573 int subElement;
│ │ │ │ -
574 typename Traits::DomainType local;
│ │ │ │ -
575 this->getSubElement(in, subElement, local);
│ │ │ │ -
576
│ │ │ │ -
577 switch (subElement) {
│ │ │ │ -
578 case 0 :
│ │ │ │ -
579
│ │ │ │ -
580 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2;
│ │ │ │ -
581 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
582 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
583 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
│ │ │ │ -
584 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
585 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
586 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2;
│ │ │ │ -
587 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ -
588 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ -
589 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
590 break;
│ │ │ │ -
591
│ │ │ │ -
592 case 1 :
│ │ │ │ -
593
│ │ │ │ -
594 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
595 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ -
596 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
597 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ -
598 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ -
599 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
600 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ -
601 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
│ │ │ │ -
602 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ -
603 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
604 break;
│ │ │ │ -
605
│ │ │ │ -
606 case 2 :
│ │ │ │ -
607
│ │ │ │ -
608 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
609 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
610 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
611 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
│ │ │ │ -
612 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
613 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0;
│ │ │ │ -
614 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ -
615 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ -
616 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2;
│ │ │ │ -
617 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
618 break;
│ │ │ │ -
619
│ │ │ │ -
620 case 3 :
│ │ │ │ -
621
│ │ │ │ -
622 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
623 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
624 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
625 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ -
626 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
627 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
628 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2;
│ │ │ │ -
629 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ -
630 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0;
│ │ │ │ -
631 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2;
│ │ │ │ -
632 break;
│ │ │ │ -
633
│ │ │ │ -
634 case 4 :
│ │ │ │ -
635
│ │ │ │ -
636 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
637 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ -
638 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
639 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
│ │ │ │ -
640 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
641 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
642 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
│ │ │ │ -
643 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2;
│ │ │ │ -
644 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ -
645 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
646 break;
│ │ │ │ -
647
│ │ │ │ -
648 case 5 :
│ │ │ │ -
649
│ │ │ │ -
650 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
651 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ -
652 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
653 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ -
654 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ -
655 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
656 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ -
657 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
│ │ │ │ -
658 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ -
659 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
660 break;
│ │ │ │ -
661
│ │ │ │ -
662 case 6 :
│ │ │ │ -
663
│ │ │ │ -
664 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
665 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
666 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
667 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2;
│ │ │ │ -
668 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ -
669 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
670 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
│ │ │ │ -
671 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ -
672 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
│ │ │ │ -
673 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
674 break;
│ │ │ │ -
675
│ │ │ │ -
676 case 7 :
│ │ │ │ -
677
│ │ │ │ -
678 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ -
679 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ -
680 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
681 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
│ │ │ │ -
682 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ -
683 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ -
684 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ -
685 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0;
│ │ │ │ -
686 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
│ │ │ │ -
687 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ -
688 break;
│ │ │ │ -
689 }
│ │ │ │ -
690 }
│ │ │ │ -
│ │ │ │ -
691
│ │ │ │ -
│ │ │ │ -
693 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
694 const typename Traits::DomainType& in, // position
│ │ │ │ -
695 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
696 {
│ │ │ │ -
697 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
698 if (totalOrder == 0) {
│ │ │ │ -
699 evaluateFunction(in, out);
│ │ │ │ -
700 } else if (totalOrder == 1) {
│ │ │ │ -
701 int subElement;
│ │ │ │ -
702 typename Traits::DomainType local;
│ │ │ │ -
703 this->getSubElement(in, subElement, local);
│ │ │ │ -
704
│ │ │ │ -
705 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
706 out.resize(size());
│ │ │ │ -
707
│ │ │ │ -
708 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
709 out[i] = 0;
│ │ │ │ -
710
│ │ │ │ -
711 switch (direction) {
│ │ │ │ -
712 case 0: // direction == 0
│ │ │ │ -
713
│ │ │ │ -
714 switch (subElement) {
│ │ │ │ -
715 case 0 :
│ │ │ │ -
716 out[0] = -2;
│ │ │ │ -
717 out[1] = 2;
│ │ │ │ -
718 break;
│ │ │ │ -
719 case 1 :
│ │ │ │ -
720 out[1] = -2;
│ │ │ │ -
721 out[2] = 2;
│ │ │ │ -
722 break;
│ │ │ │ -
723 case 2 :
│ │ │ │ -
724 out[3] = -2;
│ │ │ │ -
725 out[4] = 2;
│ │ │ │ -
726 break;
│ │ │ │ -
727 case 3 :
│ │ │ │ -
728 out[6] = -2;
│ │ │ │ -
729 out[7] = 2;
│ │ │ │ -
730 break;
│ │ │ │ -
731 case 4 :
│ │ │ │ -
732 out[6] = -2;
│ │ │ │ -
733 out[7] = 2;
│ │ │ │ -
734 break;
│ │ │ │ -
735 case 5 :
│ │ │ │ -
736 out[3] = -2;
│ │ │ │ -
737 out[4] = 2;
│ │ │ │ -
738 break;
│ │ │ │ -
739 case 6 :
│ │ │ │ -
740 out[6] = -2;
│ │ │ │ -
741 out[7] = 2;
│ │ │ │ -
742 break;
│ │ │ │ -
743 case 7 :
│ │ │ │ -
744 out[3] = -2;
│ │ │ │ -
745 out[4] = 2;
│ │ │ │ -
746 break;
│ │ │ │ -
747 }
│ │ │ │ -
748 break;
│ │ │ │ -
749
│ │ │ │ -
750 case 1: // direction == 1
│ │ │ │ -
751
│ │ │ │ -
752 switch (subElement) {
│ │ │ │ -
753 case 0 :
│ │ │ │ -
754 out[0] = -2;
│ │ │ │ -
755 out[3] = 2;
│ │ │ │ -
756 break;
│ │ │ │ -
757 case 1 :
│ │ │ │ -
758 out[1] = -2;
│ │ │ │ -
759 out[4] = 2;
│ │ │ │ -
760 break;
│ │ │ │ -
761 case 2 :
│ │ │ │ -
762 out[3] = -2;
│ │ │ │ -
763 out[5] = 2;
│ │ │ │ -
764 break;
│ │ │ │ -
765 case 3 :
│ │ │ │ -
766 out[6] = -2;
│ │ │ │ -
767 out[8] = 2;
│ │ │ │ -
768 break;
│ │ │ │ -
769 case 4 :
│ │ │ │ -
770 out[1] = -2;
│ │ │ │ -
771 out[3] = 2;
│ │ │ │ -
772 out[6] = -2;
│ │ │ │ -
773 break;
│ │ │ │ -
774 case 5 :
│ │ │ │ -
775 out[1] = -2;
│ │ │ │ -
776 out[4] = 2;
│ │ │ │ -
777 break;
│ │ │ │ -
778 case 6 :
│ │ │ │ -
779 out[6] = -2;
│ │ │ │ -
780 out[8] = 2;
│ │ │ │ -
781 break;
│ │ │ │ -
782 case 7 :
│ │ │ │ -
783 out[3] = -2;
│ │ │ │ -
784 out[4] = 2;
│ │ │ │ -
785 out[7] = -2;
│ │ │ │ -
786 out[8] = 2;
│ │ │ │ -
787 break;
│ │ │ │ -
788 }
│ │ │ │ -
789 break;
│ │ │ │ -
790
│ │ │ │ -
791 case 2: // direction == 2
│ │ │ │ -
792
│ │ │ │ -
793 switch (subElement) {
│ │ │ │ -
794 case 0 :
│ │ │ │ -
795 out[0] = -2;
│ │ │ │ -
796 out[6] = 2;
│ │ │ │ -
797 break;
│ │ │ │ -
798 case 1 :
│ │ │ │ -
799 out[1] = -2;
│ │ │ │ -
800 out[7] = 2;
│ │ │ │ -
801 break;
│ │ │ │ -
802 case 2 :
│ │ │ │ -
803 out[3] = -2;
│ │ │ │ -
804 out[8] = 2;
│ │ │ │ -
805 break;
│ │ │ │ -
806 case 3 :
│ │ │ │ -
807 out[6] = -2;
│ │ │ │ -
808 out[9] = 2;
│ │ │ │ -
809 break;
│ │ │ │ -
810 case 4 :
│ │ │ │ -
811 out[1] = -2;
│ │ │ │ -
812 out[7] = 2;
│ │ │ │ -
813 break;
│ │ │ │ -
814 case 5 :
│ │ │ │ -
815 out[1] = -2;
│ │ │ │ -
816 out[7] = 2;
│ │ │ │ -
817 break;
│ │ │ │ -
818 case 6 :
│ │ │ │ -
819 out[3] = -2;
│ │ │ │ -
820 out[8] = 2;
│ │ │ │ -
821 break;
│ │ │ │ -
822 case 7 :
│ │ │ │ -
823 out[3] = -2;
│ │ │ │ -
824 out[8] = 2;
│ │ │ │ -
825 break;
│ │ │ │ -
826 }
│ │ │ │ -
827 break;
│ │ │ │ -
828
│ │ │ │ -
829 default:
│ │ │ │ -
830 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
831 }
│ │ │ │ -
832 } else {
│ │ │ │ -
833 out.resize(size());
│ │ │ │ -
834 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ -
835 out[i] = 0;
│ │ │ │ -
836 }
│ │ │ │ -
837 }
│ │ │ │ -
│ │ │ │ -
838
│ │ │ │ -
│ │ │ │ -
842 static constexpr unsigned int order ()
│ │ │ │ -
843 {
│ │ │ │ -
844 return 1;
│ │ │ │ -
845 }
│ │ │ │ -
│ │ │ │ -
846
│ │ │ │ -
847 };
│ │ │ │ -
│ │ │ │ -
848}
│ │ │ │ -
849#endif
│ │ │ │ -
Contains a base class for LocalBasis classes based on uniform refinement.
│ │ │ │ +
81#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ -
Definition refinedp1localbasis.hh:23
│ │ │ │ -
RefinedP1LocalBasis()
Definition refinedp1localbasis.hh:25
│ │ │ │ -
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:60
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:99
│ │ │ │ -
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:163
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:69
│ │ │ │ -
void partial(const std::array< unsigned int, 1 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:127
│ │ │ │ -
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:63
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:264
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:202
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:211
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:315
│ │ │ │ -
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:389
│ │ │ │ -
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:205
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:693
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:441
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:432
│ │ │ │ -
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:435
│ │ │ │ -
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:842
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:568
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
The local p0 finite element on all types of reference elements.
Definition p0.hh:25
│ │ │ │ +
P0LocalFiniteElement(const GeometryType &type)
Definition p0.hh:34
│ │ │ │ +
unsigned int size() const
The number of shape functions – here: 1.
Definition p0.hh:60
│ │ │ │ +
GeometryType type() const
Definition p0.hh:67
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition p0.hh:40
│ │ │ │ +
LocalFiniteElementTraits< P0LocalBasis< D, R, d >, P0LocalCoefficients, P0LocalInterpolation< P0LocalBasis< D, R, d > > > Traits
Definition p0.hh:30
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition p0.hh:47
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition p0.hh:54
│ │ │ │ +
Definition p0localbasis.hh:31
│ │ │ │ +
Definition p0localcoefficients.hh:25
│ │ │ │ +
Definition p0localinterpolation.hh:20
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,869 +1,125 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ - * _r_e_f_i_n_e_d_p_1 │ │ │ │ │ -refinedp1localbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +p0.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_P0LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_P0LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include "_p_0_/_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +12#include "_p_0_/_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +13#include "_p_0_/_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ 17 │ │ │ │ │ -18namespace _D_u_n_e │ │ │ │ │ -19{ │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -22 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -23 { │ │ │ │ │ -24 public: │ │ │ │ │ -_2_5 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ -26 { │ │ │ │ │ -27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim │ │ │ │ │ -> 3."); │ │ │ │ │ -28 } │ │ │ │ │ -29 }; │ │ │ │ │ -30 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -55 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -56 { │ │ │ │ │ -57 public: │ │ │ │ │ -59 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_1_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_1_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_6_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -61 │ │ │ │ │ -_6_3 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -64 { │ │ │ │ │ -65 return 3; │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_6_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -70 std::vector& out) const │ │ │ │ │ -71 { │ │ │ │ │ -72 out.resize(3); │ │ │ │ │ -73 │ │ │ │ │ -74 int subElement; │ │ │ │ │ -75 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -76 this->getSubElement(in, subElement, local); │ │ │ │ │ -77 │ │ │ │ │ -78 switch (subElement) { │ │ │ │ │ -79 case 0 : │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 class _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +25 { │ │ │ │ │ +26 public: │ │ │ │ │ +29 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_>, _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ +_3_0 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> > > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_4 _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (const GeometryType& _t_y_p_e) │ │ │ │ │ +35 : interpolation(_t_y_p_e), gt(_t_y_p_e) │ │ │ │ │ +36 {} │ │ │ │ │ +37 │ │ │ │ │ +_4_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +41 { │ │ │ │ │ +42 return basis; │ │ │ │ │ +43 } │ │ │ │ │ +44 │ │ │ │ │ +_4_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +48 { │ │ │ │ │ +49 return coefficients; │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +_5_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +55 { │ │ │ │ │ +56 return interpolation; │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +_6_0 unsigned int _s_i_z_e () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return 1; │ │ │ │ │ +63 } │ │ │ │ │ +64 │ │ │ │ │ +_6_7 GeometryType _t_y_p_e () const │ │ │ │ │ +68 { │ │ │ │ │ +69 return gt; │ │ │ │ │ +70 } │ │ │ │ │ +71 │ │ │ │ │ +72 private: │ │ │ │ │ +73 _P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> basis; │ │ │ │ │ +74 _P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ +75 _P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_> > interpolation; │ │ │ │ │ +76 GeometryType gt; │ │ │ │ │ +77 }; │ │ │ │ │ +78 │ │ │ │ │ +79} │ │ │ │ │ 80 │ │ │ │ │ -81 out[0] = 1 - local[0]; │ │ │ │ │ -82 out[1] = local[0]; │ │ │ │ │ -83 out[2] = 0; │ │ │ │ │ -84 break; │ │ │ │ │ -85 │ │ │ │ │ -86 case 1 : │ │ │ │ │ -87 │ │ │ │ │ -88 out[0] = 0; │ │ │ │ │ -89 out[1] = 1 - local[0]; │ │ │ │ │ -90 out[2] = local[0]; │ │ │ │ │ -91 break; │ │ │ │ │ -92 │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -95 } │ │ │ │ │ -96 │ │ │ │ │ -98 inline void │ │ │ │ │ -_9_9 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -100 std::vector& out) const // return value │ │ │ │ │ -101 { │ │ │ │ │ -102 out.resize(3); │ │ │ │ │ -103 │ │ │ │ │ -104 int subElement; │ │ │ │ │ -105 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -106 this->getSubElement(in, subElement, local); │ │ │ │ │ -107 │ │ │ │ │ -108 switch (subElement) { │ │ │ │ │ -109 case 0 : │ │ │ │ │ -110 │ │ │ │ │ -111 out[0][0][0] = -2; │ │ │ │ │ -112 out[1][0][0] = 2; │ │ │ │ │ -113 out[2][0][0] = 0; │ │ │ │ │ -114 break; │ │ │ │ │ -115 │ │ │ │ │ -116 case 1 : │ │ │ │ │ -117 │ │ │ │ │ -118 out[0][0][0] = 0; │ │ │ │ │ -119 out[1][0][0] = -2; │ │ │ │ │ -120 out[2][0][0] = 2; │ │ │ │ │ -121 break; │ │ │ │ │ -122 │ │ │ │ │ -123 } │ │ │ │ │ -124 } │ │ │ │ │ -125 │ │ │ │ │ -_1_2_7 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -128 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -129 std::vector& out) const // return value │ │ │ │ │ -130 { │ │ │ │ │ -131 auto totalOrder = order[0]; │ │ │ │ │ -132 if (totalOrder == 0) { │ │ │ │ │ -133 evaluateFunction(in, out); │ │ │ │ │ -134 } else if (totalOrder == 1) │ │ │ │ │ -135 { │ │ │ │ │ -136 out.resize(3); │ │ │ │ │ -137 │ │ │ │ │ -138 int subElement; │ │ │ │ │ -139 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -140 this->getSubElement(in, subElement, local); │ │ │ │ │ -141 │ │ │ │ │ -142 switch (subElement) { │ │ │ │ │ -143 case 0: │ │ │ │ │ -144 out[0] = -2; │ │ │ │ │ -145 out[1] = 2; │ │ │ │ │ -146 out[2] = 0; │ │ │ │ │ -147 break; │ │ │ │ │ -148 case 1: │ │ │ │ │ -149 out[0] = 0; │ │ │ │ │ -150 out[1] = -2; │ │ │ │ │ -151 out[2] = 2; │ │ │ │ │ -152 break; │ │ │ │ │ -153 } │ │ │ │ │ -154 } else { │ │ │ │ │ -155 out.resize(3); │ │ │ │ │ -156 out[0] = out[1] = out[2] = 0; │ │ │ │ │ -157 } │ │ │ │ │ -158 } │ │ │ │ │ -159 │ │ │ │ │ -_1_6_3 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ -164 { │ │ │ │ │ -165 return 1; │ │ │ │ │ -166 } │ │ │ │ │ -167 │ │ │ │ │ -168 }; │ │ │ │ │ -169 │ │ │ │ │ -195 template │ │ │ │ │ -_1_9_6 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -197 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -198 { │ │ │ │ │ -199 public: │ │ │ │ │ -201 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_2_0_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -203 │ │ │ │ │ -_2_0_5 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -206 { │ │ │ │ │ -207 return 6; │ │ │ │ │ -208 } │ │ │ │ │ -209 │ │ │ │ │ -_2_1_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -212 std::vector& out) const │ │ │ │ │ -213 { │ │ │ │ │ -214 out.resize(6); │ │ │ │ │ -215 │ │ │ │ │ -216 int subElement; │ │ │ │ │ -217 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -218 this->getSubElement(in, subElement, local); │ │ │ │ │ -219 │ │ │ │ │ -220 switch (subElement) { │ │ │ │ │ -221 case 0 : │ │ │ │ │ -222 │ │ │ │ │ -223 out[0] = 1 - local[0] - local[1]; │ │ │ │ │ -224 out[1] = local[0]; │ │ │ │ │ -225 out[2] = 0; │ │ │ │ │ -226 out[3] = local[1]; │ │ │ │ │ -227 out[4] = 0; │ │ │ │ │ -228 out[5] = 0; │ │ │ │ │ -229 break; │ │ │ │ │ -230 │ │ │ │ │ -231 case 1 : │ │ │ │ │ -232 │ │ │ │ │ -233 out[0] = 0; │ │ │ │ │ -234 out[1] = 1 - local[0] - local[1]; │ │ │ │ │ -235 out[2] = local[0]; │ │ │ │ │ -236 out[3] = 0; │ │ │ │ │ -237 out[4] = local[1]; │ │ │ │ │ -238 out[5] = 0; │ │ │ │ │ -239 break; │ │ │ │ │ -240 │ │ │ │ │ -241 case 2 : │ │ │ │ │ -242 │ │ │ │ │ -243 out[0] = 0; │ │ │ │ │ -244 out[1] = 0; │ │ │ │ │ -245 out[2] = 0; │ │ │ │ │ -246 out[3] = 1 - local[0] - local[1]; │ │ │ │ │ -247 out[4] = local[0]; │ │ │ │ │ -248 out[5] = local[1]; │ │ │ │ │ -249 break; │ │ │ │ │ -250 case 3 : │ │ │ │ │ -251 │ │ │ │ │ -252 out[0] = 0; │ │ │ │ │ -253 out[1] = local[1]; │ │ │ │ │ -254 out[2] = 0; │ │ │ │ │ -255 out[3] = local[0]; │ │ │ │ │ -256 out[4] = 1 - local[0] - local[1]; │ │ │ │ │ -257 out[5] = 0; │ │ │ │ │ -258 } │ │ │ │ │ -259 │ │ │ │ │ -260 } │ │ │ │ │ -261 │ │ │ │ │ -263 inline void │ │ │ │ │ -_2_6_4 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -265 std::vector& out) const // return value │ │ │ │ │ -266 { │ │ │ │ │ -267 out.resize(6); │ │ │ │ │ -268 │ │ │ │ │ -269 int subElement; │ │ │ │ │ -270 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -271 this->getSubElement(in, subElement, local); │ │ │ │ │ -272 │ │ │ │ │ -273 switch (subElement) { │ │ │ │ │ -274 case 0 : │ │ │ │ │ -275 │ │ │ │ │ -276 out[0][0][0] = -2; out[0][0][1] = -2; │ │ │ │ │ -277 out[1][0][0] = 2; out[1][0][1] = 0; │ │ │ │ │ -278 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ -279 out[3][0][0] = 0; out[3][0][1] = 2; │ │ │ │ │ -280 out[4][0][0] = 0; out[4][0][1] = 0; │ │ │ │ │ -281 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ -282 break; │ │ │ │ │ -283 │ │ │ │ │ -284 case 1 : │ │ │ │ │ -285 │ │ │ │ │ -286 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ -287 out[1][0][0] = -2; out[1][0][1] = -2; │ │ │ │ │ -288 out[2][0][0] = 2; out[2][0][1] = 0; │ │ │ │ │ -289 out[3][0][0] = 0; out[3][0][1] = 0; │ │ │ │ │ -290 out[4][0][0] = 0; out[4][0][1] = 2; │ │ │ │ │ -291 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ -292 break; │ │ │ │ │ -293 │ │ │ │ │ -294 case 2 : │ │ │ │ │ -295 │ │ │ │ │ -296 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ -297 out[1][0][0] = 0; out[1][0][1] = 0; │ │ │ │ │ -298 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ -299 out[3][0][0] = -2; out[3][0][1] = -2; │ │ │ │ │ -300 out[4][0][0] = 2; out[4][0][1] = 0; │ │ │ │ │ -301 out[5][0][0] = 0; out[5][0][1] = 2; │ │ │ │ │ -302 break; │ │ │ │ │ -303 case 3 : │ │ │ │ │ -304 │ │ │ │ │ -305 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ -306 out[1][0][0] = 0; out[1][0][1] = -2; │ │ │ │ │ -307 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ -308 out[3][0][0] = -2; out[3][0][1] = 0; │ │ │ │ │ -309 out[4][0][0] = 2; out[4][0][1] = 2; │ │ │ │ │ -310 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ -311 } │ │ │ │ │ -312 } │ │ │ │ │ -313 │ │ │ │ │ -_3_1_5 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -316 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -317 std::vector& out) const // return value │ │ │ │ │ -318 { │ │ │ │ │ -319 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -320 if (totalOrder == 0) { │ │ │ │ │ -321 evaluateFunction(in, out); │ │ │ │ │ -322 } else if (totalOrder == 1) { │ │ │ │ │ -323 int subElement; │ │ │ │ │ -324 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -325 this->getSubElement(in, subElement, local); │ │ │ │ │ -326 │ │ │ │ │ -327 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -328 out.resize(size()); │ │ │ │ │ -329 │ │ │ │ │ -330 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -331 out[i] = 0; │ │ │ │ │ -332 │ │ │ │ │ -333 switch (direction) { │ │ │ │ │ -334 case 0: // direction == 0 │ │ │ │ │ -335 │ │ │ │ │ -336 switch (subElement) { │ │ │ │ │ -337 case 0 : │ │ │ │ │ -338 out[0] = -2; │ │ │ │ │ -339 out[1] = 2; │ │ │ │ │ -340 break; │ │ │ │ │ -341 case 1 : │ │ │ │ │ -342 out[1] = -2; │ │ │ │ │ -343 out[2] = 2; │ │ │ │ │ -344 break; │ │ │ │ │ -345 case 2 : │ │ │ │ │ -346 out[3] = -2; │ │ │ │ │ -347 out[4] = 2; │ │ │ │ │ -348 break; │ │ │ │ │ -349 case 3 : │ │ │ │ │ -350 out[3] = -2; │ │ │ │ │ -351 out[4] = 2; │ │ │ │ │ -352 } │ │ │ │ │ -353 break; │ │ │ │ │ -354 │ │ │ │ │ -355 case 1: // direction == 1 │ │ │ │ │ -356 │ │ │ │ │ -357 switch (subElement) { │ │ │ │ │ -358 case 0 : │ │ │ │ │ -359 out[0] = -2; │ │ │ │ │ -360 out[3] = 2; │ │ │ │ │ -361 break; │ │ │ │ │ -362 case 1 : │ │ │ │ │ -363 out[1] = -2; │ │ │ │ │ -364 out[4] = 2; │ │ │ │ │ -365 break; │ │ │ │ │ -366 case 2 : │ │ │ │ │ -367 out[3] = -2; │ │ │ │ │ -368 out[5] = 2; │ │ │ │ │ -369 break; │ │ │ │ │ -370 case 3 : │ │ │ │ │ -371 out[1] = -2; │ │ │ │ │ -372 out[4] = 2; │ │ │ │ │ -373 } │ │ │ │ │ -374 break; │ │ │ │ │ -375 │ │ │ │ │ -376 default: │ │ │ │ │ -377 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -378 } │ │ │ │ │ -379 } else { │ │ │ │ │ -380 out.resize(size()); │ │ │ │ │ -381 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -382 out[i] = 0; │ │ │ │ │ -383 } │ │ │ │ │ -384 } │ │ │ │ │ -385 │ │ │ │ │ -_3_8_9 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ -390 { │ │ │ │ │ -391 return 1; │ │ │ │ │ -392 } │ │ │ │ │ -393 │ │ │ │ │ -394 }; │ │ │ │ │ -395 │ │ │ │ │ -425 template │ │ │ │ │ -_4_2_6 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -427 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -428 { │ │ │ │ │ -429 public: │ │ │ │ │ -431 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_4_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -433 │ │ │ │ │ -_4_3_5 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ -436 { │ │ │ │ │ -437 return 10; │ │ │ │ │ -438 } │ │ │ │ │ -439 │ │ │ │ │ -_4_4_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -442 std::vector& out) const │ │ │ │ │ -443 { │ │ │ │ │ -444 out.resize(10); │ │ │ │ │ -445 │ │ │ │ │ -446 int subElement; │ │ │ │ │ -447 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -448 this->getSubElement(in, subElement, local); │ │ │ │ │ -449 │ │ │ │ │ -450 switch (subElement) { │ │ │ │ │ -451 case 0 : │ │ │ │ │ -452 │ │ │ │ │ -453 out[0] = 1 - local[0] - local[1] - local[2]; │ │ │ │ │ -454 out[1] = local[0]; │ │ │ │ │ -455 out[2] = 0; │ │ │ │ │ -456 out[3] = local[1]; │ │ │ │ │ -457 out[4] = 0; │ │ │ │ │ -458 out[5] = 0; │ │ │ │ │ -459 out[6] = local[2]; │ │ │ │ │ -460 out[7] = 0; │ │ │ │ │ -461 out[8] = 0; │ │ │ │ │ -462 out[9] = 0; │ │ │ │ │ -463 break; │ │ │ │ │ -464 │ │ │ │ │ -465 case 1 : │ │ │ │ │ -466 │ │ │ │ │ -467 out[0] = 0; │ │ │ │ │ -468 out[1] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -469 out[2] = local[0]; │ │ │ │ │ -470 out[3] = 0; │ │ │ │ │ -471 out[4] = local[1]; │ │ │ │ │ -472 out[5] = 0; │ │ │ │ │ -473 out[6] = 0; │ │ │ │ │ -474 out[7] = local[2]; │ │ │ │ │ -475 out[8] = 0; │ │ │ │ │ -476 out[9] = 0; │ │ │ │ │ -477 break; │ │ │ │ │ -478 │ │ │ │ │ -479 case 2 : │ │ │ │ │ -480 │ │ │ │ │ -481 out[0] = 0; │ │ │ │ │ -482 out[1] = 0; │ │ │ │ │ -483 out[2] = 0; │ │ │ │ │ -484 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -485 out[4] = local[0]; │ │ │ │ │ -486 out[5] = local[1]; │ │ │ │ │ -487 out[6] = 0; │ │ │ │ │ -488 out[7] = 0; │ │ │ │ │ -489 out[8] = local[2]; │ │ │ │ │ -490 out[9] = 0; │ │ │ │ │ -491 break; │ │ │ │ │ -492 │ │ │ │ │ -493 case 3 : │ │ │ │ │ -494 │ │ │ │ │ -495 out[0] = 0; │ │ │ │ │ -496 out[1] = 0; │ │ │ │ │ -497 out[2] = 0; │ │ │ │ │ -498 out[3] = 0; │ │ │ │ │ -499 out[4] = 0; │ │ │ │ │ -500 out[5] = 0; │ │ │ │ │ -501 out[6] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -502 out[7] = local[0]; │ │ │ │ │ -503 out[8] = local[1]; │ │ │ │ │ -504 out[9] = local[2]; │ │ │ │ │ -505 break; │ │ │ │ │ -506 │ │ │ │ │ -507 case 4 : │ │ │ │ │ -508 │ │ │ │ │ -509 out[0] = 0; │ │ │ │ │ -510 out[1] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -511 out[2] = 0; │ │ │ │ │ -512 out[3] = local[0]; │ │ │ │ │ -513 out[4] = 0; │ │ │ │ │ -514 out[5] = 0; │ │ │ │ │ -515 out[6] = local[1]; │ │ │ │ │ -516 out[7] = local[2]; │ │ │ │ │ -517 out[8] = 0; │ │ │ │ │ -518 out[9] = 0; │ │ │ │ │ -519 break; │ │ │ │ │ -520 │ │ │ │ │ -521 case 5 : │ │ │ │ │ -522 │ │ │ │ │ -523 out[0] = 0; │ │ │ │ │ -524 out[1] = local[1]; │ │ │ │ │ -525 out[2] = 0; │ │ │ │ │ -526 out[3] = local[0]; │ │ │ │ │ -527 out[4] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -528 out[5] = 0; │ │ │ │ │ -529 out[6] = 0; │ │ │ │ │ -530 out[7] = local[2]; │ │ │ │ │ -531 out[8] = 0; │ │ │ │ │ -532 out[9] = 0; │ │ │ │ │ -533 break; │ │ │ │ │ -534 │ │ │ │ │ -535 case 6 : │ │ │ │ │ -536 │ │ │ │ │ -537 out[0] = 0; │ │ │ │ │ -538 out[1] = 0; │ │ │ │ │ -539 out[2] = 0; │ │ │ │ │ -540 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -541 out[4] = 0; │ │ │ │ │ -542 out[5] = 0; │ │ │ │ │ -543 out[6] = local[0]; │ │ │ │ │ -544 out[7] = local[1]; │ │ │ │ │ -545 out[8] = local[2]; │ │ │ │ │ -546 out[9] = 0; │ │ │ │ │ -547 break; │ │ │ │ │ -548 │ │ │ │ │ -549 case 7 : │ │ │ │ │ -550 │ │ │ │ │ -551 out[0] = 0; │ │ │ │ │ -552 out[1] = 0; │ │ │ │ │ -553 out[2] = 0; │ │ │ │ │ -554 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ -555 out[4] = local[2]; │ │ │ │ │ -556 out[5] = 0; │ │ │ │ │ -557 out[6] = 0; │ │ │ │ │ -558 out[7] = local[1]; │ │ │ │ │ -559 out[8] = local[0]; │ │ │ │ │ -560 out[9] = 0; │ │ │ │ │ -561 break; │ │ │ │ │ -562 } │ │ │ │ │ -563 │ │ │ │ │ -564 } │ │ │ │ │ -565 │ │ │ │ │ -567 inline void │ │ │ │ │ -_5_6_8 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -569 std::vector& out) const // return value │ │ │ │ │ -570 { │ │ │ │ │ -571 out.resize(10); │ │ │ │ │ -572 │ │ │ │ │ -573 int subElement; │ │ │ │ │ -574 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -575 this->getSubElement(in, subElement, local); │ │ │ │ │ -576 │ │ │ │ │ -577 switch (subElement) { │ │ │ │ │ -578 case 0 : │ │ │ │ │ -579 │ │ │ │ │ -580 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2; │ │ │ │ │ -581 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -582 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -583 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0; │ │ │ │ │ -584 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -585 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -586 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2; │ │ │ │ │ -587 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ -588 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ -589 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -590 break; │ │ │ │ │ -591 │ │ │ │ │ -592 case 1 : │ │ │ │ │ -593 │ │ │ │ │ -594 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -595 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ -596 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -597 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ -598 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ -599 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -600 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ -601 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2; │ │ │ │ │ -602 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ -603 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -604 break; │ │ │ │ │ -605 │ │ │ │ │ -606 case 2 : │ │ │ │ │ -607 │ │ │ │ │ -608 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -609 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -610 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -611 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2; │ │ │ │ │ -612 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -613 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0; │ │ │ │ │ -614 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ -615 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ -616 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2; │ │ │ │ │ -617 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -618 break; │ │ │ │ │ -619 │ │ │ │ │ -620 case 3 : │ │ │ │ │ -621 │ │ │ │ │ -622 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -623 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -624 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -625 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ -626 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -627 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -628 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2; │ │ │ │ │ -629 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ -630 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0; │ │ │ │ │ -631 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2; │ │ │ │ │ -632 break; │ │ │ │ │ -633 │ │ │ │ │ -634 case 4 : │ │ │ │ │ -635 │ │ │ │ │ -636 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -637 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ -638 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -639 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0; │ │ │ │ │ -640 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -641 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -642 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0; │ │ │ │ │ -643 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2; │ │ │ │ │ -644 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ -645 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -646 break; │ │ │ │ │ -647 │ │ │ │ │ -648 case 5 : │ │ │ │ │ -649 │ │ │ │ │ -650 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -651 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ -652 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -653 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ -654 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ -655 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -656 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ -657 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2; │ │ │ │ │ -658 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ -659 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -660 break; │ │ │ │ │ -661 │ │ │ │ │ -662 case 6 : │ │ │ │ │ -663 │ │ │ │ │ -664 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -665 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -666 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -667 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2; │ │ │ │ │ -668 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ -669 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -670 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0; │ │ │ │ │ -671 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ -672 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2; │ │ │ │ │ -673 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -674 break; │ │ │ │ │ -675 │ │ │ │ │ -676 case 7 : │ │ │ │ │ -677 │ │ │ │ │ -678 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ -679 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ -680 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -681 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2; │ │ │ │ │ -682 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ -683 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ -684 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ -685 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0; │ │ │ │ │ -686 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2; │ │ │ │ │ -687 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ -688 break; │ │ │ │ │ -689 } │ │ │ │ │ -690 } │ │ │ │ │ -691 │ │ │ │ │ -_6_9_3 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -694 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -695 std::vector& out) const // return value │ │ │ │ │ -696 { │ │ │ │ │ -697 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -698 if (totalOrder == 0) { │ │ │ │ │ -699 evaluateFunction(in, out); │ │ │ │ │ -700 } else if (totalOrder == 1) { │ │ │ │ │ -701 int subElement; │ │ │ │ │ -702 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ -703 this->getSubElement(in, subElement, local); │ │ │ │ │ -704 │ │ │ │ │ -705 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -706 out.resize(size()); │ │ │ │ │ -707 │ │ │ │ │ -708 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -709 out[i] = 0; │ │ │ │ │ -710 │ │ │ │ │ -711 switch (direction) { │ │ │ │ │ -712 case 0: // direction == 0 │ │ │ │ │ -713 │ │ │ │ │ -714 switch (subElement) { │ │ │ │ │ -715 case 0 : │ │ │ │ │ -716 out[0] = -2; │ │ │ │ │ -717 out[1] = 2; │ │ │ │ │ -718 break; │ │ │ │ │ -719 case 1 : │ │ │ │ │ -720 out[1] = -2; │ │ │ │ │ -721 out[2] = 2; │ │ │ │ │ -722 break; │ │ │ │ │ -723 case 2 : │ │ │ │ │ -724 out[3] = -2; │ │ │ │ │ -725 out[4] = 2; │ │ │ │ │ -726 break; │ │ │ │ │ -727 case 3 : │ │ │ │ │ -728 out[6] = -2; │ │ │ │ │ -729 out[7] = 2; │ │ │ │ │ -730 break; │ │ │ │ │ -731 case 4 : │ │ │ │ │ -732 out[6] = -2; │ │ │ │ │ -733 out[7] = 2; │ │ │ │ │ -734 break; │ │ │ │ │ -735 case 5 : │ │ │ │ │ -736 out[3] = -2; │ │ │ │ │ -737 out[4] = 2; │ │ │ │ │ -738 break; │ │ │ │ │ -739 case 6 : │ │ │ │ │ -740 out[6] = -2; │ │ │ │ │ -741 out[7] = 2; │ │ │ │ │ -742 break; │ │ │ │ │ -743 case 7 : │ │ │ │ │ -744 out[3] = -2; │ │ │ │ │ -745 out[4] = 2; │ │ │ │ │ -746 break; │ │ │ │ │ -747 } │ │ │ │ │ -748 break; │ │ │ │ │ -749 │ │ │ │ │ -750 case 1: // direction == 1 │ │ │ │ │ -751 │ │ │ │ │ -752 switch (subElement) { │ │ │ │ │ -753 case 0 : │ │ │ │ │ -754 out[0] = -2; │ │ │ │ │ -755 out[3] = 2; │ │ │ │ │ -756 break; │ │ │ │ │ -757 case 1 : │ │ │ │ │ -758 out[1] = -2; │ │ │ │ │ -759 out[4] = 2; │ │ │ │ │ -760 break; │ │ │ │ │ -761 case 2 : │ │ │ │ │ -762 out[3] = -2; │ │ │ │ │ -763 out[5] = 2; │ │ │ │ │ -764 break; │ │ │ │ │ -765 case 3 : │ │ │ │ │ -766 out[6] = -2; │ │ │ │ │ -767 out[8] = 2; │ │ │ │ │ -768 break; │ │ │ │ │ -769 case 4 : │ │ │ │ │ -770 out[1] = -2; │ │ │ │ │ -771 out[3] = 2; │ │ │ │ │ -772 out[6] = -2; │ │ │ │ │ -773 break; │ │ │ │ │ -774 case 5 : │ │ │ │ │ -775 out[1] = -2; │ │ │ │ │ -776 out[4] = 2; │ │ │ │ │ -777 break; │ │ │ │ │ -778 case 6 : │ │ │ │ │ -779 out[6] = -2; │ │ │ │ │ -780 out[8] = 2; │ │ │ │ │ -781 break; │ │ │ │ │ -782 case 7 : │ │ │ │ │ -783 out[3] = -2; │ │ │ │ │ -784 out[4] = 2; │ │ │ │ │ -785 out[7] = -2; │ │ │ │ │ -786 out[8] = 2; │ │ │ │ │ -787 break; │ │ │ │ │ -788 } │ │ │ │ │ -789 break; │ │ │ │ │ -790 │ │ │ │ │ -791 case 2: // direction == 2 │ │ │ │ │ -792 │ │ │ │ │ -793 switch (subElement) { │ │ │ │ │ -794 case 0 : │ │ │ │ │ -795 out[0] = -2; │ │ │ │ │ -796 out[6] = 2; │ │ │ │ │ -797 break; │ │ │ │ │ -798 case 1 : │ │ │ │ │ -799 out[1] = -2; │ │ │ │ │ -800 out[7] = 2; │ │ │ │ │ -801 break; │ │ │ │ │ -802 case 2 : │ │ │ │ │ -803 out[3] = -2; │ │ │ │ │ -804 out[8] = 2; │ │ │ │ │ -805 break; │ │ │ │ │ -806 case 3 : │ │ │ │ │ -807 out[6] = -2; │ │ │ │ │ -808 out[9] = 2; │ │ │ │ │ -809 break; │ │ │ │ │ -810 case 4 : │ │ │ │ │ -811 out[1] = -2; │ │ │ │ │ -812 out[7] = 2; │ │ │ │ │ -813 break; │ │ │ │ │ -814 case 5 : │ │ │ │ │ -815 out[1] = -2; │ │ │ │ │ -816 out[7] = 2; │ │ │ │ │ -817 break; │ │ │ │ │ -818 case 6 : │ │ │ │ │ -819 out[3] = -2; │ │ │ │ │ -820 out[8] = 2; │ │ │ │ │ -821 break; │ │ │ │ │ -822 case 7 : │ │ │ │ │ -823 out[3] = -2; │ │ │ │ │ -824 out[8] = 2; │ │ │ │ │ -825 break; │ │ │ │ │ -826 } │ │ │ │ │ -827 break; │ │ │ │ │ -828 │ │ │ │ │ -829 default: │ │ │ │ │ -830 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -831 } │ │ │ │ │ -832 } else { │ │ │ │ │ -833 out.resize(size()); │ │ │ │ │ -834 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ -835 out[i] = 0; │ │ │ │ │ -836 } │ │ │ │ │ -837 } │ │ │ │ │ -838 │ │ │ │ │ -_8_4_2 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ -843 { │ │ │ │ │ -844 return 1; │ │ │ │ │ -845 } │ │ │ │ │ -846 │ │ │ │ │ -847 }; │ │ │ │ │ -848} │ │ │ │ │ -849#endif │ │ │ │ │ -_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ +81#endif │ │ │ │ │ +_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -RefinedP1LocalBasis() │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 1 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:99 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ -static constexpr unsigned int order() │ │ │ │ │ -Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ -functions are only piecewis... │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 1 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:264 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:202 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:211 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:315 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ -static constexpr unsigned int order() │ │ │ │ │ -Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ -functions are only piecewis... │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:389 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:205 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:693 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:441 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:432 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ -static constexpr unsigned int size() │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:435 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ -static constexpr unsigned int order() │ │ │ │ │ -Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ -functions are only piecewis... │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:842 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn refinedp1localbasis.hh:568 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local p0 finite element on all types of reference elements. │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +P0LocalFiniteElement(const GeometryType &type) │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +The number of shape functions – here: 1. │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< P0LocalBasis< D, R, d >, P0LocalCoefficients, │ │ │ │ │ +P0LocalInterpolation< P0LocalBasis< D, R, d > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn p0localbasis.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +DDeeffiinniittiioonn p0localcoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn p0localinterpolation.hh:20 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0.hh File Reference │ │ │ │ +dune-localfunctions: pqkfactory.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,58 +65,56 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
refinedp0.hh File Reference
│ │ │ │ +
pqkfactory.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Piecewise P0 finite element. │ │ │ │ -More...

│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ -#include "refinedp0/refinedp0localbasis.hh"
│ │ │ │ -#include "refinedp0/refinedp0localcoefficients.hh"
│ │ │ │ -#include "refinedp0/refinedp0localinterpolation.hh"
│ │ │ │ +
#include <map>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ +#include <dune/localfunctions/common/virtualwrappers.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::RefinedP0LocalFiniteElement< D, R, dim >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, d, k >
 Factory that only creates dimension specific local finite elements. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 1 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
struct  Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, 3, k >
 Factory that only creates dimension specific local finite elements. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 2 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
struct  Dune::PQkLocalFiniteElementFactory< D, R, dim, k >
 Factory to create any kind of Pk/Qk like element wrapped for the virtual interface. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 3 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
class  Dune::PQkLocalFiniteElementCache< D, R, dim, k >
 A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Piecewise P0 finite element.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,41 +1,41 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -refinedp0.hh File Reference │ │ │ │ │ -Piecewise P0 finite element. _M_o_r_e_._._. │ │ │ │ │ +pqkfactory.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ - reference geometry. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _d_,_ _k_ _> │ │ │ │ │ +  Factory that only creates dimension specific local finite elements. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ -  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ - reference geometry. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _> │ │ │ │ │ +  Factory that only creates dimension specific local finite elements. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ -  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ - reference geometry. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ +  Factory to create any kind of Pk/Qk like element wrapped for the │ │ │ │ │ + virtual interface. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ -  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ - reference geometry. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ +  A cache that stores all available Pk/Qk like local finite elements for │ │ │ │ │ + the given dimension and order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Piecewise P0 finite element. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00452_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refinedp0.hh Source File │ │ │ │ +dune-localfunctions: pqkfactory.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,217 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refinedp0.hh
│ │ │ │ +
pqkfactory.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <map>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
16
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ -
22
│ │ │ │ -
27 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
29 {
│ │ │ │ - │ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ -
33 // We steal the p0 traits since they exist for all dim.
│ │ │ │ -
34 // This allows to instantiate the type and access the Traits.
│ │ │ │ - │ │ │ │ -
36 };
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
42 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
44 {
│ │ │ │ -
45 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune
│ │ │ │ +
22{
│ │ │ │ +
23
│ │ │ │ +
28 template<class D, class R, int d, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ + │ │ │ │ +
32
│ │ │ │ +
│ │ │ │ +
34 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType&)
│ │ │ │ +
35 {
│ │ │ │ +
36 return nullptr;
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38 };
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
44 template<class D, class R, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
46 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
52
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {}
│ │ │ │ -
│ │ │ │ -
57
│ │ │ │ -
│ │ │ │ -
60 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
61 {
│ │ │ │ -
62 return basis_;
│ │ │ │ -
63 }
│ │ │ │ -
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
68 {
│ │ │ │ -
69 return coefficients_;
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
75 {
│ │ │ │ -
76 return interpolation_;
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
80 unsigned int size () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return basis_.size();
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
│ │ │ │ -
87 static constexpr GeometryType type ()
│ │ │ │ -
88 {
│ │ │ │ -
89 return GeometryTypes::line;
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
92 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
│ │ │ │ +
54 static LocalFiniteElementVirtualInterface<T>* create(const GeometryType& gt)
│ │ │ │ +
55 {
│ │ │ │ +
56 if ((gt.isPrism())and (k==1))
│ │ │ │ + │ │ │ │ +
58 if ((gt.isPrism())and (k==2))
│ │ │ │ + │ │ │ │ +
60 if ((gt.isPyramid())and (k==1))
│ │ │ │ + │ │ │ │ +
62 if ((gt.isPyramid())and (k==2))
│ │ │ │ + │ │ │ │ +
64 return nullptr;
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66 };
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
68
│ │ │ │ +
72 template<class D, class R, int dim, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
74 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
80
│ │ │ │ +
81
│ │ │ │ +
│ │ │ │ +
83 static FiniteElementType* create(const GeometryType& gt)
│ │ │ │ +
84 {
│ │ │ │ +
85 if (k==0)
│ │ │ │ + │ │ │ │ +
87
│ │ │ │ +
88 if (gt.isSimplex())
│ │ │ │ + │ │ │ │ +
90
│ │ │ │ +
91 if (gt.isCube())
│ │ │ │ + │ │ │ │ +
93
│ │ │ │ + │ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │
96 };
│ │ │ │
│ │ │ │
97
│ │ │ │ -
102 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
104 {
│ │ │ │ -
105 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
112
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
116 {}
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
│ │ │ │ -
120 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
121 {
│ │ │ │ -
122 return basis_;
│ │ │ │ -
123 }
│ │ │ │ -
│ │ │ │ -
124
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
128 {
│ │ │ │ -
129 return coefficients_;
│ │ │ │ -
130 }
│ │ │ │ -
│ │ │ │ -
131
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
135 {
│ │ │ │ -
136 return interpolation_;
│ │ │ │ -
137 }
│ │ │ │ -
│ │ │ │ -
138
│ │ │ │ -
│ │ │ │ -
140 unsigned int size () const
│ │ │ │ -
141 {
│ │ │ │ -
142 return basis_.size();
│ │ │ │ -
143 }
│ │ │ │ -
│ │ │ │ -
144
│ │ │ │ -
│ │ │ │ -
147 static constexpr GeometryType type ()
│ │ │ │ -
148 {
│ │ │ │ -
149 return GeometryTypes::triangle;
│ │ │ │ -
150 }
│ │ │ │ -
│ │ │ │ -
151
│ │ │ │ -
152 private:
│ │ │ │ - │ │ │ │ -
154 RefinedP0LocalCoefficients<2> coefficients_;
│ │ │ │ - │ │ │ │ -
156 };
│ │ │ │ -
│ │ │ │ -
157
│ │ │ │ -
162 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
164 {
│ │ │ │ -
165 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
172
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
176 {}
│ │ │ │ -
│ │ │ │ -
177
│ │ │ │ -
│ │ │ │ -
180 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
181 {
│ │ │ │ -
182 return basis_;
│ │ │ │ -
183 }
│ │ │ │ -
│ │ │ │ -
184
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
188 {
│ │ │ │ -
189 return coefficients_;
│ │ │ │ -
190 }
│ │ │ │ -
│ │ │ │ -
191
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
195 {
│ │ │ │ -
196 return interpolation_;
│ │ │ │ -
197 }
│ │ │ │ -
│ │ │ │ -
198
│ │ │ │ -
│ │ │ │ -
200 unsigned int size () const
│ │ │ │ -
201 {
│ │ │ │ -
202 return basis_.size();
│ │ │ │ -
203 }
│ │ │ │ -
│ │ │ │ -
204
│ │ │ │ -
│ │ │ │ -
207 static constexpr GeometryType type ()
│ │ │ │ -
208 {
│ │ │ │ -
209 return GeometryTypes::tetrahedron;
│ │ │ │ -
210 }
│ │ │ │ -
│ │ │ │ -
211
│ │ │ │ -
212 private:
│ │ │ │ - │ │ │ │ -
214 RefinedP0LocalCoefficients<3> coefficients_;
│ │ │ │ - │ │ │ │ -
216 };
│ │ │ │ -
│ │ │ │ -
217
│ │ │ │ -
218
│ │ │ │ -
219}
│ │ │ │ -
220
│ │ │ │ -
221#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
98
│ │ │ │ +
99
│ │ │ │ +
110 template<class D, class R, int dim, int k>
│ │ │ │ +
│ │ │ │ +
111 class
│ │ │ │ +
112 [[deprecated("Use LagrangeLocalFiniteElementCache<D,R,dim,k> from lagrangelfecache.hh. This will be removed after release 2.10.")]]
│ │ │ │ + │ │ │ │ +
114 {
│ │ │ │ +
115 protected:
│ │ │ │ + │ │ │ │ + │ │ │ │ +
118 typedef typename std::map<GeometryType,FE*> FEMap;
│ │ │ │ +
119
│ │ │ │ +
120 public:
│ │ │ │ + │ │ │ │ +
123
│ │ │ │ + │ │ │ │ +
126
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
129 {
│ │ │ │ +
130 typename FEMap::iterator it = other.cache_.begin();
│ │ │ │ +
131 typename FEMap::iterator end = other.cache_.end();
│ │ │ │ +
132 for(; it!=end; ++it)
│ │ │ │ +
133 cache_[it->first] = (it->second)->clone();
│ │ │ │ +
134 }
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
137 {
│ │ │ │ +
138 typename FEMap::iterator it = cache_.begin();
│ │ │ │ +
139 typename FEMap::iterator end = cache_.end();
│ │ │ │ +
140 for(; it!=end; ++it)
│ │ │ │ +
141 delete it->second;
│ │ │ │ +
142 }
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
│ │ │ │ +
145 const FiniteElementType& get(const GeometryType& gt) const
│ │ │ │ +
146 {
│ │ │ │ +
147 typename FEMap::const_iterator it = cache_.find(gt);
│ │ │ │ +
148 if (it==cache_.end())
│ │ │ │ +
149 {
│ │ │ │ + │ │ │ │ +
151 if (fe==0)
│ │ │ │ +
152 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element available for geometry type " << gt << " and order " << k);
│ │ │ │ +
153
│ │ │ │ +
154 cache_[gt] = fe;
│ │ │ │ +
155 return *fe;
│ │ │ │ +
156 }
│ │ │ │ +
157 return *(it->second);
│ │ │ │ +
158 }
│ │ │ │ +
│ │ │ │ +
159
│ │ │ │ +
160 protected:
│ │ │ │ +
161 mutable FEMap cache_;
│ │ │ │ +
162
│ │ │ │ +
163 };
│ │ │ │ +
│ │ │ │ +
164
│ │ │ │ +
165}
│ │ │ │ +
166
│ │ │ │ +
167#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Local finite element that is piecewise P0 on a once uniformly refined reference geometry.
Definition refinedp0.hh:29
│ │ │ │ -
P0LocalFiniteElement< D, R, dim >::Traits Traits
Definition refinedp0.hh:35
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:60
│ │ │ │ -
static constexpr GeometryType type()
Definition refinedp0.hh:87
│ │ │ │ -
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:55
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:74
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:67
│ │ │ │ -
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 1 >, RefinedP0LocalCoefficients< 1 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > > > Traits
Definition refinedp0.hh:51
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:80
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:140
│ │ │ │ -
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:115
│ │ │ │ -
static constexpr GeometryType type()
Definition refinedp0.hh:147
│ │ │ │ -
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 2 >, RefinedP0LocalCoefficients< 2 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > > > Traits
Definition refinedp0.hh:111
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:127
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:134
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:120
│ │ │ │ -
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:175
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:180
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:194
│ │ │ │ -
static constexpr GeometryType type()
Definition refinedp0.hh:207
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:200
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:187
│ │ │ │ -
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 3 >, RefinedP0LocalCoefficients< 3 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > > > Traits
Definition refinedp0.hh:171
│ │ │ │ -
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ -
Layout map for RefinedP0 elements.
Definition refinedp0localcoefficients.hh:26
│ │ │ │ -
Definition refinedp0localinterpolation.hh:17
│ │ │ │ +
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ +
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ +
Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order.
Definition lagrangecube.hh:709
│ │ │ │ +
Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order.
Definition lagrangeprism.hh:649
│ │ │ │ +
Lagrange finite element for 3d pyramids with compile-time polynomial order.
Definition lagrangepyramid.hh:809
│ │ │ │ +
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ +
The local p0 finite element on all types of reference elements.
Definition p0.hh:25
│ │ │ │ +
Factory that only creates dimension specific local finite elements.
Definition pqkfactory.hh:30
│ │ │ │ +
P0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:31
│ │ │ │ +
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &)
create finite element for given GeometryType
Definition pqkfactory.hh:34
│ │ │ │ +
static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:54
│ │ │ │ +
P0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:47
│ │ │ │ +
Factory to create any kind of Pk/Qk like element wrapped for the virtual interface.
Definition pqkfactory.hh:74
│ │ │ │ +
LagrangeCubeLocalFiniteElement< D, R, dim, k > Qk
Definition pqkfactory.hh:79
│ │ │ │ +
LagrangeSimplexLocalFiniteElement< D, R, dim, k > Pk
Definition pqkfactory.hh:78
│ │ │ │ +
LocalFiniteElementVirtualInterface< T > FiniteElementType
Definition pqkfactory.hh:76
│ │ │ │ +
static FiniteElementType * create(const GeometryType &gt)
create finite element for given GeometryType
Definition pqkfactory.hh:83
│ │ │ │ +
P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:75
│ │ │ │ +
P0LocalFiniteElement< D, R, dim > P0
Definition pqkfactory.hh:77
│ │ │ │ +
A cache that stores all available Pk/Qk like local finite elements for the given dimension and order.
Definition pqkfactory.hh:114
│ │ │ │ +
P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T
Definition pqkfactory.hh:116
│ │ │ │ +
LocalFiniteElementVirtualInterface< T > FE
Definition pqkfactory.hh:117
│ │ │ │ +
PQkLocalFiniteElementCache()
Default constructor.
Definition pqkfactory.hh:125
│ │ │ │ +
FE FiniteElementType
Type of the finite elements stored in this cache.
Definition pqkfactory.hh:122
│ │ │ │ +
std::map< GeometryType, FE * > FEMap
Definition pqkfactory.hh:118
│ │ │ │ +
const FiniteElementType & get(const GeometryType &gt) const
Get local finite element for given GeometryType.
Definition pqkfactory.hh:145
│ │ │ │ +
FEMap cache_
Definition pqkfactory.hh:161
│ │ │ │ +
~PQkLocalFiniteElementCache()
Definition pqkfactory.hh:136
│ │ │ │ +
PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other)
Copy constructor.
Definition pqkfactory.hh:128
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,281 +1,266 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_e_f_i_n_e_d │ │ │ │ │ -refinedp0.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +pqkfactory.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_PQKFACTORY_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -14#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -15#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -16 │ │ │ │ │ -20namespace _D_u_n_e │ │ │ │ │ -21{ │ │ │ │ │ -22 │ │ │ │ │ -27 template │ │ │ │ │ -_2_8 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -29 { │ │ │ │ │ -30 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() {} │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -33 // We steal the p0 traits since they exist for all dim. │ │ │ │ │ -34 // This allows to instantiate the type and access the Traits. │ │ │ │ │ -_3_5 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ -36 }; │ │ │ │ │ -37 │ │ │ │ │ -42 template │ │ │ │ │ -_4_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -44 { │ │ │ │ │ -45 public: │ │ │ │ │ -48 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -49 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_>, │ │ │ │ │ -50 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_1_>, │ │ │ │ │ -_5_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> > > _T_r_a_i_t_s; │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e │ │ │ │ │ +22{ │ │ │ │ │ +23 │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 struct _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +30 { │ │ │ │ │ +_3_1 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s │ │ │ │ │ +_T; │ │ │ │ │ +32 │ │ │ │ │ +_3_4 static _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_r_e_a_t_e(const GeometryType&) │ │ │ │ │ +35 { │ │ │ │ │ +36 return nullptr; │ │ │ │ │ +37 } │ │ │ │ │ +38 }; │ │ │ │ │ +39 │ │ │ │ │ +44 template │ │ │ │ │ +_4_5 struct _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +46 { │ │ │ │ │ +_4_7 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_3_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s │ │ │ │ │ +_T; │ │ │ │ │ +_4_8 using _P_r_i_s_m_P_1 = _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_1_>; │ │ │ │ │ +_4_9 using _P_r_i_s_m_P_2 = _L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_>; │ │ │ │ │ +_5_0 using _P_y_r_a_m_i_d_P_1 = _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_1_>; │ │ │ │ │ +_5_1 using _P_y_r_a_m_i_d_P_2 = _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_2_>; │ │ │ │ │ 52 │ │ │ │ │ -_5_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -56 {} │ │ │ │ │ -57 │ │ │ │ │ -_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -61 { │ │ │ │ │ -62 return basis_; │ │ │ │ │ -63 } │ │ │ │ │ -64 │ │ │ │ │ -_6_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -68 { │ │ │ │ │ -69 return coefficients_; │ │ │ │ │ -70 } │ │ │ │ │ -71 │ │ │ │ │ -_7_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -75 { │ │ │ │ │ -76 return interpolation_; │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_8_0 unsigned int _s_i_z_e () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return basis_.size(); │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_8_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -88 { │ │ │ │ │ -89 return GeometryTypes::line; │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -92 private: │ │ │ │ │ -93 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> basis_; │ │ │ │ │ -94 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_1_> coefficients_; │ │ │ │ │ -95 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> > interpolation_; │ │ │ │ │ +_5_4 static _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_r_e_a_t_e(const GeometryType& gt) │ │ │ │ │ +55 { │ │ │ │ │ +56 if ((gt.isPrism())and (k==1)) │ │ │ │ │ +57 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_r_i_s_m_P_1_>(_P_r_i_s_m_P_1()); │ │ │ │ │ +58 if ((gt.isPrism())and (k==2)) │ │ │ │ │ +59 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_r_i_s_m_P_2_>(_P_r_i_s_m_P_2()); │ │ │ │ │ +60 if ((gt.isPyramid())and (k==1)) │ │ │ │ │ +61 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_y_r_a_m_i_d_P_1_>(_P_y_r_a_m_i_d_P_1()); │ │ │ │ │ +62 if ((gt.isPyramid())and (k==2)) │ │ │ │ │ +63 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_y_r_a_m_i_d_P_2_>(_P_y_r_a_m_i_d_P_2()); │ │ │ │ │ +64 return nullptr; │ │ │ │ │ +65 } │ │ │ │ │ +66 }; │ │ │ │ │ +67 │ │ │ │ │ +68 │ │ │ │ │ +72 template │ │ │ │ │ +_7_3 struct _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +74 { │ │ │ │ │ +_7_5 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_: │ │ │ │ │ +_T_r_a_i_t_s _T; │ │ │ │ │ +_7_6 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ +_7_7 using _P_0 = _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>; │ │ │ │ │ +_7_8 using _P_k = _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_k_>; │ │ │ │ │ +_7_9 using _Q_k = _L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_k_>; │ │ │ │ │ +80 │ │ │ │ │ +81 │ │ │ │ │ +_8_3 static _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* _c_r_e_a_t_e(const GeometryType& gt) │ │ │ │ │ +84 { │ │ │ │ │ +85 if (k==0) │ │ │ │ │ +86 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_0_>(_P_0(gt)); │ │ │ │ │ +87 │ │ │ │ │ +88 if (gt.isSimplex()) │ │ │ │ │ +89 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_P_k_>(_P_k()); │ │ │ │ │ +90 │ │ │ │ │ +91 if (gt.isCube()) │ │ │ │ │ +92 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_Q_k_>(_Q_k()); │ │ │ │ │ +93 │ │ │ │ │ +94 return _D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_D_,_R_,_d_i_m_,_k_>_:_:_c_r_e_a_t_e(gt); │ │ │ │ │ +95 } │ │ │ │ │ 96 }; │ │ │ │ │ 97 │ │ │ │ │ -102 template │ │ │ │ │ -_1_0_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -104 { │ │ │ │ │ -105 public: │ │ │ │ │ -108 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -109 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_>, │ │ │ │ │ -110 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_2_>, │ │ │ │ │ -_1_1_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> > > _T_r_a_i_t_s; │ │ │ │ │ -112 │ │ │ │ │ -_1_1_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -116 {} │ │ │ │ │ -117 │ │ │ │ │ -_1_2_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -121 { │ │ │ │ │ -122 return basis_; │ │ │ │ │ -123 } │ │ │ │ │ -124 │ │ │ │ │ -_1_2_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -128 { │ │ │ │ │ -129 return coefficients_; │ │ │ │ │ -130 } │ │ │ │ │ -131 │ │ │ │ │ -_1_3_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -135 { │ │ │ │ │ -136 return interpolation_; │ │ │ │ │ -137 } │ │ │ │ │ -138 │ │ │ │ │ -_1_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ -141 { │ │ │ │ │ -142 return basis_.size(); │ │ │ │ │ -143 } │ │ │ │ │ -144 │ │ │ │ │ -_1_4_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -148 { │ │ │ │ │ -149 return GeometryTypes::triangle; │ │ │ │ │ -150 } │ │ │ │ │ -151 │ │ │ │ │ -152 private: │ │ │ │ │ -153 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> basis_; │ │ │ │ │ -154 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_2_> coefficients_; │ │ │ │ │ -155 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> > interpolation_; │ │ │ │ │ -156 }; │ │ │ │ │ -157 │ │ │ │ │ -162 template │ │ │ │ │ -_1_6_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -164 { │ │ │ │ │ -165 public: │ │ │ │ │ -168 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -169 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_>, │ │ │ │ │ -170 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_3_>, │ │ │ │ │ -_1_7_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> > > _T_r_a_i_t_s; │ │ │ │ │ -172 │ │ │ │ │ -_1_7_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -176 {} │ │ │ │ │ -177 │ │ │ │ │ -_1_8_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -181 { │ │ │ │ │ -182 return basis_; │ │ │ │ │ -183 } │ │ │ │ │ -184 │ │ │ │ │ -_1_8_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -188 { │ │ │ │ │ -189 return coefficients_; │ │ │ │ │ -190 } │ │ │ │ │ -191 │ │ │ │ │ -_1_9_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -195 { │ │ │ │ │ -196 return interpolation_; │ │ │ │ │ -197 } │ │ │ │ │ -198 │ │ │ │ │ -_2_0_0 unsigned int _s_i_z_e () const │ │ │ │ │ -201 { │ │ │ │ │ -202 return basis_.size(); │ │ │ │ │ -203 } │ │ │ │ │ -204 │ │ │ │ │ -_2_0_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -208 { │ │ │ │ │ -209 return GeometryTypes::tetrahedron; │ │ │ │ │ -210 } │ │ │ │ │ -211 │ │ │ │ │ -212 private: │ │ │ │ │ -213 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> basis_; │ │ │ │ │ -214 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_3_> coefficients_; │ │ │ │ │ -215 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> > interpolation_; │ │ │ │ │ -216 }; │ │ │ │ │ -217 │ │ │ │ │ -218 │ │ │ │ │ -219} │ │ │ │ │ -220 │ │ │ │ │ -221#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +98 │ │ │ │ │ +99 │ │ │ │ │ +110 template │ │ │ │ │ +_1_1_1 class │ │ │ │ │ +112 [[deprecated("Use LagrangeLocalFiniteElementCache from │ │ │ │ │ +lagrangelfecache.hh. This will be removed after release 2.10.")]] │ │ │ │ │ +113 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +114 { │ │ │ │ │ +115 protected: │ │ │ │ │ +_1_1_6 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_: │ │ │ │ │ +_T_r_a_i_t_s _T; │ │ │ │ │ +_1_1_7 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_> _F_E; │ │ │ │ │ +_1_1_8 typedef typename std::map _F_E_M_a_p; │ │ │ │ │ +119 │ │ │ │ │ +120 public: │ │ │ │ │ +_1_2_2 typedef _F_E _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e; │ │ │ │ │ +123 │ │ │ │ │ +_1_2_5 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() {} │ │ │ │ │ +126 │ │ │ │ │ +_1_2_8 _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e(const _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e& other) │ │ │ │ │ +129 { │ │ │ │ │ +130 typename FEMap::iterator it = other._c_a_c_h_e__.begin(); │ │ │ │ │ +131 typename FEMap::iterator end = other._c_a_c_h_e__.end(); │ │ │ │ │ +132 for(; it!=end; ++it) │ │ │ │ │ +133 cache_[it->first] = (it->second)->clone(); │ │ │ │ │ +134 } │ │ │ │ │ +135 │ │ │ │ │ +_1_3_6 _~_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e() │ │ │ │ │ +137 { │ │ │ │ │ +138 typename FEMap::iterator it = cache_.begin(); │ │ │ │ │ +139 typename FEMap::iterator end = cache_.end(); │ │ │ │ │ +140 for(; it!=end; ++it) │ │ │ │ │ +141 delete it->second; │ │ │ │ │ +142 } │ │ │ │ │ +143 │ │ │ │ │ +_1_4_5 const _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e& _g_e_t(const GeometryType& gt) const │ │ │ │ │ +146 { │ │ │ │ │ +147 typename FEMap::const_iterator it = cache_.find(gt); │ │ │ │ │ +148 if (it==cache_.end()) │ │ │ │ │ +149 { │ │ │ │ │ +150 _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e* fe = _P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_D_,_R_,_d_i_m_,_k_>_:_:_c_r_e_a_t_e │ │ │ │ │ +(gt); │ │ │ │ │ +151 if (fe==0) │ │ │ │ │ +152 DUNE_THROW(Dune::NotImplemented,"No Pk/Qk like local finite element │ │ │ │ │ +available for geometry type " << gt << " and order " << k); │ │ │ │ │ +153 │ │ │ │ │ +154 cache_[gt] = fe; │ │ │ │ │ +155 return *fe; │ │ │ │ │ +156 } │ │ │ │ │ +157 return *(it->second); │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +160 protected: │ │ │ │ │ +_1_6_1 mutable _F_E_M_a_p _c_a_c_h_e__; │ │ │ │ │ +162 │ │ │ │ │ +163 }; │ │ │ │ │ +164 │ │ │ │ │ +165} │ │ │ │ │ +166 │ │ │ │ │ +167#endif │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ _p_0_._h_h │ │ │ │ │ -_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +_v_i_r_t_u_a_l_w_r_a_p_p_e_r_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Local finite element that is piecewise P0 on a once uniformly refined reference │ │ │ │ │ -geometry. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -P0LocalFiniteElement< D, R, dim >::Traits Traits │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RefinedP0LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 1 >, │ │ │ │ │ -RefinedP0LocalCoefficients< 1 >, RefinedP0LocalInterpolation< │ │ │ │ │ -RefinedP0LocalBasis< D, R, 1 > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:140 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RefinedP0LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:147 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 2 >, │ │ │ │ │ -RefinedP0LocalCoefficients< 2 >, RefinedP0LocalInterpolation< │ │ │ │ │ -RefinedP0LocalBasis< D, R, 2 > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:134 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:120 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -RefinedP0LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:175 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:180 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:194 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:207 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:200 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 3 >, │ │ │ │ │ -RefinedP0LocalCoefficients< 3 >, RefinedP0LocalInterpolation< │ │ │ │ │ -RefinedP0LocalBasis< D, R, 3 > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn refinedp0.hh:171 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for RefinedP0 elements. │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localcoefficients.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn refinedp0localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local finite elements with functions │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping a finite element using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for cubes with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangecube.hh:709 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_r_i_s_m_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for 3d prisms with arbitrary compile-time polynomial │ │ │ │ │ +order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangeprism.hh:649 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for 3d pyramids with compile-time polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:809 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ +_D_u_n_e_:_:_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +The local p0 finite element on all types of reference elements. │ │ │ │ │ +DDeeffiinniittiioonn p0.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory that only creates dimension specific local finite elements. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_T │ │ │ │ │ +P0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits T │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static LocalFiniteElementVirtualInterface< T > * create(const GeometryType &) │ │ │ │ │ +create finite element for given GeometryType │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _>_:_:_c_r_e_a_t_e │ │ │ │ │ +static LocalFiniteElementVirtualInterface< T > * create(const GeometryType >) │ │ │ │ │ +create finite element for given GeometryType │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_D_i_m_S_p_e_c_i_f_i_c_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _D_,_ _R_,_ _3_,_ _k_ _>_:_:_T │ │ │ │ │ +P0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits T │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory to create any kind of Pk/Qk like element wrapped for the virtual │ │ │ │ │ +interface. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_Q_k │ │ │ │ │ +LagrangeCubeLocalFiniteElement< D, R, dim, k > Qk │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_P_k │ │ │ │ │ +LagrangeSimplexLocalFiniteElement< D, R, dim, k > Pk │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +LocalFiniteElementVirtualInterface< T > FiniteElementType │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static FiniteElementType * create(const GeometryType >) │ │ │ │ │ +create finite element for given GeometryType │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_T │ │ │ │ │ +P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_P_0 │ │ │ │ │ +P0LocalFiniteElement< D, R, dim > P0 │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:77 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +A cache that stores all available Pk/Qk like local finite elements for the │ │ │ │ │ +given dimension and order. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:114 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_T │ │ │ │ │ +P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:116 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E │ │ │ │ │ +LocalFiniteElementVirtualInterface< T > FE │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:117 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +PQkLocalFiniteElementCache() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:125 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +FE FiniteElementType │ │ │ │ │ +Type of the finite elements stored in this cache. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:122 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_F_E_M_a_p │ │ │ │ │ +std::map< GeometryType, FE * > FEMap │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:118 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ +const FiniteElementType & get(const GeometryType >) const │ │ │ │ │ +Get local finite element for given GeometryType. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:145 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_c_a_c_h_e__ │ │ │ │ │ +FEMap cache_ │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:161 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_~_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +~PQkLocalFiniteElementCache() │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:136 │ │ │ │ │ +_D_u_n_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e_:_:_P_Q_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_a_c_h_e │ │ │ │ │ +PQkLocalFiniteElementCache(const PQkLocalFiniteElementCache &other) │ │ │ │ │ +Copy constructor. │ │ │ │ │ +DDeeffiinniittiioonn pqkfactory.hh:128 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalbasis.hh File Reference │ │ │ │ +dune-localfunctions: lagrangepyramid.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,40 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
orthonormalbasis.hh File Reference
│ │ │ │ +
lagrangepyramid.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <sstream>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::OrthonormalBasisFactory< dim, SF, CF >
 
struct  Dune::OrthonormalBasisFactory< dim, SF, CF >::EvaluationBasisFactory< dd, FF >
class  Dune::LagrangePyramidLocalFiniteElement< D, R, k >
 Lagrange finite element for 3d pyramids with compile-time polynomial order. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -orthonormalbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h> │ │ │ │ │ +lagrangepyramid.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_< │ │ │ │ │ - _d_d_,_ _F_F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _k_ _> │ │ │ │ │ +  Lagrange finite element for 3d pyramids with compile-time polynomial │ │ │ │ │ + order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00455_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalbasis.hh Source File │ │ │ │ +dune-localfunctions: lagrangepyramid.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,115 +70,824 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormalbasis.hh
│ │ │ │ +
lagrangepyramid.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │
7
│ │ │ │ -
8#include <sstream>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
15
│ │ │ │ -
16 // OrthonormalBasisFactory
│ │ │ │ -
17 // -----------------------
│ │ │ │ -
18 template< int dim, class SF, class CF = typename ComputeField< SF, 512 >::Type >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
20 {
│ │ │ │ -
21 static const unsigned int dimension = dim;
│ │ │ │ -
22 typedef SF StorageField;
│ │ │ │ -
23 typedef CF ComputeField;
│ │ │ │ -
24
│ │ │ │ -
25 template <unsigned int dd, class FF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 {
│ │ │ │ - │ │ │ │ -
29 };
│ │ │ │ -
│ │ │ │ -
30
│ │ │ │ - │ │ │ │ -
32 typedef typename MonomialBasisProviderType::Object MonomialBasisType;
│ │ │ │ -
33
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13#include <dune/common/math.hh>
│ │ │ │ +
14
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune { namespace Impl
│ │ │ │ +
22{
│ │ │ │ +
32 template<class D, class R, unsigned int k>
│ │ │ │ +
33 class LagrangePyramidLocalBasis
│ │ │ │ +
34 {
│ │ │ │ +
35 public:
│ │ │ │ +
36 using Traits = LocalBasisTraits<D,3,FieldVector<D,3>,R,1,FieldVector<R,1>,FieldMatrix<R,1,3> >;
│ │ │ │
37
│ │ │ │ -
38 typedef unsigned int Key;
│ │ │ │ -
39 typedef const Basis Object;
│ │ │ │ -
40
│ │ │ │ -
41 static constexpr GeometryType SimplexGeometry = GeometryTypes::simplex(dim);
│ │ │ │ -
42
│ │ │ │ -
43 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
44 static Object *create ( const unsigned int order )
│ │ │ │ -
45 {
│ │ │ │ -
46 const MonomialBasisType &monomialBasis = *MonomialBasisProviderType::template create< SimplexGeometry >( order );
│ │ │ │ +
40 static constexpr std::size_t size ()
│ │ │ │ +
41 {
│ │ │ │ +
42 std::size_t result = 0;
│ │ │ │ +
43 for (unsigned int i=0; i<=k; i++)
│ │ │ │ +
44 result += power(i+1,2);
│ │ │ │ +
45 return result;
│ │ │ │ +
46 }
│ │ │ │
47
│ │ │ │ -
48 static CoefficientMatrix _coeffs;
│ │ │ │ -
49 if( _coeffs.size() <= monomialBasis.size() )
│ │ │ │ -
50 {
│ │ │ │ - │ │ │ │ -
52 _coeffs.fill( matrix );
│ │ │ │ -
53 }
│ │ │ │ -
54
│ │ │ │ -
55 return new Basis( monomialBasis, _coeffs, monomialBasis.size() );
│ │ │ │ -
56 }
│ │ │ │ -
│ │ │ │ -
57 static void release( Object *object ) { delete object; }
│ │ │ │ -
58 };
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
60}
│ │ │ │ -
61
│ │ │ │ -
62#endif // #ifndef DUNE_ORTHONORMALBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
49 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
50 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
51 {
│ │ │ │ +
52 out.resize(size());
│ │ │ │ +
53
│ │ │ │ +
54 // Specialization for zero-order case
│ │ │ │ +
55 if (k==0)
│ │ │ │ +
56 {
│ │ │ │ +
57 out[0] = 1;
│ │ │ │ +
58 return;
│ │ │ │ +
59 }
│ │ │ │ +
60
│ │ │ │ +
61 if (k==1)
│ │ │ │ +
62 {
│ │ │ │ +
63 if(in[0] > in[1])
│ │ │ │ +
64 {
│ │ │ │ +
65 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[1]);
│ │ │ │ +
66 out[1] = in[0]*(1-in[1])-in[2]*in[1];
│ │ │ │ +
67 out[2] = (1-in[0])*in[1]-in[2]*in[1];
│ │ │ │ +
68 out[3] = in[0]*in[1]+in[2]*in[1];
│ │ │ │ +
69 }
│ │ │ │ +
70 else
│ │ │ │ +
71 {
│ │ │ │ +
72 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[0]);
│ │ │ │ +
73 out[1] = in[0]*(1-in[1])-in[2]*in[0];
│ │ │ │ +
74 out[2] = (1-in[0])*in[1]-in[2]*in[0];
│ │ │ │ +
75 out[3] = in[0]*in[1]+in[2]*in[0];
│ │ │ │ +
76 }
│ │ │ │ +
77
│ │ │ │ +
78 out[4] = in[2];
│ │ │ │ +
79
│ │ │ │ +
80 return;
│ │ │ │ +
81 }
│ │ │ │ +
82
│ │ │ │ +
83 if (k==2)
│ │ │ │ +
84 {
│ │ │ │ +
85 // transform to reference element with base [-1,1]^2
│ │ │ │ +
86 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ +
87 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ +
88 const R z = in[2];
│ │ │ │ +
89
│ │ │ │ +
90 if (x > y)
│ │ │ │ +
91 {
│ │ │ │ +
92 // vertices
│ │ │ │ +
93 out[0] = 0.25*(x + z)*(x + z - 1)*(y - z - 1)*(y - z);
│ │ │ │ +
94 out[1] = -0.25*(x + z)*(y - z)*((x + z + 1)*(-y + z + 1) - 4*z) - z*(x - y);
│ │ │ │ +
95 out[2] = 0.25*(x + z)*(y - z)*(y - z + 1)*(x + z - 1);
│ │ │ │ +
96 out[3] = 0.25*(y - z)*(x + z)*(y - z + 1)*(x + z + 1);
│ │ │ │ +
97 out[4] = z*(2*z - 1);
│ │ │ │ +
98
│ │ │ │ +
99 // lower edges
│ │ │ │ +
100 out[5] = -0.5*(y - z + 1)*(x + z - 1)*(y - 1)*x;
│ │ │ │ +
101 out[6] = -0.5*(y - z + 1)*(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1));
│ │ │ │ +
102 out[7] = -0.5*(x + z - 1)*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1));
│ │ │ │ +
103 out[8] = -0.5*(y - z + 1)*(x + z - 1)*(x + 1)*y;
│ │ │ │ +
104
│ │ │ │ +
105 // upper edges
│ │ │ │ +
106 out[9] = z*(x + z - 1)*(y - z - 1);
│ │ │ │ +
107 out[10] = -z*((x + z + 1)*(y - z - 1) + 4*z);
│ │ │ │ +
108 out[11] = -z*(y - z + 1)*(x + z - 1);
│ │ │ │ +
109 out[12] = z*(y - z + 1)*(x + z + 1);
│ │ │ │ +
110
│ │ │ │ +
111 // base face
│ │ │ │ +
112 out[13] = (y - z + 1)*(x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1));
│ │ │ │ +
113 }
│ │ │ │ +
114 else
│ │ │ │ +
115 {
│ │ │ │ +
116 // vertices
│ │ │ │ +
117 out[0] = 0.25*(y + z)*(y + z - 1)*(x - z - 1)*(x - z);
│ │ │ │ +
118 out[1] = -0.25*(x - z)*(y + z)*(x - z + 1)*(-y - z + 1);
│ │ │ │ +
119 out[2] = 0.25*(x - z)*(y + z)*((x - z - 1)*(y + z + 1) + 4*z) + z*(x - y);
│ │ │ │ +
120 out[3] = 0.25*(y + z)*(x - z)*(x - z + 1)*(y + z + 1);
│ │ │ │ +
121 out[4] = z*(2*z - 1);
│ │ │ │ +
122
│ │ │ │ +
123 // lower edges
│ │ │ │ +
124 out[5] = -0.5*(y + z - 1)*(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1));
│ │ │ │ +
125 out[6] = -0.5*(x - z + 1)*(y + z - 1)*(y + 1)*x;
│ │ │ │ +
126 out[7] = -0.5*(x - z + 1)*(y + z - 1)*(x - 1)*y;
│ │ │ │ +
127 out[8] = -0.5*(x - z + 1)*(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1));
│ │ │ │ +
128
│ │ │ │ +
129 // upper edges
│ │ │ │ +
130 out[9] = z*(y + z - 1)*(x - z - 1);
│ │ │ │ +
131 out[10] = -z*(x - z + 1)*(y + z - 1);
│ │ │ │ +
132 out[11] = -z*((y + z + 1)*(x - z - 1) + 4*z);
│ │ │ │ +
133 out[12] = z*(x - z + 1)*(y + z + 1);
│ │ │ │ +
134
│ │ │ │ +
135 // base face
│ │ │ │ +
136 out[13] = (x - z + 1)*(y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1));
│ │ │ │ +
137 }
│ │ │ │ +
138
│ │ │ │ +
139 return;
│ │ │ │ +
140 }
│ │ │ │ +
141
│ │ │ │ +
142 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateFunction for order " << k);
│ │ │ │ +
143 }
│ │ │ │ +
144
│ │ │ │ +
150 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
151 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
152 {
│ │ │ │ +
153 out.resize(size());
│ │ │ │ +
154
│ │ │ │ +
155 // Specialization for k==0
│ │ │ │ +
156 if (k==0)
│ │ │ │ +
157 {
│ │ │ │ +
158 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ +
159 return;
│ │ │ │ +
160 }
│ │ │ │ +
161
│ │ │ │ +
162 if (k==1)
│ │ │ │ +
163 {
│ │ │ │ +
164 if(in[0] > in[1])
│ │ │ │ +
165 {
│ │ │ │ +
166 out[0][0] = {-1 + in[1], -1 + in[0] + in[2], -1 + in[1]};
│ │ │ │ +
167 out[1][0] = { 1 - in[1], -in[0] - in[2], -in[1]};
│ │ │ │ +
168 out[2][0] = { -in[1], 1 - in[0] - in[2], -in[1]};
│ │ │ │ +
169 out[3][0] = { in[1], in[0] + in[2], in[1]};
│ │ │ │ +
170 }
│ │ │ │ +
171 else
│ │ │ │ +
172 {
│ │ │ │ +
173 out[0][0] = {-1 + in[1] + in[2], -1 + in[0], -1 + in[0]};
│ │ │ │ +
174 out[1][0] = { 1 - in[1] - in[2], -in[0], -in[0]};
│ │ │ │ +
175 out[2][0] = { -in[1] - in[2], 1 - in[0], -in[0]};
│ │ │ │ +
176 out[3][0] = { in[1] + in[2], in[0], in[0]};
│ │ │ │ +
177 }
│ │ │ │ +
178
│ │ │ │ +
179 out[4][0] = {0, 0, 1};
│ │ │ │ +
180 return;
│ │ │ │ +
181 }
│ │ │ │ +
182
│ │ │ │ +
183 if (k==2)
│ │ │ │ +
184 {
│ │ │ │ +
185 // transform to reference element with base [-1,1]^2
│ │ │ │ +
186 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ +
187 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ +
188 const R z = in[2];
│ │ │ │ +
189
│ │ │ │ +
190 // transformation of the gradient leads to a multiplication
│ │ │ │ +
191 // with the Jacobian [2 0 0; 0 2 0; 1 1 1]
│ │ │ │ +
192 if (x > y)
│ │ │ │ +
193 {
│ │ │ │ +
194 // vertices
│ │ │ │ +
195 out[0][0][0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1);
│ │ │ │ +
196 out[0][0][1] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1);
│ │ │ │ +
197 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1])
│ │ │ │ +
198 + 0.25*((2*x + 2*z - 1)*(y - z - 1)*(y - z)
│ │ │ │ +
199 + (x + z)*(x + z - 1)*(-2*y + 2*z + 1));
│ │ │ │ +
200
│ │ │ │ +
201 out[1][0][0] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ +
202 + (x + z)*(y - z)*(-y + z + 1)) - z);
│ │ │ │ +
203 out[1][0][1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ +
204 + (x + z)*(y - z)*(-(x + z + 1))) + z);
│ │ │ │ +
205 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1])
│ │ │ │ +
206 - 0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ +
207 - (x + z)*((x + z + 1)*(-y + z + 1) - 4*z)
│ │ │ │ +
208 + (x + z)*(y - z)*(x - y + 2*z - 2))
│ │ │ │ +
209 - (x - y);
│ │ │ │ +
210
│ │ │ │ +
211 out[2][0][0] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1);
│ │ │ │ +
212 out[2][0][1] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1);
│ │ │ │ +
213 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1])
│ │ │ │ +
214 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z - 1)
│ │ │ │ +
215 + (x + z)*(y - z)*(y - x - 2*z + 2));
│ │ │ │ +
216
│ │ │ │ +
217 out[3][0][0] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1);
│ │ │ │ +
218 out[3][0][1] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1);
│ │ │ │ +
219 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1])
│ │ │ │ +
220 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z + 1)
│ │ │ │ +
221 + (y - z)*(x + z)*(y - x - 2*z));
│ │ │ │ +
222
│ │ │ │ +
223 out[4][0][0] = 0;
│ │ │ │ +
224 out[4][0][1] = 0;
│ │ │ │ +
225 out[4][0][2] = 4*z - 1;
│ │ │ │ +
226
│ │ │ │ +
227 // lower edges
│ │ │ │ +
228 out[5][0][0] = -(y - z + 1)*(y - 1)*(2*x + z - 1);
│ │ │ │ +
229 out[5][0][1] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x;
│ │ │ │ +
230 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1])
│ │ │ │ +
231 + 0.5*(x + z - 1)*(y - 1)*x - 0.5*(y - z + 1)*(y - 1)*x;
│ │ │ │ +
232
│ │ │ │ +
233 out[6][0][0] = -(y - z + 1)*(2*x + z + 1)*(y - 1);
│ │ │ │ +
234 out[6][0][1] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)
│ │ │ │ +
235 + (y - z + 1)*((x + z + 1)*x + 2*z));
│ │ │ │ +
236 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1])
│ │ │ │ +
237 - 0.5*(-(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1))
│ │ │ │ +
238 + (y - z + 1)*(((y - 1)*x - 1) + 2*y + 1));
│ │ │ │ +
239
│ │ │ │ +
240 out[7][0][0] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)
│ │ │ │ +
241 + (x + z - 1)*((y - z - 1)*y + 2*z));
│ │ │ │ +
242 out[7][0][1] = -(x + z - 1)*(2*y - z - 1)*(x + 1);
│ │ │ │ +
243 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1])
│ │ │ │ +
244 - 0.5*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)
│ │ │ │ +
245 + (x + z - 1)*((-(x + 1)*y - 1) + 2*x + 1));
│ │ │ │ +
246
│ │ │ │ +
247 out[8][0][0] = -(y - z + 1)*(2*x + z)*y;
│ │ │ │ +
248 out[8][0][1] = -(2*y - z + 1)*(x + z - 1)*(x + 1);
│ │ │ │ +
249 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1])
│ │ │ │ +
250 - 0.5*(-x + y - 2*z + 2)*(x + 1)*y;
│ │ │ │ +
251
│ │ │ │ +
252 // upper edges
│ │ │ │ +
253 out[9][0][0] = 2*z*(y - z - 1);
│ │ │ │ +
254 out[9][0][1] = 2*z*(x + z - 1);
│ │ │ │ +
255 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1])
│ │ │ │ +
256 + (x + z - 1)*(y - z - 1) + z*(-x + y - 2*z);
│ │ │ │ +
257
│ │ │ │ +
258 out[10][0][0] = -2*z*(y - z - 1);
│ │ │ │ +
259 out[10][0][1] = -2*z*(x + z + 1);
│ │ │ │ +
260 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1])
│ │ │ │ +
261 - ((x + z + 1)*(y - z - 1) + 4*z)
│ │ │ │ +
262 - z*(-x + y - 2*z + 2);
│ │ │ │ +
263
│ │ │ │ +
264 out[11][0][0] = -2*z*(y - z + 1);
│ │ │ │ +
265 out[11][0][1] = -2*z*(x + z - 1);
│ │ │ │ +
266 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1])
│ │ │ │ +
267 - (y - z + 1)*(x + z - 1) - z*(-x + y - 2*z + 2);
│ │ │ │ +
268
│ │ │ │ +
269 out[12][0][0] = 2*z*(y - z + 1);
│ │ │ │ +
270 out[12][0][1] = 2*z*(x + z + 1);
│ │ │ │ +
271 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1])
│ │ │ │ +
272 + (y - z + 1)*(x + z + 1) + z*(-x + y - 2*z);
│ │ │ │ +
273
│ │ │ │ +
274 // base face
│ │ │ │ +
275 out[13][0][0] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ +
276 + (y - z + 1)*(x + z - 1)*(y - 1 + z));
│ │ │ │ +
277 out[13][0][1] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ +
278 + (y - z + 1)*(x + z - 1)*(x + 1 - z));
│ │ │ │ +
279 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1])
│ │ │ │ +
280 + ((-x + y - 2*z + 2)*((y - 1)*(x + 1) + z*(x - y + z + 1))
│ │ │ │ +
281 + (y - z + 1)*(x + z - 1)*(x - y + 2*z + 1));
│ │ │ │ +
282 }
│ │ │ │ +
283 else
│ │ │ │ +
284 {
│ │ │ │ +
285 // vertices
│ │ │ │ +
286 out[0][0][0] = 0.5*(y + z)*(y + z - 1)*(2*x - 2*z - 1);
│ │ │ │ +
287 out[0][0][1] = 0.5*(2*y + 2*z - 1)*(x - z - 1)*(x - z);
│ │ │ │ +
288 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1])
│ │ │ │ +
289 + 0.25*((2*y + 2*z - 1)*(x - z - 1)*(x - z)
│ │ │ │ +
290 + (y + z)*(y + z - 1)*(-2*x + 2*z + 1));
│ │ │ │ +
291
│ │ │ │ +
292 out[1][0][0] = -0.5*(y + z)*(2*x - 2*z + 1)*(-y - z + 1);
│ │ │ │ +
293 out[1][0][1] = -0.5*(x - z)*(x - z + 1)*(-2*y - 2*z + 1);
│ │ │ │ +
294 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1])
│ │ │ │ +
295 - 0.25*((x - y - 2*z)*(x - z + 1)*(-y - z + 1)
│ │ │ │ +
296 + (x - z)*(y + z)*(-x + y + 2*z - 2));
│ │ │ │ +
297
│ │ │ │ +
298 out[2][0][0] = 0.5*((y + z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ +
299 + (x - z)*(y + z)*(y + z + 1) + 4*z);
│ │ │ │ +
300 out[2][0][1] = 0.5*((x - z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ +
301 + (x - z)*(y + z)*(x - z - 1) - 4*z);
│ │ │ │ +
302 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1])
│ │ │ │ +
303 + 0.25*((x - y - 2*z)*((x - z - 1)*(y + z + 1) + 4*z)
│ │ │ │ +
304 + (x - z)*(y + z)*(x - y - 2*z + 2) + 4*(x - y));
│ │ │ │ +
305
│ │ │ │ +
306 out[3][0][0] = 0.5*(y + z)*(2*x - 2*z + 1)*(y + z + 1);
│ │ │ │ +
307 out[3][0][1] = 0.5*(x - z)*(x - z + 1)*(2*y + 2*z + 1);
│ │ │ │ +
308 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1])
│ │ │ │ +
309 + 0.25*((x - y - 2*z)*(x - z + 1)*(y + z + 1)
│ │ │ │ +
310 + (y + z)*(x - z)*(x - y - 2*z));
│ │ │ │ +
311
│ │ │ │ +
312 out[4][0][0] = 0;
│ │ │ │ +
313 out[4][0][1] = 0;
│ │ │ │ +
314 out[4][0][2] = 4*z - 1;
│ │ │ │ +
315
│ │ │ │ +
316 // lower edges
│ │ │ │ +
317 out[5][0][0] = -(y + z - 1)*(2*x - z - 1)*(y + 1);
│ │ │ │ +
318 out[5][0][1] = -(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)
│ │ │ │ +
319 + (y + z - 1)*((x - z - 1)*x + 2*z));
│ │ │ │ +
320 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1])
│ │ │ │ +
321 - 0.5*((((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1))
│ │ │ │ +
322 + (y + z - 1)*((-(y + 1)*x - 1) + 2*y + 1));
│ │ │ │ +
323
│ │ │ │ +
324 out[6][0][0] = -(2*x - z + 1)*(y + z - 1)*(y + 1);
│ │ │ │ +
325 out[6][0][1] = -(x - z + 1)*(2*y + z)*x;
│ │ │ │ +
326 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1])
│ │ │ │ +
327 - 0.5*(x - y - 2*z + 2)*(y + 1)*x;
│ │ │ │ +
328
│ │ │ │ +
329 out[7][0][0] = -(2*x - z)*(y + z - 1)*y;
│ │ │ │ +
330 out[7][0][1] = -(x - z + 1)*(2*y + z - 1)*(x - 1);
│ │ │ │ +
331 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1])
│ │ │ │ +
332 - 0.5*(x - y - 2*z + 2)*(x - 1)*y;
│ │ │ │ +
333
│ │ │ │ +
334 out[8][0][0] = -(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)
│ │ │ │ +
335 + (x - z + 1)*((y + z + 1)*y + 2*z));
│ │ │ │ +
336 out[8][0][1] = -(x - z + 1)*(2*y + z + 1)*(x - 1);
│ │ │ │ +
337 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1])
│ │ │ │ +
338 - 0.5*(-(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1))
│ │ │ │ +
339 + (x - z + 1)*(((x - 1)*y - 1) + 2*x + 1));
│ │ │ │ +
340
│ │ │ │ +
341 // upper edges
│ │ │ │ +
342 out[9][0][0] = 2*z*(y + z - 1);
│ │ │ │ +
343 out[9][0][1] = 2*z*(x - z - 1);
│ │ │ │ +
344 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1])
│ │ │ │ +
345 + (y + z - 1)*(x - z - 1) + z*(x - y - 2*z);
│ │ │ │ +
346
│ │ │ │ +
347 out[10][0][0] = -2*z*(y + z - 1);
│ │ │ │ +
348 out[10][0][1] = -2*z*(x - z + 1);
│ │ │ │ +
349 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1])
│ │ │ │ +
350 - (x - z + 1)*(y + z - 1) - z*(x - y - 2*z + 2);
│ │ │ │ +
351
│ │ │ │ +
352 out[11][0][0] = -2*z*(y + z + 1);
│ │ │ │ +
353 out[11][0][1] = -2*z*(x - z - 1);
│ │ │ │ +
354 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1])
│ │ │ │ +
355 - ((y + z + 1)*(x - z - 1) + 4*z) - z*(x - y - 2*z + 2);
│ │ │ │ +
356
│ │ │ │ +
357 out[12][0][0] = 2*z*(y + z + 1);
│ │ │ │ +
358 out[12][0][1] = 2*z*(x - z + 1);
│ │ │ │ +
359 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1])
│ │ │ │ +
360 + (x - z + 1)*(y + z + 1) + z*(x - y - 2*z);
│ │ │ │ +
361
│ │ │ │ +
362 // base face
│ │ │ │ +
363 out[13][0][0] = 2*((y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ +
364 + (x - z + 1)*(y + z - 1)*(y + 1 - z));
│ │ │ │ +
365 out[13][0][1] = 2*((x - z + 1)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ +
366 + (x - z + 1)*(y + z - 1)*(x - 1 + z));
│ │ │ │ +
367 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1])
│ │ │ │ +
368 + (x - y - 2*z + 2)*((y + 1)*(x - 1) - z*(x - y - z - 1))
│ │ │ │ +
369 + (x - z + 1)*(y + z - 1)*(-(x - y - 2*z - 1));
│ │ │ │ +
370 }
│ │ │ │ +
371
│ │ │ │ +
372 return;
│ │ │ │ +
373 }
│ │ │ │ +
374
│ │ │ │ +
375 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateJacobian for order " << k);
│ │ │ │ +
376 }
│ │ │ │ +
377
│ │ │ │ +
384 void partial(const std::array<unsigned int,3>& order,
│ │ │ │ +
385 const typename Traits::DomainType& in,
│ │ │ │ +
386 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
387 {
│ │ │ │ +
388 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
389
│ │ │ │ +
390 out.resize(size());
│ │ │ │ +
391
│ │ │ │ +
392 if (totalOrder == 0)
│ │ │ │ +
393 {
│ │ │ │ +
394 evaluateFunction(in, out);
│ │ │ │ +
395 return;
│ │ │ │ +
396 }
│ │ │ │ +
397
│ │ │ │ +
398 if (k==0)
│ │ │ │ +
399 {
│ │ │ │ +
400 out[0] = 0;
│ │ │ │ +
401 return;
│ │ │ │ +
402 }
│ │ │ │ +
403
│ │ │ │ +
404 if (k==1)
│ │ │ │ +
405 {
│ │ │ │ +
406 if (totalOrder == 1)
│ │ │ │ +
407 {
│ │ │ │ +
408 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
409 if (in[0] > in[1])
│ │ │ │ +
410 {
│ │ │ │ +
411 switch (direction)
│ │ │ │ +
412 {
│ │ │ │ +
413 case 0:
│ │ │ │ +
414 out[0] = -1 + in[1];
│ │ │ │ +
415 out[1] = 1 - in[1];
│ │ │ │ +
416 out[2] = -in[1];
│ │ │ │ +
417 out[3] = in[1];
│ │ │ │ +
418 out[4] = 0;
│ │ │ │ +
419 break;
│ │ │ │ +
420 case 1:
│ │ │ │ +
421 out[0] = -1 + in[0] + in[2];
│ │ │ │ +
422 out[1] = -in[0] - in[2];
│ │ │ │ +
423 out[2] = 1 - in[0] - in[2];
│ │ │ │ +
424 out[3] = in[0]+in[2];
│ │ │ │ +
425 out[4] = 0;
│ │ │ │ +
426 break;
│ │ │ │ +
427 case 2:
│ │ │ │ +
428 out[0] = -1 + in[1];
│ │ │ │ +
429 out[1] = -in[1];
│ │ │ │ +
430 out[2] = -in[1];
│ │ │ │ +
431 out[3] = in[1];
│ │ │ │ +
432 out[4] = 1;
│ │ │ │ +
433 break;
│ │ │ │ +
434 default:
│ │ │ │ +
435 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
436 }
│ │ │ │ +
437 }
│ │ │ │ +
438 else /* (in[0] <= in[1]) */
│ │ │ │ +
439 {
│ │ │ │ +
440 switch (direction)
│ │ │ │ +
441 {
│ │ │ │ +
442 case 0:
│ │ │ │ +
443 out[0] = -1 + in[1] + in[2];
│ │ │ │ +
444 out[1] = 1 - in[1] - in[2];
│ │ │ │ +
445 out[2] = -in[1] - in[2];
│ │ │ │ +
446 out[3] = in[1] + in[2];
│ │ │ │ +
447 out[4] = 0;
│ │ │ │ +
448 break;
│ │ │ │ +
449 case 1:
│ │ │ │ +
450 out[0] = -1 + in[0];
│ │ │ │ +
451 out[1] = -in[0];
│ │ │ │ +
452 out[2] = 1 - in[0];
│ │ │ │ +
453 out[3] = in[0];
│ │ │ │ +
454 out[4] = 0;
│ │ │ │ +
455 break;
│ │ │ │ +
456 case 2:
│ │ │ │ +
457 out[0] = -1 + in[0];
│ │ │ │ +
458 out[1] = -in[0];
│ │ │ │ +
459 out[2] = -in[0];
│ │ │ │ +
460 out[3] = in[0];
│ │ │ │ +
461 out[4] = 1;
│ │ │ │ +
462 break;
│ │ │ │ +
463 default:
│ │ │ │ +
464 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
465 }
│ │ │ │ +
466 }
│ │ │ │ +
467 } else if (totalOrder == 2)
│ │ │ │ +
468 {
│ │ │ │ +
469 if ((order[0] == 1 && order[1] == 1) ||
│ │ │ │ +
470 (order[1] == 1 && order[2] == 1 && in[0] > in[1]) ||
│ │ │ │ +
471 (order[0] == 1 && order[2] == 1 && in[0] <=in[1]))
│ │ │ │ +
472 {
│ │ │ │ +
473 out = {1, -1, -1, 1, 0};
│ │ │ │ +
474 } else
│ │ │ │ +
475 {
│ │ │ │ +
476 out = {0, 0, 0, 0, 0};
│ │ │ │ +
477 }
│ │ │ │ +
478
│ │ │ │ +
479 } else
│ │ │ │ +
480 {
│ │ │ │ +
481 out = {0, 0, 0, 0, 0};
│ │ │ │ +
482 }
│ │ │ │ +
483
│ │ │ │ +
484 return;
│ │ │ │ +
485 }
│ │ │ │ +
486
│ │ │ │ +
487 if (k==2)
│ │ │ │ +
488 {
│ │ │ │ +
489 if (totalOrder == 1)
│ │ │ │ +
490 {
│ │ │ │ +
491 // transform to reference element with base [-1,1]^2
│ │ │ │ +
492 const R x = 2.0*in[0] + in[2] - 1.0;
│ │ │ │ +
493 const R y = 2.0*in[1] + in[2] - 1.0;
│ │ │ │ +
494 const R z = in[2];
│ │ │ │ +
495
│ │ │ │ +
496 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
497
│ │ │ │ +
498 // transformation of the gradient leads to a multiplication
│ │ │ │ +
499 // with the Jacobian [2 0 0; 0 2 0; 1 1 1]
│ │ │ │ +
500 if (x > y)
│ │ │ │ +
501 {
│ │ │ │ +
502 switch (direction)
│ │ │ │ +
503 {
│ │ │ │ +
504 case 0:
│ │ │ │ +
505 out[0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1);
│ │ │ │ +
506 out[1] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - z)*(-y + z + 1)) - z);
│ │ │ │ +
507 out[2] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1);
│ │ │ │ +
508 out[3] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1);
│ │ │ │ +
509 out[4] = 0;
│ │ │ │ +
510 out[5] = -(y - z + 1)*(2*x + z - 1)*(y - 1);
│ │ │ │ +
511 out[6] = -(y - z + 1)*(2*x + z + 1)*(y - 1);
│ │ │ │ +
512 out[7] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) + (x + z - 1)*((y - z - 1)*y + 2*z));
│ │ │ │ +
513 out[8] = -(y - z + 1)*(2*x + z)*y;
│ │ │ │ +
514 out[9] = 2*z*(y - z - 1);
│ │ │ │ +
515 out[10] = -2*z*(y - z - 1);
│ │ │ │ +
516 out[11] = -2*z*(y - z + 1);
│ │ │ │ +
517 out[12] = 2*z*(y - z + 1);
│ │ │ │ +
518 out[13] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + 1)*(x + z - 1)*(y - 1 + z));
│ │ │ │ +
519 break;
│ │ │ │ +
520 case 1:
│ │ │ │ +
521 out[0] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1);
│ │ │ │ +
522 out[1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - z)*(-(x + z + 1))) + z);
│ │ │ │ +
523 out[2] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1);
│ │ │ │ +
524 out[3] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1);
│ │ │ │ +
525 out[4] = 0;
│ │ │ │ +
526 out[5] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x;
│ │ │ │ +
527 out[6] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) + (y - z + 1)*((x + z + 1)*x + 2*z));
│ │ │ │ +
528 out[7] = -(x + z - 1)*(2*y - z - 1)*(x + 1);
│ │ │ │ +
529 out[8] = -(2*y - z + 1)*(x + z - 1)*(x + 1);
│ │ │ │ +
530 out[9] = 2*z*(x + z - 1);
│ │ │ │ +
531 out[10] = -2*z*(x + z + 1);
│ │ │ │ +
532 out[11] = -2*z*(x + z - 1);
│ │ │ │ +
533 out[12] = 2*z*(x + z + 1);
│ │ │ │ +
534 out[13] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + 1)*(x + z - 1)*(x + 1 - z));
│ │ │ │ +
535 break;
│ │ │ │ +
536 case 2:
│ │ │ │ +
537 out[0] = -((y - z)*(2*x + 2*z - 1)*(z - y + 1))/2;
│ │ │ │ +
538 out[1] = ((y - z + 1)*(y - 2*x + z + 2*x*y - 2*x*z + 2*y*z - 2*z*z))/2;
│ │ │ │ +
539 out[2] = ((y - z)*(2*x + 2*z - 1)*(y - z + 1))/2;
│ │ │ │ +
540 out[3] = ((y - z)*(2*x + 2*z + 1)*(y - z + 1))/2;
│ │ │ │ +
541 out[4] = 4*z - 1;
│ │ │ │ +
542 out[5] = (-(y - z + 1)*(2*x + z - 1)*(y - 1) - (x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x + (x + z - 1)*(y - 1)*x - (y - z + 1)*(y - 1)*x)/2;
│ │ │ │ +
543 out[6] = -((y - z + 1)*(3*y - 2*x + z + 3*x*y + x*z + y*z + x*x - 1))/2;
│ │ │ │ +
544 out[7] = z - z*(2*x + 1) - ((2*z - y*(z - y + 1))*(x + z - 1))/2 - ((2*x - y*(x + 1))*(x + z - 1))/2 + ((x + 1)*(x + z - 1)*(z - 2*y + 1))/2 + y*(x + 1)*(z - y + 1);
│ │ │ │ +
545 out[8] = -((y - z + 1)*(y + z + 3*x*y + x*z + y*z + x*x - 1))/2;
│ │ │ │ +
546 out[9] = -(x + 3*z - 1)*(z - y + 1);
│ │ │ │ +
547 out[10] = (x + z + 1)*(z - y + 1) - 2*y*z - 6*z + 2*z*z;
│ │ │ │ +
548 out[11] = -(x + 3*z - 1)*(y - z + 1);
│ │ │ │ +
549 out[12] = (x + 3*z + 1)*(y - z + 1);
│ │ │ │ +
550 out[13] = (y - z + 1)*(2*y - 3*x + z + 2*x*y + 6*x*z - 2*y*z + 2*x*x + 4*z*z - 3);
│ │ │ │ +
551 break;
│ │ │ │ +
552 default:
│ │ │ │ +
553 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
554 }
│ │ │ │ +
555 }
│ │ │ │ +
556 else // x <= y
│ │ │ │ +
557 {
│ │ │ │ +
558 switch (direction)
│ │ │ │ +
559 {
│ │ │ │ +
560 case 0:
│ │ │ │ +
561 out[0] = -((y + z)*(2*z - 2*x + 1)*(y + z - 1))/2;
│ │ │ │ +
562 out[1] = ((y + z)*(2*x - 2*z + 1)*(y + z - 1))/2;
│ │ │ │ +
563 out[2] = -((y + z + 1)*(y - 3*z - 2*x*y - 2*x*z + 2*y*z + 2*z*z))/2;
│ │ │ │ +
564 out[3] = ((y + z)*(2*x - 2*z + 1)*(y + z + 1))/2;
│ │ │ │ +
565 out[4] = 0;
│ │ │ │ +
566 out[5] = (y + 1)*(y + z - 1)*(z - 2*x + 1);
│ │ │ │ +
567 out[6] = -(y + 1)*(2*x - z + 1)*(y + z - 1);
│ │ │ │ +
568 out[7] = -y*(2*x - z)*(y + z - 1);
│ │ │ │ +
569 out[8] = z - z*(2*x + 1) - (2*z + y*(y + z + 1))*(x - z + 1) - y*(x - 1)*(y + z + 1);
│ │ │ │ +
570 out[9] = 2*z*(y + z - 1);
│ │ │ │ +
571 out[10] = -2*z*(y + z - 1);
│ │ │ │ +
572 out[11] = -2*z*(y + z + 1);
│ │ │ │ +
573 out[12] = 2*z*(y + z + 1);
│ │ │ │ +
574 out[13] = 2*(y + z - 1)*(2*x - z + 2*x*y - 2*x*z + 2*z*z);
│ │ │ │ +
575 break;
│ │ │ │ +
576 case 1:
│ │ │ │ +
577 out[0] = -(x - z)*(y + z - 0.5)*(z - x + 1);
│ │ │ │ +
578 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2;
│ │ │ │ +
579 out[2] = -((z - x + 1)*(x + 3*z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2;
│ │ │ │ +
580 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2;
│ │ │ │ +
581 out[4] = 0;
│ │ │ │ +
582 out[5] = z - z*(2*y + 1) - (2*z - x*(z - x + 1))*(y + z - 1) + x*(y + 1)*(z - x + 1);
│ │ │ │ +
583 out[6] = -x*(2*y + z)*(x - z + 1);
│ │ │ │ +
584 out[7] = -(x - 1)*(x - z + 1)*(2*y + z - 1);
│ │ │ │ +
585 out[8] = -(x - 1)*(x - z + 1)*(2*y + z + 1);
│ │ │ │ +
586 out[9] = -2*z*(z - x + 1);
│ │ │ │ +
587 out[10] = -2*z*(x - z + 1);
│ │ │ │ +
588 out[11] = 2*z*(z - x + 1);
│ │ │ │ +
589 out[12] = 2*z*(x - z + 1);
│ │ │ │ +
590 out[13] = 2*(x - z + 1)*(2*x*y - z - 2*y + 2*y*z + 2*z*z);
│ │ │ │ +
591 break;
│ │ │ │ +
592 case 2:
│ │ │ │ +
593 out[0] = -((x - z)*(2*y + 2*z - 1)*(z - x + 1))/2;
│ │ │ │ +
594 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2;
│ │ │ │ +
595 out[2] = ((x - z + 1)*(x - 2*y + z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2;
│ │ │ │ +
596 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2;
│ │ │ │ +
597 out[4] = 4*z - 1;
│ │ │ │ +
598 out[5] = z - z*(2*y + 1) - ((2*z - x*(z - x + 1))*(y + z - 1))/2 - ((2*y - x*(y + 1))*(y + z - 1))/2 + ((y + 1)*(y + z - 1)*(z - 2*x + 1))/2 + x*(y + 1)*(z - x + 1);
│ │ │ │ +
599 out[6] = -((x - z + 1)*(x + z + 3*x*y + x*z + y*z + y*y - 1))/2;
│ │ │ │ +
600 out[7] = -((x - z + 1)*(3*x*y - 4*y - z - x + x*z + y*z + y*y + 1))/2;
│ │ │ │ +
601 out[8] = -((x - z + 1)*(3*x - 2*y + z + 3*x*y + x*z + y*z + y*y - 1))/2;
│ │ │ │ +
602 out[9] = -(z - x + 1)*(y + 3*z - 1);
│ │ │ │ +
603 out[10] = -(x - z + 1)*(y + 3*z - 1);
│ │ │ │ +
604 out[11] = (y + z + 1)*(z - x + 1) - 2*x*z - 6*z + 2*z*z;
│ │ │ │ +
605 out[12] = (x - z + 1)*(y + 3*z + 1);
│ │ │ │ +
606 out[13] = (x - z + 1)*(2*x - 3*y + z + 2*x*y - 2*x*z + 6*y*z + 2*y*y + 4*z*z - 3);
│ │ │ │ +
607 break;
│ │ │ │ +
608 default:
│ │ │ │ +
609 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
610 }
│ │ │ │ +
611 }
│ │ │ │ +
612 } else {
│ │ │ │ +
613 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
614 }
│ │ │ │ +
615
│ │ │ │ +
616 return;
│ │ │ │ +
617 }
│ │ │ │ +
618
│ │ │ │ +
619 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::partial for order " << k);
│ │ │ │ +
620 }
│ │ │ │ +
621
│ │ │ │ +
623 static constexpr unsigned int order ()
│ │ │ │ +
624 {
│ │ │ │ +
625 return k;
│ │ │ │ +
626 }
│ │ │ │ +
627 };
│ │ │ │ +
628
│ │ │ │ +
633 template<unsigned int k>
│ │ │ │ +
634 class LagrangePyramidLocalCoefficients
│ │ │ │ +
635 {
│ │ │ │ +
636 public:
│ │ │ │ +
638 LagrangePyramidLocalCoefficients ()
│ │ │ │ +
639 : localKeys_(size())
│ │ │ │ +
640 {
│ │ │ │ +
641 if (k==0)
│ │ │ │ +
642 {
│ │ │ │ +
643 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ +
644 return;
│ │ │ │ +
645 }
│ │ │ │ +
646
│ │ │ │ +
647 if (k==1)
│ │ │ │ +
648 {
│ │ │ │ +
649 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
650 localKeys_[i] = LocalKey(i,3,0);
│ │ │ │ +
651 return;
│ │ │ │ +
652 }
│ │ │ │ +
653
│ │ │ │ +
654 if (k==2)
│ │ │ │ +
655 {
│ │ │ │ +
656 // Vertex shape functions
│ │ │ │ +
657 localKeys_[0] = LocalKey(0,3,0);
│ │ │ │ +
658 localKeys_[1] = LocalKey(1,3,0);
│ │ │ │ +
659 localKeys_[2] = LocalKey(2,3,0);
│ │ │ │ +
660 localKeys_[3] = LocalKey(3,3,0);
│ │ │ │ +
661 localKeys_[4] = LocalKey(4,3,0);
│ │ │ │ +
662
│ │ │ │ +
663 // Edge shape functions
│ │ │ │ +
664 localKeys_[5] = LocalKey(0,2,0);
│ │ │ │ +
665 localKeys_[6] = LocalKey(1,2,0);
│ │ │ │ +
666 localKeys_[7] = LocalKey(2,2,0);
│ │ │ │ +
667 localKeys_[8] = LocalKey(3,2,0);
│ │ │ │ +
668 localKeys_[9] = LocalKey(4,2,0);
│ │ │ │ +
669 localKeys_[10] = LocalKey(5,2,0);
│ │ │ │ +
670 localKeys_[11] = LocalKey(6,2,0);
│ │ │ │ +
671 localKeys_[12] = LocalKey(7,2,0);
│ │ │ │ +
672
│ │ │ │ +
673 // base face shape function
│ │ │ │ +
674 localKeys_[13] = LocalKey(0,1,0);
│ │ │ │ +
675
│ │ │ │ +
676 return;
│ │ │ │ +
677 }
│ │ │ │ +
678
│ │ │ │ +
679 // No general case
│ │ │ │ +
680 DUNE_THROW(NotImplemented, "LagrangePyramidLocalCoefficients for order " << k);
│ │ │ │ +
681
│ │ │ │ +
682 }
│ │ │ │ +
683
│ │ │ │ +
685 static constexpr std::size_t size ()
│ │ │ │ +
686 {
│ │ │ │ +
687 std::size_t result = 0;
│ │ │ │ +
688 for (unsigned int i=0; i<=k; i++)
│ │ │ │ +
689 result += power(i+1,2);
│ │ │ │ +
690 return result;
│ │ │ │ +
691 }
│ │ │ │ +
692
│ │ │ │ +
694 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
695 {
│ │ │ │ +
696 return localKeys_[i];
│ │ │ │ +
697 }
│ │ │ │ +
698
│ │ │ │ +
699 private:
│ │ │ │ +
700 std::vector<LocalKey> localKeys_;
│ │ │ │ +
701 };
│ │ │ │ +
702
│ │ │ │ +
707 template<class LocalBasis>
│ │ │ │ +
708 class LagrangePyramidLocalInterpolation
│ │ │ │ +
709 {
│ │ │ │ +
710 public:
│ │ │ │ +
711
│ │ │ │ +
719 template<typename F, typename C>
│ │ │ │ +
720 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
721 {
│ │ │ │ +
722 constexpr auto k = LocalBasis::order();
│ │ │ │ +
723 using D = typename LocalBasis::Traits::DomainType;
│ │ │ │ +
724 using DF = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ +
725
│ │ │ │ +
726 out.resize(LocalBasis::size());
│ │ │ │ +
727
│ │ │ │ +
728 // Specialization for zero-order case
│ │ │ │ +
729 if (k==0)
│ │ │ │ +
730 {
│ │ │ │ +
731 auto center = ReferenceElements<DF,3>::general(GeometryTypes::pyramid).position(0,0);
│ │ │ │ +
732 out[0] = f(center);
│ │ │ │ +
733 return;
│ │ │ │ +
734 }
│ │ │ │ +
735
│ │ │ │ +
736 // Specialization for first-order case
│ │ │ │ +
737 if (k==1)
│ │ │ │ +
738 {
│ │ │ │ +
739 for (unsigned int i=0; i<LocalBasis::size(); i++)
│ │ │ │ +
740 {
│ │ │ │ +
741 auto vertex = ReferenceElements<DF,3>::general(GeometryTypes::pyramid).position(i,3);
│ │ │ │ +
742 out[i] = f(vertex);
│ │ │ │ +
743 }
│ │ │ │ +
744 return;
│ │ │ │ +
745 }
│ │ │ │ +
746
│ │ │ │ +
747 // Specialization for second-order case
│ │ │ │ +
748 if (k==2)
│ │ │ │ +
749 {
│ │ │ │ +
750 out[0] = f( D( {0.0, 0.0, 0.0} ) );
│ │ │ │ +
751 out[1] = f( D( {1.0, 0.0, 0.0} ) );
│ │ │ │ +
752 out[2] = f( D( {0.0, 1.0, 0.0} ) );
│ │ │ │ +
753 out[3] = f( D( {1.0, 1.0, 0.0} ) );
│ │ │ │ +
754 out[4] = f( D( {0.0, 0.0, 1.0} ) );
│ │ │ │ +
755 out[5] = f( D( {0.0, 0.5, 0.0} ) );
│ │ │ │ +
756 out[6] = f( D( {1.0, 0.5, 0.0} ) );
│ │ │ │ +
757 out[7] = f( D( {0.5, 0.0, 0.0} ) );
│ │ │ │ +
758 out[8] = f( D( {0.5, 1.0, 0.0} ) );
│ │ │ │ +
759 out[9] = f( D( {0.0, 0.0, 0.5} ) );
│ │ │ │ +
760 out[10] = f( D( {0.5, 0.0, 0.5} ) );
│ │ │ │ +
761 out[11] = f( D( {0.0, 0.5, 0.5} ) );
│ │ │ │ +
762 out[12] = f( D( {0.5, 0.5, 0.5} ) );
│ │ │ │ +
763 out[13] = f( D( {0.5, 0.5, 0.0} ) );
│ │ │ │ +
764
│ │ │ │ +
765 return;
│ │ │ │ +
766 }
│ │ │ │ +
767
│ │ │ │ +
768 DUNE_THROW(NotImplemented, "LagrangePyramidLocalInterpolation not implemented for order " << k);
│ │ │ │ +
769 }
│ │ │ │ +
770
│ │ │ │ +
771 };
│ │ │ │ +
772
│ │ │ │ +
773} } // namespace Dune::Impl
│ │ │ │ +
774
│ │ │ │ +
775namespace Dune
│ │ │ │ +
776{
│ │ │ │ +
807 template<class D, class R, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
809 {
│ │ │ │ +
810 public:
│ │ │ │ + │ │ │ │ +
814 Impl::LagrangePyramidLocalCoefficients<k>,
│ │ │ │ +
815 Impl::LagrangePyramidLocalInterpolation<Impl::LagrangePyramidLocalBasis<D,R,k> > >;
│ │ │ │ +
816
│ │ │ │ +
│ │ │ │ +
819 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
820 {
│ │ │ │ +
821 return basis_;
│ │ │ │ +
822 }
│ │ │ │ +
│ │ │ │ +
823
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
827 {
│ │ │ │ +
828 return coefficients_;
│ │ │ │ +
829 }
│ │ │ │ +
│ │ │ │ +
830
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
834 {
│ │ │ │ +
835 return interpolation_;
│ │ │ │ +
836 }
│ │ │ │ +
│ │ │ │ +
837
│ │ │ │ +
│ │ │ │ +
839 static constexpr std::size_t size ()
│ │ │ │ +
840 {
│ │ │ │ +
841 return Impl::LagrangePyramidLocalBasis<D,R,k>::size();
│ │ │ │ +
842 }
│ │ │ │ +
│ │ │ │ +
843
│ │ │ │ +
│ │ │ │ +
846 static constexpr GeometryType type ()
│ │ │ │ +
847 {
│ │ │ │ +
848 return GeometryTypes::pyramid;
│ │ │ │ +
849 }
│ │ │ │ +
│ │ │ │ +
850
│ │ │ │ +
851 private:
│ │ │ │ +
852 Impl::LagrangePyramidLocalBasis<D,R,k> basis_;
│ │ │ │ +
853 Impl::LagrangePyramidLocalCoefficients<k> coefficients_;
│ │ │ │ +
854 Impl::LagrangePyramidLocalInterpolation<Impl::LagrangePyramidLocalBasis<D,R,k> > interpolation_;
│ │ │ │ +
855 };
│ │ │ │ +
│ │ │ │ +
856
│ │ │ │ +
857} // namespace Dune
│ │ │ │ +
858
│ │ │ │ +
859#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition orthonormalbasis.hh:20
│ │ │ │ -
SparseCoeffMatrix< StorageField, 1 > CoefficientMatrix
Definition orthonormalbasis.hh:34
│ │ │ │ -
static Object * create(const unsigned int order)
Definition orthonormalbasis.hh:44
│ │ │ │ -
StandardEvaluator< MonomialBasisType > Evaluator
Definition orthonormalbasis.hh:35
│ │ │ │ -
SF StorageField
Definition orthonormalbasis.hh:22
│ │ │ │ -
static constexpr GeometryType SimplexGeometry
Definition orthonormalbasis.hh:41
│ │ │ │ -
PolynomialBasis< Evaluator, CoefficientMatrix > Basis
Definition orthonormalbasis.hh:36
│ │ │ │ -
EvaluationBasisFactory< dimension, StorageField >::Type MonomialBasisProviderType
Definition orthonormalbasis.hh:31
│ │ │ │ -
CF ComputeField
Definition orthonormalbasis.hh:23
│ │ │ │ -
const Basis Object
Definition orthonormalbasis.hh:39
│ │ │ │ -
unsigned int Key
Definition orthonormalbasis.hh:38
│ │ │ │ -
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │ -
static const unsigned int dimension
Definition orthonormalbasis.hh:21
│ │ │ │ -
MonomialBasisProviderType::Object MonomialBasisType
Definition orthonormalbasis.hh:32
│ │ │ │ - │ │ │ │ -
MonomialBasisProvider< dd, FF > Type
Definition orthonormalbasis.hh:28
│ │ │ │ -
Definition orthonormalcompute.hh:95
│ │ │ │ -
Definition basisevaluator.hh:131
│ │ │ │ -
Definition coeffmatrix.hh:48
│ │ │ │ -
unsigned int size() const
Definition coeffmatrix.hh:69
│ │ │ │ -
void fill(const RowMatrix &mat, bool verbose=false)
Definition coeffmatrix.hh:160
│ │ │ │ -
Definition monomialbasis.hh:780
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Lagrange finite element for 3d pyramids with compile-time polynomial order.
Definition lagrangepyramid.hh:809
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangepyramid.hh:826
│ │ │ │ +
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangepyramid.hh:839
│ │ │ │ +
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangepyramid.hh:846
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangepyramid.hh:819
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangepyramid.hh:833
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,144 +1,861 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ -orthonormalbasis.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangepyramid.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -15 │ │ │ │ │ -16 // OrthonormalBasisFactory │ │ │ │ │ -17 // ----------------------- │ │ │ │ │ -18 template< int dim, class SF, class CF = typename ComputeField< SF, 512 >:: │ │ │ │ │ -Type > │ │ │ │ │ -_1_9 struct _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -20 { │ │ │ │ │ -_2_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_2_2 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -_2_3 typedef CF _C_o_m_p_u_t_e_F_i_e_l_d; │ │ │ │ │ -24 │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -27 { │ │ │ │ │ -_2_8 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ -29 }; │ │ │ │ │ -30 │ │ │ │ │ -_3_1 typedef typename _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _S_t_o_r_a_g_e_F_i_e_l_d_ _>_:_:_T_y_p_e │ │ │ │ │ -_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_T_y_p_e; │ │ │ │ │ -_3_2 typedef typename MonomialBasisProviderType::Object _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e; │ │ │ │ │ -33 │ │ │ │ │ -_3_4 typedef _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _S_t_o_r_a_g_e_F_i_e_l_d_,_ _1_ _> _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ -_3_5 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e_ _> _E_v_a_l_u_a_t_o_r; │ │ │ │ │ -_3_6 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_u_a_t_o_r_,_ _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x_ _> _B_a_s_i_s; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e { namespace Impl │ │ │ │ │ +22{ │ │ │ │ │ +32 template │ │ │ │ │ +33 class LagrangePyramidLocalBasis │ │ │ │ │ +34 { │ │ │ │ │ +35 public: │ │ │ │ │ +36 using Traits = │ │ │ │ │ +LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ +>; │ │ │ │ │ 37 │ │ │ │ │ -_3_8 typedef unsigned int _K_e_y; │ │ │ │ │ -_3_9 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ -40 │ │ │ │ │ -_4_1 static constexpr GeometryType _S_i_m_p_l_e_x_G_e_o_m_e_t_r_y = GeometryTypes::simplex(dim); │ │ │ │ │ -42 │ │ │ │ │ -43 template< GeometryType::Id geometryId > │ │ │ │ │ -_4_4 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const unsigned int order ) │ │ │ │ │ -45 { │ │ │ │ │ -46 const _M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e &monomialBasis = *MonomialBasisProviderType:: │ │ │ │ │ -template create< SimplexGeometry >( order ); │ │ │ │ │ +40 static constexpr std::size_t size () │ │ │ │ │ +41 { │ │ │ │ │ +42 std::size_t result = 0; │ │ │ │ │ +43 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ +44 result += power(i+1,2); │ │ │ │ │ +45 return result; │ │ │ │ │ +46 } │ │ │ │ │ 47 │ │ │ │ │ -48 static _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x _coeffs; │ │ │ │ │ -49 if( _coeffs._s_i_z_e() <= monomialBasis.size() ) │ │ │ │ │ -50 { │ │ │ │ │ -51 _O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _C_o_m_p_u_t_e_F_i_e_l_d_ _> matrix( order ); │ │ │ │ │ -52 _coeffs._f_i_l_l( matrix ); │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -55 return new _B_a_s_i_s( monomialBasis, _coeffs, monomialBasis._s_i_z_e() ); │ │ │ │ │ -56 } │ │ │ │ │ -_5_7 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -58 }; │ │ │ │ │ -59 │ │ │ │ │ -60} │ │ │ │ │ -61 │ │ │ │ │ -62#endif // #ifndef DUNE_ORTHONORMALBASIS_HH │ │ │ │ │ -_o_r_t_h_o_n_o_r_m_a_l_c_o_m_p_u_t_e_._h_h │ │ │ │ │ -_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +49 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +50 std::vector& out) const │ │ │ │ │ +51 { │ │ │ │ │ +52 out.resize(size()); │ │ │ │ │ +53 │ │ │ │ │ +54 // Specialization for zero-order case │ │ │ │ │ +55 if (k==0) │ │ │ │ │ +56 { │ │ │ │ │ +57 out[0] = 1; │ │ │ │ │ +58 return; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +61 if (k==1) │ │ │ │ │ +62 { │ │ │ │ │ +63 if(in[0] > in[1]) │ │ │ │ │ +64 { │ │ │ │ │ +65 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[1]); │ │ │ │ │ +66 out[1] = in[0]*(1-in[1])-in[2]*in[1]; │ │ │ │ │ +67 out[2] = (1-in[0])*in[1]-in[2]*in[1]; │ │ │ │ │ +68 out[3] = in[0]*in[1]+in[2]*in[1]; │ │ │ │ │ +69 } │ │ │ │ │ +70 else │ │ │ │ │ +71 { │ │ │ │ │ +72 out[0] = (1-in[0])*(1-in[1])-in[2]*(1-in[0]); │ │ │ │ │ +73 out[1] = in[0]*(1-in[1])-in[2]*in[0]; │ │ │ │ │ +74 out[2] = (1-in[0])*in[1]-in[2]*in[0]; │ │ │ │ │ +75 out[3] = in[0]*in[1]+in[2]*in[0]; │ │ │ │ │ +76 } │ │ │ │ │ +77 │ │ │ │ │ +78 out[4] = in[2]; │ │ │ │ │ +79 │ │ │ │ │ +80 return; │ │ │ │ │ +81 } │ │ │ │ │ +82 │ │ │ │ │ +83 if (k==2) │ │ │ │ │ +84 { │ │ │ │ │ +85 // transform to reference element with base [-1,1]^2 │ │ │ │ │ +86 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ +87 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ +88 const R z = in[2]; │ │ │ │ │ +89 │ │ │ │ │ +90 if (x > y) │ │ │ │ │ +91 { │ │ │ │ │ +92 // vertices │ │ │ │ │ +93 out[0] = 0.25*(x + z)*(x + z - 1)*(y - z - 1)*(y - z); │ │ │ │ │ +94 out[1] = -0.25*(x + z)*(y - z)*((x + z + 1)*(-y + z + 1) - 4*z) - z*(x - y); │ │ │ │ │ +95 out[2] = 0.25*(x + z)*(y - z)*(y - z + 1)*(x + z - 1); │ │ │ │ │ +96 out[3] = 0.25*(y - z)*(x + z)*(y - z + 1)*(x + z + 1); │ │ │ │ │ +97 out[4] = z*(2*z - 1); │ │ │ │ │ +98 │ │ │ │ │ +99 // lower edges │ │ │ │ │ +100 out[5] = -0.5*(y - z + 1)*(x + z - 1)*(y - 1)*x; │ │ │ │ │ +101 out[6] = -0.5*(y - z + 1)*(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)); │ │ │ │ │ +102 out[7] = -0.5*(x + z - 1)*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1)); │ │ │ │ │ +103 out[8] = -0.5*(y - z + 1)*(x + z - 1)*(x + 1)*y; │ │ │ │ │ +104 │ │ │ │ │ +105 // upper edges │ │ │ │ │ +106 out[9] = z*(x + z - 1)*(y - z - 1); │ │ │ │ │ +107 out[10] = -z*((x + z + 1)*(y - z - 1) + 4*z); │ │ │ │ │ +108 out[11] = -z*(y - z + 1)*(x + z - 1); │ │ │ │ │ +109 out[12] = z*(y - z + 1)*(x + z + 1); │ │ │ │ │ +110 │ │ │ │ │ +111 // base face │ │ │ │ │ +112 out[13] = (y - z + 1)*(x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)); │ │ │ │ │ +113 } │ │ │ │ │ +114 else │ │ │ │ │ +115 { │ │ │ │ │ +116 // vertices │ │ │ │ │ +117 out[0] = 0.25*(y + z)*(y + z - 1)*(x - z - 1)*(x - z); │ │ │ │ │ +118 out[1] = -0.25*(x - z)*(y + z)*(x - z + 1)*(-y - z + 1); │ │ │ │ │ +119 out[2] = 0.25*(x - z)*(y + z)*((x - z - 1)*(y + z + 1) + 4*z) + z*(x - y); │ │ │ │ │ +120 out[3] = 0.25*(y + z)*(x - z)*(x - z + 1)*(y + z + 1); │ │ │ │ │ +121 out[4] = z*(2*z - 1); │ │ │ │ │ +122 │ │ │ │ │ +123 // lower edges │ │ │ │ │ +124 out[5] = -0.5*(y + z - 1)*(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)); │ │ │ │ │ +125 out[6] = -0.5*(x - z + 1)*(y + z - 1)*(y + 1)*x; │ │ │ │ │ +126 out[7] = -0.5*(x - z + 1)*(y + z - 1)*(x - 1)*y; │ │ │ │ │ +127 out[8] = -0.5*(x - z + 1)*(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)); │ │ │ │ │ +128 │ │ │ │ │ +129 // upper edges │ │ │ │ │ +130 out[9] = z*(y + z - 1)*(x - z - 1); │ │ │ │ │ +131 out[10] = -z*(x - z + 1)*(y + z - 1); │ │ │ │ │ +132 out[11] = -z*((y + z + 1)*(x - z - 1) + 4*z); │ │ │ │ │ +133 out[12] = z*(x - z + 1)*(y + z + 1); │ │ │ │ │ +134 │ │ │ │ │ +135 // base face │ │ │ │ │ +136 out[13] = (x - z + 1)*(y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)); │ │ │ │ │ +137 } │ │ │ │ │ +138 │ │ │ │ │ +139 return; │ │ │ │ │ +140 } │ │ │ │ │ +141 │ │ │ │ │ +142 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateFunction for │ │ │ │ │ +order " << k); │ │ │ │ │ +143 } │ │ │ │ │ +144 │ │ │ │ │ +150 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +151 std::vector& out) const │ │ │ │ │ +152 { │ │ │ │ │ +153 out.resize(size()); │ │ │ │ │ +154 │ │ │ │ │ +155 // Specialization for k==0 │ │ │ │ │ +156 if (k==0) │ │ │ │ │ +157 { │ │ │ │ │ +158 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ +159 return; │ │ │ │ │ +160 } │ │ │ │ │ +161 │ │ │ │ │ +162 if (k==1) │ │ │ │ │ +163 { │ │ │ │ │ +164 if(in[0] > in[1]) │ │ │ │ │ +165 { │ │ │ │ │ +166 out[0][0] = {-1 + in[1], -1 + in[0] + in[2], -1 + in[1]}; │ │ │ │ │ +167 out[1][0] = { 1 - in[1], -in[0] - in[2], -in[1]}; │ │ │ │ │ +168 out[2][0] = { -in[1], 1 - in[0] - in[2], -in[1]}; │ │ │ │ │ +169 out[3][0] = { in[1], in[0] + in[2], in[1]}; │ │ │ │ │ +170 } │ │ │ │ │ +171 else │ │ │ │ │ +172 { │ │ │ │ │ +173 out[0][0] = {-1 + in[1] + in[2], -1 + in[0], -1 + in[0]}; │ │ │ │ │ +174 out[1][0] = { 1 - in[1] - in[2], -in[0], -in[0]}; │ │ │ │ │ +175 out[2][0] = { -in[1] - in[2], 1 - in[0], -in[0]}; │ │ │ │ │ +176 out[3][0] = { in[1] + in[2], in[0], in[0]}; │ │ │ │ │ +177 } │ │ │ │ │ +178 │ │ │ │ │ +179 out[4][0] = {0, 0, 1}; │ │ │ │ │ +180 return; │ │ │ │ │ +181 } │ │ │ │ │ +182 │ │ │ │ │ +183 if (k==2) │ │ │ │ │ +184 { │ │ │ │ │ +185 // transform to reference element with base [-1,1]^2 │ │ │ │ │ +186 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ +187 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ +188 const R z = in[2]; │ │ │ │ │ +189 │ │ │ │ │ +190 // transformation of the gradient leads to a multiplication │ │ │ │ │ +191 // with the Jacobian [2 0 0; 0 2 0; 1 1 1] │ │ │ │ │ +192 if (x > y) │ │ │ │ │ +193 { │ │ │ │ │ +194 // vertices │ │ │ │ │ +195 out[0][0][0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1); │ │ │ │ │ +196 out[0][0][1] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1); │ │ │ │ │ +197 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1]) │ │ │ │ │ +198 + 0.25*((2*x + 2*z - 1)*(y - z - 1)*(y - z) │ │ │ │ │ +199 + (x + z)*(x + z - 1)*(-2*y + 2*z + 1)); │ │ │ │ │ +200 │ │ │ │ │ +201 out[1][0][0] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ +202 + (x + z)*(y - z)*(-y + z + 1)) - z); │ │ │ │ │ +203 out[1][0][1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ +204 + (x + z)*(y - z)*(-(x + z + 1))) + z); │ │ │ │ │ +205 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1]) │ │ │ │ │ +206 - 0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ +207 - (x + z)*((x + z + 1)*(-y + z + 1) - 4*z) │ │ │ │ │ +208 + (x + z)*(y - z)*(x - y + 2*z - 2)) │ │ │ │ │ +209 - (x - y); │ │ │ │ │ +210 │ │ │ │ │ +211 out[2][0][0] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1); │ │ │ │ │ +212 out[2][0][1] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1); │ │ │ │ │ +213 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1]) │ │ │ │ │ +214 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z - 1) │ │ │ │ │ +215 + (x + z)*(y - z)*(y - x - 2*z + 2)); │ │ │ │ │ +216 │ │ │ │ │ +217 out[3][0][0] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1); │ │ │ │ │ +218 out[3][0][1] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1); │ │ │ │ │ +219 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1]) │ │ │ │ │ +220 + 0.25*((y - x - 2*z)*(y - z + 1)*(x + z + 1) │ │ │ │ │ +221 + (y - z)*(x + z)*(y - x - 2*z)); │ │ │ │ │ +222 │ │ │ │ │ +223 out[4][0][0] = 0; │ │ │ │ │ +224 out[4][0][1] = 0; │ │ │ │ │ +225 out[4][0][2] = 4*z - 1; │ │ │ │ │ +226 │ │ │ │ │ +227 // lower edges │ │ │ │ │ +228 out[5][0][0] = -(y - z + 1)*(y - 1)*(2*x + z - 1); │ │ │ │ │ +229 out[5][0][1] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x; │ │ │ │ │ +230 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1]) │ │ │ │ │ +231 + 0.5*(x + z - 1)*(y - 1)*x - 0.5*(y - z + 1)*(y - 1)*x; │ │ │ │ │ +232 │ │ │ │ │ +233 out[6][0][0] = -(y - z + 1)*(2*x + z + 1)*(y - 1); │ │ │ │ │ +234 out[6][0][1] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) │ │ │ │ │ +235 + (y - z + 1)*((x + z + 1)*x + 2*z)); │ │ │ │ │ +236 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1]) │ │ │ │ │ +237 - 0.5*(-(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1)) │ │ │ │ │ +238 + (y - z + 1)*(((y - 1)*x - 1) + 2*y + 1)); │ │ │ │ │ +239 │ │ │ │ │ +240 out[7][0][0] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) │ │ │ │ │ +241 + (x + z - 1)*((y - z - 1)*y + 2*z)); │ │ │ │ │ +242 out[7][0][1] = -(x + z - 1)*(2*y - z - 1)*(x + 1); │ │ │ │ │ +243 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1]) │ │ │ │ │ +244 - 0.5*(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) │ │ │ │ │ +245 + (x + z - 1)*((-(x + 1)*y - 1) + 2*x + 1)); │ │ │ │ │ +246 │ │ │ │ │ +247 out[8][0][0] = -(y - z + 1)*(2*x + z)*y; │ │ │ │ │ +248 out[8][0][1] = -(2*y - z + 1)*(x + z - 1)*(x + 1); │ │ │ │ │ +249 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1]) │ │ │ │ │ +250 - 0.5*(-x + y - 2*z + 2)*(x + 1)*y; │ │ │ │ │ +251 │ │ │ │ │ +252 // upper edges │ │ │ │ │ +253 out[9][0][0] = 2*z*(y - z - 1); │ │ │ │ │ +254 out[9][0][1] = 2*z*(x + z - 1); │ │ │ │ │ +255 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1]) │ │ │ │ │ +256 + (x + z - 1)*(y - z - 1) + z*(-x + y - 2*z); │ │ │ │ │ +257 │ │ │ │ │ +258 out[10][0][0] = -2*z*(y - z - 1); │ │ │ │ │ +259 out[10][0][1] = -2*z*(x + z + 1); │ │ │ │ │ +260 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1]) │ │ │ │ │ +261 - ((x + z + 1)*(y - z - 1) + 4*z) │ │ │ │ │ +262 - z*(-x + y - 2*z + 2); │ │ │ │ │ +263 │ │ │ │ │ +264 out[11][0][0] = -2*z*(y - z + 1); │ │ │ │ │ +265 out[11][0][1] = -2*z*(x + z - 1); │ │ │ │ │ +266 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1]) │ │ │ │ │ +267 - (y - z + 1)*(x + z - 1) - z*(-x + y - 2*z + 2); │ │ │ │ │ +268 │ │ │ │ │ +269 out[12][0][0] = 2*z*(y - z + 1); │ │ │ │ │ +270 out[12][0][1] = 2*z*(x + z + 1); │ │ │ │ │ +271 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1]) │ │ │ │ │ +272 + (y - z + 1)*(x + z + 1) + z*(-x + y - 2*z); │ │ │ │ │ +273 │ │ │ │ │ +274 // base face │ │ │ │ │ +275 out[13][0][0] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ +276 + (y - z + 1)*(x + z - 1)*(y - 1 + z)); │ │ │ │ │ +277 out[13][0][1] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ +278 + (y - z + 1)*(x + z - 1)*(x + 1 - z)); │ │ │ │ │ +279 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1]) │ │ │ │ │ +280 + ((-x + y - 2*z + 2)*((y - 1)*(x + 1) + z*(x - y + z + 1)) │ │ │ │ │ +281 + (y - z + 1)*(x + z - 1)*(x - y + 2*z + 1)); │ │ │ │ │ +282 } │ │ │ │ │ +283 else │ │ │ │ │ +284 { │ │ │ │ │ +285 // vertices │ │ │ │ │ +286 out[0][0][0] = 0.5*(y + z)*(y + z - 1)*(2*x - 2*z - 1); │ │ │ │ │ +287 out[0][0][1] = 0.5*(2*y + 2*z - 1)*(x - z - 1)*(x - z); │ │ │ │ │ +288 out[0][0][2] = 0.5*(out[0][0][0] + out[0][0][1]) │ │ │ │ │ +289 + 0.25*((2*y + 2*z - 1)*(x - z - 1)*(x - z) │ │ │ │ │ +290 + (y + z)*(y + z - 1)*(-2*x + 2*z + 1)); │ │ │ │ │ +291 │ │ │ │ │ +292 out[1][0][0] = -0.5*(y + z)*(2*x - 2*z + 1)*(-y - z + 1); │ │ │ │ │ +293 out[1][0][1] = -0.5*(x - z)*(x - z + 1)*(-2*y - 2*z + 1); │ │ │ │ │ +294 out[1][0][2] = 0.5*(out[1][0][0] + out[1][0][1]) │ │ │ │ │ +295 - 0.25*((x - y - 2*z)*(x - z + 1)*(-y - z + 1) │ │ │ │ │ +296 + (x - z)*(y + z)*(-x + y + 2*z - 2)); │ │ │ │ │ +297 │ │ │ │ │ +298 out[2][0][0] = 0.5*((y + z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ +299 + (x - z)*(y + z)*(y + z + 1) + 4*z); │ │ │ │ │ +300 out[2][0][1] = 0.5*((x - z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ +301 + (x - z)*(y + z)*(x - z - 1) - 4*z); │ │ │ │ │ +302 out[2][0][2] = 0.5*(out[2][0][0] + out[2][0][1]) │ │ │ │ │ +303 + 0.25*((x - y - 2*z)*((x - z - 1)*(y + z + 1) + 4*z) │ │ │ │ │ +304 + (x - z)*(y + z)*(x - y - 2*z + 2) + 4*(x - y)); │ │ │ │ │ +305 │ │ │ │ │ +306 out[3][0][0] = 0.5*(y + z)*(2*x - 2*z + 1)*(y + z + 1); │ │ │ │ │ +307 out[3][0][1] = 0.5*(x - z)*(x - z + 1)*(2*y + 2*z + 1); │ │ │ │ │ +308 out[3][0][2] = 0.5*(out[3][0][0] + out[3][0][1]) │ │ │ │ │ +309 + 0.25*((x - y - 2*z)*(x - z + 1)*(y + z + 1) │ │ │ │ │ +310 + (y + z)*(x - z)*(x - y - 2*z)); │ │ │ │ │ +311 │ │ │ │ │ +312 out[4][0][0] = 0; │ │ │ │ │ +313 out[4][0][1] = 0; │ │ │ │ │ +314 out[4][0][2] = 4*z - 1; │ │ │ │ │ +315 │ │ │ │ │ +316 // lower edges │ │ │ │ │ +317 out[5][0][0] = -(y + z - 1)*(2*x - z - 1)*(y + 1); │ │ │ │ │ +318 out[5][0][1] = -(((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1) │ │ │ │ │ +319 + (y + z - 1)*((x - z - 1)*x + 2*z)); │ │ │ │ │ +320 out[5][0][2] = 0.5*(out[5][0][0] + out[5][0][1]) │ │ │ │ │ +321 - 0.5*((((x - z - 1)*(y + 1)*x - z) + z*(2*y + 1)) │ │ │ │ │ +322 + (y + z - 1)*((-(y + 1)*x - 1) + 2*y + 1)); │ │ │ │ │ +323 │ │ │ │ │ +324 out[6][0][0] = -(2*x - z + 1)*(y + z - 1)*(y + 1); │ │ │ │ │ +325 out[6][0][1] = -(x - z + 1)*(2*y + z)*x; │ │ │ │ │ +326 out[6][0][2] = 0.5*(out[6][0][0] + out[6][0][1]) │ │ │ │ │ +327 - 0.5*(x - y - 2*z + 2)*(y + 1)*x; │ │ │ │ │ +328 │ │ │ │ │ +329 out[7][0][0] = -(2*x - z)*(y + z - 1)*y; │ │ │ │ │ +330 out[7][0][1] = -(x - z + 1)*(2*y + z - 1)*(x - 1); │ │ │ │ │ +331 out[7][0][2] = 0.5*(out[7][0][0] + out[7][0][1]) │ │ │ │ │ +332 - 0.5*(x - y - 2*z + 2)*(x - 1)*y; │ │ │ │ │ +333 │ │ │ │ │ +334 out[8][0][0] = -(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1) │ │ │ │ │ +335 + (x - z + 1)*((y + z + 1)*y + 2*z)); │ │ │ │ │ +336 out[8][0][1] = -(x - z + 1)*(2*y + z + 1)*(x - 1); │ │ │ │ │ +337 out[8][0][2] = 0.5*(out[8][0][0] + out[8][0][1]) │ │ │ │ │ +338 - 0.5*(-(((y + z + 1)*(x - 1)*y - z) + z*(2*x + 1)) │ │ │ │ │ +339 + (x - z + 1)*(((x - 1)*y - 1) + 2*x + 1)); │ │ │ │ │ +340 │ │ │ │ │ +341 // upper edges │ │ │ │ │ +342 out[9][0][0] = 2*z*(y + z - 1); │ │ │ │ │ +343 out[9][0][1] = 2*z*(x - z - 1); │ │ │ │ │ +344 out[9][0][2] = 0.5*(out[9][0][0] + out[9][0][1]) │ │ │ │ │ +345 + (y + z - 1)*(x - z - 1) + z*(x - y - 2*z); │ │ │ │ │ +346 │ │ │ │ │ +347 out[10][0][0] = -2*z*(y + z - 1); │ │ │ │ │ +348 out[10][0][1] = -2*z*(x - z + 1); │ │ │ │ │ +349 out[10][0][2] = 0.5*(out[10][0][0] + out[10][0][1]) │ │ │ │ │ +350 - (x - z + 1)*(y + z - 1) - z*(x - y - 2*z + 2); │ │ │ │ │ +351 │ │ │ │ │ +352 out[11][0][0] = -2*z*(y + z + 1); │ │ │ │ │ +353 out[11][0][1] = -2*z*(x - z - 1); │ │ │ │ │ +354 out[11][0][2] = 0.5*(out[11][0][0] + out[11][0][1]) │ │ │ │ │ +355 - ((y + z + 1)*(x - z - 1) + 4*z) - z*(x - y - 2*z + 2); │ │ │ │ │ +356 │ │ │ │ │ +357 out[12][0][0] = 2*z*(y + z + 1); │ │ │ │ │ +358 out[12][0][1] = 2*z*(x - z + 1); │ │ │ │ │ +359 out[12][0][2] = 0.5*(out[12][0][0] + out[12][0][1]) │ │ │ │ │ +360 + (x - z + 1)*(y + z + 1) + z*(x - y - 2*z); │ │ │ │ │ +361 │ │ │ │ │ +362 // base face │ │ │ │ │ +363 out[13][0][0] = 2*((y + z - 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ +364 + (x - z + 1)*(y + z - 1)*(y + 1 - z)); │ │ │ │ │ +365 out[13][0][1] = 2*((x - z + 1)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ +366 + (x - z + 1)*(y + z - 1)*(x - 1 + z)); │ │ │ │ │ +367 out[13][0][2] = 0.5*(out[13][0][0] + out[13][0][1]) │ │ │ │ │ +368 + (x - y - 2*z + 2)*((y + 1)*(x - 1) - z*(x - y - z - 1)) │ │ │ │ │ +369 + (x - z + 1)*(y + z - 1)*(-(x - y - 2*z - 1)); │ │ │ │ │ +370 } │ │ │ │ │ +371 │ │ │ │ │ +372 return; │ │ │ │ │ +373 } │ │ │ │ │ +374 │ │ │ │ │ +375 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::evaluateJacobian for │ │ │ │ │ +order " << k); │ │ │ │ │ +376 } │ │ │ │ │ +377 │ │ │ │ │ +384 void partial(const std::array& order, │ │ │ │ │ +385 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +386 std::vector& out) const │ │ │ │ │ +387 { │ │ │ │ │ +388 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +389 │ │ │ │ │ +390 out.resize(size()); │ │ │ │ │ +391 │ │ │ │ │ +392 if (totalOrder == 0) │ │ │ │ │ +393 { │ │ │ │ │ +394 evaluateFunction(in, out); │ │ │ │ │ +395 return; │ │ │ │ │ +396 } │ │ │ │ │ +397 │ │ │ │ │ +398 if (k==0) │ │ │ │ │ +399 { │ │ │ │ │ +400 out[0] = 0; │ │ │ │ │ +401 return; │ │ │ │ │ +402 } │ │ │ │ │ +403 │ │ │ │ │ +404 if (k==1) │ │ │ │ │ +405 { │ │ │ │ │ +406 if (totalOrder == 1) │ │ │ │ │ +407 { │ │ │ │ │ +408 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +409 if (in[0] > in[1]) │ │ │ │ │ +410 { │ │ │ │ │ +411 switch (direction) │ │ │ │ │ +412 { │ │ │ │ │ +413 case 0: │ │ │ │ │ +414 out[0] = -1 + in[1]; │ │ │ │ │ +415 out[1] = 1 - in[1]; │ │ │ │ │ +416 out[2] = -in[1]; │ │ │ │ │ +417 out[3] = in[1]; │ │ │ │ │ +418 out[4] = 0; │ │ │ │ │ +419 break; │ │ │ │ │ +420 case 1: │ │ │ │ │ +421 out[0] = -1 + in[0] + in[2]; │ │ │ │ │ +422 out[1] = -in[0] - in[2]; │ │ │ │ │ +423 out[2] = 1 - in[0] - in[2]; │ │ │ │ │ +424 out[3] = in[0]+in[2]; │ │ │ │ │ +425 out[4] = 0; │ │ │ │ │ +426 break; │ │ │ │ │ +427 case 2: │ │ │ │ │ +428 out[0] = -1 + in[1]; │ │ │ │ │ +429 out[1] = -in[1]; │ │ │ │ │ +430 out[2] = -in[1]; │ │ │ │ │ +431 out[3] = in[1]; │ │ │ │ │ +432 out[4] = 1; │ │ │ │ │ +433 break; │ │ │ │ │ +434 default: │ │ │ │ │ +435 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +436 } │ │ │ │ │ +437 } │ │ │ │ │ +438 else /* (in[0] <= in[1]) */ │ │ │ │ │ +439 { │ │ │ │ │ +440 switch (direction) │ │ │ │ │ +441 { │ │ │ │ │ +442 case 0: │ │ │ │ │ +443 out[0] = -1 + in[1] + in[2]; │ │ │ │ │ +444 out[1] = 1 - in[1] - in[2]; │ │ │ │ │ +445 out[2] = -in[1] - in[2]; │ │ │ │ │ +446 out[3] = in[1] + in[2]; │ │ │ │ │ +447 out[4] = 0; │ │ │ │ │ +448 break; │ │ │ │ │ +449 case 1: │ │ │ │ │ +450 out[0] = -1 + in[0]; │ │ │ │ │ +451 out[1] = -in[0]; │ │ │ │ │ +452 out[2] = 1 - in[0]; │ │ │ │ │ +453 out[3] = in[0]; │ │ │ │ │ +454 out[4] = 0; │ │ │ │ │ +455 break; │ │ │ │ │ +456 case 2: │ │ │ │ │ +457 out[0] = -1 + in[0]; │ │ │ │ │ +458 out[1] = -in[0]; │ │ │ │ │ +459 out[2] = -in[0]; │ │ │ │ │ +460 out[3] = in[0]; │ │ │ │ │ +461 out[4] = 1; │ │ │ │ │ +462 break; │ │ │ │ │ +463 default: │ │ │ │ │ +464 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +465 } │ │ │ │ │ +466 } │ │ │ │ │ +467 } else if (totalOrder == 2) │ │ │ │ │ +468 { │ │ │ │ │ +469 if ((order[0] == 1 && order[1] == 1) || │ │ │ │ │ +470 (order[1] == 1 && order[2] == 1 && in[0] > in[1]) || │ │ │ │ │ +471 (order[0] == 1 && order[2] == 1 && in[0] <=in[1])) │ │ │ │ │ +472 { │ │ │ │ │ +473 out = {1, -1, -1, 1, 0}; │ │ │ │ │ +474 } else │ │ │ │ │ +475 { │ │ │ │ │ +476 out = {0, 0, 0, 0, 0}; │ │ │ │ │ +477 } │ │ │ │ │ +478 │ │ │ │ │ +479 } else │ │ │ │ │ +480 { │ │ │ │ │ +481 out = {0, 0, 0, 0, 0}; │ │ │ │ │ +482 } │ │ │ │ │ +483 │ │ │ │ │ +484 return; │ │ │ │ │ +485 } │ │ │ │ │ +486 │ │ │ │ │ +487 if (k==2) │ │ │ │ │ +488 { │ │ │ │ │ +489 if (totalOrder == 1) │ │ │ │ │ +490 { │ │ │ │ │ +491 // transform to reference element with base [-1,1]^2 │ │ │ │ │ +492 const R x = 2.0*in[0] + in[2] - 1.0; │ │ │ │ │ +493 const R y = 2.0*in[1] + in[2] - 1.0; │ │ │ │ │ +494 const R z = in[2]; │ │ │ │ │ +495 │ │ │ │ │ +496 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +497 │ │ │ │ │ +498 // transformation of the gradient leads to a multiplication │ │ │ │ │ +499 // with the Jacobian [2 0 0; 0 2 0; 1 1 1] │ │ │ │ │ +500 if (x > y) │ │ │ │ │ +501 { │ │ │ │ │ +502 switch (direction) │ │ │ │ │ +503 { │ │ │ │ │ +504 case 0: │ │ │ │ │ +505 out[0] = 0.5*(y - z - 1)*(y - z)*(2*x + 2*z - 1); │ │ │ │ │ +506 out[1] = 2*(-0.25*((y - z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - │ │ │ │ │ +z)*(-y + z + 1)) - z); │ │ │ │ │ +507 out[2] = 0.5*(y - z)*(y - z + 1)*(2*x + 2*z - 1); │ │ │ │ │ +508 out[3] = 0.5*(y - z)*(2*x + 2*z + 1)*(y - z + 1); │ │ │ │ │ +509 out[4] = 0; │ │ │ │ │ +510 out[5] = -(y - z + 1)*(2*x + z - 1)*(y - 1); │ │ │ │ │ +511 out[6] = -(y - z + 1)*(2*x + z + 1)*(y - 1); │ │ │ │ │ +512 out[7] = -(((y - z - 1)*(x + 1)*y - z) + z*(2*x + 1) + (x + z - 1)*((y - z │ │ │ │ │ +- 1)*y + 2*z)); │ │ │ │ │ +513 out[8] = -(y - z + 1)*(2*x + z)*y; │ │ │ │ │ +514 out[9] = 2*z*(y - z - 1); │ │ │ │ │ +515 out[10] = -2*z*(y - z - 1); │ │ │ │ │ +516 out[11] = -2*z*(y - z + 1); │ │ │ │ │ +517 out[12] = 2*z*(y - z + 1); │ │ │ │ │ +518 out[13] = 2*((y - z + 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + │ │ │ │ │ +1)*(x + z - 1)*(y - 1 + z)); │ │ │ │ │ +519 break; │ │ │ │ │ +520 case 1: │ │ │ │ │ +521 out[0] = 0.5*(x + z)*(x + z - 1)*(2*y - 2*z - 1); │ │ │ │ │ +522 out[1] = 2*(-0.25*((x + z)*((x + z + 1)*(-y + z + 1) - 4*z) + (x + z)*(y - │ │ │ │ │ +z)*(-(x + z + 1))) + z); │ │ │ │ │ +523 out[2] = 0.5*(x + z)*(2*y - 2*z + 1)*(x + z - 1); │ │ │ │ │ +524 out[3] = 0.5*(2*y - 2*z + 1)*(x + z)*(x + z + 1); │ │ │ │ │ +525 out[4] = 0; │ │ │ │ │ +526 out[5] = -(x + z - 1)*(y - 1)*x - (y - z + 1)*(x + z - 1)*x; │ │ │ │ │ +527 out[6] = -(((x + z + 1)*(y - 1)*x - z) + z*(2*y + 1) + (y - z + 1)*((x + z │ │ │ │ │ ++ 1)*x + 2*z)); │ │ │ │ │ +528 out[7] = -(x + z - 1)*(2*y - z - 1)*(x + 1); │ │ │ │ │ +529 out[8] = -(2*y - z + 1)*(x + z - 1)*(x + 1); │ │ │ │ │ +530 out[9] = 2*z*(x + z - 1); │ │ │ │ │ +531 out[10] = -2*z*(x + z + 1); │ │ │ │ │ +532 out[11] = -2*z*(x + z - 1); │ │ │ │ │ +533 out[12] = 2*z*(x + z + 1); │ │ │ │ │ +534 out[13] = 2*((x + z - 1)*((y - 1)*(x + 1) + z*(x - y + z + 1)) + (y - z + │ │ │ │ │ +1)*(x + z - 1)*(x + 1 - z)); │ │ │ │ │ +535 break; │ │ │ │ │ +536 case 2: │ │ │ │ │ +537 out[0] = -((y - z)*(2*x + 2*z - 1)*(z - y + 1))/2; │ │ │ │ │ +538 out[1] = ((y - z + 1)*(y - 2*x + z + 2*x*y - 2*x*z + 2*y*z - 2*z*z))/2; │ │ │ │ │ +539 out[2] = ((y - z)*(2*x + 2*z - 1)*(y - z + 1))/2; │ │ │ │ │ +540 out[3] = ((y - z)*(2*x + 2*z + 1)*(y - z + 1))/2; │ │ │ │ │ +541 out[4] = 4*z - 1; │ │ │ │ │ +542 out[5] = (-(y - z + 1)*(2*x + z - 1)*(y - 1) - (x + z - 1)*(y - 1)*x - (y - │ │ │ │ │ +z + 1)*(x + z - 1)*x + (x + z - 1)*(y - 1)*x - (y - z + 1)*(y - 1)*x)/2; │ │ │ │ │ +543 out[6] = -((y - z + 1)*(3*y - 2*x + z + 3*x*y + x*z + y*z + x*x - 1))/2; │ │ │ │ │ +544 out[7] = z - z*(2*x + 1) - ((2*z - y*(z - y + 1))*(x + z - 1))/2 - ((2*x - │ │ │ │ │ +y*(x + 1))*(x + z - 1))/2 + ((x + 1)*(x + z - 1)*(z - 2*y + 1))/2 + y*(x + 1)* │ │ │ │ │ +(z - y + 1); │ │ │ │ │ +545 out[8] = -((y - z + 1)*(y + z + 3*x*y + x*z + y*z + x*x - 1))/2; │ │ │ │ │ +546 out[9] = -(x + 3*z - 1)*(z - y + 1); │ │ │ │ │ +547 out[10] = (x + z + 1)*(z - y + 1) - 2*y*z - 6*z + 2*z*z; │ │ │ │ │ +548 out[11] = -(x + 3*z - 1)*(y - z + 1); │ │ │ │ │ +549 out[12] = (x + 3*z + 1)*(y - z + 1); │ │ │ │ │ +550 out[13] = (y - z + 1)*(2*y - 3*x + z + 2*x*y + 6*x*z - 2*y*z + 2*x*x + │ │ │ │ │ +4*z*z - 3); │ │ │ │ │ +551 break; │ │ │ │ │ +552 default: │ │ │ │ │ +553 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +554 } │ │ │ │ │ +555 } │ │ │ │ │ +556 else // x <= y │ │ │ │ │ +557 { │ │ │ │ │ +558 switch (direction) │ │ │ │ │ +559 { │ │ │ │ │ +560 case 0: │ │ │ │ │ +561 out[0] = -((y + z)*(2*z - 2*x + 1)*(y + z - 1))/2; │ │ │ │ │ +562 out[1] = ((y + z)*(2*x - 2*z + 1)*(y + z - 1))/2; │ │ │ │ │ +563 out[2] = -((y + z + 1)*(y - 3*z - 2*x*y - 2*x*z + 2*y*z + 2*z*z))/2; │ │ │ │ │ +564 out[3] = ((y + z)*(2*x - 2*z + 1)*(y + z + 1))/2; │ │ │ │ │ +565 out[4] = 0; │ │ │ │ │ +566 out[5] = (y + 1)*(y + z - 1)*(z - 2*x + 1); │ │ │ │ │ +567 out[6] = -(y + 1)*(2*x - z + 1)*(y + z - 1); │ │ │ │ │ +568 out[7] = -y*(2*x - z)*(y + z - 1); │ │ │ │ │ +569 out[8] = z - z*(2*x + 1) - (2*z + y*(y + z + 1))*(x - z + 1) - y*(x - 1)*(y │ │ │ │ │ ++ z + 1); │ │ │ │ │ +570 out[9] = 2*z*(y + z - 1); │ │ │ │ │ +571 out[10] = -2*z*(y + z - 1); │ │ │ │ │ +572 out[11] = -2*z*(y + z + 1); │ │ │ │ │ +573 out[12] = 2*z*(y + z + 1); │ │ │ │ │ +574 out[13] = 2*(y + z - 1)*(2*x - z + 2*x*y - 2*x*z + 2*z*z); │ │ │ │ │ +575 break; │ │ │ │ │ +576 case 1: │ │ │ │ │ +577 out[0] = -(x - z)*(y + z - 0.5)*(z - x + 1); │ │ │ │ │ +578 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2; │ │ │ │ │ +579 out[2] = -((z - x + 1)*(x + 3*z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2; │ │ │ │ │ +580 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2; │ │ │ │ │ +581 out[4] = 0; │ │ │ │ │ +582 out[5] = z - z*(2*y + 1) - (2*z - x*(z - x + 1))*(y + z - 1) + x*(y + 1)*(z │ │ │ │ │ +- x + 1); │ │ │ │ │ +583 out[6] = -x*(2*y + z)*(x - z + 1); │ │ │ │ │ +584 out[7] = -(x - 1)*(x - z + 1)*(2*y + z - 1); │ │ │ │ │ +585 out[8] = -(x - 1)*(x - z + 1)*(2*y + z + 1); │ │ │ │ │ +586 out[9] = -2*z*(z - x + 1); │ │ │ │ │ +587 out[10] = -2*z*(x - z + 1); │ │ │ │ │ +588 out[11] = 2*z*(z - x + 1); │ │ │ │ │ +589 out[12] = 2*z*(x - z + 1); │ │ │ │ │ +590 out[13] = 2*(x - z + 1)*(2*x*y - z - 2*y + 2*y*z + 2*z*z); │ │ │ │ │ +591 break; │ │ │ │ │ +592 case 2: │ │ │ │ │ +593 out[0] = -((x - z)*(2*y + 2*z - 1)*(z - x + 1))/2; │ │ │ │ │ +594 out[1] = ((x - z)*(2*y + 2*z - 1)*(x - z + 1))/2; │ │ │ │ │ +595 out[2] = ((x - z + 1)*(x - 2*y + z + 2*x*y + 2*x*z - 2*y*z - 2*z*z))/2; │ │ │ │ │ +596 out[3] = ((x - z)*(2*y + 2*z + 1)*(x - z + 1))/2; │ │ │ │ │ +597 out[4] = 4*z - 1; │ │ │ │ │ +598 out[5] = z - z*(2*y + 1) - ((2*z - x*(z - x + 1))*(y + z - 1))/2 - ((2*y - │ │ │ │ │ +x*(y + 1))*(y + z - 1))/2 + ((y + 1)*(y + z - 1)*(z - 2*x + 1))/2 + x*(y + 1)* │ │ │ │ │ +(z - x + 1); │ │ │ │ │ +599 out[6] = -((x - z + 1)*(x + z + 3*x*y + x*z + y*z + y*y - 1))/2; │ │ │ │ │ +600 out[7] = -((x - z + 1)*(3*x*y - 4*y - z - x + x*z + y*z + y*y + 1))/2; │ │ │ │ │ +601 out[8] = -((x - z + 1)*(3*x - 2*y + z + 3*x*y + x*z + y*z + y*y - 1))/2; │ │ │ │ │ +602 out[9] = -(z - x + 1)*(y + 3*z - 1); │ │ │ │ │ +603 out[10] = -(x - z + 1)*(y + 3*z - 1); │ │ │ │ │ +604 out[11] = (y + z + 1)*(z - x + 1) - 2*x*z - 6*z + 2*z*z; │ │ │ │ │ +605 out[12] = (x - z + 1)*(y + 3*z + 1); │ │ │ │ │ +606 out[13] = (x - z + 1)*(2*x - 3*y + z + 2*x*y - 2*x*z + 6*y*z + 2*y*y + │ │ │ │ │ +4*z*z - 3); │ │ │ │ │ +607 break; │ │ │ │ │ +608 default: │ │ │ │ │ +609 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +610 } │ │ │ │ │ +611 } │ │ │ │ │ +612 } else { │ │ │ │ │ +613 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +614 } │ │ │ │ │ +615 │ │ │ │ │ +616 return; │ │ │ │ │ +617 } │ │ │ │ │ +618 │ │ │ │ │ +619 DUNE_THROW(NotImplemented, "LagrangePyramidLocalBasis::partial for order " │ │ │ │ │ +<< k); │ │ │ │ │ +620 } │ │ │ │ │ +621 │ │ │ │ │ +623 static constexpr unsigned int order () │ │ │ │ │ +624 { │ │ │ │ │ +625 return k; │ │ │ │ │ +626 } │ │ │ │ │ +627 }; │ │ │ │ │ +628 │ │ │ │ │ +633 template │ │ │ │ │ +634 class LagrangePyramidLocalCoefficients │ │ │ │ │ +635 { │ │ │ │ │ +636 public: │ │ │ │ │ +638 LagrangePyramidLocalCoefficients () │ │ │ │ │ +639 : localKeys_(size()) │ │ │ │ │ +640 { │ │ │ │ │ +641 if (k==0) │ │ │ │ │ +642 { │ │ │ │ │ +643 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ +644 return; │ │ │ │ │ +645 } │ │ │ │ │ +646 │ │ │ │ │ +647 if (k==1) │ │ │ │ │ +648 { │ │ │ │ │ +649 for (std::size_t i=0; i localKeys_; │ │ │ │ │ +701 }; │ │ │ │ │ +702 │ │ │ │ │ +707 template │ │ │ │ │ +708 class LagrangePyramidLocalInterpolation │ │ │ │ │ +709 { │ │ │ │ │ +710 public: │ │ │ │ │ +711 │ │ │ │ │ +719 template │ │ │ │ │ +720 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +721 { │ │ │ │ │ +722 constexpr auto k = LocalBasis::order(); │ │ │ │ │ +723 using D = typename LocalBasis::Traits::DomainType; │ │ │ │ │ +724 using DF = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ +725 │ │ │ │ │ +726 out.resize(LocalBasis::size()); │ │ │ │ │ +727 │ │ │ │ │ +728 // Specialization for zero-order case │ │ │ │ │ +729 if (k==0) │ │ │ │ │ +730 { │ │ │ │ │ +731 auto center = ReferenceElements::general(GeometryTypes:: │ │ │ │ │ +pyramid).position(0,0); │ │ │ │ │ +732 out[0] = f(center); │ │ │ │ │ +733 return; │ │ │ │ │ +734 } │ │ │ │ │ +735 │ │ │ │ │ +736 // Specialization for first-order case │ │ │ │ │ +737 if (k==1) │ │ │ │ │ +738 { │ │ │ │ │ +739 for (unsigned int i=0; i::general(GeometryTypes:: │ │ │ │ │ +pyramid).position(i,3); │ │ │ │ │ +742 out[i] = f(vertex); │ │ │ │ │ +743 } │ │ │ │ │ +744 return; │ │ │ │ │ +745 } │ │ │ │ │ +746 │ │ │ │ │ +747 // Specialization for second-order case │ │ │ │ │ +748 if (k==2) │ │ │ │ │ +749 { │ │ │ │ │ +750 out[0] = f( D( {0.0, 0.0, 0.0} ) ); │ │ │ │ │ +751 out[1] = f( D( {1.0, 0.0, 0.0} ) ); │ │ │ │ │ +752 out[2] = f( D( {0.0, 1.0, 0.0} ) ); │ │ │ │ │ +753 out[3] = f( D( {1.0, 1.0, 0.0} ) ); │ │ │ │ │ +754 out[4] = f( D( {0.0, 0.0, 1.0} ) ); │ │ │ │ │ +755 out[5] = f( D( {0.0, 0.5, 0.0} ) ); │ │ │ │ │ +756 out[6] = f( D( {1.0, 0.5, 0.0} ) ); │ │ │ │ │ +757 out[7] = f( D( {0.5, 0.0, 0.0} ) ); │ │ │ │ │ +758 out[8] = f( D( {0.5, 1.0, 0.0} ) ); │ │ │ │ │ +759 out[9] = f( D( {0.0, 0.0, 0.5} ) ); │ │ │ │ │ +760 out[10] = f( D( {0.5, 0.0, 0.5} ) ); │ │ │ │ │ +761 out[11] = f( D( {0.0, 0.5, 0.5} ) ); │ │ │ │ │ +762 out[12] = f( D( {0.5, 0.5, 0.5} ) ); │ │ │ │ │ +763 out[13] = f( D( {0.5, 0.5, 0.0} ) ); │ │ │ │ │ +764 │ │ │ │ │ +765 return; │ │ │ │ │ +766 } │ │ │ │ │ +767 │ │ │ │ │ +768 DUNE_THROW(NotImplemented, "LagrangePyramidLocalInterpolation not │ │ │ │ │ +implemented for order " << k); │ │ │ │ │ +769 } │ │ │ │ │ +770 │ │ │ │ │ +771 }; │ │ │ │ │ +772 │ │ │ │ │ +773} } // namespace Dune::Impl │ │ │ │ │ +774 │ │ │ │ │ +775namespace _D_u_n_e │ │ │ │ │ +776{ │ │ │ │ │ +807 template │ │ │ │ │ +_8_0_8 class _L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +809 { │ │ │ │ │ +810 public: │ │ │ │ │ +_8_1_3 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_k_>, │ │ │ │ │ +814 Impl::LagrangePyramidLocalCoefficients, │ │ │ │ │ +815 Impl::LagrangePyramidLocalInterpolation > >; │ │ │ │ │ +816 │ │ │ │ │ +_8_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +820 { │ │ │ │ │ +821 return basis_; │ │ │ │ │ +822 } │ │ │ │ │ +823 │ │ │ │ │ +_8_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +827 { │ │ │ │ │ +828 return coefficients_; │ │ │ │ │ +829 } │ │ │ │ │ +830 │ │ │ │ │ +_8_3_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +834 { │ │ │ │ │ +835 return interpolation_; │ │ │ │ │ +836 } │ │ │ │ │ +837 │ │ │ │ │ +_8_3_9 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ +840 { │ │ │ │ │ +841 return Impl::LagrangePyramidLocalBasis::size(); │ │ │ │ │ +842 } │ │ │ │ │ +843 │ │ │ │ │ +_8_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +847 { │ │ │ │ │ +848 return GeometryTypes::pyramid; │ │ │ │ │ +849 } │ │ │ │ │ +850 │ │ │ │ │ +851 private: │ │ │ │ │ +852 Impl::LagrangePyramidLocalBasis basis_; │ │ │ │ │ +853 Impl::LagrangePyramidLocalCoefficients coefficients_; │ │ │ │ │ +854 Impl::LagrangePyramidLocalInterpolation > interpolation_; │ │ │ │ │ +855 }; │ │ │ │ │ +856 │ │ │ │ │ +857} // namespace Dune │ │ │ │ │ +858 │ │ │ │ │ +859#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGEPYRAMID_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ -SparseCoeffMatrix< StorageField, 1 > CoefficientMatrix │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_o_r │ │ │ │ │ -StandardEvaluator< MonomialBasisType > Evaluator │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -SF StorageField │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:22 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_i_m_p_l_e_x_G_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType SimplexGeometry │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ -PolynomialBasis< Evaluator, CoefficientMatrix > Basis │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_T_y_p_e │ │ │ │ │ -EvaluationBasisFactory< dimension, StorageField >::Type │ │ │ │ │ -MonomialBasisProviderType │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ -CF ComputeField │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const Basis Object │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -unsigned int Key │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:21 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -MonomialBasisProviderType::Object MonomialBasisType │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -MonomialBasisProvider< dd, FF > Type │ │ │ │ │ -DDeeffiinniittiioonn orthonormalbasis.hh:28 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ -void fill(const RowMatrix &mat, bool verbose=false) │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:160 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for 3d pyramids with compile-time polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:809 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:826 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() │ │ │ │ │ +The number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:839 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The reference element that the local finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:846 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:819 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_y_r_a_m_i_d_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn lagrangepyramid.hh:833 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalcompute.hh File Reference │ │ │ │ +dune-localfunctions: lagrangesimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,57 +65,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
orthonormalcompute.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
lagrangesimplex.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <fstream>
│ │ │ │ -#include <iomanip>
│ │ │ │ -#include <utility>
│ │ │ │ -#include <map>
│ │ │ │ -#include <dune/common/dynmatrix.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/deprecated.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  ONBCompute::Integral< geometryId >
 
class  ONBCompute::ONBMatrix< geometryId, scalar_t >
class  Dune::LagrangeSimplexLocalFiniteElement< D, R, d, k >
 Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order. More...
 
│ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  ONBCompute
namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<class scalar_t >
scalar_t ONBCompute::factorial (int start, int end)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,36 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -orthonormalcompute.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +lagrangesimplex.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_<_ _g_e_o_m_e_t_r_y_I_d_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _s_c_a_l_a_r___t_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_,_ _k_ _> │ │ │ │ │ +  Lagrange finite element for simplices with arbitrary compile-time │ │ │ │ │ + dimension and polynomial order. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ -namespace   _O_N_B_C_o_m_p_u_t_e │ │ │ │ │ -  │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ -scalar_t  _O_N_B_C_o_m_p_u_t_e_:_:_f_a_c_t_o_r_i_a_l (int start, int end) │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00458_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormalcompute.hh Source File │ │ │ │ +dune-localfunctions: lagrangesimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,264 +70,876 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormalcompute.hh
│ │ │ │ +
lagrangesimplex.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ -
9#include <iostream>
│ │ │ │ -
10#include <fstream>
│ │ │ │ -
11#include <iomanip>
│ │ │ │ -
12#include <utility>
│ │ │ │ -
13#include <map>
│ │ │ │ -
14
│ │ │ │ -
15#include <dune/common/dynmatrix.hh>
│ │ │ │ -
16#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/deprecated.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13#include <dune/common/fvector.hh>
│ │ │ │ +
14#include <dune/common/math.hh>
│ │ │ │ +
15
│ │ │ │ +
16#include <dune/geometry/referenceelements.hh>
│ │ │ │
17
│ │ │ │ -
18#include <dune/geometry/type.hh>
│ │ │ │ -
19
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
23
│ │ │ │ -
│ │ │ │ -
24namespace ONBCompute
│ │ │ │ -
25{
│ │ │ │ -
26
│ │ │ │ -
27 template< class scalar_t >
│ │ │ │ -
│ │ │ │ -
28 scalar_t factorial( int start, int end )
│ │ │ │ -
29 {
│ │ │ │ -
30 scalar_t ret( 1 );
│ │ │ │ -
31 for( int j = start; j <= end; ++j )
│ │ │ │ -
32 ret *= scalar_t( j );
│ │ │ │ -
33 return ret;
│ │ │ │ -
34 }
│ │ │ │ -
│ │ │ │ -
35
│ │ │ │ -
36
│ │ │ │ -
37
│ │ │ │ -
38 // Integral
│ │ │ │ -
39 // --------
│ │ │ │ -
40
│ │ │ │ -
41 template< Dune::GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
42 struct Integral
│ │ │ │ -
43 {
│ │ │ │ -
44 static constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ -
45 static constexpr int dimension = geometry.dim();
│ │ │ │ -
46
│ │ │ │ -
47 template< int dim, class scalar_t >
│ │ │ │ -
│ │ │ │ -
48 static int compute ( const Dune::MultiIndex< dim, scalar_t > &alpha,
│ │ │ │ -
49 scalar_t &p, scalar_t &q )
│ │ │ │ -
50 {
│ │ │ │ -
51 return compute(alpha, p, q, std::make_integer_sequence<int,dimension>{});
│ │ │ │ -
52 }
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54 template< int dim, class scalar_t , int ...ints>
│ │ │ │ -
│ │ │ │ -
55 static int compute ( const Dune::MultiIndex< dim, scalar_t > &alpha,
│ │ │ │ -
56 scalar_t &p, scalar_t &q, std::integer_sequence<int,ints...> intS)
│ │ │ │ -
57 {
│ │ │ │ -
58 p = scalar_t( 1 );
│ │ │ │ -
59 q = scalar_t( 1 );
│ │ │ │ -
60
│ │ │ │ -
61 int ord = 0;
│ │ │ │ -
62 ((computeIntegral<ints>(alpha,p,q,ord)),...);
│ │ │ │ -
63
│ │ │ │ -
64 return ord;
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 template< int step, int dim, class scalar_t >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
69 scalar_t &p, scalar_t &q, int& ord)
│ │ │ │ -
70 {
│ │ │ │ -
71 int i = alpha.z( step );
│ │ │ │ -
72
│ │ │ │ -
73 if constexpr ( geometry.isPrismatic(step))
│ │ │ │ -
74 {
│ │ │ │ -
75 //p *= scalar_t( 1 );
│ │ │ │ -
76 q *= scalar_t( i+1 );
│ │ │ │ -
77 }
│ │ │ │ -
78 else
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
21
│ │ │ │ +
22namespace Dune { namespace Impl
│ │ │ │ +
23{
│ │ │ │ +
34 template<class D, class R, unsigned int dim, unsigned int k>
│ │ │ │ +
35 class LagrangeSimplexLocalBasis
│ │ │ │ +
36 {
│ │ │ │ +
37 public:
│ │ │ │ +
38 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ +
39
│ │ │ │ +
44 static constexpr unsigned int size ()
│ │ │ │ +
45 {
│ │ │ │ +
46 return binomial(k+dim,dim);
│ │ │ │ +
47 }
│ │ │ │ +
48
│ │ │ │ +
50 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ +
51 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
52 {
│ │ │ │ +
53 out.resize(size());
│ │ │ │ +
54
│ │ │ │ +
55 // Specialization for zero-order case
│ │ │ │ +
56 if (k==0)
│ │ │ │ +
57 {
│ │ │ │ +
58 out[0] = 1;
│ │ │ │ +
59 return;
│ │ │ │ +
60 }
│ │ │ │ +
61
│ │ │ │ +
62 // Specialization for first-order case
│ │ │ │ +
63 if (k==1)
│ │ │ │ +
64 {
│ │ │ │ +
65 out[0] = 1.0;
│ │ │ │ +
66 for (size_t i=0; i<dim; i++)
│ │ │ │ +
67 {
│ │ │ │ +
68 out[0] -= x[i];
│ │ │ │ +
69 out[i+1] = x[i];
│ │ │ │ +
70 }
│ │ │ │ +
71 return;
│ │ │ │ +
72 }
│ │ │ │ +
73
│ │ │ │ +
74 assert(k>=2);
│ │ │ │ +
75
│ │ │ │ +
76 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ +
77
│ │ │ │ +
78 if (dim==1)
│ │ │ │
79 {
│ │ │ │ -
80 p *= factorial< scalar_t >( 1, i );
│ │ │ │ -
81 q *= factorial< scalar_t >( step+1 + ord, step+1 + ord + i );
│ │ │ │ -
82 }
│ │ │ │ -
83 ord +=i;
│ │ │ │ -
84 }
│ │ │ │ -
│ │ │ │ -
85
│ │ │ │ -
86 };
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
88
│ │ │ │ -
89 // ONBMatrix
│ │ │ │ -
90 // ---------
│ │ │ │ -
91
│ │ │ │ -
92 template< Dune::GeometryType::Id geometryId, class scalar_t >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
94 : public Dune::DynamicMatrix< scalar_t >
│ │ │ │ -
95 {
│ │ │ │ - │ │ │ │ -
97 typedef Dune::DynamicMatrix< scalar_t > Base;
│ │ │ │ -
98
│ │ │ │ -
99 public:
│ │ │ │ -
100 typedef std::vector< scalar_t > vec_t;
│ │ │ │ -
101 typedef Dune::DynamicMatrix< scalar_t > mat_t;
│ │ │ │ -
102
│ │ │ │ -
│ │ │ │ -
103 explicit ONBMatrix ( unsigned int order )
│ │ │ │ -
104 {
│ │ │ │ -
105 // get all multiindecies for monomial basis
│ │ │ │ -
106 constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ -
107 constexpr unsigned int dim = geometry.dim();
│ │ │ │ - │ │ │ │ - │ │ │ │ -
110 const std::size_t size = basis.size();
│ │ │ │ -
111 std::vector< Dune::FieldVector< MI, 1 > > y( size );
│ │ │ │ -
112 Dune::FieldVector< MI, dim > x;
│ │ │ │ -
113 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ -
114 x[ i ].set( i );
│ │ │ │ -
115 basis.evaluate( x, y );
│ │ │ │ -
116
│ │ │ │ -
117 // set bounds of data
│ │ │ │ -
118 Base::resize( size, size );
│ │ │ │ -
119 S.resize( size, size );
│ │ │ │ -
120 d.resize( size );
│ │ │ │ -
121
│ │ │ │ -
122 // setup matrix for bilinear form x^T S y: S_ij = int_A x^(i+j)
│ │ │ │ -
123 scalar_t p, q;
│ │ │ │ -
124 for( std::size_t i = 0; i < size; ++i )
│ │ │ │ -
125 {
│ │ │ │ -
126 for( std::size_t j = 0; j < size; ++j )
│ │ │ │ -
127 {
│ │ │ │ -
128 Integral< geometryId >::compute( y[ i ][ 0 ] * y[ j ][ 0 ], p, q );
│ │ │ │ -
129 S[i][j] = p;
│ │ │ │ -
130 S[i][j] /= q;
│ │ │ │ -
131 }
│ │ │ │ -
132 }
│ │ │ │ -
133
│ │ │ │ -
134 // orthonormalize
│ │ │ │ -
135 gramSchmidt();
│ │ │ │ -
136 }
│ │ │ │ -
│ │ │ │ -
137
│ │ │ │ -
138 template< class Vector >
│ │ │ │ -
│ │ │ │ -
139 void row ( unsigned int row, Vector &vec ) const
│ │ │ │ -
140 {
│ │ │ │ -
141 // transposed matrix is required
│ │ │ │ -
142 assert( row < Base::cols() );
│ │ │ │ -
143 for( std::size_t i = 0; i < Base::rows(); ++i )
│ │ │ │ -
144 Dune::field_cast( (*this)[i][row], vec[ i ] );
│ │ │ │ -
145 }
│ │ │ │ -
│ │ │ │ -
146
│ │ │ │ -
147 private:
│ │ │ │ -
148 void sprod ( int col1, int col2, scalar_t &ret )
│ │ │ │ -
149 {
│ │ │ │ -
150 ret = 0;
│ │ │ │ -
151 for( int k = 0; k <= col1; ++k )
│ │ │ │ -
152 {
│ │ │ │ -
153 for( int l = 0; l <=col2; ++l )
│ │ │ │ -
154 ret += (*this)[l][col2] * S[l][k] * (*this)[k][col1];
│ │ │ │ -
155 }
│ │ │ │ -
156 }
│ │ │ │ -
157
│ │ │ │ -
158 void vmul ( std::size_t col, std::size_t rowEnd, const scalar_t &s )
│ │ │ │ -
159 {
│ │ │ │ -
160 for( std::size_t i = 0; i <= rowEnd; ++i )
│ │ │ │ -
161 (*this)[i][col] *= s;
│ │ │ │ -
162 }
│ │ │ │ -
163
│ │ │ │ -
164 void vsub ( std::size_t coldest, std::size_t colsrc, std::size_t rowEnd, const scalar_t &s )
│ │ │ │ -
165 {
│ │ │ │ -
166 for( std::size_t i = 0; i <= rowEnd; ++i )
│ │ │ │ -
167 (*this)[i][coldest] -= s * (*this)[i][colsrc];
│ │ │ │ -
168 }
│ │ │ │ +
80 for (unsigned int i=0; i<size(); i++)
│ │ │ │ +
81 {
│ │ │ │ +
82 out[i] = 1.0;
│ │ │ │ +
83 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
84 out[i] *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
85 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ +
86 out[i] *= (x[0]-lagrangeNode(gamma))/(lagrangeNode(i)-lagrangeNode(gamma));
│ │ │ │ +
87 }
│ │ │ │ +
88 return;
│ │ │ │ +
89 }
│ │ │ │ +
90
│ │ │ │ +
91 if (dim==2)
│ │ │ │ +
92 {
│ │ │ │ +
93 int n=0;
│ │ │ │ +
94 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
95 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ +
96 {
│ │ │ │ +
97 out[n] = 1.0;
│ │ │ │ +
98 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
99 out[n] *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
100 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ +
101 out[n] *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ +
102 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ +
103 out[n] *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
104 n++;
│ │ │ │ +
105 }
│ │ │ │ +
106
│ │ │ │ +
107 return;
│ │ │ │ +
108 }
│ │ │ │ +
109
│ │ │ │ +
110 if (dim!=3)
│ │ │ │ +
111 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis for k>=2 only implemented for dim==1 or dim==3");
│ │ │ │ +
112
│ │ │ │ +
113 typename Traits::DomainType kx = x;
│ │ │ │ +
114 kx *= k;
│ │ │ │ +
115 unsigned int n = 0;
│ │ │ │ +
116 unsigned int i[4];
│ │ │ │ +
117 R factor[4];
│ │ │ │ +
118 for (i[2] = 0; i[2] <= k; ++i[2])
│ │ │ │ +
119 {
│ │ │ │ +
120 factor[2] = 1.0;
│ │ │ │ +
121 for (unsigned int j = 0; j < i[2]; ++j)
│ │ │ │ +
122 factor[2] *= (kx[2]-j) / (i[2]-j);
│ │ │ │ +
123 for (i[1] = 0; i[1] <= k - i[2]; ++i[1])
│ │ │ │ +
124 {
│ │ │ │ +
125 factor[1] = 1.0;
│ │ │ │ +
126 for (unsigned int j = 0; j < i[1]; ++j)
│ │ │ │ +
127 factor[1] *= (kx[1]-j) / (i[1]-j);
│ │ │ │ +
128 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0])
│ │ │ │ +
129 {
│ │ │ │ +
130 factor[0] = 1.0;
│ │ │ │ +
131 for (unsigned int j = 0; j < i[0]; ++j)
│ │ │ │ +
132 factor[0] *= (kx[0]-j) / (i[0]-j);
│ │ │ │ +
133 i[3] = k - i[0] - i[1] - i[2];
│ │ │ │ +
134 D kx3 = k - kx[0] - kx[1] - kx[2];
│ │ │ │ +
135 factor[3] = 1.0;
│ │ │ │ +
136 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ +
137 factor[3] *= (kx3-j) / (i[3]-j);
│ │ │ │ +
138 out[n++] = factor[0] * factor[1] * factor[2] * factor[3];
│ │ │ │ +
139 }
│ │ │ │ +
140 }
│ │ │ │ +
141 }
│ │ │ │ +
142 }
│ │ │ │ +
143
│ │ │ │ +
149 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ +
150 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
151 {
│ │ │ │ +
152 out.resize(size());
│ │ │ │ +
153
│ │ │ │ +
154 // Specialization for k==0
│ │ │ │ +
155 if (k==0)
│ │ │ │ +
156 {
│ │ │ │ +
157 std::fill(out[0][0].begin(), out[0][0].end(), 0);
│ │ │ │ +
158 return;
│ │ │ │ +
159 }
│ │ │ │ +
160
│ │ │ │ +
161 // Specialization for k==1
│ │ │ │ +
162 if (k==1)
│ │ │ │ +
163 {
│ │ │ │ +
164 std::fill(out[0][0].begin(), out[0][0].end(), -1);
│ │ │ │ +
165
│ │ │ │ +
166 for (unsigned int i=0; i<dim; i++)
│ │ │ │ +
167 for (unsigned int j=0; j<dim; j++)
│ │ │ │ +
168 out[i+1][0][j] = (i==j);
│ │ │ │
169
│ │ │ │ -
170 void gramSchmidt ()
│ │ │ │ -
171 {
│ │ │ │ -
172 using std::sqrt;
│ │ │ │ -
173 // setup identity
│ │ │ │ -
174 const std::size_t N = Base::rows();
│ │ │ │ -
175 for( std::size_t i = 0; i < N; ++i )
│ │ │ │ -
176 {
│ │ │ │ -
177 for( std::size_t j = 0; j < N; ++j )
│ │ │ │ -
178 (*this)[i][j] = scalar_t( i == j ? 1 : 0 );
│ │ │ │ -
179 }
│ │ │ │ -
180
│ │ │ │ -
181 // perform Gram-Schmidt procedure
│ │ │ │ -
182 scalar_t s;
│ │ │ │ -
183 sprod( 0, 0, s );
│ │ │ │ -
184 vmul( 0, 0, scalar_t( 1 ) / sqrt( s ) );
│ │ │ │ -
185 for( std::size_t i = 1; i < N; ++i )
│ │ │ │ -
186 {
│ │ │ │ -
187 for( std::size_t k = 0; k < i; ++k )
│ │ │ │ -
188 {
│ │ │ │ -
189 sprod( i, k, s );
│ │ │ │ -
190 vsub( i, k, i, s );
│ │ │ │ -
191 }
│ │ │ │ -
192 sprod( i, i, s );
│ │ │ │ -
193 vmul( i, i, scalar_t( 1 ) / sqrt( s ) );
│ │ │ │ -
194 }
│ │ │ │ -
195 }
│ │ │ │ -
196
│ │ │ │ -
197 vec_t d;
│ │ │ │ -
198 mat_t S;
│ │ │ │ -
199 };
│ │ │ │ -
│ │ │ │ -
200
│ │ │ │ -
201} // namespace ONBCompute
│ │ │ │ -
│ │ │ │ -
202
│ │ │ │ -
203#endif // #ifndef DUNE_ORTHONORMALCOMPUTE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition orthonormalcompute.hh:25
│ │ │ │ -
scalar_t factorial(int start, int end)
Definition orthonormalcompute.hh:28
│ │ │ │ -
Definition orthonormalcompute.hh:43
│ │ │ │ -
static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q)
Definition orthonormalcompute.hh:48
│ │ │ │ -
static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q, std::integer_sequence< int, ints... > intS)
Definition orthonormalcompute.hh:55
│ │ │ │ -
static void computeIntegral(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q, int &ord)
Definition orthonormalcompute.hh:68
│ │ │ │ -
static constexpr int dimension
Definition orthonormalcompute.hh:45
│ │ │ │ -
static constexpr Dune::GeometryType geometry
Definition orthonormalcompute.hh:44
│ │ │ │ -
Definition orthonormalcompute.hh:95
│ │ │ │ -
ONBMatrix(unsigned int order)
Definition orthonormalcompute.hh:103
│ │ │ │ -
std::vector< scalar_t > vec_t
Definition orthonormalcompute.hh:100
│ │ │ │ -
Dune::DynamicMatrix< scalar_t > mat_t
Definition orthonormalcompute.hh:101
│ │ │ │ -
void row(unsigned int row, Vector &vec) const
Definition orthonormalcompute.hh:139
│ │ │ │ -
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ -
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ -
Definition monomialbasis.hh:571
│ │ │ │ -
Definition multiindex.hh:38
│ │ │ │ -
int z(int i) const
Definition multiindex.hh:92
│ │ │ │ +
170 return;
│ │ │ │ +
171 }
│ │ │ │ +
172
│ │ │ │ +
173 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ +
174
│ │ │ │ +
175 // Specialization for dim==1
│ │ │ │ +
176 if (dim==1)
│ │ │ │ +
177 {
│ │ │ │ +
178 for (unsigned int i=0; i<=k; i++)
│ │ │ │ +
179 {
│ │ │ │ +
180 // x_0 derivative
│ │ │ │ +
181 out[i][0][0] = 0.0;
│ │ │ │ +
182 R factor=1.0;
│ │ │ │ +
183 for (unsigned int a=0; a<i; a++)
│ │ │ │ +
184 {
│ │ │ │ +
185 R product=factor;
│ │ │ │ +
186 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
187 product *= (alpha==a) ? 1.0/(lagrangeNode(i)-lagrangeNode(alpha))
│ │ │ │ +
188 : (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
189 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ +
190 product *= (lagrangeNode(gamma)-x[0])/(lagrangeNode(gamma)-lagrangeNode(i));
│ │ │ │ +
191 out[i][0][0] += product;
│ │ │ │ +
192 }
│ │ │ │ +
193 for (unsigned int c=i+1; c<=k; c++)
│ │ │ │ +
194 {
│ │ │ │ +
195 R product=factor;
│ │ │ │ +
196 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
197 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
198 for (unsigned int gamma=i+1; gamma<=k; gamma++)
│ │ │ │ +
199 product *= (gamma==c) ? -1.0/(lagrangeNode(gamma)-lagrangeNode(i))
│ │ │ │ +
200 : (lagrangeNode(gamma)-x[0])/(lagrangeNode(gamma)-lagrangeNode(i));
│ │ │ │ +
201 out[i][0][0] += product;
│ │ │ │ +
202 }
│ │ │ │ +
203 }
│ │ │ │ +
204 return;
│ │ │ │ +
205 }
│ │ │ │ +
206
│ │ │ │ +
207 if (dim==2)
│ │ │ │ +
208 {
│ │ │ │ +
209 int n=0;
│ │ │ │ +
210 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
211 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ +
212 {
│ │ │ │ +
213 // x_0 derivative
│ │ │ │ +
214 out[n][0][0] = 0.0;
│ │ │ │ +
215 R factor=1.0;
│ │ │ │ +
216 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ +
217 factor *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ +
218 for (unsigned int a=0; a<i; a++)
│ │ │ │ +
219 {
│ │ │ │ +
220 R product=factor;
│ │ │ │ +
221 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
222 if (alpha==a)
│ │ │ │ +
223 product *= D(1)/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
224 else
│ │ │ │ +
225 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
226 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ +
227 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
228 out[n][0][0] += product;
│ │ │ │ +
229 }
│ │ │ │ +
230 for (unsigned int c=i+j+1; c<=k; c++)
│ │ │ │ +
231 {
│ │ │ │ +
232 R product=factor;
│ │ │ │ +
233 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
234 product *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
235 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ +
236 if (gamma==c)
│ │ │ │ +
237 product *= -D(1)/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
238 else
│ │ │ │ +
239 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
240 out[n][0][0] += product;
│ │ │ │ +
241 }
│ │ │ │ +
242
│ │ │ │ +
243 // x_1 derivative
│ │ │ │ +
244 out[n][0][1] = 0.0;
│ │ │ │ +
245 factor = 1.0;
│ │ │ │ +
246 for (unsigned int alpha=0; alpha<i; alpha++)
│ │ │ │ +
247 factor *= (x[0]-lagrangeNode(alpha))/(lagrangeNode(i)-lagrangeNode(alpha));
│ │ │ │ +
248 for (unsigned int b=0; b<j; b++)
│ │ │ │ +
249 {
│ │ │ │ +
250 R product=factor;
│ │ │ │ +
251 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ +
252 if (beta==b)
│ │ │ │ +
253 product *= D(1)/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ +
254 else
│ │ │ │ +
255 product *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ +
256 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ +
257 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
258 out[n][0][1] += product;
│ │ │ │ +
259 }
│ │ │ │ +
260 for (unsigned int c=i+j+1; c<=k; c++)
│ │ │ │ +
261 {
│ │ │ │ +
262 R product=factor;
│ │ │ │ +
263 for (unsigned int beta=0; beta<j; beta++)
│ │ │ │ +
264 product *= (x[1]-lagrangeNode(beta))/(lagrangeNode(j)-lagrangeNode(beta));
│ │ │ │ +
265 for (unsigned int gamma=i+j+1; gamma<=k; gamma++)
│ │ │ │ +
266 if (gamma==c)
│ │ │ │ +
267 product *= -D(1)/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
268 else
│ │ │ │ +
269 product *= (lagrangeNode(gamma)-x[0]-x[1])/(lagrangeNode(gamma)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
270 out[n][0][1] += product;
│ │ │ │ +
271 }
│ │ │ │ +
272
│ │ │ │ +
273 n++;
│ │ │ │ +
274 }
│ │ │ │ +
275
│ │ │ │ +
276 return;
│ │ │ │ +
277 }
│ │ │ │ +
278
│ │ │ │ +
279 if (dim!=3)
│ │ │ │ +
280 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalBasis only implemented for dim==3!");
│ │ │ │ +
281
│ │ │ │ +
282 // Specialization for arbitrary order and dim==3
│ │ │ │ +
283 typename Traits::DomainType kx = x;
│ │ │ │ +
284 kx *= k;
│ │ │ │ +
285 unsigned int n = 0;
│ │ │ │ +
286 unsigned int i[4];
│ │ │ │ +
287 R factor[4];
│ │ │ │ +
288 for (i[2] = 0; i[2] <= k; ++i[2])
│ │ │ │ +
289 {
│ │ │ │ +
290 factor[2] = 1.0;
│ │ │ │ +
291 for (unsigned int j = 0; j < i[2]; ++j)
│ │ │ │ +
292 factor[2] *= (kx[2]-j) / (i[2]-j);
│ │ │ │ +
293 for (i[1] = 0; i[1] <= k - i[2]; ++i[1])
│ │ │ │ +
294 {
│ │ │ │ +
295 factor[1] = 1.0;
│ │ │ │ +
296 for (unsigned int j = 0; j < i[1]; ++j)
│ │ │ │ +
297 factor[1] *= (kx[1]-j) / (i[1]-j);
│ │ │ │ +
298 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0])
│ │ │ │ +
299 {
│ │ │ │ +
300 factor[0] = 1.0;
│ │ │ │ +
301 for (unsigned int j = 0; j < i[0]; ++j)
│ │ │ │ +
302 factor[0] *= (kx[0]-j) / (i[0]-j);
│ │ │ │ +
303 i[3] = k - i[0] - i[1] - i[2];
│ │ │ │ +
304 D kx3 = k - kx[0] - kx[1] - kx[2];
│ │ │ │ +
305 R sum3 = 0.0;
│ │ │ │ +
306 factor[3] = 1.0;
│ │ │ │ +
307 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ +
308 factor[3] /= i[3] - j;
│ │ │ │ +
309 R prod_all = factor[0] * factor[1] * factor[2] * factor[3];
│ │ │ │ +
310 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ +
311 {
│ │ │ │ +
312 R prod = prod_all;
│ │ │ │ +
313 for (unsigned int l = 0; l < i[3]; ++l)
│ │ │ │ +
314 if (j == l)
│ │ │ │ +
315 prod *= -R(k);
│ │ │ │ +
316 else
│ │ │ │ +
317 prod *= kx3 - l;
│ │ │ │ +
318 sum3 += prod;
│ │ │ │ +
319 }
│ │ │ │ +
320 for (unsigned int j = 0; j < i[3]; ++j)
│ │ │ │ +
321 factor[3] *= kx3 - j;
│ │ │ │ +
322 for (unsigned int m = 0; m < 3; ++m)
│ │ │ │ +
323 {
│ │ │ │ +
324 out[n][0][m] = sum3;
│ │ │ │ +
325 for (unsigned int j = 0; j < i[m]; ++j)
│ │ │ │ +
326 {
│ │ │ │ +
327 R prod = factor[3];
│ │ │ │ +
328 for (unsigned int p = 0; p < 3; ++p)
│ │ │ │ +
329 {
│ │ │ │ +
330 if (m == p)
│ │ │ │ +
331 for (unsigned int l = 0; l < i[p]; ++l)
│ │ │ │ +
332 prod *= (j==l) ? R(k) / (i[p]-l) : R(kx[p]-l) / (i[p]-l);
│ │ │ │ +
333 else
│ │ │ │ +
334 prod *= factor[p];
│ │ │ │ +
335 }
│ │ │ │ +
336 out[n][0][m] += prod;
│ │ │ │ +
337 }
│ │ │ │ +
338 }
│ │ │ │ +
339 n++;
│ │ │ │ +
340 }
│ │ │ │ +
341 }
│ │ │ │ +
342 }
│ │ │ │ +
343 }
│ │ │ │ +
344
│ │ │ │ +
351 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ +
352 const typename Traits::DomainType& in,
│ │ │ │ +
353 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
354 {
│ │ │ │ +
355 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
356
│ │ │ │ +
357 out.resize(size());
│ │ │ │ +
358
│ │ │ │ +
359 if (totalOrder == 0) {
│ │ │ │ +
360 evaluateFunction(in, out);
│ │ │ │ +
361 return;
│ │ │ │ +
362 }
│ │ │ │ +
363
│ │ │ │ +
364 if (k==0)
│ │ │ │ +
365 {
│ │ │ │ +
366 out[0] = 0;
│ │ │ │ +
367 return;
│ │ │ │ +
368 }
│ │ │ │ +
369
│ │ │ │ +
370 if (k==1)
│ │ │ │ +
371 {
│ │ │ │ +
372 if (totalOrder==1)
│ │ │ │ +
373 {
│ │ │ │ +
374 auto direction = std::find(order.begin(), order.end(), 1);
│ │ │ │ +
375
│ │ │ │ +
376 out[0] = -1;
│ │ │ │ +
377 for (unsigned int i=0; i<dim; i++)
│ │ │ │ +
378 out[i+1] = (i==(direction-order.begin()));
│ │ │ │ +
379 }
│ │ │ │ +
380 else // all higher order derivatives are zero
│ │ │ │ +
381 std::fill(out.begin(), out.end(), 0);
│ │ │ │ +
382 return;
│ │ │ │ +
383 }
│ │ │ │ +
384
│ │ │ │ +
385 if (dim==2)
│ │ │ │ +
386 {
│ │ │ │ +
387 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; };
│ │ │ │ +
388
│ │ │ │ +
389 // Helper method: Return a single Lagrangian factor of l_ij evaluated at x
│ │ │ │ +
390 auto lagrangianFactor = [&lagrangeNode]
│ │ │ │ +
391 (const int no, const int i, const int j, const typename Traits::DomainType& x)
│ │ │ │ +
392 -> typename Traits::RangeType
│ │ │ │ +
393 {
│ │ │ │ +
394 if ( no < i)
│ │ │ │ +
395 return (x[0]-lagrangeNode(no))/(lagrangeNode(i)-lagrangeNode(no));
│ │ │ │ +
396 if (no < i+j)
│ │ │ │ +
397 return (x[1]-lagrangeNode(no-i))/(lagrangeNode(j)-lagrangeNode(no-i));
│ │ │ │ +
398 return (lagrangeNode(no+1)-x[0]-x[1])/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
399 };
│ │ │ │ +
400
│ │ │ │ +
401 // Helper method: Return the derivative of a single Lagrangian factor of l_ij evaluated at x
│ │ │ │ +
402 // direction: Derive in x-direction if this is 0, otherwise derive in y direction
│ │ │ │ +
403 auto lagrangianFactorDerivative = [&lagrangeNode]
│ │ │ │ +
404 (const int direction, const int no, const int i, const int j, const typename Traits::DomainType&)
│ │ │ │ +
405 -> typename Traits::RangeType
│ │ │ │ +
406 {
│ │ │ │ +
407 using T = typename Traits::RangeType;
│ │ │ │ +
408 if ( no < i)
│ │ │ │ +
409 return (direction == 0) ? T(1.0/(lagrangeNode(i)-lagrangeNode(no))) : T(0);
│ │ │ │ +
410
│ │ │ │ +
411 if (no < i+j)
│ │ │ │ +
412 return (direction == 0) ? T(0) : T(1.0/(lagrangeNode(j)-lagrangeNode(no-i)));
│ │ │ │ +
413
│ │ │ │ +
414 return -1.0/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j));
│ │ │ │ +
415 };
│ │ │ │ +
416
│ │ │ │ +
417 if (totalOrder==1)
│ │ │ │ +
418 {
│ │ │ │ +
419 int direction = std::find(order.begin(), order.end(), 1)-order.begin();
│ │ │ │ +
420
│ │ │ │ +
421 int n=0;
│ │ │ │ +
422 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
423 {
│ │ │ │ +
424 for (unsigned int i=0; i<=k-j; i++, n++)
│ │ │ │ +
425 {
│ │ │ │ +
426 out[n] = 0.0;
│ │ │ │ +
427 for (unsigned int no1=0; no1 < k; no1++)
│ │ │ │ +
428 {
│ │ │ │ +
429 R factor = lagrangianFactorDerivative(direction, no1, i, j, in);
│ │ │ │ +
430 for (unsigned int no2=0; no2 < k; no2++)
│ │ │ │ +
431 if (no1 != no2)
│ │ │ │ +
432 factor *= lagrangianFactor(no2, i, j, in);
│ │ │ │ +
433
│ │ │ │ +
434 out[n] += factor;
│ │ │ │ +
435 }
│ │ │ │ +
436 }
│ │ │ │ +
437 }
│ │ │ │ +
438 return;
│ │ │ │ +
439 }
│ │ │ │ +
440
│ │ │ │ +
441 if (totalOrder==2)
│ │ │ │ +
442 {
│ │ │ │ +
443 std::array<int,2> directions;
│ │ │ │ +
444 unsigned int counter = 0;
│ │ │ │ +
445 auto nonconstOrder = order; // need a copy that I can modify
│ │ │ │ +
446 for (int i=0; i<2; i++)
│ │ │ │ +
447 {
│ │ │ │ +
448 while (nonconstOrder[i])
│ │ │ │ +
449 {
│ │ │ │ +
450 directions[counter++] = i;
│ │ │ │ +
451 nonconstOrder[i]--;
│ │ │ │ +
452 }
│ │ │ │ +
453 }
│ │ │ │ +
454
│ │ │ │ +
455 //f = prod_{i} f_i -> dxa dxb f = sum_{i} {dxa f_i sum_{k \neq i} dxb f_k prod_{l \neq k,i} f_l
│ │ │ │ +
456 int n=0;
│ │ │ │ +
457 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
458 {
│ │ │ │ +
459 for (unsigned int i=0; i<=k-j; i++, n++)
│ │ │ │ +
460 {
│ │ │ │ +
461 R res = 0.0;
│ │ │ │ +
462
│ │ │ │ +
463 for (unsigned int no1=0; no1 < k; no1++)
│ │ │ │ +
464 {
│ │ │ │ +
465 R factor1 = lagrangianFactorDerivative(directions[0], no1, i, j, in);
│ │ │ │ +
466 for (unsigned int no2=0; no2 < k; no2++)
│ │ │ │ +
467 {
│ │ │ │ +
468 if (no1 == no2)
│ │ │ │ +
469 continue;
│ │ │ │ +
470 R factor2 = factor1*lagrangianFactorDerivative(directions[1], no2, i, j, in);
│ │ │ │ +
471 for (unsigned int no3=0; no3 < k; no3++)
│ │ │ │ +
472 {
│ │ │ │ +
473 if (no3 == no1 || no3 == no2)
│ │ │ │ +
474 continue;
│ │ │ │ +
475 factor2 *= lagrangianFactor(no3, i, j, in);
│ │ │ │ +
476 }
│ │ │ │ +
477 res += factor2;
│ │ │ │ +
478 }
│ │ │ │ +
479 }
│ │ │ │ +
480 out[n] = res;
│ │ │ │ +
481 }
│ │ │ │ +
482 }
│ │ │ │ +
483
│ │ │ │ +
484 return;
│ │ │ │ +
485 } // totalOrder==2
│ │ │ │ +
486
│ │ │ │ +
487 } // dim==2
│ │ │ │ +
488
│ │ │ │ +
489 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
490 }
│ │ │ │ +
491
│ │ │ │ +
493 static constexpr unsigned int order ()
│ │ │ │ +
494 {
│ │ │ │ +
495 return k;
│ │ │ │ +
496 }
│ │ │ │ +
497 };
│ │ │ │ +
498
│ │ │ │ +
504 template<unsigned int dim, unsigned int k>
│ │ │ │ +
505 class LagrangeSimplexLocalCoefficients
│ │ │ │ +
506 {
│ │ │ │ +
507 public:
│ │ │ │ +
509 LagrangeSimplexLocalCoefficients ()
│ │ │ │ +
510 : localKeys_(size())
│ │ │ │ +
511 {
│ │ │ │ +
512 if (k==0)
│ │ │ │ +
513 {
│ │ │ │ +
514 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ +
515 return;
│ │ │ │ +
516 }
│ │ │ │ +
517
│ │ │ │ +
518 if (k==1)
│ │ │ │ +
519 {
│ │ │ │ +
520 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
521 localKeys_[i] = LocalKey(i,dim,0);
│ │ │ │ +
522 return;
│ │ │ │ +
523 }
│ │ │ │ +
524
│ │ │ │ +
525 if (dim==1)
│ │ │ │ +
526 {
│ │ │ │ +
527 // Order is at least 2 here
│ │ │ │ +
528 localKeys_[0] = LocalKey(0,1,0); // vertex dof
│ │ │ │ +
529 for (unsigned int i=1; i<k; i++)
│ │ │ │ +
530 localKeys_[i] = LocalKey(0,0,i-1); // element dofs
│ │ │ │ +
531 localKeys_.back() = LocalKey(1,1,0); // vertex dof
│ │ │ │ +
532 return;
│ │ │ │ +
533 }
│ │ │ │ +
534
│ │ │ │ +
535 if (dim==2)
│ │ │ │ +
536 {
│ │ │ │ +
537 int n=0;
│ │ │ │ +
538 int c=0;
│ │ │ │ +
539 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
540 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ +
541 {
│ │ │ │ +
542 if (i==0 && j==0)
│ │ │ │ +
543 {
│ │ │ │ +
544 localKeys_[n++] = LocalKey(0,2,0);
│ │ │ │ +
545 continue;
│ │ │ │ +
546 }
│ │ │ │ +
547 if (i==k && j==0)
│ │ │ │ +
548 {
│ │ │ │ +
549 localKeys_[n++] = LocalKey(1,2,0);
│ │ │ │ +
550 continue;
│ │ │ │ +
551 }
│ │ │ │ +
552 if (i==0 && j==k)
│ │ │ │ +
553 {
│ │ │ │ +
554 localKeys_[n++] = LocalKey(2,2,0);
│ │ │ │ +
555 continue;
│ │ │ │ +
556 }
│ │ │ │ +
557 if (j==0)
│ │ │ │ +
558 {
│ │ │ │ +
559 localKeys_[n++] = LocalKey(0,1,i-1);
│ │ │ │ +
560 continue;
│ │ │ │ +
561 }
│ │ │ │ +
562 if (i==0)
│ │ │ │ +
563 {
│ │ │ │ +
564 localKeys_[n++] = LocalKey(1,1,j-1);
│ │ │ │ +
565 continue;
│ │ │ │ +
566 }
│ │ │ │ +
567 if (i+j==k)
│ │ │ │ +
568 {
│ │ │ │ +
569 localKeys_[n++] = LocalKey(2,1,j-1);
│ │ │ │ +
570 continue;
│ │ │ │ +
571 }
│ │ │ │ +
572 localKeys_[n++] = LocalKey(0,0,c++);
│ │ │ │ +
573 }
│ │ │ │ +
574 return;
│ │ │ │ +
575 }
│ │ │ │ +
576
│ │ │ │ +
577 if (dim==3)
│ │ │ │ +
578 {
│ │ │ │ +
579 std::array<unsigned int, dim+1> vertexMap;
│ │ │ │ +
580 for (unsigned int i=0; i<=dim; i++)
│ │ │ │ +
581 vertexMap[i] = i;
│ │ │ │ +
582 generateLocalKeys(vertexMap);
│ │ │ │ +
583 return;
│ │ │ │ +
584 }
│ │ │ │ +
585 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for k<=1 or dim<=3!");
│ │ │ │ +
586 }
│ │ │ │ +
587
│ │ │ │ +
594 LagrangeSimplexLocalCoefficients (const std::array<unsigned int, dim+1> vertexMap)
│ │ │ │ +
595 : localKeys_(size())
│ │ │ │ +
596 {
│ │ │ │ +
597 if (dim!=2 && dim!=3)
│ │ │ │ +
598 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==2 and dim==3!");
│ │ │ │ +
599
│ │ │ │ +
600 generateLocalKeys(vertexMap);
│ │ │ │ +
601 }
│ │ │ │ +
602
│ │ │ │ +
603
│ │ │ │ +
604 template<class VertexMap>
│ │ │ │ +
605 LagrangeSimplexLocalCoefficients(const VertexMap &vertexmap)
│ │ │ │ +
606 : localKeys_(size())
│ │ │ │ +
607 {
│ │ │ │ +
608 if (dim!=2 && dim!=3)
│ │ │ │ +
609 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==2 and dim==3!");
│ │ │ │ +
610
│ │ │ │ +
611 std::array<unsigned int, dim+1> vertexmap_array;
│ │ │ │ +
612 std::copy(vertexmap, vertexmap + dim + 1, vertexmap_array.begin());
│ │ │ │ +
613 generateLocalKeys(vertexmap_array);
│ │ │ │ +
614 }
│ │ │ │ +
615
│ │ │ │ +
617 static constexpr std::size_t size ()
│ │ │ │ +
618 {
│ │ │ │ +
619 return binomial(k+dim,dim);
│ │ │ │ +
620 }
│ │ │ │ +
621
│ │ │ │ +
623 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
624 {
│ │ │ │ +
625 return localKeys_[i];
│ │ │ │ +
626 }
│ │ │ │ +
627
│ │ │ │ +
628 private:
│ │ │ │ +
629 std::vector<LocalKey> localKeys_;
│ │ │ │ +
630
│ │ │ │ +
631 void generateLocalKeys(const std::array<unsigned int, dim+1> vertexMap)
│ │ │ │ +
632 {
│ │ │ │ +
633 if (k==0)
│ │ │ │ +
634 {
│ │ │ │ +
635 localKeys_[0] = LocalKey(0,0,0);
│ │ │ │ +
636 return;
│ │ │ │ +
637 }
│ │ │ │ +
638
│ │ │ │ +
639 if (dim==2)
│ │ │ │ +
640 {
│ │ │ │ +
641 // Create default assignment
│ │ │ │ +
642 int n=0;
│ │ │ │ +
643 int c=0;
│ │ │ │ +
644 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
645 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ +
646 {
│ │ │ │ +
647 if (i==0 && j==0)
│ │ │ │ +
648 {
│ │ │ │ +
649 localKeys_[n++] = LocalKey(0,2,0);
│ │ │ │ +
650 continue;
│ │ │ │ +
651 }
│ │ │ │ +
652 if (i==k && j==0)
│ │ │ │ +
653 {
│ │ │ │ +
654 localKeys_[n++] = LocalKey(1,2,0);
│ │ │ │ +
655 continue;
│ │ │ │ +
656 }
│ │ │ │ +
657 if (i==0 && j==k)
│ │ │ │ +
658 {
│ │ │ │ +
659 localKeys_[n++] = LocalKey(2,2,0);
│ │ │ │ +
660 continue;
│ │ │ │ +
661 }
│ │ │ │ +
662 if (j==0)
│ │ │ │ +
663 {
│ │ │ │ +
664 localKeys_[n++] = LocalKey(0,1,i-1);
│ │ │ │ +
665 continue;
│ │ │ │ +
666 }
│ │ │ │ +
667 if (i==0)
│ │ │ │ +
668 {
│ │ │ │ +
669 localKeys_[n++] = LocalKey(1,1,j-1);
│ │ │ │ +
670 continue;
│ │ │ │ +
671 }
│ │ │ │ +
672 if (i+j==k)
│ │ │ │ +
673 {
│ │ │ │ +
674 localKeys_[n++] = LocalKey(2,1,j-1);
│ │ │ │ +
675 continue;
│ │ │ │ +
676 }
│ │ │ │ +
677 localKeys_[n++] = LocalKey(0,0,c++);
│ │ │ │ +
678 }
│ │ │ │ +
679
│ │ │ │ +
680 // Flip edge orientations, if requested
│ │ │ │ +
681 bool flip[3];
│ │ │ │ +
682 flip[0] = vertexMap[0] > vertexMap[1];
│ │ │ │ +
683 flip[1] = vertexMap[0] > vertexMap[2];
│ │ │ │ +
684 flip[2] = vertexMap[1] > vertexMap[2];
│ │ │ │ +
685 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
686 if (localKeys_[i].codim()==1 && flip[localKeys_[i].subEntity()])
│ │ │ │ +
687 localKeys_[i].index(k-2-localKeys_[i].index());
│ │ │ │ +
688
│ │ │ │ +
689 return;
│ │ │ │ +
690 }
│ │ │ │ +
691
│ │ │ │ +
692 if (dim!=3)
│ │ │ │ +
693 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only implemented for dim==3!");
│ │ │ │ +
694
│ │ │ │ +
695 unsigned int subindex[16];
│ │ │ │ +
696 unsigned int codim_count[4] = {0};
│ │ │ │ +
697 for (unsigned int m = 1; m < 16; ++m)
│ │ │ │ +
698 {
│ │ │ │ +
699 unsigned int codim = !(m&1) + !(m&2) + !(m&4) + !(m&8);
│ │ │ │ +
700 subindex[m] = codim_count[codim]++;
│ │ │ │ +
701 }
│ │ │ │ +
702
│ │ │ │ +
703 int a1 = (3*k + 12)*k + 11;
│ │ │ │ +
704 int a2 = -3*k - 6;
│ │ │ │ +
705 unsigned int dof_count[16] = {0};
│ │ │ │ +
706 unsigned int i[4];
│ │ │ │ +
707 for (i[3] = 0; i[3] <= k; ++i[3])
│ │ │ │ +
708 for (i[2] = 0; i[2] <= k - i[3]; ++i[2])
│ │ │ │ +
709 for (i[1] = 0; i[1] <= k - i[2] - i[3]; ++i[1])
│ │ │ │ +
710 {
│ │ │ │ +
711 i[0] = k - i[1] - i[2] - i[3];
│ │ │ │ +
712 unsigned int j[4];
│ │ │ │ +
713 unsigned int entity = 0;
│ │ │ │ +
714 unsigned int codim = 0;
│ │ │ │ +
715 for (unsigned int m = 0; m < 4; ++m)
│ │ │ │ +
716 {
│ │ │ │ +
717 j[m] = i[vertexMap[m]];
│ │ │ │ +
718 entity += !!j[m] << m;
│ │ │ │ +
719 codim += !j[m];
│ │ │ │ +
720 }
│ │ │ │ +
721 int local_index = j[3]*(a1 + (a2 + j[3])*j[3])/6
│ │ │ │ +
722 + j[2]*(2*(k - j[3]) + 3 - j[2])/2 + j[1];
│ │ │ │ +
723 localKeys_[local_index] = LocalKey(subindex[entity], codim, dof_count[entity]++);
│ │ │ │ +
724 }
│ │ │ │ +
725 }
│ │ │ │ +
726 };
│ │ │ │ +
727
│ │ │ │ +
732 template<class LocalBasis>
│ │ │ │ +
733 class LagrangeSimplexLocalInterpolation
│ │ │ │ +
734 {
│ │ │ │ +
735 static const int kdiv = (LocalBasis::order() == 0 ? 1 : LocalBasis::order());
│ │ │ │ +
736 public:
│ │ │ │ +
737
│ │ │ │ +
745 template<typename F, typename C>
│ │ │ │ +
746 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
747 {
│ │ │ │ +
748 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ +
749 constexpr auto k = LocalBasis::order();
│ │ │ │ +
750 using D = typename LocalBasis::Traits::DomainFieldType;
│ │ │ │ +
751
│ │ │ │ +
752 typename LocalBasis::Traits::DomainType x;
│ │ │ │ +
753
│ │ │ │ +
754 out.resize(LocalBasis::size());
│ │ │ │ +
755
│ │ │ │ +
756 // Specialization for zero-order case
│ │ │ │ +
757 if (k==0)
│ │ │ │ +
758 {
│ │ │ │ +
759 auto center = ReferenceElements<D,dim>::simplex().position(0,0);
│ │ │ │ +
760 out[0] = f(center);
│ │ │ │ +
761 return;
│ │ │ │ +
762 }
│ │ │ │ +
763
│ │ │ │ +
764 // Specialization for first-order case
│ │ │ │ +
765 if (k==1)
│ │ │ │ +
766 {
│ │ │ │ +
767 // vertex 0
│ │ │ │ +
768 std::fill(x.begin(), x.end(), 0);
│ │ │ │ +
769 out[0] = f(x);
│ │ │ │ +
770
│ │ │ │ +
771 // remaining vertices
│ │ │ │ +
772 for (int i=0; i<dim; i++)
│ │ │ │ +
773 {
│ │ │ │ +
774 for (int j=0; j<dim; j++)
│ │ │ │ +
775 x[j] = (i==j);
│ │ │ │ +
776
│ │ │ │ +
777 out[i+1] = f(x);
│ │ │ │ +
778 }
│ │ │ │ +
779 return;
│ │ │ │ +
780 }
│ │ │ │ +
781
│ │ │ │ +
782 if (dim==1)
│ │ │ │ +
783 {
│ │ │ │ +
784 for (unsigned int i=0; i<k+1; i++)
│ │ │ │ +
785 {
│ │ │ │ +
786 x[0] = ((D)i)/k;
│ │ │ │ +
787 out[i] = f(x);
│ │ │ │ +
788 }
│ │ │ │ +
789 return;
│ │ │ │ +
790 }
│ │ │ │ +
791
│ │ │ │ +
792 if (dim==2)
│ │ │ │ +
793 {
│ │ │ │ +
794 int n=0;
│ │ │ │ +
795 for (unsigned int j=0; j<=k; j++)
│ │ │ │ +
796 for (unsigned int i=0; i<=k-j; i++)
│ │ │ │ +
797 {
│ │ │ │ +
798 x = { ((D)i)/k, ((D)j)/k };
│ │ │ │ +
799 out[n] = f(x);
│ │ │ │ +
800 n++;
│ │ │ │ +
801 }
│ │ │ │ +
802 return;
│ │ │ │ +
803 }
│ │ │ │ +
804
│ │ │ │ +
805 if (dim!=3)
│ │ │ │ +
806 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalInterpolation only implemented for dim<=3!");
│ │ │ │ +
807
│ │ │ │ +
808 int n=0;
│ │ │ │ +
809 for (int i2 = 0; i2 <= (int)k; i2++)
│ │ │ │ +
810 for (int i1 = 0; i1 <= (int)k-i2; i1++)
│ │ │ │ +
811 for (int i0 = 0; i0 <= (int)k-i1-i2; i0++)
│ │ │ │ +
812 {
│ │ │ │ +
813 x[0] = ((D)i0)/((D)kdiv);
│ │ │ │ +
814 x[1] = ((D)i1)/((D)kdiv);
│ │ │ │ +
815 x[2] = ((D)i2)/((D)kdiv);
│ │ │ │ +
816 out[n] = f(x);
│ │ │ │ +
817 n++;
│ │ │ │ +
818 }
│ │ │ │ +
819 }
│ │ │ │ +
820
│ │ │ │ +
821 };
│ │ │ │ +
822
│ │ │ │ +
823} } // namespace Dune::Impl
│ │ │ │ +
824
│ │ │ │ +
825namespace Dune
│ │ │ │ +
826{
│ │ │ │ +
834 template<class D, class R, int d, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
836 {
│ │ │ │ +
837 public:
│ │ │ │ + │ │ │ │ +
841 Impl::LagrangeSimplexLocalCoefficients<d,k>,
│ │ │ │ +
842 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,d,k> > >;
│ │ │ │ +
843
│ │ │ │ + │ │ │ │ +
846
│ │ │ │ +
851 template<typename VertexMap>
│ │ │ │ +
│ │ │ │ +
852 LagrangeSimplexLocalFiniteElement(const VertexMap& vertexmap)
│ │ │ │ +
853 : coefficients_(vertexmap)
│ │ │ │ +
854 {}
│ │ │ │ +
│ │ │ │ +
855
│ │ │ │ +
│ │ │ │ +
858 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
859 {
│ │ │ │ +
860 return basis_;
│ │ │ │ +
861 }
│ │ │ │ +
│ │ │ │ +
862
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
866 {
│ │ │ │ +
867 return coefficients_;
│ │ │ │ +
868 }
│ │ │ │ +
│ │ │ │ +
869
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
873 {
│ │ │ │ +
874 return interpolation_;
│ │ │ │ +
875 }
│ │ │ │ +
│ │ │ │ +
876
│ │ │ │ +
│ │ │ │ +
878 static constexpr std::size_t size ()
│ │ │ │ +
879 {
│ │ │ │ +
880 return Impl::LagrangeSimplexLocalBasis<D,R,d,k>::size();
│ │ │ │ +
881 }
│ │ │ │ +
│ │ │ │ +
882
│ │ │ │ +
│ │ │ │ +
885 static constexpr GeometryType type ()
│ │ │ │ +
886 {
│ │ │ │ +
887 return GeometryTypes::simplex(d);
│ │ │ │ +
888 }
│ │ │ │ +
│ │ │ │ +
889
│ │ │ │ +
890 private:
│ │ │ │ +
891 Impl::LagrangeSimplexLocalBasis<D,R,d,k> basis_;
│ │ │ │ +
892 Impl::LagrangeSimplexLocalCoefficients<d,k> coefficients_;
│ │ │ │ +
893 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,d,k> > interpolation_;
│ │ │ │ +
894 };
│ │ │ │ +
│ │ │ │ +
895
│ │ │ │ +
896} // namespace Dune
│ │ │ │ +
897
│ │ │ │ +
898#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order.
Definition lagrangesimplex.hh:836
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition lagrangesimplex.hh:872
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition lagrangesimplex.hh:858
│ │ │ │ +
LagrangeSimplexLocalFiniteElement()
Definition lagrangesimplex.hh:845
│ │ │ │ +
static constexpr std::size_t size()
The number of shape functions.
Definition lagrangesimplex.hh:878
│ │ │ │ +
LagrangeSimplexLocalFiniteElement(const VertexMap &vertexmap)
Definition lagrangesimplex.hh:852
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition lagrangesimplex.hh:865
│ │ │ │ +
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition lagrangesimplex.hh:885
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,277 +1,922 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _o_r_t_h_o_n_o_r_m_a_l │ │ │ │ │ -orthonormalcompute.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrangesimplex.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALCOMPUTE_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include │ │ │ │ │ 17 │ │ │ │ │ -18#include │ │ │ │ │ -19 │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -23 │ │ │ │ │ -_2_4namespace _O_N_B_C_o_m_p_u_t_e │ │ │ │ │ -25{ │ │ │ │ │ -26 │ │ │ │ │ -27 template< class scalar_t > │ │ │ │ │ -_2_8 scalar_t _f_a_c_t_o_r_i_a_l( int start, int end ) │ │ │ │ │ -29 { │ │ │ │ │ -30 scalar_t ret( 1 ); │ │ │ │ │ -31 for( int j = start; j <= end; ++j ) │ │ │ │ │ -32 ret *= scalar_t( j ); │ │ │ │ │ -33 return ret; │ │ │ │ │ -34 } │ │ │ │ │ -35 │ │ │ │ │ -36 │ │ │ │ │ -37 │ │ │ │ │ -38 // Integral │ │ │ │ │ -39 // -------- │ │ │ │ │ -40 │ │ │ │ │ -41 template< Dune::GeometryType::Id geometryId > │ │ │ │ │ -_4_2 struct _I_n_t_e_g_r_a_l │ │ │ │ │ -43 { │ │ │ │ │ -_4_4 static constexpr Dune::GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ -_4_5 static constexpr int _d_i_m_e_n_s_i_o_n = _g_e_o_m_e_t_r_y.dim(); │ │ │ │ │ -46 │ │ │ │ │ -47 template< int dim, class scalar_t > │ │ │ │ │ -_4_8 static int _c_o_m_p_u_t_e ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> &alpha, │ │ │ │ │ -49 scalar_t &p, scalar_t &q ) │ │ │ │ │ -50 { │ │ │ │ │ -51 return _c_o_m_p_u_t_e(alpha, p, q, std::make_integer_sequence{}); │ │ │ │ │ -52 } │ │ │ │ │ -53 │ │ │ │ │ -54 template< int dim, class scalar_t , int ...ints> │ │ │ │ │ -_5_5 static int _c_o_m_p_u_t_e ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> &alpha, │ │ │ │ │ -56 scalar_t &p, scalar_t &q, std::integer_sequence intS) │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +21 │ │ │ │ │ +22namespace _D_u_n_e { namespace Impl │ │ │ │ │ +23{ │ │ │ │ │ +34 template │ │ │ │ │ +35 class LagrangeSimplexLocalBasis │ │ │ │ │ +36 { │ │ │ │ │ +37 public: │ │ │ │ │ +38 using Traits = │ │ │ │ │ +LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ +>; │ │ │ │ │ +39 │ │ │ │ │ +44 static constexpr unsigned int size () │ │ │ │ │ +45 { │ │ │ │ │ +46 return binomial(k+dim,dim); │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +50 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ +51 std::vector& out) const │ │ │ │ │ +52 { │ │ │ │ │ +53 out.resize(size()); │ │ │ │ │ +54 │ │ │ │ │ +55 // Specialization for zero-order case │ │ │ │ │ +56 if (k==0) │ │ │ │ │ 57 { │ │ │ │ │ -58 p = scalar_t( 1 ); │ │ │ │ │ -59 q = scalar_t( 1 ); │ │ │ │ │ -60 │ │ │ │ │ -61 int ord = 0; │ │ │ │ │ -62 ((computeIntegral(alpha,p,q,ord)),...); │ │ │ │ │ -63 │ │ │ │ │ -64 return ord; │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -67 template< int step, int dim, class scalar_t > │ │ │ │ │ -_6_8 static void _c_o_m_p_u_t_e_I_n_t_e_g_r_a_l ( const _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> │ │ │ │ │ -&alpha, │ │ │ │ │ -69 scalar_t &p, scalar_t &q, int& ord) │ │ │ │ │ -70 { │ │ │ │ │ -71 int i = alpha._z( step ); │ │ │ │ │ -72 │ │ │ │ │ -73 if constexpr ( _g_e_o_m_e_t_r_y.isPrismatic(step)) │ │ │ │ │ -74 { │ │ │ │ │ -75 //p *= scalar_t( 1 ); │ │ │ │ │ -76 q *= scalar_t( i+1 ); │ │ │ │ │ -77 } │ │ │ │ │ -78 else │ │ │ │ │ +58 out[0] = 1; │ │ │ │ │ +59 return; │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +62 // Specialization for first-order case │ │ │ │ │ +63 if (k==1) │ │ │ │ │ +64 { │ │ │ │ │ +65 out[0] = 1.0; │ │ │ │ │ +66 for (size_t i=0; i=2); │ │ │ │ │ +75 │ │ │ │ │ +76 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; }; │ │ │ │ │ +77 │ │ │ │ │ +78 if (dim==1) │ │ │ │ │ 79 { │ │ │ │ │ -80 p *= factorial< scalar_t >( 1, i ); │ │ │ │ │ -81 q *= factorial< scalar_t >( step+1 + ord, step+1 + ord + i ); │ │ │ │ │ -82 } │ │ │ │ │ -83 ord +=i; │ │ │ │ │ -84 } │ │ │ │ │ -85 │ │ │ │ │ -86 }; │ │ │ │ │ -87 │ │ │ │ │ -88 │ │ │ │ │ -89 // ONBMatrix │ │ │ │ │ -90 // --------- │ │ │ │ │ -91 │ │ │ │ │ -92 template< Dune::GeometryType::Id geometryId, class scalar_t > │ │ │ │ │ -_9_3 class _O_N_B_M_a_t_r_i_x │ │ │ │ │ -94 : public Dune::DynamicMatrix< scalar_t > │ │ │ │ │ -95 { │ │ │ │ │ -96 typedef _O_N_B_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _s_c_a_l_a_r___t_ _> _T_h_i_s; │ │ │ │ │ -97 typedef Dune::DynamicMatrix< scalar_t > Base; │ │ │ │ │ -98 │ │ │ │ │ -99 public: │ │ │ │ │ -_1_0_0 typedef std::vector< scalar_t > _v_e_c___t; │ │ │ │ │ -_1_0_1 typedef Dune::DynamicMatrix< scalar_t > _m_a_t___t; │ │ │ │ │ -102 │ │ │ │ │ -_1_0_3 explicit _O_N_B_M_a_t_r_i_x ( unsigned int order ) │ │ │ │ │ -104 { │ │ │ │ │ -105 // get all multiindecies for monomial basis │ │ │ │ │ -106 constexpr Dune::GeometryType geometry = geometryId; │ │ │ │ │ -107 constexpr unsigned int dim = geometry.dim(); │ │ │ │ │ -108 typedef _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _s_c_a_l_a_r___t_ _> MI; │ │ │ │ │ -109 _D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _M_I_ _> basis( order ); │ │ │ │ │ -110 const std::size_t size = basis._s_i_z_e(); │ │ │ │ │ -111 std::vector< Dune::FieldVector< MI, 1 > > y( size ); │ │ │ │ │ -112 Dune::FieldVector< MI, dim > x; │ │ │ │ │ -113 for( unsigned int i = 0; i < dim; ++i ) │ │ │ │ │ -114 x[ i ].set( i ); │ │ │ │ │ -115 basis._e_v_a_l_u_a_t_e( x, y ); │ │ │ │ │ -116 │ │ │ │ │ -117 // set bounds of data │ │ │ │ │ -118 Base::resize( size, size ); │ │ │ │ │ -119 S.resize( size, size ); │ │ │ │ │ -120 d.resize( size ); │ │ │ │ │ -121 │ │ │ │ │ -122 // setup matrix for bilinear form x^T S y: S_ij = int_A x^(i+j) │ │ │ │ │ -123 scalar_t p, q; │ │ │ │ │ -124 for( std::size_t i = 0; i < size; ++i ) │ │ │ │ │ -125 { │ │ │ │ │ -126 for( std::size_t j = 0; j < size; ++j ) │ │ │ │ │ -127 { │ │ │ │ │ -128 _I_n_t_e_g_r_a_l_<_ _g_e_o_m_e_t_r_y_I_d_ _>_:_:_c_o_m_p_u_t_e( y[ i ][ 0 ] * y[ j ][ 0 ], p, q ); │ │ │ │ │ -129 S[i][j] = p; │ │ │ │ │ -130 S[i][j] /= q; │ │ │ │ │ -131 } │ │ │ │ │ -132 } │ │ │ │ │ -133 │ │ │ │ │ -134 // orthonormalize │ │ │ │ │ -135 gramSchmidt(); │ │ │ │ │ -136 } │ │ │ │ │ -137 │ │ │ │ │ -138 template< class Vector > │ │ │ │ │ -_1_3_9 void _r_o_w ( unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ -140 { │ │ │ │ │ -141 // transposed matrix is required │ │ │ │ │ -142 assert( _r_o_w < Base::cols() ); │ │ │ │ │ -143 for( std::size_t i = 0; i < Base::rows(); ++i ) │ │ │ │ │ -144 _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t( (*this)[i][_r_o_w], vec[ i ] ); │ │ │ │ │ -145 } │ │ │ │ │ -146 │ │ │ │ │ -147 private: │ │ │ │ │ -148 void sprod ( int col1, int col2, scalar_t &ret ) │ │ │ │ │ -149 { │ │ │ │ │ -150 ret = 0; │ │ │ │ │ -151 for( int k = 0; k <= col1; ++k ) │ │ │ │ │ -152 { │ │ │ │ │ -153 for( int l = 0; l <=col2; ++l ) │ │ │ │ │ -154 ret += (*this)[l][col2] * S[l][k] * (*this)[k][col1]; │ │ │ │ │ -155 } │ │ │ │ │ -156 } │ │ │ │ │ -157 │ │ │ │ │ -158 void vmul ( std::size_t col, std::size_t rowEnd, const scalar_t &s ) │ │ │ │ │ -159 { │ │ │ │ │ -160 for( std::size_t i = 0; i <= rowEnd; ++i ) │ │ │ │ │ -161 (*this)[i][col] *= s; │ │ │ │ │ -162 } │ │ │ │ │ -163 │ │ │ │ │ -164 void vsub ( std::size_t coldest, std::size_t colsrc, std::size_t rowEnd, │ │ │ │ │ -const scalar_t &s ) │ │ │ │ │ -165 { │ │ │ │ │ -166 for( std::size_t i = 0; i <= rowEnd; ++i ) │ │ │ │ │ -167 (*this)[i][coldest] -= s * (*this)[i][colsrc]; │ │ │ │ │ -168 } │ │ │ │ │ +80 for (unsigned int i=0; i=2 only │ │ │ │ │ +implemented for dim==1 or dim==3"); │ │ │ │ │ +112 │ │ │ │ │ +113 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e kx = x; │ │ │ │ │ +114 kx *= k; │ │ │ │ │ +115 unsigned int n = 0; │ │ │ │ │ +116 unsigned int i[4]; │ │ │ │ │ +117 R factor[4]; │ │ │ │ │ +118 for (i[2] = 0; i[2] <= k; ++i[2]) │ │ │ │ │ +119 { │ │ │ │ │ +120 factor[2] = 1.0; │ │ │ │ │ +121 for (unsigned int j = 0; j < i[2]; ++j) │ │ │ │ │ +122 factor[2] *= (kx[2]-j) / (i[2]-j); │ │ │ │ │ +123 for (i[1] = 0; i[1] <= k - i[2]; ++i[1]) │ │ │ │ │ +124 { │ │ │ │ │ +125 factor[1] = 1.0; │ │ │ │ │ +126 for (unsigned int j = 0; j < i[1]; ++j) │ │ │ │ │ +127 factor[1] *= (kx[1]-j) / (i[1]-j); │ │ │ │ │ +128 for (i[0] = 0; i[0] <= k - i[1] - i[2]; ++i[0]) │ │ │ │ │ +129 { │ │ │ │ │ +130 factor[0] = 1.0; │ │ │ │ │ +131 for (unsigned int j = 0; j < i[0]; ++j) │ │ │ │ │ +132 factor[0] *= (kx[0]-j) / (i[0]-j); │ │ │ │ │ +133 i[3] = k - i[0] - i[1] - i[2]; │ │ │ │ │ +134 D kx3 = k - kx[0] - kx[1] - kx[2]; │ │ │ │ │ +135 factor[3] = 1.0; │ │ │ │ │ +136 for (unsigned int j = 0; j < i[3]; ++j) │ │ │ │ │ +137 factor[3] *= (kx3-j) / (i[3]-j); │ │ │ │ │ +138 out[n++] = factor[0] * factor[1] * factor[2] * factor[3]; │ │ │ │ │ +139 } │ │ │ │ │ +140 } │ │ │ │ │ +141 } │ │ │ │ │ +142 } │ │ │ │ │ +143 │ │ │ │ │ +149 void evaluateJacobian(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ +150 std::vector& out) const │ │ │ │ │ +151 { │ │ │ │ │ +152 out.resize(size()); │ │ │ │ │ +153 │ │ │ │ │ +154 // Specialization for k==0 │ │ │ │ │ +155 if (k==0) │ │ │ │ │ +156 { │ │ │ │ │ +157 std::fill(out[0][0].begin(), out[0][0].end(), 0); │ │ │ │ │ +158 return; │ │ │ │ │ +159 } │ │ │ │ │ +160 │ │ │ │ │ +161 // Specialization for k==1 │ │ │ │ │ +162 if (k==1) │ │ │ │ │ +163 { │ │ │ │ │ +164 std::fill(out[0][0].begin(), out[0][0].end(), -1); │ │ │ │ │ +165 │ │ │ │ │ +166 for (unsigned int i=0; i &alpha, scalar_t &p, │ │ │ │ │ -scalar_t &q) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:48 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_c_o_m_p_u_t_e │ │ │ │ │ -static int compute(const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, │ │ │ │ │ -scalar_t &q, std::integer_sequence< int, ints... > intS) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:55 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_c_o_m_p_u_t_e_I_n_t_e_g_r_a_l │ │ │ │ │ -static void computeIntegral(const Dune::MultiIndex< dim, scalar_t > &alpha, │ │ │ │ │ -scalar_t &p, scalar_t &q, int &ord) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:68 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static constexpr int dimension │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:45 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_I_n_t_e_g_r_a_l_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr Dune::GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:44 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:95 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_O_N_B_M_a_t_r_i_x │ │ │ │ │ -ONBMatrix(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:103 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_v_e_c___t │ │ │ │ │ -std::vector< scalar_t > vec_t │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:100 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_m_a_t___t │ │ │ │ │ -Dune::DynamicMatrix< scalar_t > mat_t │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:101 │ │ │ │ │ -_O_N_B_C_o_m_p_u_t_e_:_:_O_N_B_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ -void row(unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn orthonormalcompute.hh:139 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:571 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ -int z(int i) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ +170 return; │ │ │ │ │ +171 } │ │ │ │ │ +172 │ │ │ │ │ +173 auto lagrangeNode = [](unsigned int i) { return ((D)i)/k; }; │ │ │ │ │ +174 │ │ │ │ │ +175 // Specialization for dim==1 │ │ │ │ │ +176 if (dim==1) │ │ │ │ │ +177 { │ │ │ │ │ +178 for (unsigned int i=0; i<=k; i++) │ │ │ │ │ +179 { │ │ │ │ │ +180 // x_0 derivative │ │ │ │ │ +181 out[i][0][0] = 0.0; │ │ │ │ │ +182 R factor=1.0; │ │ │ │ │ +183 for (unsigned int a=0; a& order, │ │ │ │ │ +352 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +353 std::vector& out) const │ │ │ │ │ +354 { │ │ │ │ │ +355 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +356 │ │ │ │ │ +357 out.resize(size()); │ │ │ │ │ +358 │ │ │ │ │ +359 if (totalOrder == 0) { │ │ │ │ │ +360 evaluateFunction(in, out); │ │ │ │ │ +361 return; │ │ │ │ │ +362 } │ │ │ │ │ +363 │ │ │ │ │ +364 if (k==0) │ │ │ │ │ +365 { │ │ │ │ │ +366 out[0] = 0; │ │ │ │ │ +367 return; │ │ │ │ │ +368 } │ │ │ │ │ +369 │ │ │ │ │ +370 if (k==1) │ │ │ │ │ +371 { │ │ │ │ │ +372 if (totalOrder==1) │ │ │ │ │ +373 { │ │ │ │ │ +374 auto direction = std::find(order.begin(), order.end(), 1); │ │ │ │ │ +375 │ │ │ │ │ +376 out[0] = -1; │ │ │ │ │ +377 for (unsigned int i=0; i typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +393 { │ │ │ │ │ +394 if ( no < i) │ │ │ │ │ +395 return (x[0]-lagrangeNode(no))/(lagrangeNode(i)-lagrangeNode(no)); │ │ │ │ │ +396 if (no < i+j) │ │ │ │ │ +397 return (x[1]-lagrangeNode(no-i))/(lagrangeNode(j)-lagrangeNode(no-i)); │ │ │ │ │ +398 return (lagrangeNode(no+1)-x[0]-x[1])/(lagrangeNode(no+1)-lagrangeNode(i)- │ │ │ │ │ +lagrangeNode(j)); │ │ │ │ │ +399 }; │ │ │ │ │ +400 │ │ │ │ │ +401 // Helper method: Return the derivative of a single Lagrangian factor of │ │ │ │ │ +l_ij evaluated at x │ │ │ │ │ +402 // direction: Derive in x-direction if this is 0, otherwise derive in y │ │ │ │ │ +direction │ │ │ │ │ +403 auto lagrangianFactorDerivative = [&lagrangeNode] │ │ │ │ │ +404 (const int direction, const int no, const int i, const int j, const │ │ │ │ │ +typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e&) │ │ │ │ │ +405 -> typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +406 { │ │ │ │ │ +407 using T = typename _T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e; │ │ │ │ │ +408 if ( no < i) │ │ │ │ │ +409 return (direction == 0) ? T(1.0/(lagrangeNode(i)-lagrangeNode(no))) : T(0); │ │ │ │ │ +410 │ │ │ │ │ +411 if (no < i+j) │ │ │ │ │ +412 return (direction == 0) ? T(0) : T(1.0/(lagrangeNode(j)-lagrangeNode(no- │ │ │ │ │ +i))); │ │ │ │ │ +413 │ │ │ │ │ +414 return -1.0/(lagrangeNode(no+1)-lagrangeNode(i)-lagrangeNode(j)); │ │ │ │ │ +415 }; │ │ │ │ │ +416 │ │ │ │ │ +417 if (totalOrder==1) │ │ │ │ │ +418 { │ │ │ │ │ +419 int direction = std::find(order.begin(), order.end(), 1)-order.begin(); │ │ │ │ │ +420 │ │ │ │ │ +421 int n=0; │ │ │ │ │ +422 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ +423 { │ │ │ │ │ +424 for (unsigned int i=0; i<=k-j; i++, n++) │ │ │ │ │ +425 { │ │ │ │ │ +426 out[n] = 0.0; │ │ │ │ │ +427 for (unsigned int no1=0; no1 < k; no1++) │ │ │ │ │ +428 { │ │ │ │ │ +429 R factor = lagrangianFactorDerivative(direction, no1, i, j, in); │ │ │ │ │ +430 for (unsigned int no2=0; no2 < k; no2++) │ │ │ │ │ +431 if (no1 != no2) │ │ │ │ │ +432 factor *= lagrangianFactor(no2, i, j, in); │ │ │ │ │ +433 │ │ │ │ │ +434 out[n] += factor; │ │ │ │ │ +435 } │ │ │ │ │ +436 } │ │ │ │ │ +437 } │ │ │ │ │ +438 return; │ │ │ │ │ +439 } │ │ │ │ │ +440 │ │ │ │ │ +441 if (totalOrder==2) │ │ │ │ │ +442 { │ │ │ │ │ +443 std::array directions; │ │ │ │ │ +444 unsigned int counter = 0; │ │ │ │ │ +445 auto nonconstOrder = order; // need a copy that I can modify │ │ │ │ │ +446 for (int i=0; i<2; i++) │ │ │ │ │ +447 { │ │ │ │ │ +448 while (nonconstOrder[i]) │ │ │ │ │ +449 { │ │ │ │ │ +450 directions[counter++] = i; │ │ │ │ │ +451 nonconstOrder[i]--; │ │ │ │ │ +452 } │ │ │ │ │ +453 } │ │ │ │ │ +454 │ │ │ │ │ +455 //f = prod_{i} f_i -> dxa dxb f = sum_{i} {dxa f_i sum_{k \neq i} dxb f_k │ │ │ │ │ +prod_{l \neq k,i} f_l │ │ │ │ │ +456 int n=0; │ │ │ │ │ +457 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ +458 { │ │ │ │ │ +459 for (unsigned int i=0; i<=k-j; i++, n++) │ │ │ │ │ +460 { │ │ │ │ │ +461 R res = 0.0; │ │ │ │ │ +462 │ │ │ │ │ +463 for (unsigned int no1=0; no1 < k; no1++) │ │ │ │ │ +464 { │ │ │ │ │ +465 R factor1 = lagrangianFactorDerivative(directions[0], no1, i, j, in); │ │ │ │ │ +466 for (unsigned int no2=0; no2 < k; no2++) │ │ │ │ │ +467 { │ │ │ │ │ +468 if (no1 == no2) │ │ │ │ │ +469 continue; │ │ │ │ │ +470 R factor2 = factor1*lagrangianFactorDerivative(directions[1], no2, i, j, │ │ │ │ │ +in); │ │ │ │ │ +471 for (unsigned int no3=0; no3 < k; no3++) │ │ │ │ │ +472 { │ │ │ │ │ +473 if (no3 == no1 || no3 == no2) │ │ │ │ │ +474 continue; │ │ │ │ │ +475 factor2 *= lagrangianFactor(no3, i, j, in); │ │ │ │ │ +476 } │ │ │ │ │ +477 res += factor2; │ │ │ │ │ +478 } │ │ │ │ │ +479 } │ │ │ │ │ +480 out[n] = res; │ │ │ │ │ +481 } │ │ │ │ │ +482 } │ │ │ │ │ +483 │ │ │ │ │ +484 return; │ │ │ │ │ +485 } // totalOrder==2 │ │ │ │ │ +486 │ │ │ │ │ +487 } // dim==2 │ │ │ │ │ +488 │ │ │ │ │ +489 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +490 } │ │ │ │ │ +491 │ │ │ │ │ +493 static constexpr unsigned int order () │ │ │ │ │ +494 { │ │ │ │ │ +495 return k; │ │ │ │ │ +496 } │ │ │ │ │ +497 }; │ │ │ │ │ +498 │ │ │ │ │ +504 template │ │ │ │ │ +505 class LagrangeSimplexLocalCoefficients │ │ │ │ │ +506 { │ │ │ │ │ +507 public: │ │ │ │ │ +509 LagrangeSimplexLocalCoefficients () │ │ │ │ │ +510 : localKeys_(size()) │ │ │ │ │ +511 { │ │ │ │ │ +512 if (k==0) │ │ │ │ │ +513 { │ │ │ │ │ +514 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ +515 return; │ │ │ │ │ +516 } │ │ │ │ │ +517 │ │ │ │ │ +518 if (k==1) │ │ │ │ │ +519 { │ │ │ │ │ +520 for (std::size_t i=0; i vertexMap; │ │ │ │ │ +580 for (unsigned int i=0; i<=dim; i++) │ │ │ │ │ +581 vertexMap[i] = i; │ │ │ │ │ +582 generateLocalKeys(vertexMap); │ │ │ │ │ +583 return; │ │ │ │ │ +584 } │ │ │ │ │ +585 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ +implemented for k<=1 or dim<=3!"); │ │ │ │ │ +586 } │ │ │ │ │ +587 │ │ │ │ │ +594 LagrangeSimplexLocalCoefficients (const std::array │ │ │ │ │ +vertexMap) │ │ │ │ │ +595 : localKeys_(size()) │ │ │ │ │ +596 { │ │ │ │ │ +597 if (dim!=2 && dim!=3) │ │ │ │ │ +598 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ +implemented for dim==2 and dim==3!"); │ │ │ │ │ +599 │ │ │ │ │ +600 generateLocalKeys(vertexMap); │ │ │ │ │ +601 } │ │ │ │ │ +602 │ │ │ │ │ +603 │ │ │ │ │ +604 template │ │ │ │ │ +605 LagrangeSimplexLocalCoefficients(const VertexMap &vertexmap) │ │ │ │ │ +606 : localKeys_(size()) │ │ │ │ │ +607 { │ │ │ │ │ +608 if (dim!=2 && dim!=3) │ │ │ │ │ +609 DUNE_THROW(NotImplemented, "LagrangeSimplexLocalCoefficients only │ │ │ │ │ +implemented for dim==2 and dim==3!"); │ │ │ │ │ +610 │ │ │ │ │ +611 std::array vertexmap_array; │ │ │ │ │ +612 std::copy(vertexmap, vertexmap + dim + 1, vertexmap_array.begin()); │ │ │ │ │ +613 generateLocalKeys(vertexmap_array); │ │ │ │ │ +614 } │ │ │ │ │ +615 │ │ │ │ │ +617 static constexpr std::size_t size () │ │ │ │ │ +618 { │ │ │ │ │ +619 return binomial(k+dim,dim); │ │ │ │ │ +620 } │ │ │ │ │ +621 │ │ │ │ │ +623 const LocalKey& localKey (std::size_t i) const │ │ │ │ │ +624 { │ │ │ │ │ +625 return localKeys_[i]; │ │ │ │ │ +626 } │ │ │ │ │ +627 │ │ │ │ │ +628 private: │ │ │ │ │ +629 std::vector localKeys_; │ │ │ │ │ +630 │ │ │ │ │ +631 void generateLocalKeys(const std::array vertexMap) │ │ │ │ │ +632 { │ │ │ │ │ +633 if (k==0) │ │ │ │ │ +634 { │ │ │ │ │ +635 localKeys_[0] = LocalKey(0,0,0); │ │ │ │ │ +636 return; │ │ │ │ │ +637 } │ │ │ │ │ +638 │ │ │ │ │ +639 if (dim==2) │ │ │ │ │ +640 { │ │ │ │ │ +641 // Create default assignment │ │ │ │ │ +642 int n=0; │ │ │ │ │ +643 int c=0; │ │ │ │ │ +644 for (unsigned int j=0; j<=k; j++) │ │ │ │ │ +645 for (unsigned int i=0; i<=k-j; i++) │ │ │ │ │ +646 { │ │ │ │ │ +647 if (i==0 && j==0) │ │ │ │ │ +648 { │ │ │ │ │ +649 localKeys_[n++] = LocalKey(0,2,0); │ │ │ │ │ +650 continue; │ │ │ │ │ +651 } │ │ │ │ │ +652 if (i==k && j==0) │ │ │ │ │ +653 { │ │ │ │ │ +654 localKeys_[n++] = LocalKey(1,2,0); │ │ │ │ │ +655 continue; │ │ │ │ │ +656 } │ │ │ │ │ +657 if (i==0 && j==k) │ │ │ │ │ +658 { │ │ │ │ │ +659 localKeys_[n++] = LocalKey(2,2,0); │ │ │ │ │ +660 continue; │ │ │ │ │ +661 } │ │ │ │ │ +662 if (j==0) │ │ │ │ │ +663 { │ │ │ │ │ +664 localKeys_[n++] = LocalKey(0,1,i-1); │ │ │ │ │ +665 continue; │ │ │ │ │ +666 } │ │ │ │ │ +667 if (i==0) │ │ │ │ │ +668 { │ │ │ │ │ +669 localKeys_[n++] = LocalKey(1,1,j-1); │ │ │ │ │ +670 continue; │ │ │ │ │ +671 } │ │ │ │ │ +672 if (i+j==k) │ │ │ │ │ +673 { │ │ │ │ │ +674 localKeys_[n++] = LocalKey(2,1,j-1); │ │ │ │ │ +675 continue; │ │ │ │ │ +676 } │ │ │ │ │ +677 localKeys_[n++] = LocalKey(0,0,c++); │ │ │ │ │ +678 } │ │ │ │ │ +679 │ │ │ │ │ +680 // Flip edge orientations, if requested │ │ │ │ │ +681 bool flip[3]; │ │ │ │ │ +682 flip[0] = vertexMap[0] > vertexMap[1]; │ │ │ │ │ +683 flip[1] = vertexMap[0] > vertexMap[2]; │ │ │ │ │ +684 flip[2] = vertexMap[1] > vertexMap[2]; │ │ │ │ │ +685 for (std::size_t i=0; i │ │ │ │ │ +733 class LagrangeSimplexLocalInterpolation │ │ │ │ │ +734 { │ │ │ │ │ +735 static const int kdiv = (LocalBasis::order() == 0 ? 1 : LocalBasis::order │ │ │ │ │ +()); │ │ │ │ │ +736 public: │ │ │ │ │ +737 │ │ │ │ │ +745 template │ │ │ │ │ +746 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +747 { │ │ │ │ │ +748 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ +749 constexpr auto k = LocalBasis::order(); │ │ │ │ │ +750 using D = typename LocalBasis::Traits::DomainFieldType; │ │ │ │ │ +751 │ │ │ │ │ +752 typename LocalBasis::Traits::DomainType x; │ │ │ │ │ +753 │ │ │ │ │ +754 out.resize(LocalBasis::size()); │ │ │ │ │ +755 │ │ │ │ │ +756 // Specialization for zero-order case │ │ │ │ │ +757 if (k==0) │ │ │ │ │ +758 { │ │ │ │ │ +759 auto center = ReferenceElements::simplex().position(0,0); │ │ │ │ │ +760 out[0] = f(center); │ │ │ │ │ +761 return; │ │ │ │ │ +762 } │ │ │ │ │ +763 │ │ │ │ │ +764 // Specialization for first-order case │ │ │ │ │ +765 if (k==1) │ │ │ │ │ +766 { │ │ │ │ │ +767 // vertex 0 │ │ │ │ │ +768 std::fill(x.begin(), x.end(), 0); │ │ │ │ │ +769 out[0] = f(x); │ │ │ │ │ +770 │ │ │ │ │ +771 // remaining vertices │ │ │ │ │ +772 for (int i=0; i │ │ │ │ │ +_8_3_5 class _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +836 { │ │ │ │ │ +837 public: │ │ │ │ │ +_8_4_0 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_,_k_>, │ │ │ │ │ +841 Impl::LagrangeSimplexLocalCoefficients, │ │ │ │ │ +842 Impl::LagrangeSimplexLocalInterpolation > >; │ │ │ │ │ +843 │ │ │ │ │ +_8_4_5 _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() {} │ │ │ │ │ +846 │ │ │ │ │ +851 template │ │ │ │ │ +_8_5_2 _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t(const VertexMap& vertexmap) │ │ │ │ │ +853 : coefficients_(vertexmap) │ │ │ │ │ +854 {} │ │ │ │ │ +855 │ │ │ │ │ +_8_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +859 { │ │ │ │ │ +860 return basis_; │ │ │ │ │ +861 } │ │ │ │ │ +862 │ │ │ │ │ +_8_6_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +866 { │ │ │ │ │ +867 return coefficients_; │ │ │ │ │ +868 } │ │ │ │ │ +869 │ │ │ │ │ +_8_7_2 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +873 { │ │ │ │ │ +874 return interpolation_; │ │ │ │ │ +875 } │ │ │ │ │ +876 │ │ │ │ │ +_8_7_8 static constexpr std::size_t _s_i_z_e () │ │ │ │ │ +879 { │ │ │ │ │ +880 return Impl::LagrangeSimplexLocalBasis::size(); │ │ │ │ │ +881 } │ │ │ │ │ +882 │ │ │ │ │ +_8_8_5 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +886 { │ │ │ │ │ +887 return GeometryTypes::simplex(d); │ │ │ │ │ +888 } │ │ │ │ │ +889 │ │ │ │ │ +890 private: │ │ │ │ │ +891 Impl::LagrangeSimplexLocalBasis basis_; │ │ │ │ │ +892 Impl::LagrangeSimplexLocalCoefficients coefficients_; │ │ │ │ │ +893 Impl::LagrangeSimplexLocalInterpolation > interpolation_; │ │ │ │ │ +894 }; │ │ │ │ │ +895 │ │ │ │ │ +896} // namespace Dune │ │ │ │ │ +897 │ │ │ │ │ +898#endif // DUNE_LOCALFUNCTIONS_LAGRANGE_LAGRANGESIMPLEX_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +R RangeType │ │ │ │ │ +range type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Lagrange finite element for simplices with arbitrary compile-time dimension and │ │ │ │ │ +polynomial order. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:836 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Returns object that evaluates degrees of freedom. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:872 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:858 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +LagrangeSimplexLocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:845 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() │ │ │ │ │ +The number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:878 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +LagrangeSimplexLocalFiniteElement(const VertexMap &vertexmap) │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:852 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:865 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The reference element that the local finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn lagrangesimplex.hh:885 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refined.hh File Reference │ │ │ │ +dune-localfunctions: emptypoints.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,30 +65,42 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refined.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
emptypoints.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Convenience header that includes all available LocalFiniteElements based on uniform element refinement. │ │ │ │ -More...

│ │ │ │ -
#include <dune/localfunctions/refined/refinedp0.hh>
│ │ │ │ -#include <dune/localfunctions/refined/refinedp1.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available LocalFiniteElements based on uniform element refinement.

│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::LagrangePoint< F, dim >
 
class  Dune::EmptyPointSet< F, dim >
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,17 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -refined.hh File Reference │ │ │ │ │ -Convenience header that includes all available LocalFiniteElements based on │ │ │ │ │ -uniform element refinement. _M_o_r_e_._._. │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_._h_h> │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +emptypoints.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available LocalFiniteElements based on │ │ │ │ │ -uniform element refinement. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00461_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: refined.hh Source File │ │ │ │ +dune-localfunctions: emptypoints.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,29 +70,185 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
refined.hh
│ │ │ │ +
emptypoints.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Piecewise P0 finite element.
│ │ │ │ +
5#ifndef DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
6#define DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ + │ │ │ │ +
12
│ │ │ │ +
13namespace Dune
│ │ │ │ +
14{
│ │ │ │ +
15
│ │ │ │ +
16 template< class F, unsigned int dim >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
18 {
│ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21 template< class, class >
│ │ │ │ + │ │ │ │ +
23
│ │ │ │ +
24 public:
│ │ │ │ +
25 static const int dimension = dim;
│ │ │ │ +
26
│ │ │ │ +
27 typedef F Field;
│ │ │ │ +
28
│ │ │ │ +
29 typedef FieldVector< Field, dimension > Vector;
│ │ │ │ +
30
│ │ │ │ +
│ │ │ │ +
31 const Vector &point () const
│ │ │ │ +
32 {
│ │ │ │ +
33 return point_;
│ │ │ │ +
34 }
│ │ │ │ +
│ │ │ │ +
35
│ │ │ │ +
│ │ │ │ +
36 const LocalKey &localKey () const
│ │ │ │ +
37 {
│ │ │ │ +
38 return localKey_;
│ │ │ │ +
39 }
│ │ │ │ +
│ │ │ │ +
40
│ │ │ │ +
│ │ │ │ +
41 const Field weight () const
│ │ │ │ +
42 {
│ │ │ │ +
43 return weight_;
│ │ │ │ +
44 }
│ │ │ │ +
│ │ │ │ +
45
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
49 };
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
51 // EmptyPointSet
│ │ │ │ +
52 // --------------
│ │ │ │ +
53
│ │ │ │ +
54 template< class F, unsigned int dim >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {
│ │ │ │ + │ │ │ │ +
58
│ │ │ │ +
59 public:
│ │ │ │ +
60 typedef F Field;
│ │ │ │ +
61
│ │ │ │ +
62 static const unsigned int dimension = dim;
│ │ │ │ +
63
│ │ │ │ + │ │ │ │ +
65
│ │ │ │ +
66 typedef typename std::vector< LagrangePoint >::const_iterator iterator;
│ │ │ │ +
67
│ │ │ │ +
68 protected:
│ │ │ │ +
│ │ │ │ +
69 EmptyPointSet ( const std::size_t order )
│ │ │ │ +
70 : order_( order )
│ │ │ │ +
71 {}
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
73 public:
│ │ │ │ +
│ │ │ │ +
74 const LagrangePoint &operator[] ( const unsigned int i ) const
│ │ │ │ +
75 {
│ │ │ │ +
76 assert( i < size() );
│ │ │ │ +
77 return points_[ i ];
│ │ │ │ +
78 }
│ │ │ │ +
│ │ │ │ +
79
│ │ │ │ +
│ │ │ │ +
80 iterator begin () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return points_.begin();
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
│ │ │ │ +
85 iterator end () const
│ │ │ │ +
86 {
│ │ │ │ +
87 return points_.end();
│ │ │ │ +
88 }
│ │ │ │ +
│ │ │ │ +
89
│ │ │ │ +
│ │ │ │ +
90 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ +
91 {
│ │ │ │ +
92 return (*this)[ i ].localKey();
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
│ │ │ │ +
95 std::size_t order () const
│ │ │ │ +
96 {
│ │ │ │ +
97 return order_;
│ │ │ │ +
98 }
│ │ │ │ +
│ │ │ │ +
99
│ │ │ │ +
│ │ │ │ +
100 std::size_t size () const
│ │ │ │ +
101 {
│ │ │ │ +
102 return points_.size();
│ │ │ │ +
103 }
│ │ │ │ +
│ │ │ │ +
104
│ │ │ │ +
105 protected:
│ │ │ │ +
106 std::size_t order_;
│ │ │ │ +
107 std::vector< LagrangePoint > points_;
│ │ │ │ +
108 };
│ │ │ │ +
│ │ │ │ +
109
│ │ │ │ +
110}
│ │ │ │ +
111
│ │ │ │ +
112#endif // DUNE_LAGRANGE_EMPTYPOINTS_HH
│ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition emptypoints.hh:18
│ │ │ │ +
const LocalKey & localKey() const
Definition emptypoints.hh:36
│ │ │ │ +
Field weight_
Definition emptypoints.hh:48
│ │ │ │ +
static const int dimension
Definition emptypoints.hh:25
│ │ │ │ +
friend class LagrangePointSetImpl
Definition emptypoints.hh:22
│ │ │ │ +
Vector point_
Definition emptypoints.hh:46
│ │ │ │ +
const Field weight() const
Definition emptypoints.hh:41
│ │ │ │ +
FieldVector< Field, dimension > Vector
Definition emptypoints.hh:29
│ │ │ │ +
F Field
Definition emptypoints.hh:27
│ │ │ │ +
const Vector & point() const
Definition emptypoints.hh:31
│ │ │ │ +
LocalKey localKey_
Definition emptypoints.hh:47
│ │ │ │ +
Definition emptypoints.hh:56
│ │ │ │ +
std::size_t order() const
Definition emptypoints.hh:95
│ │ │ │ +
std::size_t order_
Definition emptypoints.hh:106
│ │ │ │ +
static const unsigned int dimension
Definition emptypoints.hh:62
│ │ │ │ +
EmptyPointSet(const std::size_t order)
Definition emptypoints.hh:69
│ │ │ │ +
const LagrangePoint & operator[](const unsigned int i) const
Definition emptypoints.hh:74
│ │ │ │ +
std::size_t size() const
Definition emptypoints.hh:100
│ │ │ │ +
Dune::LagrangePoint< Field, dimension > LagrangePoint
Definition emptypoints.hh:64
│ │ │ │ +
const LocalKey & localKey(const unsigned int i) const
Definition emptypoints.hh:90
│ │ │ │ +
iterator begin() const
Definition emptypoints.hh:80
│ │ │ │ +
iterator end() const
Definition emptypoints.hh:85
│ │ │ │ +
F Field
Definition emptypoints.hh:60
│ │ │ │ +
std::vector< LagrangePoint > points_
Definition emptypoints.hh:107
│ │ │ │ +
std::vector< LagrangePoint >::const_iterator iterator
Definition emptypoints.hh:66
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +1,203 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -refined.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +emptypoints.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_._h_h> │ │ │ │ │ -_r_e_f_i_n_e_d_p_1_._h_h │ │ │ │ │ -_r_e_f_i_n_e_d_p_0_._h_h │ │ │ │ │ -Piecewise P0 finite element. │ │ │ │ │ +5#ifndef DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ +6#define DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13namespace _D_u_n_e │ │ │ │ │ +14{ │ │ │ │ │ +15 │ │ │ │ │ +16 template< class F, unsigned int dim > │ │ │ │ │ +_1_7 class _L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ +18 { │ │ │ │ │ +19 typedef _L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_,_ _d_i_m_ _> _T_h_i_s; │ │ │ │ │ +20 │ │ │ │ │ +21 template< class, class > │ │ │ │ │ +_2_2 friend class _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_I_m_p_l; │ │ │ │ │ +23 │ │ │ │ │ +24 public: │ │ │ │ │ +_2_5 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +26 │ │ │ │ │ +_2_7 typedef F _F_i_e_l_d; │ │ │ │ │ +28 │ │ │ │ │ +_2_9 typedef FieldVector< Field, dimension > _V_e_c_t_o_r; │ │ │ │ │ +30 │ │ │ │ │ +_3_1 const _V_e_c_t_o_r &_p_o_i_n_t () const │ │ │ │ │ +32 { │ │ │ │ │ +33 return _p_o_i_n_t__; │ │ │ │ │ +34 } │ │ │ │ │ +35 │ │ │ │ │ +_3_6 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y () const │ │ │ │ │ +37 { │ │ │ │ │ +38 return _l_o_c_a_l_K_e_y__; │ │ │ │ │ +39 } │ │ │ │ │ +40 │ │ │ │ │ +_4_1 const _F_i_e_l_d _w_e_i_g_h_t () const │ │ │ │ │ +42 { │ │ │ │ │ +43 return _w_e_i_g_h_t__; │ │ │ │ │ +44 } │ │ │ │ │ +45 │ │ │ │ │ +_4_6 _V_e_c_t_o_r _p_o_i_n_t__ = {}; │ │ │ │ │ +_4_7 _L_o_c_a_l_K_e_y _l_o_c_a_l_K_e_y__ = {}; │ │ │ │ │ +_4_8 _F_i_e_l_d _w_e_i_g_h_t__ = {}; │ │ │ │ │ +49 }; │ │ │ │ │ +50 │ │ │ │ │ +51 // EmptyPointSet │ │ │ │ │ +52 // -------------- │ │ │ │ │ +53 │ │ │ │ │ +54 template< class F, unsigned int dim > │ │ │ │ │ +_5_5 class _E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ +56 { │ │ │ │ │ +57 typedef _E_m_p_t_y_P_o_i_n_t_S_e_t_<_ _F_,_ _d_i_m_ _> _T_h_i_s; │ │ │ │ │ +58 │ │ │ │ │ +59 public: │ │ │ │ │ +_6_0 typedef F _F_i_e_l_d; │ │ │ │ │ +61 │ │ │ │ │ +_6_2 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +63 │ │ │ │ │ +_6_4 typedef _D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_<_ _F_i_e_l_d_,_ _d_i_m_e_n_s_i_o_n_ _> _L_a_g_r_a_n_g_e_P_o_i_n_t; │ │ │ │ │ +65 │ │ │ │ │ +_6_6 typedef typename std::vector< LagrangePoint >::const_iterator _i_t_e_r_a_t_o_r; │ │ │ │ │ +67 │ │ │ │ │ +68 protected: │ │ │ │ │ +_6_9 _E_m_p_t_y_P_o_i_n_t_S_e_t ( const std::size_t _o_r_d_e_r ) │ │ │ │ │ +70 : _o_r_d_e_r__( _o_r_d_e_r ) │ │ │ │ │ +71 {} │ │ │ │ │ +72 │ │ │ │ │ +73 public: │ │ │ │ │ +_7_4 const _L_a_g_r_a_n_g_e_P_o_i_n_t &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ +75 { │ │ │ │ │ +76 assert( i < _s_i_z_e() ); │ │ │ │ │ +77 return _p_o_i_n_t_s__[ i ]; │ │ │ │ │ +78 } │ │ │ │ │ +79 │ │ │ │ │ +_8_0 _i_t_e_r_a_t_o_r _b_e_g_i_n () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return _p_o_i_n_t_s__.begin(); │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_5 _i_t_e_r_a_t_o_r _e_n_d () const │ │ │ │ │ +86 { │ │ │ │ │ +87 return _p_o_i_n_t_s__.end(); │ │ │ │ │ +88 } │ │ │ │ │ +89 │ │ │ │ │ +_9_0 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ +91 { │ │ │ │ │ +92 return (*this)[ i ].localKey(); │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +_9_5 std::size_t _o_r_d_e_r () const │ │ │ │ │ +96 { │ │ │ │ │ +97 return _o_r_d_e_r__; │ │ │ │ │ +98 } │ │ │ │ │ +99 │ │ │ │ │ +_1_0_0 std::size_t _s_i_z_e () const │ │ │ │ │ +101 { │ │ │ │ │ +102 return _p_o_i_n_t_s__.size(); │ │ │ │ │ +103 } │ │ │ │ │ +104 │ │ │ │ │ +105 protected: │ │ │ │ │ +_1_0_6 std::size_t _o_r_d_e_r__; │ │ │ │ │ +_1_0_7 std::vector< LagrangePoint > _p_o_i_n_t_s__; │ │ │ │ │ +108 }; │ │ │ │ │ +109 │ │ │ │ │ +110} │ │ │ │ │ +111 │ │ │ │ │ +112#endif // DUNE_LAGRANGE_EMPTYPOINTS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t__ │ │ │ │ │ +Field weight_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const int dimension │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_I_m_p_l │ │ │ │ │ +friend class LagrangePointSetImpl │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t__ │ │ │ │ │ +Vector point_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_w_e_i_g_h_t │ │ │ │ │ +const Field weight() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_V_e_c_t_o_r │ │ │ │ │ +FieldVector< Field, dimension > Vector │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_p_o_i_n_t │ │ │ │ │ +const Vector & point() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_:_:_l_o_c_a_l_K_e_y__ │ │ │ │ │ +LocalKey localKey_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_r_d_e_r__ │ │ │ │ │ +std::size_t order_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:106 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t │ │ │ │ │ +EmptyPointSet(const std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ +const LagrangePoint & operator[](const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:100 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t │ │ │ │ │ +Dune::LagrangePoint< Field, dimension > LagrangePoint │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:64 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_b_e_g_i_n │ │ │ │ │ +iterator begin() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_e_n_d │ │ │ │ │ +iterator end() const │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_p_o_i_n_t_s__ │ │ │ │ │ +std::vector< LagrangePoint > points_ │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_E_m_p_t_y_P_o_i_n_t_S_e_t_:_:_i_t_e_r_a_t_o_r │ │ │ │ │ +std::vector< LagrangePoint >::const_iterator iterator │ │ │ │ │ +DDeeffiinniittiioonn emptypoints.hh:66 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrange.hh File Reference │ │ │ │ +dune-localfunctions: pk1d.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,54 +65,48 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
lagrange.hh File Reference
│ │ │ │ +
pk1d.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Convenience header that includes all implementations of Lagrange finite elements. │ │ │ │ -More...

│ │ │ │ -
#include <dune/localfunctions/utility/localfiniteelement.hh>
│ │ │ │ -#include <dune/localfunctions/utility/dglocalcoefficients.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecoefficients.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/interpolation.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangebasis.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecube.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangepyramid.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/pq22d.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LagrangeLocalFiniteElement< LP, dimDomain, D, R, SF, CF >
 Lagrange local finite elements for a given set of interpolation points. More...
class  Dune::Pk1DFiniteElement< Geometry, RF, k >
 Langrange finite element of arbitrary order on triangles. More...
 
struct  Dune::Pk1DFiniteElement< Geometry, RF, k >::Traits
 
struct  Dune::Pk1DFiniteElementFactory< Geometry, RF, k >
 Factory for Pk1DFiniteElement objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all implementations of Lagrange finite elements.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -lagrange.hh File Reference │ │ │ │ │ -Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ -elements. _M_o_r_e_._._. │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ +pk1d.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_q_2_2_d_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ -  Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ +  Langrange finite element of arbitrary order on triangles. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_<_ _G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_ _> │ │ │ │ │ +  Factory for _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all implementations of Lagrange finite │ │ │ │ │ -elements. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00464_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lagrange.hh Source File │ │ │ │ +dune-localfunctions: pk1d.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,90 +70,144 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrange.hh
│ │ │ │ +
pk1d.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ +
5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_PK1DLOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
12// Headers for Lagrange elements with run-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/geometry/type.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
15
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │
19
│ │ │ │ -
20// Headers for Lagrange elements with compile-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
27
│ │ │ │ -
28namespace Dune
│ │ │ │ -
29{
│ │ │ │ -
59 template< template <class,unsigned int> class LP,
│ │ │ │ -
60 unsigned int dimDomain, class D, class R,
│ │ │ │ -
61 class SF=R, class CF=SF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
63 : public GenericLocalFiniteElement< LagrangeBasisFactory< LP, dimDomain, SF, CF >,
│ │ │ │ -
64 LagrangeCoefficientsFactory<LP, dimDomain, SF >,
│ │ │ │ -
65 LagrangeInterpolationFactory< LP, dimDomain, SF > >
│ │ │ │ -
66 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
70 public:
│ │ │ │ -
71 typedef typename Base::Traits Traits;
│ │ │ │ -
72
│ │ │ │ -
│ │ │ │ -
75 LagrangeLocalFiniteElement ( const GeometryType &gt, unsigned int order )
│ │ │ │ -
76 : Base( gt, order )
│ │ │ │ -
77 {}
│ │ │ │ -
│ │ │ │ -
78 };
│ │ │ │ -
│ │ │ │ -
79}
│ │ │ │ -
80
│ │ │ │ -
81#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
21
│ │ │ │ +
28 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 typedef typename Geometry::ctype DF;
│ │ │ │ +
31 typedef Impl::LagrangeSimplexLocalBasis<DF,RF,1,k> LocalBasis;
│ │ │ │ +
32 typedef Impl::LagrangeSimplexLocalInterpolation<LocalBasis> LocalInterpolation;
│ │ │ │ +
33
│ │ │ │ +
34 public:
│ │ │ │ +
│ │ │ │ +
38 struct Traits {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
41 LocalInterpolation,
│ │ │ │ +
42 typename Basis::Traits
│ │ │ │ + │ │ │ │ +
44 typedef Impl::LagrangeSimplexLocalCoefficients<1,k> Coefficients;
│ │ │ │ +
45 };
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
47 private:
│ │ │ │ +
48 static const GeometryType gt;
│ │ │ │ +
49 static const LocalBasis localBasis;
│ │ │ │ +
50 static const LocalInterpolation localInterpolation;
│ │ │ │ +
51
│ │ │ │ +
52 typename Traits::Basis basis_;
│ │ │ │ +
53 typename Traits::Interpolation interpolation_;
│ │ │ │ +
54 typename Traits::Coefficients coefficients_;
│ │ │ │ +
55
│ │ │ │ +
56 public:
│ │ │ │ +
58
│ │ │ │ +
71 template<class VertexOrder>
│ │ │ │ +
│ │ │ │ +
72 Pk1DFiniteElement(const Geometry &geometry,
│ │ │ │ +
73 const VertexOrder& vertexOrder) :
│ │ │ │ +
74 basis_(localBasis, geometry), interpolation_(localInterpolation),
│ │ │ │ +
75 coefficients_(vertexOrder.begin(0, 0))
│ │ │ │ +
76 { }
│ │ │ │ +
│ │ │ │ +
77
│ │ │ │ +
78 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │ +
│ │ │ │ +
79 const typename Traits::Interpolation& interpolation() const
│ │ │ │ +
80 { return interpolation_; }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
81 const typename Traits::Coefficients& coefficients() const
│ │ │ │ +
82 { return coefficients_; }
│ │ │ │ +
│ │ │ │ +
83 const GeometryType &type() const { return gt; }
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
87 const GeometryType
│ │ │ │ +
88 Pk1DFiniteElement<Geometry, RF, k>::gt(GeometryTypes::simplex(2));
│ │ │ │ +
89
│ │ │ │ +
90 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
91 const typename Pk1DFiniteElement<Geometry, RF, k>::LocalBasis
│ │ │ │ +
92 Pk1DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
│ │ │ │ +
93
│ │ │ │ +
94 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
95 const typename Pk1DFiniteElement<Geometry, RF, k>::LocalInterpolation
│ │ │ │ +
96 Pk1DFiniteElement<Geometry, RF, k>::localInterpolation =
│ │ │ │ +
97 LocalInterpolation();
│ │ │ │ +
98
│ │ │ │ +
100
│ │ │ │ +
110 template<class Geometry, class RF, std::size_t k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
113
│ │ │ │ +
115
│ │ │ │ +
129 template<class VertexOrder>
│ │ │ │ +
│ │ │ │ +
130 const FiniteElement make(const Geometry& geometry,
│ │ │ │ +
131 const VertexOrder& vertexOrder)
│ │ │ │ +
132 { return FiniteElement(geometry, vertexOrder); }
│ │ │ │ +
│ │ │ │ +
133 };
│ │ │ │ +
│ │ │ │ +
134}
│ │ │ │ +
135
│ │ │ │ +
136#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
Lagrange local finite elements for a given set of interpolation points.
Definition lagrange.hh:66
│ │ │ │ -
LagrangeLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition lagrange.hh:75
│ │ │ │ -
Base::Traits Traits
Definition lagrange.hh:71
│ │ │ │ -
Definition lagrange/interpolation.hh:89
│ │ │ │ -
Definition lagrangecoefficients.hh:23
│ │ │ │ -
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ - │ │ │ │ - │ │ │ │ +
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ +
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ +
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ +
Langrange finite element of arbitrary order on triangles.
Definition pk1d.hh:29
│ │ │ │ +
Pk1DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder)
construct a Pk1DFiniteElement
Definition pk1d.hh:72
│ │ │ │ +
const Traits::Basis & basis() const
Definition pk1d.hh:78
│ │ │ │ +
const GeometryType & type() const
Definition pk1d.hh:83
│ │ │ │ +
const Traits::Coefficients & coefficients() const
Definition pk1d.hh:81
│ │ │ │ +
const Traits::Interpolation & interpolation() const
Definition pk1d.hh:79
│ │ │ │ +
Definition pk1d.hh:38
│ │ │ │ +
ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis
Definition pk1d.hh:39
│ │ │ │ +
LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > Interpolation
Definition pk1d.hh:43
│ │ │ │ +
Impl::LagrangeSimplexLocalCoefficients< 1, k > Coefficients
Definition pk1d.hh:44
│ │ │ │ +
Factory for Pk1DFiniteElement objects.
Definition pk1d.hh:111
│ │ │ │ +
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct Pk1DFiniteElementFactory
Definition pk1d.hh:130
│ │ │ │ +
Pk1DFiniteElement< Geometry, RF, k > FiniteElement
Definition pk1d.hh:112
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,92 +1,158 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -lagrange.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +pk1d.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ +5#ifndef DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_PK1DLOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -12// Headers for Lagrange elements with run-time order │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ 15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h> │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ 19 │ │ │ │ │ -20// Headers for Lagrange elements with compile-time order │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_u_b_e_._h_h> │ │ │ │ │ -22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -23#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -24#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -25#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ -26#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_q_2_2_d_._h_h> │ │ │ │ │ -27 │ │ │ │ │ -28namespace _D_u_n_e │ │ │ │ │ -29{ │ │ │ │ │ -59 template< template class LP, │ │ │ │ │ -60 unsigned int dimDomain, class D, class R, │ │ │ │ │ -61 class SF=R, class CF=SF > │ │ │ │ │ -_6_2 class _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -63 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< LagrangeBasisFactory< LP, dimDomain, SF, │ │ │ │ │ -CF >, │ │ │ │ │ -64 LagrangeCoefficientsFactory, │ │ │ │ │ -65 LagrangeInterpolationFactory< LP, dimDomain, SF > > │ │ │ │ │ -66 { │ │ │ │ │ -67 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _L_a_g_r_a_n_g_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ -_C_F_ _>, │ │ │ │ │ -68 _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_ _>, │ │ │ │ │ -69 _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_D_o_m_a_i_n_,_ _S_F_ _> > _B_a_s_e; │ │ │ │ │ -70 public: │ │ │ │ │ -_7_1 typedef typename _B_a_s_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ -72 │ │ │ │ │ -_7_5 _L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, unsigned int order ) │ │ │ │ │ -76 : _B_a_s_e( gt, order ) │ │ │ │ │ -77 {} │ │ │ │ │ -78 }; │ │ │ │ │ -79} │ │ │ │ │ -80 │ │ │ │ │ -81#endif // #ifndef DUNE_LOCALFUNCTIONS_LAGRANGE_HH │ │ │ │ │ +21 │ │ │ │ │ +28 template │ │ │ │ │ +_2_9 class _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t { │ │ │ │ │ +30 typedef typename Geometry::ctype DF; │ │ │ │ │ +31 typedef Impl::LagrangeSimplexLocalBasis LocalBasis; │ │ │ │ │ +32 typedef Impl::LagrangeSimplexLocalInterpolation │ │ │ │ │ +LocalInterpolation; │ │ │ │ │ +33 │ │ │ │ │ +34 public: │ │ │ │ │ +_3_8 struct _T_r_a_i_t_s { │ │ │ │ │ +_3_9 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _B_a_s_i_s; │ │ │ │ │ +40 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r< │ │ │ │ │ +41 LocalInterpolation, │ │ │ │ │ +42 typename _B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +_4_3 > _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_4_4 typedef Impl::LagrangeSimplexLocalCoefficients<1,k> _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +45 }; │ │ │ │ │ +46 │ │ │ │ │ +47 private: │ │ │ │ │ +48 static const GeometryType gt; │ │ │ │ │ +49 static const LocalBasis localBasis; │ │ │ │ │ +50 static const LocalInterpolation localInterpolation; │ │ │ │ │ +51 │ │ │ │ │ +52 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ +53 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +54 typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s coefficients_; │ │ │ │ │ +55 │ │ │ │ │ +56 public: │ │ │ │ │ +58 │ │ │ │ │ +71 template │ │ │ │ │ +_7_2 _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t(const Geometry &geometry, │ │ │ │ │ +73 const VertexOrder& vertexOrder) : │ │ │ │ │ +74 basis_(localBasis, geometry), interpolation_(localInterpolation), │ │ │ │ │ +75 coefficients_(vertexOrder.begin(0, 0)) │ │ │ │ │ +76 { } │ │ │ │ │ +77 │ │ │ │ │ +_7_8 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ +_7_9 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +80 { return interpolation_; } │ │ │ │ │ +_8_1 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +82 { return coefficients_; } │ │ │ │ │ +_8_3 const GeometryType &_t_y_p_e() const { return gt; } │ │ │ │ │ +84 }; │ │ │ │ │ +85 │ │ │ │ │ +86 template │ │ │ │ │ +87 const GeometryType │ │ │ │ │ +88 Pk1DFiniteElement::gt(GeometryTypes::simplex(2)); │ │ │ │ │ +89 │ │ │ │ │ +90 template │ │ │ │ │ +91 const typename Pk1DFiniteElement::LocalBasis │ │ │ │ │ +92 Pk1DFiniteElement::localBasis = LocalBasis(); │ │ │ │ │ +93 │ │ │ │ │ +94 template │ │ │ │ │ +95 const typename Pk1DFiniteElement::LocalInterpolation │ │ │ │ │ +96 Pk1DFiniteElement::localInterpolation = │ │ │ │ │ +97 LocalInterpolation(); │ │ │ │ │ +98 │ │ │ │ │ +100 │ │ │ │ │ +110 template │ │ │ │ │ +_1_1_1 struct _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y { │ │ │ │ │ +_1_1_2 typedef _P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_<_G_e_o_m_e_t_r_y_,_ _R_F_,_ _k_> _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +113 │ │ │ │ │ +115 │ │ │ │ │ +129 template │ │ │ │ │ +_1_3_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry, │ │ │ │ │ +131 const VertexOrder& vertexOrder) │ │ │ │ │ +132 { return _F_i_n_i_t_e_E_l_e_m_e_n_t(geometry, vertexOrder); } │ │ │ │ │ +133 }; │ │ │ │ │ +134} │ │ │ │ │ +135 │ │ │ │ │ +136#endif │ │ │ │ │ _l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_p_q_2_2_d_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_u_b_e_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ -_p_0_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_b_a_s_i_s_._h_h │ │ │ │ │ -_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Lagrange local finite elements for a given set of interpolation points. │ │ │ │ │ -DDeeffiinniittiioonn lagrange.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -LagrangeLocalFiniteElement(const GeometryType >, unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn lagrange.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -Base::Traits Traits │ │ │ │ │ -DDeeffiinniittiioonn lagrange.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -A LocalFiniteElement implementation based on three TopologyFactories providing │ │ │ │ │ -the LocalBasis,... │ │ │ │ │ -DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:25 │ │ │ │ │ -_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ +Traits class for local-to-global basis adaptors. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local basis into a global basis. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +Convert a local interpolation into a global interpolation. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Langrange finite element of arbitrary order on triangles. │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Pk1DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder) │ │ │ │ │ +construct a Pk1DFiniteElement │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:72 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_b_a_s_i_s │ │ │ │ │ +const Traits::Basis & basis() const │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +const GeometryType & type() const │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::Coefficients & coefficients() const │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:81 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::Interpolation & interpolation() const │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > │ │ │ │ │ +Interpolation │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Impl::LagrangeSimplexLocalCoefficients< 1, k > Coefficients │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y │ │ │ │ │ +Factory for Pk1DFiniteElement objects. │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &geometry, const VertexOrder │ │ │ │ │ +&vertexOrder) │ │ │ │ │ +construct Pk1DFiniteElementFactory │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:130 │ │ │ │ │ +_D_u_n_e_:_:_P_k_1_D_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Pk1DFiniteElement< Geometry, RF, k > FiniteElement │ │ │ │ │ +DDeeffiinniittiioonn pk1d.hh:112 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchical.hh File Reference │ │ │ │ +dune-localfunctions: nedelec1stkindcube.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchical.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
nedelec1stkindcube.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Convenience header that includes all available hierarchical LocalFiniteElements. │ │ │ │ -More...

│ │ │ │ -
#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>
│ │ │ │ -#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble.hh>
│ │ │ │ -#include <dune/localfunctions/hierarchical/hierarchicalprismp2.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ -

Detailed Description

│ │ │ │ -

Convenience header that includes all available hierarchical LocalFiniteElements.

│ │ │ │ -
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::Nedelec1stKindCubeLocalFiniteElement< D, R, dim, k >
 Nédélec elements of the first kind for cube elements. More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -us-ascii │ │ │ │ │ +utf-8 │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,18 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -hierarchical.hh File Reference │ │ │ │ │ -Convenience header that includes all available hierarchical │ │ │ │ │ -LocalFiniteElements. _M_o_r_e_._._. │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h> │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +nedelec1stkindcube.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Convenience header that includes all available hierarchical │ │ │ │ │ -LocalFiniteElements. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ +  Nédélec elements of the first kind for cube elements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00467_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchical.hh Source File │ │ │ │ +dune-localfunctions: nedelec1stkindcube.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,31 +70,518 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchical.hh
│ │ │ │ +
nedelec1stkindcube.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/math.hh>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
15#include <dune/geometry/type.hh>
│ │ │ │ +
16
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
20
│ │ │ │ +
21namespace Dune
│ │ │ │ +
22{
│ │ │ │ +
23namespace Impl
│ │ │ │ +
24{
│ │ │ │ +
37 template<class D, class R, int dim, int k>
│ │ │ │ +
38 class Nedelec1stKindCubeLocalBasis
│ │ │ │ +
39 {
│ │ │ │ +
40 // Number of edges of the reference cube
│ │ │ │ +
41 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim;
│ │ │ │ +
42
│ │ │ │ +
43 public:
│ │ │ │ +
44 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,
│ │ │ │ +
45 R,dim,FieldVector<R,dim>,
│ │ │ │ +
46 FieldMatrix<R,dim,dim> >;
│ │ │ │ +
47
│ │ │ │ +
54 Nedelec1stKindCubeLocalBasis()
│ │ │ │ +
55 {
│ │ │ │ +
56 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0);
│ │ │ │ +
57 }
│ │ │ │ +
58
│ │ │ │ +
61 Nedelec1stKindCubeLocalBasis(std::bitset<numberOfEdges> edgeOrientation)
│ │ │ │ +
62 : Nedelec1stKindCubeLocalBasis()
│ │ │ │ +
63 {
│ │ │ │ +
64 for (std::size_t i=0; i<edgeOrientation_.size(); i++)
│ │ │ │ +
65 edgeOrientation_[i] *= edgeOrientation[i] ? -1.0 : 1.0;
│ │ │ │ +
66 }
│ │ │ │ +
67
│ │ │ │ +
69 static constexpr unsigned int size()
│ │ │ │ +
70 {
│ │ │ │ +
71 static_assert(dim==2 || dim==3, "Nedelec shape functions are implemented only for 2d and 3d cubes.");
│ │ │ │ +
72 if (dim==2)
│ │ │ │ +
73 return 2*k * (k+1);
│ │ │ │ +
74 if (dim==3)
│ │ │ │ +
75 return 3*k * (k+1) * (k+1);
│ │ │ │ +
76 }
│ │ │ │ +
77
│ │ │ │ +
83 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
84 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
85 {
│ │ │ │ +
86 static_assert(k==1, "Evaluating Nédélec shape functions is implemented only for first order.");
│ │ │ │ +
87 out.resize(size());
│ │ │ │ +
88
│ │ │ │ +
89 if (dim==2)
│ │ │ │ +
90 {
│ │ │ │ +
91 // First-order Nédélec shape functions on a square are of the form
│ │ │ │ +
92 //
│ │ │ │ +
93 // (a, b)^T + (c y, d x)^T, a, b, c, d \in R
│ │ │ │ +
94 //
│ │ │ │ +
95 // The following coefficients create the four basis vectors
│ │ │ │ +
96 // that are dual to the edge degrees of freedom:
│ │ │ │ +
97 //
│ │ │ │ +
98 // a[0] = 0 b[0] = 1 c[0] = 0 d[0] = -1
│ │ │ │ +
99 // a[1] = 0 b[1] = 0 c[1] = 0 d[1] = 1
│ │ │ │ +
100 // a[2] = 1 b[2] = 0 c[2] = 0 d[2] = -1
│ │ │ │ +
101 // a[3] = 0 b[3] = 0 c[3] = 0 d[3] = 1
│ │ │ │ +
102
│ │ │ │ +
103 out[0] = { 0, D(1) - in[0]};
│ │ │ │ +
104 out[1] = { 0, in[0]};
│ │ │ │ +
105 out[2] = { D(1) - in[1], 0};
│ │ │ │ +
106 out[3] = { in[1], 0};
│ │ │ │ +
107 }
│ │ │ │ +
108
│ │ │ │ +
109 if constexpr (dim==3)
│ │ │ │ +
110 {
│ │ │ │ +
111 // First-order Nédélec shape functions on a cube are of the form
│ │ │ │ +
112 //
│ │ │ │ +
113 // (e1 yz)
│ │ │ │ +
114 // a + b x + c y + d z + (e2 xz) , a, b, c, d \in R^3 and b[0]=c[1]=d[2]=0
│ │ │ │ +
115 // (e3 xy)
│ │ │ │ +
116 //
│ │ │ │ +
117 // The following coefficients create the twelve basis vectors
│ │ │ │ +
118 // that are dual to the edge degrees of freedom:
│ │ │ │ +
119 //
│ │ │ │ +
120 // a[0] = { 0, 0, 1} b[0] = { 0, 0, -1} c[0] = { 0, 0, -1} d[0] = { 0, 0, 0} e[0] = { 0, 0, 1}
│ │ │ │ +
121 // a[1] = { 0, 0, 0} b[1] = { 0, 0, 1} c[1] = { 0, 0, 0} d[1] = { 0, 0, 0} e[1] = { 0, 0, -1}
│ │ │ │ +
122 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 0} c[2] = { 0, 0, 1} d[2] = { 0, 0, 0} e[2] = { 0, 0, -1}
│ │ │ │ +
123 // a[3] = { 0, 0, 0} b[3] = { 0, 0, 0} c[3] = { 0, 0, 0} d[3] = { 0, 0, 0} e[3] = { 0, 0, 1}
│ │ │ │ +
124 //
│ │ │ │ +
125 // The following implementation uses these values, and simply
│ │ │ │ +
126 // skips all the zeros.
│ │ │ │ +
127
│ │ │ │ +
128 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
129 out[i] = {0,0,0};
│ │ │ │ +
130
│ │ │ │ +
131 out[0][2] = { 1 - in[0] - in[1] + in[0]*in[1]};
│ │ │ │ +
132 out[1][2] = { in[0] - in[0]*in[1]};
│ │ │ │ +
133 out[2][2] = { in[1] - in[0]*in[1]};
│ │ │ │ +
134 out[3][2] = { in[0]*in[1]};
│ │ │ │ +
135
│ │ │ │ +
136 out[4][1] = { 1 - in[0] - in[2] + in[0]*in[2]};
│ │ │ │ +
137 out[5][1] = { in[0] - in[0]*in[2]};
│ │ │ │ +
138 out[8][1] = { in[2] - in[0]*in[2]};
│ │ │ │ +
139 out[9][1] = { in[0]*in[2]};
│ │ │ │ +
140
│ │ │ │ +
141 out[6][0] = { 1 - in[1] - in[2] + in[1]*in[2]};
│ │ │ │ +
142 out[7][0] = { in[1] - in[1]*in[2]};
│ │ │ │ +
143 out[10][0] = { in[2] - in[1]*in[2]};
│ │ │ │ +
144 out[11][0] = { in[1]*in[2]};
│ │ │ │ +
145 }
│ │ │ │ +
146
│ │ │ │ +
147 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
148 out[i] *= edgeOrientation_[i];
│ │ │ │ +
149 }
│ │ │ │ +
150
│ │ │ │ +
156 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
157 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
158 {
│ │ │ │ +
159 out.resize(size());
│ │ │ │ +
160 if (dim==2)
│ │ │ │ +
161 {
│ │ │ │ +
162 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
163 for (std::size_t j=0; j<dim; j++)
│ │ │ │ +
164 out[i][j] = { 0, 0};
│ │ │ │ +
165
│ │ │ │ +
166 out[0][1] = { -1, 0};
│ │ │ │ +
167 out[1][1] = { 1, 0};
│ │ │ │ +
168
│ │ │ │ +
169 out[2][0] = { 0, -1};
│ │ │ │ +
170 out[3][0] = { 0, 1};
│ │ │ │ +
171 }
│ │ │ │ +
172 if (dim==3)
│ │ │ │ +
173 {
│ │ │ │ +
174 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
175 for(std::size_t j=0;j<dim; j++)
│ │ │ │ +
176 out[i][j] = {0,0,0};
│ │ │ │ +
177
│ │ │ │ +
178
│ │ │ │ +
179 out[0][2] = {-1 +in[1], -1 + in[0], 0};
│ │ │ │ +
180 out[1][2] = { 1 -in[1], - in[0], 0};
│ │ │ │ +
181 out[2][2] = { -in[1], 1 - in[0], 0};
│ │ │ │ +
182 out[3][2] = { in[1], in[0], 0};
│ │ │ │ +
183
│ │ │ │ +
184 out[4][1] = {-1 +in[2], 0, -1 + in[0]};
│ │ │ │ +
185 out[5][1] = { 1 -in[2], 0, - in[0]};
│ │ │ │ +
186 out[8][1] = { -in[2], 0, 1 - in[0]};
│ │ │ │ +
187 out[9][1] = { in[2], 0, in[0]};
│ │ │ │ +
188
│ │ │ │ +
189 out[6][0] = { 0, -1 + in[2], -1 + in[1]};
│ │ │ │ +
190 out[7][0] = { 0, 1 - in[2], - in[1]};
│ │ │ │ +
191 out[10][0] = { 0, - in[2], 1 - in[1]};
│ │ │ │ +
192 out[11][0] = { 0, in[2], in[1]};
│ │ │ │ +
193
│ │ │ │ +
194 }
│ │ │ │ +
195
│ │ │ │ +
196 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
197 out[i] *= edgeOrientation_[i];
│ │ │ │ +
198
│ │ │ │ +
199 }
│ │ │ │ +
200
│ │ │ │ +
207 void partial(const std::array<unsigned int, dim>& order,
│ │ │ │ +
208 const typename Traits::DomainType& in,
│ │ │ │ +
209 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
210 {
│ │ │ │ +
211 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
212 if (totalOrder == 0) {
│ │ │ │ +
213 evaluateFunction(in, out);
│ │ │ │ +
214 } else if (totalOrder == 1) {
│ │ │ │ +
215 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
216 out.resize(size());
│ │ │ │ +
217
│ │ │ │ +
218 if (dim==2)
│ │ │ │ +
219 {
│ │ │ │ +
220 if (direction==0)
│ │ │ │ +
221 {
│ │ │ │ +
222 out[0] = { 0, -1};
│ │ │ │ +
223 out[1] = { 0, 1};
│ │ │ │ +
224 out[2] = { 0, 0};
│ │ │ │ +
225 out[3] = { 0, 0};
│ │ │ │ +
226 }
│ │ │ │ +
227 else
│ │ │ │ +
228 {
│ │ │ │ +
229 out[0] = { 0, 0};
│ │ │ │ +
230 out[1] = { 0, 0};
│ │ │ │ +
231 out[2] = { -1, 0};
│ │ │ │ +
232 out[3] = { 1, 0};
│ │ │ │ +
233 }
│ │ │ │ +
234 }
│ │ │ │ +
235
│ │ │ │ +
236 if (dim==3)
│ │ │ │ +
237 {
│ │ │ │ +
238 switch (direction)
│ │ │ │ +
239 {
│ │ │ │ +
240 case 0:
│ │ │ │ +
241 out[0] = { 0, 0, -1 +in[1]};
│ │ │ │ +
242 out[1] = { 0, 0, 1 -in[1]};
│ │ │ │ +
243 out[2] = { 0, 0, -in[1]};
│ │ │ │ +
244 out[3] = { 0, 0, in[1]};
│ │ │ │ +
245
│ │ │ │ +
246 out[4] = { 0, -1 +in[2], 0};
│ │ │ │ +
247 out[5] = { 0, 1 -in[2], 0};
│ │ │ │ +
248 out[8] = { 0, -in[2], 0};
│ │ │ │ +
249 out[9] = { 0, in[2], 0};
│ │ │ │ +
250
│ │ │ │ +
251 out[6] = {0,0,0};
│ │ │ │ +
252 out[7] = {0,0,0};
│ │ │ │ +
253 out[10] = {0,0,0};
│ │ │ │ +
254 out[11] = {0,0,0};
│ │ │ │ +
255 break;
│ │ │ │ +
256
│ │ │ │ +
257 case 1:
│ │ │ │ +
258 out[0] = { 0, 0, -1 + in[0]};
│ │ │ │ +
259 out[1] = { 0, 0, - in[0]};
│ │ │ │ +
260 out[2] = { 0, 0, 1 - in[0]};
│ │ │ │ +
261 out[3] = { 0, 0, in[0]};
│ │ │ │ +
262
│ │ │ │ +
263 out[4] = {0,0,0};
│ │ │ │ +
264 out[5] = {0,0,0};
│ │ │ │ +
265 out[8] = {0,0,0};
│ │ │ │ +
266 out[9] = {0,0,0};
│ │ │ │ +
267
│ │ │ │ +
268 out[6] = { -1 + in[2], 0, 0};
│ │ │ │ +
269 out[7] = { 1 - in[2], 0, 0};
│ │ │ │ +
270 out[10] = { - in[2], 0, 0};
│ │ │ │ +
271 out[11] = { in[2], 0, 0};
│ │ │ │ +
272 break;
│ │ │ │ +
273
│ │ │ │ +
274 case 2:
│ │ │ │ +
275 out[0] = {0,0,0};
│ │ │ │ +
276 out[1] = {0,0,0};
│ │ │ │ +
277 out[2] = {0,0,0};
│ │ │ │ +
278 out[3] = {0,0,0};
│ │ │ │ +
279
│ │ │ │ +
280 out[4] = { 0, -1 + in[0], 0};
│ │ │ │ +
281 out[5] = { 0, - in[0], 0};
│ │ │ │ +
282 out[8] = { 0, 1 - in[0], 0};
│ │ │ │ +
283 out[9] = { 0, in[0], 0};
│ │ │ │ +
284
│ │ │ │ +
285 out[6] = { -1 + in[1], 0, 0};
│ │ │ │ +
286 out[7] = { - in[1], 0, 0};
│ │ │ │ +
287 out[10] = { 1 - in[1], 0, 0};
│ │ │ │ +
288 out[11] = { in[1], 0, 0};
│ │ │ │ +
289 break;
│ │ │ │ +
290 }
│ │ │ │ +
291 }
│ │ │ │ +
292
│ │ │ │ +
293 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
294 out[i] *= edgeOrientation_[i];
│ │ │ │ +
295
│ │ │ │ +
296 } else if (totalOrder == 2) {
│ │ │ │ +
297 out.resize(size());
│ │ │ │ +
298
│ │ │ │ +
299 if (dim==2)
│ │ │ │ +
300 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
301 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ +
302 out[i][j] = 0;
│ │ │ │ +
303
│ │ │ │ +
304 if (dim==3)
│ │ │ │ +
305 {
│ │ │ │ +
306 for(size_t i=0; i<out.size(); i++)
│ │ │ │ +
307 out[i] = { 0, 0, 0};
│ │ │ │ +
308
│ │ │ │ +
309 //case (1,1,0):
│ │ │ │ +
310 if( order[0] == 1 and order[1]==1)
│ │ │ │ +
311 {
│ │ │ │ +
312 out[0] = { 0, 0, 1};
│ │ │ │ +
313 out[1] = { 0, 0, -1};
│ │ │ │ +
314 out[2] = { 0, 0, -1};
│ │ │ │ +
315 out[3] = { 0, 0, 1};
│ │ │ │ +
316 }
│ │ │ │ +
317
│ │ │ │ +
318 //case (1,0,1):
│ │ │ │ +
319 if( order[0] == 1 and order[2]==1)
│ │ │ │ +
320 {
│ │ │ │ +
321 out[4] = { 0, 1, 0};
│ │ │ │ +
322 out[5] = { 0, -1, 0};
│ │ │ │ +
323 out[8] = { 0, -1, 0};
│ │ │ │ +
324 out[9] = { 0, 1, 0};
│ │ │ │ +
325 }
│ │ │ │ +
326
│ │ │ │ +
327 //case (0,1,1):
│ │ │ │ +
328 if( order[1] == 1 and order[2]==1)
│ │ │ │ +
329 {
│ │ │ │ +
330 out[6] = { 1, 0, 0};
│ │ │ │ +
331 out[7] = { -1, 0, 0};
│ │ │ │ +
332 out[10] = { -1, 0, 0};
│ │ │ │ +
333 out[11] = { 1, 0, 0};
│ │ │ │ +
334 }
│ │ │ │ +
335
│ │ │ │ +
336 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
337 out[i] *= edgeOrientation_[i];
│ │ │ │ +
338 }
│ │ │ │ +
339
│ │ │ │ +
340
│ │ │ │ +
341 }else {
│ │ │ │ +
342 out.resize(size());
│ │ │ │ +
343 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
344 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ +
345 out[i][j] = 0;
│ │ │ │ +
346 }
│ │ │ │ +
347
│ │ │ │ +
348 }
│ │ │ │ +
349
│ │ │ │ +
351 unsigned int order() const
│ │ │ │ +
352 {
│ │ │ │ +
353 if (dim==2)
│ │ │ │ +
354 return 2*k-1;
│ │ │ │ +
355 if (dim==3)
│ │ │ │ +
356 return 3*k-1;
│ │ │ │ +
357 }
│ │ │ │ +
358
│ │ │ │ +
359 private:
│ │ │ │ +
360
│ │ │ │ +
361 // Orientations of the cube edges
│ │ │ │ +
362 std::array<R,numberOfEdges> edgeOrientation_;
│ │ │ │ +
363 };
│ │ │ │ +
364
│ │ │ │ +
365
│ │ │ │ +
370 template <int dim, int k>
│ │ │ │ +
371 class Nedelec1stKindCubeLocalCoefficients
│ │ │ │ +
372 {
│ │ │ │ +
373 public:
│ │ │ │ +
375 Nedelec1stKindCubeLocalCoefficients ()
│ │ │ │ +
376 : localKey_(size())
│ │ │ │ +
377 {
│ │ │ │ +
378 static_assert(k==1, "Only first-order Nédélec local coefficients are implemented.");
│ │ │ │ +
379 // Assign all degrees of freedom to edges
│ │ │ │ +
380 // TODO: This is correct only for first-order Nédélec elements
│ │ │ │ +
381 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
382 localKey_[i] = LocalKey(i,dim-1,0);
│ │ │ │ +
383 }
│ │ │ │ +
384
│ │ │ │ +
386 std::size_t size() const
│ │ │ │ +
387 {
│ │ │ │ +
388 static_assert(dim==2 || dim==3, "Nédélec shape functions are implemented only for 2d and 3d cubes.");
│ │ │ │ +
389 return (dim==2) ? 2*k * (k+1)
│ │ │ │ +
390 : 3*k * (k+1) * (k+1);
│ │ │ │ +
391 }
│ │ │ │ +
392
│ │ │ │ +
395 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
396 {
│ │ │ │ +
397 return localKey_[i];
│ │ │ │ +
398 }
│ │ │ │ +
399
│ │ │ │ +
400 private:
│ │ │ │ +
401 std::vector<LocalKey> localKey_;
│ │ │ │ +
402 };
│ │ │ │ +
403
│ │ │ │ +
408 template<class LB>
│ │ │ │ +
409 class Nedelec1stKindCubeLocalInterpolation
│ │ │ │ +
410 {
│ │ │ │ +
411 static constexpr auto dim = LB::Traits::dimDomain;
│ │ │ │ +
412 static constexpr auto size = LB::size();
│ │ │ │ +
413
│ │ │ │ +
414 // Number of edges of the reference cube
│ │ │ │ +
415 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim;
│ │ │ │ +
416
│ │ │ │ +
417 public:
│ │ │ │ +
418
│ │ │ │ +
420 Nedelec1stKindCubeLocalInterpolation (std::bitset<numberOfEdges> s = 0)
│ │ │ │ +
421 {
│ │ │ │ +
422 auto refElement = Dune::referenceElement<double,dim>(GeometryTypes::cube(dim));
│ │ │ │ +
423
│ │ │ │ +
424 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ +
425 m_[i] = refElement.position(i,dim-1);
│ │ │ │ +
426
│ │ │ │ +
427 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ +
428 {
│ │ │ │ +
429 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ +
430 auto v0 = *vertexIterator;
│ │ │ │ +
431 auto v1 = *(++vertexIterator);
│ │ │ │ +
432
│ │ │ │ +
433 // By default, edges point from the vertex with the smaller index
│ │ │ │ +
434 // to the vertex with the larger index.
│ │ │ │ +
435 if (v0>v1)
│ │ │ │ +
436 std::swap(v0,v1);
│ │ │ │ +
437 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ +
438 edge_[i] *= (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
439 }
│ │ │ │ +
440 }
│ │ │ │ +
441
│ │ │ │ +
447 template<typename F, typename C>
│ │ │ │ +
448 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
449 {
│ │ │ │ +
450 out.resize(size);
│ │ │ │ +
451
│ │ │ │ +
452 for (std::size_t i=0; i<size; i++)
│ │ │ │ +
453 {
│ │ │ │ +
454 auto y = f(m_[i]);
│ │ │ │ +
455 out[i] = 0.0;
│ │ │ │ +
456 for (int j=0; j<dim; j++)
│ │ │ │ +
457 out[i] += y[j]*edge_[i][j];
│ │ │ │ +
458 }
│ │ │ │ +
459 }
│ │ │ │ +
460
│ │ │ │ +
461 private:
│ │ │ │ +
462 // Edge midpoints of the reference cube
│ │ │ │ +
463 std::array<typename LB::Traits::DomainType, numberOfEdges> m_;
│ │ │ │ +
464 // Edges of the reference cube
│ │ │ │ +
465 std::array<typename LB::Traits::DomainType, numberOfEdges> edge_;
│ │ │ │ +
466 };
│ │ │ │ +
467
│ │ │ │ +
468}
│ │ │ │ +
469
│ │ │ │ +
470
│ │ │ │ +
494 template<class D, class R, int dim, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
496 {
│ │ │ │ +
497 public:
│ │ │ │ + │ │ │ │ +
499 Impl::Nedelec1stKindCubeLocalCoefficients<dim,k>,
│ │ │ │ +
500 Impl::Nedelec1stKindCubeLocalInterpolation<Impl::Nedelec1stKindCubeLocalBasis<D,R,dim,k> > >;
│ │ │ │ +
501
│ │ │ │ +
502 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for 2d and 3d elements.");
│ │ │ │ +
503 static_assert(k==1, "Nedelec elements of the first kind are currently only implemented for order k==1.");
│ │ │ │ +
504
│ │ │ │ + │ │ │ │ +
508
│ │ │ │ +
│ │ │ │ +
514 Nedelec1stKindCubeLocalFiniteElement (std::bitset<power(2,dim-1)*dim> s) :
│ │ │ │ +
515 basis_(s),
│ │ │ │ +
516 interpolation_(s)
│ │ │ │ +
517 {}
│ │ │ │ +
│ │ │ │ +
518
│ │ │ │ +
│ │ │ │ +
519 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
520 {
│ │ │ │ +
521 return basis_;
│ │ │ │ +
522 }
│ │ │ │ +
│ │ │ │ +
523
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
525 {
│ │ │ │ +
526 return coefficients_;
│ │ │ │ +
527 }
│ │ │ │ +
│ │ │ │ +
528
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
530 {
│ │ │ │ +
531 return interpolation_;
│ │ │ │ +
532 }
│ │ │ │ +
│ │ │ │ +
533
│ │ │ │ +
│ │ │ │ +
534 static constexpr unsigned int size ()
│ │ │ │ +
535 {
│ │ │ │ +
536 return Traits::LocalBasisType::size();
│ │ │ │ +
537 }
│ │ │ │ +
│ │ │ │ +
538
│ │ │ │ +
│ │ │ │ +
539 static constexpr GeometryType type ()
│ │ │ │ +
540 {
│ │ │ │ +
541 return GeometryTypes::cube(dim);
│ │ │ │ +
542 }
│ │ │ │ +
│ │ │ │ +
543
│ │ │ │ +
544 private:
│ │ │ │ +
545 typename Traits::LocalBasisType basis_;
│ │ │ │ +
546 typename Traits::LocalCoefficientsType coefficients_;
│ │ │ │ +
547 typename Traits::LocalInterpolationType interpolation_;
│ │ │ │ +
548 };
│ │ │ │ +
│ │ │ │ +
549
│ │ │ │ +
550}
│ │ │ │ +
551
│ │ │ │ +
552#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Nédélec elements of the first kind for cube elements.
Definition nedelec1stkindcube.hh:496
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition nedelec1stkindcube.hh:529
│ │ │ │ +
static constexpr unsigned int size()
Definition nedelec1stkindcube.hh:534
│ │ │ │ +
Nedelec1stKindCubeLocalFiniteElement()=default
Default constructor.
│ │ │ │ +
static constexpr GeometryType type()
Definition nedelec1stkindcube.hh:539
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition nedelec1stkindcube.hh:524
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition nedelec1stkindcube.hh:519
│ │ │ │ +
Nedelec1stKindCubeLocalFiniteElement(std::bitset< power(2, dim-1) *dim > s)
Constructor with explicitly given edge orientations.
Definition nedelec1stkindcube.hh:514
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,540 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -hierarchical.hh │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ +nedelec1stkindcube.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h> │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/ │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h> │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDCUBE_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +20 │ │ │ │ │ +21namespace _D_u_n_e │ │ │ │ │ +22{ │ │ │ │ │ +23namespace Impl │ │ │ │ │ +24{ │ │ │ │ │ +37 template │ │ │ │ │ +38 class Nedelec1stKindCubeLocalBasis │ │ │ │ │ +39 { │ │ │ │ │ +40 // Number of edges of the reference cube │ │ │ │ │ +41 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim; │ │ │ │ │ +42 │ │ │ │ │ +43 public: │ │ │ │ │ +44 using Traits = LocalBasisTraits, │ │ │ │ │ +45 R,dim,FieldVector, │ │ │ │ │ +46 FieldMatrix >; │ │ │ │ │ +47 │ │ │ │ │ +54 Nedelec1stKindCubeLocalBasis() │ │ │ │ │ +55 { │ │ │ │ │ +56 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0); │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +61 Nedelec1stKindCubeLocalBasis(std::bitset edgeOrientation) │ │ │ │ │ +62 : Nedelec1stKindCubeLocalBasis() │ │ │ │ │ +63 { │ │ │ │ │ +64 for (std::size_t i=0; i& out) const │ │ │ │ │ +85 { │ │ │ │ │ +86 static_assert(k==1, "Evaluating Nédélec shape functions is implemented │ │ │ │ │ +only for first order."); │ │ │ │ │ +87 out.resize(size()); │ │ │ │ │ +88 │ │ │ │ │ +89 if (dim==2) │ │ │ │ │ +90 { │ │ │ │ │ +91 // First-order Nédélec shape functions on a square are of the form │ │ │ │ │ +92 // │ │ │ │ │ +93 // (a, b)^T + (c y, d x)^T, a, b, c, d \in R │ │ │ │ │ +94 // │ │ │ │ │ +95 // The following coefficients create the four basis vectors │ │ │ │ │ +96 // that are dual to the edge degrees of freedom: │ │ │ │ │ +97 // │ │ │ │ │ +98 // a[0] = 0 b[0] = 1 c[0] = 0 d[0] = -1 │ │ │ │ │ +99 // a[1] = 0 b[1] = 0 c[1] = 0 d[1] = 1 │ │ │ │ │ +100 // a[2] = 1 b[2] = 0 c[2] = 0 d[2] = -1 │ │ │ │ │ +101 // a[3] = 0 b[3] = 0 c[3] = 0 d[3] = 1 │ │ │ │ │ +102 │ │ │ │ │ +103 out[0] = { 0, D(1) - in[0]}; │ │ │ │ │ +104 out[1] = { 0, in[0]}; │ │ │ │ │ +105 out[2] = { D(1) - in[1], 0}; │ │ │ │ │ +106 out[3] = { in[1], 0}; │ │ │ │ │ +107 } │ │ │ │ │ +108 │ │ │ │ │ +109 if constexpr (dim==3) │ │ │ │ │ +110 { │ │ │ │ │ +111 // First-order Nédélec shape functions on a cube are of the form │ │ │ │ │ +112 // │ │ │ │ │ +113 // (e1 yz) │ │ │ │ │ +114 // a + b x + c y + d z + (e2 xz) , a, b, c, d \in R^3 and b[0]=c[1]=d[2]=0 │ │ │ │ │ +115 // (e3 xy) │ │ │ │ │ +116 // │ │ │ │ │ +117 // The following coefficients create the twelve basis vectors │ │ │ │ │ +118 // that are dual to the edge degrees of freedom: │ │ │ │ │ +119 // │ │ │ │ │ +120 // a[0] = { 0, 0, 1} b[0] = { 0, 0, -1} c[0] = { 0, 0, -1} d[0] = { 0, 0, │ │ │ │ │ +0} e[0] = { 0, 0, 1} │ │ │ │ │ +121 // a[1] = { 0, 0, 0} b[1] = { 0, 0, 1} c[1] = { 0, 0, 0} d[1] = { 0, 0, 0} │ │ │ │ │ +e[1] = { 0, 0, -1} │ │ │ │ │ +122 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 0} c[2] = { 0, 0, 1} d[2] = { 0, 0, 0} │ │ │ │ │ +e[2] = { 0, 0, -1} │ │ │ │ │ +123 // a[3] = { 0, 0, 0} b[3] = { 0, 0, 0} c[3] = { 0, 0, 0} d[3] = { 0, 0, 0} │ │ │ │ │ +e[3] = { 0, 0, 1} │ │ │ │ │ +124 // │ │ │ │ │ +125 // The following implementation uses these values, and simply │ │ │ │ │ +126 // skips all the zeros. │ │ │ │ │ +127 │ │ │ │ │ +128 for (std::size_t i=0; i& out) const │ │ │ │ │ +158 { │ │ │ │ │ +159 out.resize(size()); │ │ │ │ │ +160 if (dim==2) │ │ │ │ │ +161 { │ │ │ │ │ +162 for (std::size_t i=0; i& order, │ │ │ │ │ +208 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +209 std::vector& out) const │ │ │ │ │ +210 { │ │ │ │ │ +211 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +212 if (totalOrder == 0) { │ │ │ │ │ +213 evaluateFunction(in, out); │ │ │ │ │ +214 } else if (totalOrder == 1) { │ │ │ │ │ +215 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +216 out.resize(size()); │ │ │ │ │ +217 │ │ │ │ │ +218 if (dim==2) │ │ │ │ │ +219 { │ │ │ │ │ +220 if (direction==0) │ │ │ │ │ +221 { │ │ │ │ │ +222 out[0] = { 0, -1}; │ │ │ │ │ +223 out[1] = { 0, 1}; │ │ │ │ │ +224 out[2] = { 0, 0}; │ │ │ │ │ +225 out[3] = { 0, 0}; │ │ │ │ │ +226 } │ │ │ │ │ +227 else │ │ │ │ │ +228 { │ │ │ │ │ +229 out[0] = { 0, 0}; │ │ │ │ │ +230 out[1] = { 0, 0}; │ │ │ │ │ +231 out[2] = { -1, 0}; │ │ │ │ │ +232 out[3] = { 1, 0}; │ │ │ │ │ +233 } │ │ │ │ │ +234 } │ │ │ │ │ +235 │ │ │ │ │ +236 if (dim==3) │ │ │ │ │ +237 { │ │ │ │ │ +238 switch (direction) │ │ │ │ │ +239 { │ │ │ │ │ +240 case 0: │ │ │ │ │ +241 out[0] = { 0, 0, -1 +in[1]}; │ │ │ │ │ +242 out[1] = { 0, 0, 1 -in[1]}; │ │ │ │ │ +243 out[2] = { 0, 0, -in[1]}; │ │ │ │ │ +244 out[3] = { 0, 0, in[1]}; │ │ │ │ │ +245 │ │ │ │ │ +246 out[4] = { 0, -1 +in[2], 0}; │ │ │ │ │ +247 out[5] = { 0, 1 -in[2], 0}; │ │ │ │ │ +248 out[8] = { 0, -in[2], 0}; │ │ │ │ │ +249 out[9] = { 0, in[2], 0}; │ │ │ │ │ +250 │ │ │ │ │ +251 out[6] = {0,0,0}; │ │ │ │ │ +252 out[7] = {0,0,0}; │ │ │ │ │ +253 out[10] = {0,0,0}; │ │ │ │ │ +254 out[11] = {0,0,0}; │ │ │ │ │ +255 break; │ │ │ │ │ +256 │ │ │ │ │ +257 case 1: │ │ │ │ │ +258 out[0] = { 0, 0, -1 + in[0]}; │ │ │ │ │ +259 out[1] = { 0, 0, - in[0]}; │ │ │ │ │ +260 out[2] = { 0, 0, 1 - in[0]}; │ │ │ │ │ +261 out[3] = { 0, 0, in[0]}; │ │ │ │ │ +262 │ │ │ │ │ +263 out[4] = {0,0,0}; │ │ │ │ │ +264 out[5] = {0,0,0}; │ │ │ │ │ +265 out[8] = {0,0,0}; │ │ │ │ │ +266 out[9] = {0,0,0}; │ │ │ │ │ +267 │ │ │ │ │ +268 out[6] = { -1 + in[2], 0, 0}; │ │ │ │ │ +269 out[7] = { 1 - in[2], 0, 0}; │ │ │ │ │ +270 out[10] = { - in[2], 0, 0}; │ │ │ │ │ +271 out[11] = { in[2], 0, 0}; │ │ │ │ │ +272 break; │ │ │ │ │ +273 │ │ │ │ │ +274 case 2: │ │ │ │ │ +275 out[0] = {0,0,0}; │ │ │ │ │ +276 out[1] = {0,0,0}; │ │ │ │ │ +277 out[2] = {0,0,0}; │ │ │ │ │ +278 out[3] = {0,0,0}; │ │ │ │ │ +279 │ │ │ │ │ +280 out[4] = { 0, -1 + in[0], 0}; │ │ │ │ │ +281 out[5] = { 0, - in[0], 0}; │ │ │ │ │ +282 out[8] = { 0, 1 - in[0], 0}; │ │ │ │ │ +283 out[9] = { 0, in[0], 0}; │ │ │ │ │ +284 │ │ │ │ │ +285 out[6] = { -1 + in[1], 0, 0}; │ │ │ │ │ +286 out[7] = { - in[1], 0, 0}; │ │ │ │ │ +287 out[10] = { 1 - in[1], 0, 0}; │ │ │ │ │ +288 out[11] = { in[1], 0, 0}; │ │ │ │ │ +289 break; │ │ │ │ │ +290 } │ │ │ │ │ +291 } │ │ │ │ │ +292 │ │ │ │ │ +293 for (std::size_t i=0; i edgeOrientation_; │ │ │ │ │ +363 }; │ │ │ │ │ +364 │ │ │ │ │ +365 │ │ │ │ │ +370 template │ │ │ │ │ +371 class Nedelec1stKindCubeLocalCoefficients │ │ │ │ │ +372 { │ │ │ │ │ +373 public: │ │ │ │ │ +375 Nedelec1stKindCubeLocalCoefficients () │ │ │ │ │ +376 : localKey_(size()) │ │ │ │ │ +377 { │ │ │ │ │ +378 static_assert(k==1, "Only first-order Nédélec local coefficients are │ │ │ │ │ +implemented."); │ │ │ │ │ +379 // Assign all degrees of freedom to edges │ │ │ │ │ +380 // TODO: This is correct only for first-order Nédélec elements │ │ │ │ │ +381 for (std::size_t i=0; i localKey_; │ │ │ │ │ +402 }; │ │ │ │ │ +403 │ │ │ │ │ +408 template │ │ │ │ │ +409 class Nedelec1stKindCubeLocalInterpolation │ │ │ │ │ +410 { │ │ │ │ │ +411 static constexpr auto dim = LB::Traits::dimDomain; │ │ │ │ │ +412 static constexpr auto size = LB::size(); │ │ │ │ │ +413 │ │ │ │ │ +414 // Number of edges of the reference cube │ │ │ │ │ +415 constexpr static std::size_t numberOfEdges = power(2,dim-1)*dim; │ │ │ │ │ +416 │ │ │ │ │ +417 public: │ │ │ │ │ +418 │ │ │ │ │ +420 Nedelec1stKindCubeLocalInterpolation (std::bitset s = 0) │ │ │ │ │ +421 { │ │ │ │ │ +422 auto refElement = Dune::referenceElement(GeometryTypes::cube │ │ │ │ │ +(dim)); │ │ │ │ │ +423 │ │ │ │ │ +424 for (std::size_t i=0; iv1) │ │ │ │ │ +436 std::swap(v0,v1); │ │ │ │ │ +437 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ +438 edge_[i] *= (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +439 } │ │ │ │ │ +440 } │ │ │ │ │ +441 │ │ │ │ │ +447 template │ │ │ │ │ +448 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +449 { │ │ │ │ │ +450 out.resize(size); │ │ │ │ │ +451 │ │ │ │ │ +452 for (std::size_t i=0; i m_; │ │ │ │ │ +464 // Edges of the reference cube │ │ │ │ │ +465 std::array edge_; │ │ │ │ │ +466 }; │ │ │ │ │ +467 │ │ │ │ │ +468} │ │ │ │ │ +469 │ │ │ │ │ +470 │ │ │ │ │ +494 template │ │ │ │ │ +_4_9_5 class _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +496 { │ │ │ │ │ +497 public: │ │ │ │ │ +_4_9_8 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ +499 Impl::Nedelec1stKindCubeLocalCoefficients, │ │ │ │ │ +500 Impl::Nedelec1stKindCubeLocalInterpolation > >; │ │ │ │ │ +501 │ │ │ │ │ +502 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for │ │ │ │ │ +2d and 3d elements."); │ │ │ │ │ +503 static_assert(k==1, "Nedelec elements of the first kind are currently only │ │ │ │ │ +implemented for order k==1."); │ │ │ │ │ +504 │ │ │ │ │ +_5_0_7 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() = default; │ │ │ │ │ +508 │ │ │ │ │ +_5_1_4 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset s) : │ │ │ │ │ +515 basis_(s), │ │ │ │ │ +516 interpolation_(s) │ │ │ │ │ +517 {} │ │ │ │ │ +518 │ │ │ │ │ +_5_1_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +520 { │ │ │ │ │ +521 return basis_; │ │ │ │ │ +522 } │ │ │ │ │ +523 │ │ │ │ │ +_5_2_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +525 { │ │ │ │ │ +526 return coefficients_; │ │ │ │ │ +527 } │ │ │ │ │ +528 │ │ │ │ │ +_5_2_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +530 { │ │ │ │ │ +531 return interpolation_; │ │ │ │ │ +532 } │ │ │ │ │ +533 │ │ │ │ │ +_5_3_4 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +535 { │ │ │ │ │ +536 return Traits::LocalBasisType::size(); │ │ │ │ │ +537 } │ │ │ │ │ +538 │ │ │ │ │ +_5_3_9 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +540 { │ │ │ │ │ +541 return GeometryTypes::cube(dim); │ │ │ │ │ +542 } │ │ │ │ │ +543 │ │ │ │ │ +544 private: │ │ │ │ │ +545 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_; │ │ │ │ │ +546 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_; │ │ │ │ │ +547 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_; │ │ │ │ │ +548 }; │ │ │ │ │ +549 │ │ │ │ │ +550} │ │ │ │ │ +551 │ │ │ │ │ +552#endif │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nédélec elements of the first kind for cube elements. │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:496 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:529 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:534 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nedelec1stKindCubeLocalFiniteElement()=default │ │ │ │ │ +Default constructor. │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:539 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:524 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:519 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_C_u_b_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nedelec1stKindCubeLocalFiniteElement(std::bitset< power(2, dim-1) *dim > s) │ │ │ │ │ +Constructor with explicitly given edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindcube.hh:514 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: crouzeixraviart.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
crouzeixraviart.hh File Reference
│ │ │ │ +
nedelecsimplexbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/referenceelements.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/utility/defaultbasisfactory.hh>
│ │ │ │ +#include "nedelecsimplexinterpolation.hh"
│ │ │ │ +#include "nedelecsimplexprebasis.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::CrouzeixRaviartLocalFiniteElement< D, R, dim >
 Crouzeix-Raviart finite element. More...
struct  Dune::NedelecBasisFactory< dim, SF, CF >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -crouzeixraviart.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +nedelecsimplexbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Crouzeix-Raviart finite element. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _S_F_,_ _C_F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00470_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: crouzeixraviart.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,230 +70,55 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
crouzeixraviart.hh
│ │ │ │ +
nedelecsimplexbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ -
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
20
│ │ │ │ -
21namespace Dune { namespace Impl
│ │ │ │ -
22{
│ │ │ │ -
29 template<class D, class R, unsigned int dim>
│ │ │ │ -
30 class CrouzeixRaviartLocalBasis
│ │ │ │ -
31 {
│ │ │ │ -
32 public:
│ │ │ │ -
33 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,R,1,FieldVector<R,1>,FieldMatrix<R,1,dim> >;
│ │ │ │ -
34
│ │ │ │ -
37 static constexpr unsigned int size ()
│ │ │ │ -
38 {
│ │ │ │ -
39 return dim+1;
│ │ │ │ -
40 }
│ │ │ │ -
41
│ │ │ │ -
43 void evaluateFunction(const typename Traits::DomainType& x,
│ │ │ │ -
44 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
45 {
│ │ │ │ -
46 out.resize(size());
│ │ │ │ -
47
│ │ │ │ -
48 std::fill(out.begin(), out.end()-1, 1.0);
│ │ │ │ -
49 out.back() = 1.0-dim;
│ │ │ │ -
50
│ │ │ │ -
51 for (unsigned int i=0; i<dim; i++)
│ │ │ │ -
52 {
│ │ │ │ -
53 out[i] -= dim * x[dim-i-1];
│ │ │ │ -
54 out.back() += dim*x[i];
│ │ │ │ -
55 }
│ │ │ │ -
56 }
│ │ │ │ -
57
│ │ │ │ -
63 void evaluateJacobian(const typename Traits::DomainType& x,
│ │ │ │ -
64 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ -
65 {
│ │ │ │ -
66 out.resize(size());
│ │ │ │ -
67
│ │ │ │ -
68 for (unsigned i=0; i<dim; i++)
│ │ │ │ -
69 for (unsigned j=0; j<dim; j++)
│ │ │ │ -
70 out[i][0][j] = (i==(dim-1-j)) ? -(double)dim : 0;
│ │ │ │ -
71
│ │ │ │ -
72 std::fill(out.back()[0].begin(), out.back()[0].end(), dim);
│ │ │ │ -
73 }
│ │ │ │ -
74
│ │ │ │ -
81 void partial(const std::array<unsigned int,dim>& order,
│ │ │ │ -
82 const typename Traits::DomainType& in,
│ │ │ │ -
83 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
84 {
│ │ │ │ -
85 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
86
│ │ │ │ -
87 out.resize(size());
│ │ │ │ -
88
│ │ │ │ -
89 if (totalOrder == 0) {
│ │ │ │ -
90 evaluateFunction(in, out);
│ │ │ │ -
91 return;
│ │ │ │ -
92 }
│ │ │ │ -
93
│ │ │ │ -
94 if (totalOrder==1)
│ │ │ │ -
95 {
│ │ │ │ -
96 auto direction = std::find(order.begin(), order.end(), 1)-order.begin();
│ │ │ │ -
97
│ │ │ │ -
98 for (unsigned int i=0; i<dim; i++)
│ │ │ │ -
99 out[i] = (i==(dim-1-direction)) ? -(double)dim : 0.0;
│ │ │ │ -
100
│ │ │ │ -
101 out.back()[0] = dim;
│ │ │ │ -
102 }
│ │ │ │ -
103 else // all higher order derivatives are zero
│ │ │ │ -
104 std::fill(out.begin(), out.end(), 0);
│ │ │ │ -
105 }
│ │ │ │ -
106
│ │ │ │ -
108 static constexpr unsigned int order ()
│ │ │ │ -
109 {
│ │ │ │ -
110 return 1;
│ │ │ │ -
111 }
│ │ │ │ -
112 };
│ │ │ │ -
113
│ │ │ │ -
118 template<unsigned int dim>
│ │ │ │ -
119 class CrouzeixRaviartLocalCoefficients
│ │ │ │ -
120 {
│ │ │ │ -
121 public:
│ │ │ │ -
123 CrouzeixRaviartLocalCoefficients ()
│ │ │ │ -
124 : localKeys_(size())
│ │ │ │ -
125 {
│ │ │ │ -
126 for (std::size_t i=0; i<size(); i++)
│ │ │ │ -
127 localKeys_[i] = LocalKey(i,1,0);
│ │ │ │ -
128 }
│ │ │ │ -
129
│ │ │ │ -
131 static constexpr std::size_t size ()
│ │ │ │ -
132 {
│ │ │ │ -
133 return dim+1;
│ │ │ │ -
134 }
│ │ │ │ -
135
│ │ │ │ -
137 const LocalKey& localKey (std::size_t i) const
│ │ │ │ -
138 {
│ │ │ │ -
139 return localKeys_[i];
│ │ │ │ -
140 }
│ │ │ │ -
141
│ │ │ │ -
142 private:
│ │ │ │ -
143 std::vector<LocalKey> localKeys_;
│ │ │ │ -
144 };
│ │ │ │ -
145
│ │ │ │ -
150 template<class LocalBasis>
│ │ │ │ -
151 class CrouzeixRaviartLocalInterpolation
│ │ │ │ -
152 {
│ │ │ │ -
153 public:
│ │ │ │ -
154
│ │ │ │ -
162 template<typename F, typename C>
│ │ │ │ -
163 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
164 {
│ │ │ │ -
165 constexpr auto dim = LocalBasis::Traits::dimDomain;
│ │ │ │ -
166
│ │ │ │ -
167 out.resize(LocalBasis::size());
│ │ │ │ -
168
│ │ │ │ -
169 // Evaluate at the facet midpoints
│ │ │ │ -
170 auto refSimplex = ReferenceElements<typename LocalBasis::Traits::DomainFieldType,dim>::simplex();
│ │ │ │ -
171 for (int i=0; i<refSimplex.size(1); i++)
│ │ │ │ -
172 out[i] = f(refSimplex.template geometry<1>(i).center());
│ │ │ │ -
173 }
│ │ │ │ -
174 };
│ │ │ │ -
175
│ │ │ │ -
176} } // namespace Dune::Impl
│ │ │ │ -
177
│ │ │ │ -
178namespace Dune
│ │ │ │ -
179{
│ │ │ │ -
186 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
188 {
│ │ │ │ -
189 public:
│ │ │ │ - │ │ │ │ -
193 Impl::CrouzeixRaviartLocalCoefficients<dim>,
│ │ │ │ -
194 Impl::CrouzeixRaviartLocalInterpolation<Impl::CrouzeixRaviartLocalBasis<D,R,dim> > >;
│ │ │ │ -
195
│ │ │ │ -
│ │ │ │ -
198 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ -
199 {
│ │ │ │ -
200 return basis_;
│ │ │ │ -
201 }
│ │ │ │ -
│ │ │ │ -
202
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
206 {
│ │ │ │ -
207 return coefficients_;
│ │ │ │ -
208 }
│ │ │ │ -
│ │ │ │ -
209
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
213 {
│ │ │ │ -
214 return interpolation_;
│ │ │ │ -
215 }
│ │ │ │ -
│ │ │ │ -
216
│ │ │ │ -
│ │ │ │ -
218 static constexpr std::size_t size()
│ │ │ │ -
219 {
│ │ │ │ -
220 return dim+1;
│ │ │ │ -
221 }
│ │ │ │ -
│ │ │ │ -
222
│ │ │ │ -
│ │ │ │ -
225 static constexpr GeometryType type()
│ │ │ │ -
226 {
│ │ │ │ -
227 return GeometryTypes::simplex(dim);
│ │ │ │ -
228 }
│ │ │ │ -
│ │ │ │ -
229
│ │ │ │ -
230 private:
│ │ │ │ -
231 Impl::CrouzeixRaviartLocalBasis<D,R,dim> basis_;
│ │ │ │ -
232 Impl::CrouzeixRaviartLocalCoefficients<dim> coefficients_;
│ │ │ │ -
233 Impl::CrouzeixRaviartLocalInterpolation<Impl::CrouzeixRaviartLocalBasis<D,R,dim> > interpolation_;
│ │ │ │ -
234 };
│ │ │ │ -
│ │ │ │ -
235
│ │ │ │ -
236} // namespace Dune
│ │ │ │ -
237
│ │ │ │ -
238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ +
6
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <fstream>
│ │ │ │ +
10#include <dune/common/exceptions.hh>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
38 template< unsigned int dim, class SF, class CF >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 : public DefaultBasisFactory< NedelecPreBasisFactory<dim,CF>,
│ │ │ │ +
41 NedelecL2InterpolationFactory<dim,CF>,
│ │ │ │ +
42 dim,dim,SF,CF >
│ │ │ │ +
43 {};
│ │ │ │ +
│ │ │ │ +
44}
│ │ │ │ +
45
│ │ │ │ +
46#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Crouzeix-Raviart finite element.
Definition crouzeixraviart.hh:188
│ │ │ │ -
static constexpr GeometryType type()
The reference element that the local finite element is defined on.
Definition crouzeixraviart.hh:225
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition crouzeixraviart.hh:205
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition crouzeixraviart.hh:212
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition crouzeixraviart.hh:198
│ │ │ │ -
static constexpr std::size_t size()
The number of shape functions.
Definition crouzeixraviart.hh:218
│ │ │ │ - │ │ │ │ +
Definition nedelecsimplexbasis.hh:43
│ │ │ │ +
Definition defaultbasisfactory.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,243 +1,49 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -crouzeixraviart.hh │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ +nedelecsimplexbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -20 │ │ │ │ │ -21namespace _D_u_n_e { namespace Impl │ │ │ │ │ -22{ │ │ │ │ │ -29 template │ │ │ │ │ -30 class CrouzeixRaviartLocalBasis │ │ │ │ │ -31 { │ │ │ │ │ -32 public: │ │ │ │ │ -33 using Traits = │ │ │ │ │ -LocalBasisTraits,R,1,FieldVector,FieldMatrix │ │ │ │ │ ->; │ │ │ │ │ -34 │ │ │ │ │ -37 static constexpr unsigned int size () │ │ │ │ │ -38 { │ │ │ │ │ -39 return dim+1; │ │ │ │ │ -40 } │ │ │ │ │ -41 │ │ │ │ │ -43 void evaluateFunction(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ -44 std::vector& out) const │ │ │ │ │ -45 { │ │ │ │ │ -46 out.resize(size()); │ │ │ │ │ -47 │ │ │ │ │ -48 std::fill(out.begin(), out.end()-1, 1.0); │ │ │ │ │ -49 out.back() = 1.0-dim; │ │ │ │ │ -50 │ │ │ │ │ -51 for (unsigned int i=0; i& out) const │ │ │ │ │ -65 { │ │ │ │ │ -66 out.resize(size()); │ │ │ │ │ -67 │ │ │ │ │ -68 for (unsigned i=0; i& order, │ │ │ │ │ -82 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -83 std::vector& out) const │ │ │ │ │ -84 { │ │ │ │ │ -85 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -86 │ │ │ │ │ -87 out.resize(size()); │ │ │ │ │ -88 │ │ │ │ │ -89 if (totalOrder == 0) { │ │ │ │ │ -90 evaluateFunction(in, out); │ │ │ │ │ -91 return; │ │ │ │ │ -92 } │ │ │ │ │ -93 │ │ │ │ │ -94 if (totalOrder==1) │ │ │ │ │ -95 { │ │ │ │ │ -96 auto direction = std::find(order.begin(), order.end(), 1)-order.begin(); │ │ │ │ │ -97 │ │ │ │ │ -98 for (unsigned int i=0; i │ │ │ │ │ -119 class CrouzeixRaviartLocalCoefficients │ │ │ │ │ -120 { │ │ │ │ │ -121 public: │ │ │ │ │ -123 CrouzeixRaviartLocalCoefficients () │ │ │ │ │ -124 : localKeys_(size()) │ │ │ │ │ -125 { │ │ │ │ │ -126 for (std::size_t i=0; i localKeys_; │ │ │ │ │ -144 }; │ │ │ │ │ -145 │ │ │ │ │ -150 template │ │ │ │ │ -151 class CrouzeixRaviartLocalInterpolation │ │ │ │ │ -152 { │ │ │ │ │ -153 public: │ │ │ │ │ -154 │ │ │ │ │ -162 template │ │ │ │ │ -163 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ -164 { │ │ │ │ │ -165 constexpr auto dim = LocalBasis::Traits::dimDomain; │ │ │ │ │ -166 │ │ │ │ │ -167 out.resize(LocalBasis::size()); │ │ │ │ │ -168 │ │ │ │ │ -169 // Evaluate at the facet midpoints │ │ │ │ │ -170 auto refSimplex = ReferenceElements::simplex(); │ │ │ │ │ -171 for (int i=0; i(i).center()); │ │ │ │ │ -173 } │ │ │ │ │ -174 }; │ │ │ │ │ -175 │ │ │ │ │ -176} } // namespace Dune::Impl │ │ │ │ │ -177 │ │ │ │ │ -178namespace _D_u_n_e │ │ │ │ │ -179{ │ │ │ │ │ -186 template │ │ │ │ │ -_1_8_7 class _C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -188 { │ │ │ │ │ -189 public: │ │ │ │ │ -_1_9_2 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ -_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ -193 Impl::CrouzeixRaviartLocalCoefficients, │ │ │ │ │ -194 Impl::CrouzeixRaviartLocalInterpolation > >; │ │ │ │ │ -195 │ │ │ │ │ -_1_9_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ -199 { │ │ │ │ │ -200 return basis_; │ │ │ │ │ -201 } │ │ │ │ │ -202 │ │ │ │ │ -_2_0_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ -206 { │ │ │ │ │ -207 return coefficients_; │ │ │ │ │ -208 } │ │ │ │ │ -209 │ │ │ │ │ -_2_1_2 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ -213 { │ │ │ │ │ -214 return interpolation_; │ │ │ │ │ -215 } │ │ │ │ │ -216 │ │ │ │ │ -_2_1_8 static constexpr std::size_t _s_i_z_e() │ │ │ │ │ -219 { │ │ │ │ │ -220 return dim+1; │ │ │ │ │ -221 } │ │ │ │ │ -222 │ │ │ │ │ -_2_2_5 static constexpr GeometryType _t_y_p_e() │ │ │ │ │ -226 { │ │ │ │ │ -227 return GeometryTypes::simplex(dim); │ │ │ │ │ -228 } │ │ │ │ │ -229 │ │ │ │ │ -230 private: │ │ │ │ │ -231 Impl::CrouzeixRaviartLocalBasis basis_; │ │ │ │ │ -232 Impl::CrouzeixRaviartLocalCoefficients coefficients_; │ │ │ │ │ -233 Impl::CrouzeixRaviartLocalInterpolation > interpolation_; │ │ │ │ │ -234 }; │ │ │ │ │ -235 │ │ │ │ │ -236} // namespace Dune │ │ │ │ │ -237 │ │ │ │ │ -238#endif // DUNE_LOCALFUNCTIONS_CROUZEIXRAVIART_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ +6 │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h> │ │ │ │ │ +13#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +14#include "_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h" │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +38 template< unsigned int dim, class SF, class CF > │ │ │ │ │ +_3_9 struct _N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +40 : public _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y< NedelecPreBasisFactory, │ │ │ │ │ +41 NedelecL2InterpolationFactory, │ │ │ │ │ +42 dim,dim,SF,CF > │ │ │ │ │ +43 {}; │ │ │ │ │ +44} │ │ │ │ │ +45 │ │ │ │ │ +46#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXBASIS_HH │ │ │ │ │ +_d_e_f_a_u_l_t_b_a_s_i_s_f_a_c_t_o_r_y_._h_h │ │ │ │ │ +_n_e_d_e_l_e_c_s_i_m_p_l_e_x_p_r_e_b_a_s_i_s_._h_h │ │ │ │ │ +_n_e_d_e_l_e_c_s_i_m_p_l_e_x_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Crouzeix-Raviart finite element. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:188 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -The reference element that the local finite element is defined on. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:205 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:212 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:198 │ │ │ │ │ -_D_u_n_e_:_:_C_r_o_u_z_e_i_x_R_a_v_i_a_r_t_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() │ │ │ │ │ -The number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn crouzeixraviart.hh:218 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormal.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexprebasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
orthonormal.hh File Reference
│ │ │ │ +
nedelecsimplexprebasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/localfunctions/utility/localfiniteelement.hh>
│ │ │ │ -#include <dune/localfunctions/utility/dglocalcoefficients.hh>
│ │ │ │ -#include <dune/localfunctions/utility/l2interpolation.hh>
│ │ │ │ -#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::OrthonormalLocalFiniteElement< dimDomain, D, R, SF, CF >
 A class providing orthonormal basis functions. More...
struct  Dune::NedelecPreBasisFactory< dim, Field >
 
struct  Dune::NedelecPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::NedelecVecMatrix< geometryId, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -orthonormal.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +nedelecsimplexprebasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _d_i_m_D_o_m_a_i_n_,_ _D_,_ _R_,_ _S_F_,_ _C_F_ _> │ │ │ │ │ -  A class providing orthonormal basis functions. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_< │ │ │ │ │ + _d_d_,_ _F_F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_i_e_l_d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00473_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: orthonormal.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexprebasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,71 +70,353 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
orthonormal.hh
│ │ │ │ +
nedelecsimplexprebasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_ORTHONORMALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/geometry/type.hh>
│ │ │ │
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
32 template< unsigned int dimDomain, class D, class R,
│ │ │ │ -
33 class SF=R, class CF=SF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 : public GenericLocalFiniteElement< OrthonormalBasisFactory< dimDomain, SF, CF >,
│ │ │ │ -
36 DGLocalCoefficientsFactory< OrthonormalBasisFactory< dimDomain, SF, CF > >,
│ │ │ │ -
37 LocalL2InterpolationFactory< OrthonormalBasisFactory< dimDomain, SF, CF >,true > >
│ │ │ │ -
38 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
42 public:
│ │ │ │ -
43 using typename Base::Traits;
│ │ │ │ -
44
│ │ │ │ -
│ │ │ │ -
47 OrthonormalLocalFiniteElement ( const GeometryType &gt, unsigned int order )
│ │ │ │ -
48 : Base(gt, order)
│ │ │ │ -
49 {}
│ │ │ │ -
│ │ │ │ -
50 };
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
52}
│ │ │ │ -
53
│ │ │ │ -
54#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17 template < GeometryType::Id geometryId, class Field >
│ │ │ │ +
18 struct NedelecVecMatrix;
│ │ │ │ +
19
│ │ │ │ +
23 template <unsigned int dim, class Field>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
25 {
│ │ │ │ + │ │ │ │ +
27 typedef typename MBasisFactory::Object MBasis;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
30
│ │ │ │ +
31 typedef const Basis Object;
│ │ │ │ +
32 typedef std::size_t Key;
│ │ │ │ +
33
│ │ │ │ +
34 template <unsigned int dd, class FF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
36 {
│ │ │ │ + │ │ │ │ +
38 };
│ │ │ │ +
│ │ │ │ +
39
│ │ │ │ +
40 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
41 static Object *create ( Key order )
│ │ │ │ +
42 {
│ │ │ │ +
43 /*
│ │ │ │ +
44 * The nedelec parameter begins at 1.
│ │ │ │ +
45 * This is the numbering used by J.C. Nedelec himself.
│ │ │ │ +
46 * See "Mixed Finite Elements in \R^3" published in 1980.
│ │ │ │ +
47 *
│ │ │ │ +
48 * This construction is based on the construction of Raviart-Thomas elements.
│ │ │ │ +
49 * There the numbering starts at 0.
│ │ │ │ +
50 * Because of this we reduce the order internally by 1.
│ │ │ │ +
51 */
│ │ │ │ +
52 order--;
│ │ │ │ + │ │ │ │ +
54 MBasis *mbasis = MBasisFactory::template create<geometryId>(order+1);
│ │ │ │ +
55 std::remove_const_t<Object>* tmBasis = new std::remove_const_t<Object>(*mbasis);
│ │ │ │ +
56 tmBasis->fill(vecMatrix);
│ │ │ │ +
57 return tmBasis;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59 static void release( Object *object ) { delete object; }
│ │ │ │ +
60 };
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
62 template <GeometryType::Id geometryId, class Field>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
64 {
│ │ │ │ +
65 static constexpr GeometryType geometry = geometryId;
│ │ │ │ +
66 static const unsigned int dim = geometry.dim();
│ │ │ │ + │ │ │ │ + │ │ │ │ +
│ │ │ │ +
69 NedelecVecMatrix(std::size_t order)
│ │ │ │ +
70 {
│ │ │ │ +
71 /*
│ │ │ │ +
72 * Construction of Nedelec elements see "Mixed Finite Elements in \R^3" by Nedelec, 1980.
│ │ │ │ +
73 *
│ │ │ │ +
74 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree $\leq k$.
│ │ │ │ +
75 * The space of Nedelec functions in $n$ dimensions with index $k$ is defined as
│ │ │ │ +
76 *
│ │ │ │ +
77 * \begin{equation*}
│ │ │ │ +
78 * Ned_k := (\P_{n,k-1})^n \oplus \{p \in (\P_{n,k})^n: <p,x>=0 \}
│ │ │ │ +
79 * \end{equation*}
│ │ │ │ +
80 * with $x=(x,y)$ in two dimensions and $x=(x,y,z)$ in three dimensions.
│ │ │ │ +
81 *
│ │ │ │ +
82 * For $Ned_k$ holds
│ │ │ │ +
83 * \begin{equation*}
│ │ │ │ +
84 * (\P_{n,k-1})^n \subset Ned_k \subset (\P_{n,k})^n.
│ │ │ │ +
85 * \end{equation*}
│ │ │ │ +
86 *
│ │ │ │ +
87 * We construct $(\P_{n,k})^n$ and and only use the monomials contained in $Ned$.
│ │ │ │ +
88 *
│ │ │ │ +
89 */
│ │ │ │ +
90 if( (dim!=2 && dim!=3) || !geometry.isSimplex())
│ │ │ │ +
91 DUNE_THROW(Dune::NotImplemented,"High order nedelec elements are only supported by simplices in 2d and 3d");
│ │ │ │ +
92
│ │ │ │ +
93 MIBasis basis(order+1);
│ │ │ │ +
94 FieldVector< MI, dim > x;
│ │ │ │ +
95 /*
│ │ │ │ +
96 * Init MultiIndices
│ │ │ │ +
97 * x[0]=(1,0,0) x
│ │ │ │ +
98 * x[1]=(0,1,0) y
│ │ │ │ +
99 * x[2]=(0,0,1) z
│ │ │ │ +
100 */
│ │ │ │ +
101 for( unsigned int i = 0; i < dim; ++i )
│ │ │ │ +
102 x[i].set(i,1);
│ │ │ │ +
103 std::vector< MI > val( basis.size() );
│ │ │ │ +
104
│ │ │ │ +
105 // val now contains all monomials in $n$ dimensions with degree $\leq order+1$
│ │ │ │ +
106 basis.evaluate( x, val );
│ │ │ │ +
107
│ │ │ │ +
108 col_ = basis.size();
│ │ │ │ +
109
│ │ │ │ +
110 // get $\dim (\P_{n,order-1})$
│ │ │ │ +
111 unsigned int notHomogen = 0;
│ │ │ │ +
112 if (order>0)
│ │ │ │ +
113 notHomogen = basis.sizes()[order-1];
│ │ │ │ +
114
│ │ │ │ +
115 // the number of basis functions for the set of homogeneous polynomials with degree $order$
│ │ │ │ +
116 unsigned int homogen = basis.sizes()[order]-notHomogen;
│ │ │ │ +
117
│ │ │ │ +
118 /*
│ │ │ │ +
119 * 2D:
│ │ │ │ +
120 * \begin{equation*}
│ │ │ │ +
121 * Ned_{order} = (\P_{order-1})^2 \oplus (-y,x)^T \widetilde \P_{order-1}
│ │ │ │ +
122 * \end{equation*}
│ │ │ │ +
123 *
│ │ │ │ +
124 * It gets more complicated in higher dimensions.
│ │ │ │ +
125 *
│ │ │ │ +
126 * 3D:
│ │ │ │ +
127 * \begin{equation*}
│ │ │ │ +
128 * Ned_{order} = (\P_{n,order-1})^3 \oplus (z,0,-x)^T \widetilde \P_{n,order-1} \oplus (-y,x,0)^T \widetilde \P_{n,order-1} \oplus (0,-z,y)^T \widetilde \P_{n-1,order-1}
│ │ │ │ +
129 * \end{equation*}
│ │ │ │ +
130 *
│ │ │ │ +
131 * Note the last term. The index $n-1$ is on purpose.
│ │ │ │ +
132 * Else i.e. k=2
│ │ │ │ +
133 *
│ │ │ │ +
134 * (0,z,-y)^T x = (z,0,-x)^T y - (y,-x,0)^T z.
│ │ │ │ +
135 *
│ │ │ │ +
136 */
│ │ │ │ +
137
│ │ │ │ +
138 /*
│ │ │ │ +
139 * compute the number of rows for the coefficient matrix
│ │ │ │ +
140 *
│ │ │ │ +
141 * row_ = dim* \dim Ned_{order}
│ │ │ │ +
142 */
│ │ │ │ +
143 if (dim == 2)
│ │ │ │ +
144 row_ = (notHomogen*dim+homogen*(dim+1))*dim;
│ │ │ │ +
145 else if (dim==3)
│ │ │ │ +
146 {
│ │ │ │ +
147 // get dim \P_{n-1,order-1}
│ │ │ │ +
148 int homogenTwoVariables = 0;
│ │ │ │ +
149 for( int w = notHomogen; w<notHomogen + homogen; w++)
│ │ │ │ +
150 if (val[w].z(0)==0)
│ │ │ │ +
151 homogenTwoVariables++;
│ │ │ │ +
152 row_ = (notHomogen*dim+homogen*(dim+2) + homogenTwoVariables)*dim;
│ │ │ │ +
153 }
│ │ │ │ +
154
│ │ │ │ +
155 mat_ = new Field*[row_];
│ │ │ │ +
156 int row = 0;
│ │ │ │ +
157
│ │ │ │ +
158 /* Assign the correct values for the nonhomogeneous polymonials $p\in (\P_{n,order-1})^dim$
│ │ │ │ +
159 * A basis function is represented by $dim$ rows.
│ │ │ │ +
160 */
│ │ │ │ +
161 for (unsigned int i=0; i<notHomogen+homogen; ++i)
│ │ │ │ +
162 {
│ │ │ │ +
163 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ +
164 {
│ │ │ │ +
165 for (unsigned int rr=0; rr<dim; ++rr)
│ │ │ │ +
166 {
│ │ │ │ +
167 // init row to zero
│ │ │ │ +
168 mat_[row] = new Field[col_];
│ │ │ │ +
169 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ +
170 mat_[row][j] = 0.;
│ │ │ │ +
171
│ │ │ │ +
172 if (r==rr)
│ │ │ │ +
173 mat_[row][i] = 1.;
│ │ │ │ +
174 ++row;
│ │ │ │ +
175 }
│ │ │ │ +
176 }
│ │ │ │ +
177 }
│ │ │ │ +
178
│ │ │ │ +
179 /* Assign the correct values for the homogeneous polymonials $p\in Ned_{order} \backslash (\P_{n,order-1})^dim$
│ │ │ │ +
180 * A basis function is represented by $dim$ rows.
│ │ │ │ +
181 */
│ │ │ │ +
182 for (unsigned int i=0; i<homogen; ++i)
│ │ │ │ +
183 {
│ │ │ │ +
184 // get a monomial $ p \in \P_{n,order}\backslash \P_{n,order-1}$
│ │ │ │ +
185 MI xval = val[notHomogen+i];
│ │ │ │ +
186 if(dim==2)
│ │ │ │ +
187 {
│ │ │ │ +
188 for (unsigned int r=0; r<dim; ++r)
│ │ │ │ +
189 {
│ │ │ │ +
190 // init rows to zero
│ │ │ │ +
191 mat_[row+r] = new Field[col_];
│ │ │ │ +
192 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ +
193 mat_[row+r][j] = 0.;
│ │ │ │ +
194 }
│ │ │ │ +
195
│ │ │ │ +
196 /* set $(-y,x)^T p$ with a homogeneous monomial $p$
│ │ │ │ +
197 *
│ │ │ │ +
198 * The loop over the monomials is needed to obtain the corresponding column index.
│ │ │ │ +
199 */
│ │ │ │ +
200 for (int w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ +
201 {
│ │ │ │ +
202 if (val[w] == xval*x[0])
│ │ │ │ +
203 mat_[row+1][w] = 1.;
│ │ │ │ +
204 if (val[w] == xval*x[1])
│ │ │ │ +
205 mat_[row][w] = -1.;
│ │ │ │ +
206 }
│ │ │ │ +
207 row +=dim;
│ │ │ │ +
208 }
│ │ │ │ +
209 else if(dim==3)
│ │ │ │ +
210 {
│ │ │ │ +
211 int skipLastDim = xval.z(0)>0;
│ │ │ │ +
212 /*
│ │ │ │ +
213 * Init 9 rows to zero.
│ │ │ │ +
214 * If the homogeneous monomial has a positive x-exponent (0,-z,y) gets skipped ( see example for the Nedelec space in 3D )
│ │ │ │ +
215 * In this case only 6 rows get initialised.
│ │ │ │ +
216 */
│ │ │ │ +
217 for (unsigned int r=0; r<dim*(dim-skipLastDim); ++r)
│ │ │ │ +
218 {
│ │ │ │ +
219 // init rows to zero
│ │ │ │ +
220 mat_[row+r] = new Field[col_];
│ │ │ │ +
221 for (unsigned int j=0; j<col_; ++j)
│ │ │ │ +
222 mat_[row+r][j] = 0.;
│ │ │ │ +
223 }
│ │ │ │ +
224
│ │ │ │ +
225 /*
│ │ │ │ +
226 * first $dim$ rows are for (z,0,-x)
│ │ │ │ +
227 *
│ │ │ │ +
228 * second $dim$ rows are for (-y,x,0)
│ │ │ │ +
229 *
│ │ │ │ +
230 * third $dim$ rows are for (0,-z,y)
│ │ │ │ +
231 *
│ │ │ │ +
232 */
│ │ │ │ +
233 for (unsigned int r=0; r<dim - skipLastDim; ++r)
│ │ │ │ +
234 {
│ │ │ │ +
235 int index = (r+dim-1)%dim;
│ │ │ │ +
236 for (int w=homogen+notHomogen; w<val.size(); ++w)
│ │ │ │ +
237 {
│ │ │ │ +
238 if (val[w] == xval*x[index])
│ │ │ │ +
239 mat_[row+r][w] = 1.;
│ │ │ │ +
240 if (val[w] == xval*x[r])
│ │ │ │ +
241 mat_[row+index][w] = -1.;
│ │ │ │ +
242 }
│ │ │ │ +
243 row +=dim;
│ │ │ │ +
244 }
│ │ │ │ +
245
│ │ │ │ +
246 }
│ │ │ │ +
247 }
│ │ │ │ +
248 }
│ │ │ │ +
│ │ │ │ +
249
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
251 {
│ │ │ │ +
252 for (unsigned int i=0; i<rows(); ++i) {
│ │ │ │ +
253 delete [] mat_[i];
│ │ │ │ +
254 }
│ │ │ │ +
255 delete [] mat_;
│ │ │ │ +
256 }
│ │ │ │ +
│ │ │ │ +
257
│ │ │ │ +
│ │ │ │ +
258 unsigned int cols() const {
│ │ │ │ +
259 return col_;
│ │ │ │ +
260 }
│ │ │ │ +
│ │ │ │ +
261
│ │ │ │ +
│ │ │ │ +
262 unsigned int rows() const {
│ │ │ │ +
263 return row_;
│ │ │ │ +
264 }
│ │ │ │ +
│ │ │ │ +
265
│ │ │ │ +
266 template <class Vector>
│ │ │ │ +
│ │ │ │ +
267 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ +
268 {
│ │ │ │ +
269 const unsigned int N = cols();
│ │ │ │ +
270 assert( vec.size() == N );
│ │ │ │ +
271 for (unsigned int i=0; i<N; ++i)
│ │ │ │ +
272 field_cast(mat_[row][i],vec[i]);
│ │ │ │ +
273 }
│ │ │ │ +
│ │ │ │ +
274
│ │ │ │ +
275 unsigned int row_,col_;
│ │ │ │ +
276 Field **mat_;
│ │ │ │ +
277 };
│ │ │ │ +
│ │ │ │ +
278
│ │ │ │ +
279
│ │ │ │ +
280}
│ │ │ │ +
281#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A class providing orthonormal basis functions.
Definition orthonormal.hh:38
│ │ │ │ -
OrthonormalLocalFiniteElement(const GeometryType &gt, unsigned int order)
Definition orthonormal.hh:47
│ │ │ │ -
A factory class for the dg local coefficients.
Definition dglocalcoefficients.hh:59
│ │ │ │ -
A factory class for the local l2 interpolations taking a basis factory.
Definition l2interpolation.hh:163
│ │ │ │ -
A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis,...
Definition localfunctions/utility/localfiniteelement.hh:25
│ │ │ │ -
LocalFiniteElementTraits< typename BasisF::Object, typename CoeffF::Object, typename InterpolF::Object > Traits
Definition localfunctions/utility/localfiniteelement.hh:29
│ │ │ │ - │ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition nedelecsimplexprebasis.hh:64
│ │ │ │ +
NedelecVecMatrix(std::size_t order)
Definition nedelecsimplexprebasis.hh:69
│ │ │ │ +
MultiIndex< dim, Field > MI
Definition nedelecsimplexprebasis.hh:67
│ │ │ │ +
unsigned int row_
Definition nedelecsimplexprebasis.hh:275
│ │ │ │ +
unsigned int cols() const
Definition nedelecsimplexprebasis.hh:258
│ │ │ │ +
~NedelecVecMatrix()
Definition nedelecsimplexprebasis.hh:250
│ │ │ │ +
MonomialBasis< geometryId, MI > MIBasis
Definition nedelecsimplexprebasis.hh:68
│ │ │ │ +
unsigned int col_
Definition nedelecsimplexprebasis.hh:275
│ │ │ │ +
static const unsigned int dim
Definition nedelecsimplexprebasis.hh:66
│ │ │ │ +
void row(const unsigned int row, Vector &vec) const
Definition nedelecsimplexprebasis.hh:267
│ │ │ │ +
static constexpr GeometryType geometry
Definition nedelecsimplexprebasis.hh:65
│ │ │ │ +
unsigned int rows() const
Definition nedelecsimplexprebasis.hh:262
│ │ │ │ +
Field ** mat_
Definition nedelecsimplexprebasis.hh:276
│ │ │ │ +
Definition nedelecsimplexprebasis.hh:25
│ │ │ │ +
static void release(Object *object)
Definition nedelecsimplexprebasis.hh:59
│ │ │ │ +
MBasisFactory::Object MBasis
Definition nedelecsimplexprebasis.hh:27
│ │ │ │ +
static Object * create(Key order)
Definition nedelecsimplexprebasis.hh:41
│ │ │ │ +
PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis
Definition nedelecsimplexprebasis.hh:29
│ │ │ │ +
const Basis Object
Definition nedelecsimplexprebasis.hh:31
│ │ │ │ +
StandardEvaluator< MBasis > EvalMBasis
Definition nedelecsimplexprebasis.hh:28
│ │ │ │ +
MonomialBasisProvider< dim, Field > MBasisFactory
Definition nedelecsimplexprebasis.hh:26
│ │ │ │ +
std::size_t Key
Definition nedelecsimplexprebasis.hh:32
│ │ │ │ +
Definition nedelecsimplexprebasis.hh:36
│ │ │ │ +
MonomialBasisProvider< dd, FF > Type
Definition nedelecsimplexprebasis.hh:37
│ │ │ │ +
Definition basisevaluator.hh:131
│ │ │ │ +
Definition monomialbasis.hh:440
│ │ │ │ +
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ +
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ +
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ +
Definition monomialbasis.hh:780
│ │ │ │ +
Definition multiindex.hh:38
│ │ │ │ +
int z(int i) const
Definition multiindex.hh:92
│ │ │ │ +
Definition polynomialbasis.hh:348
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,76 +1,406 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -orthonormal.hh │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ +nedelecsimplexprebasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_ORTHONORMALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXPREBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h> │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -32 template< unsigned int dimDomain, class D, class R, │ │ │ │ │ -33 class SF=R, class CF=SF > │ │ │ │ │ -_3_4 class _O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -35 : public _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< OrthonormalBasisFactory< dimDomain, SF, │ │ │ │ │ -CF >, │ │ │ │ │ -36 DGLocalCoefficientsFactory< OrthonormalBasisFactory< dimDomain, SF, CF > >, │ │ │ │ │ -37 LocalL2InterpolationFactory< OrthonormalBasisFactory< dimDomain, SF, CF │ │ │ │ │ ->,true > > │ │ │ │ │ -38 { │ │ │ │ │ -39 typedef _G_e_n_e_r_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_, │ │ │ │ │ -_C_F_ _>, │ │ │ │ │ -40 _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_,_ _C_F_ _> >, │ │ │ │ │ -41 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_D_o_m_a_i_n_,_ _S_F_,_ _C_F │ │ │ │ │ -_>,true > > _B_a_s_e; │ │ │ │ │ -42 public: │ │ │ │ │ -43 using typename _B_a_s_e_:_:_T_r_a_i_t_s; │ │ │ │ │ -44 │ │ │ │ │ -_4_7 _O_r_t_h_o_n_o_r_m_a_l_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t ( const GeometryType >, unsigned int order ) │ │ │ │ │ -48 : _B_a_s_e(gt, order) │ │ │ │ │ -49 {} │ │ │ │ │ -50 }; │ │ │ │ │ -51 │ │ │ │ │ -52} │ │ │ │ │ -53 │ │ │ │ │ -54#endif │ │ │ │ │ -_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ -_l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 template < GeometryType::Id geometryId, class Field > │ │ │ │ │ +18 struct NedelecVecMatrix; │ │ │ │ │ +19 │ │ │ │ │ +23 template │ │ │ │ │ +_2_4 struct _N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +25 { │ │ │ │ │ +_2_6 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_i_m_,_F_i_e_l_d_> _M_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_2_7 typedef typename MBasisFactory::Object _M_B_a_s_i_s; │ │ │ │ │ +_2_8 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_B_a_s_i_s_> _E_v_a_l_M_B_a_s_i_s; │ │ │ │ │ +_2_9 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_M_B_a_s_i_s_,_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_d_i_m_> > │ │ │ │ │ +_B_a_s_i_s; │ │ │ │ │ +30 │ │ │ │ │ +_3_1 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ +_3_2 typedef std::size_t _K_e_y; │ │ │ │ │ +33 │ │ │ │ │ +34 template │ │ │ │ │ +_3_5 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +36 { │ │ │ │ │ +_3_7 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ +38 }; │ │ │ │ │ +39 │ │ │ │ │ +40 template< GeometryType::Id geometryId > │ │ │ │ │ +_4_1 static _O_b_j_e_c_t *_c_r_e_a_t_e ( _K_e_y order ) │ │ │ │ │ +42 { │ │ │ │ │ +43 /* │ │ │ │ │ +44 * The nedelec parameter begins at 1. │ │ │ │ │ +45 * This is the numbering used by J.C. Nedelec himself. │ │ │ │ │ +46 * See "Mixed Finite Elements in \R^3" published in 1980. │ │ │ │ │ +47 * │ │ │ │ │ +48 * This construction is based on the construction of Raviart-Thomas elements. │ │ │ │ │ +49 * There the numbering starts at 0. │ │ │ │ │ +50 * Because of this we reduce the order internally by 1. │ │ │ │ │ +51 */ │ │ │ │ │ +52 order--; │ │ │ │ │ +53 _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> vecMatrix(order); │ │ │ │ │ +54 _M_B_a_s_i_s *mbasis = MBasisFactory::template create(order+1); │ │ │ │ │ +55 std::remove_const_t* tmBasis = new std::remove_const_t │ │ │ │ │ +(*mbasis); │ │ │ │ │ +56 tmBasis->fill(vecMatrix); │ │ │ │ │ +57 return tmBasis; │ │ │ │ │ +58 } │ │ │ │ │ +_5_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +60 }; │ │ │ │ │ +61 │ │ │ │ │ +62 template │ │ │ │ │ +_6_3 struct _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ +64 { │ │ │ │ │ +_6_5 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ +_6_6 static const unsigned int _d_i_m = _g_e_o_m_e_t_r_y._d_i_m(); │ │ │ │ │ +_6_7 typedef _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _M_I; │ │ │ │ │ +_6_8 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_M_I_> _M_I_B_a_s_i_s; │ │ │ │ │ +_6_9 _N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x(std::size_t order) │ │ │ │ │ +70 { │ │ │ │ │ +71 /* │ │ │ │ │ +72 * Construction of Nedelec elements see "Mixed Finite Elements in \R^3" by │ │ │ │ │ +Nedelec, 1980. │ │ │ │ │ +73 * │ │ │ │ │ +74 * Let $\P_{n,k}$ be the space of polynomials in $n$ variables with degree │ │ │ │ │ +$\leq k$. │ │ │ │ │ +75 * The space of Nedelec functions in $n$ dimensions with index $k$ is defined │ │ │ │ │ +as │ │ │ │ │ +76 * │ │ │ │ │ +77 * \begin{equation*} │ │ │ │ │ +78 * Ned_k := (\P_{n,k-1})^n \oplus \{p \in (\P_{n,k})^n: =0 \} │ │ │ │ │ +79 * \end{equation*} │ │ │ │ │ +80 * with $x=(x,y)$ in two dimensions and $x=(x,y,z)$ in three dimensions. │ │ │ │ │ +81 * │ │ │ │ │ +82 * For $Ned_k$ holds │ │ │ │ │ +83 * \begin{equation*} │ │ │ │ │ +84 * (\P_{n,k-1})^n \subset Ned_k \subset (\P_{n,k})^n. │ │ │ │ │ +85 * \end{equation*} │ │ │ │ │ +86 * │ │ │ │ │ +87 * We construct $(\P_{n,k})^n$ and and only use the monomials contained in │ │ │ │ │ +$Ned$. │ │ │ │ │ +88 * │ │ │ │ │ +89 */ │ │ │ │ │ +90 if( (_d_i_m!=2 && _d_i_m!=3) || !_g_e_o_m_e_t_r_y.isSimplex()) │ │ │ │ │ +91 DUNE_THROW(Dune::NotImplemented,"High order nedelec elements are only │ │ │ │ │ +supported by simplices in 2d and 3d"); │ │ │ │ │ +92 │ │ │ │ │ +93 _M_I_B_a_s_i_s basis(order+1); │ │ │ │ │ +94 FieldVector< MI, dim > x; │ │ │ │ │ +95 /* │ │ │ │ │ +96 * Init MultiIndices │ │ │ │ │ +97 * x[0]=(1,0,0) x │ │ │ │ │ +98 * x[1]=(0,1,0) y │ │ │ │ │ +99 * x[2]=(0,0,1) z │ │ │ │ │ +100 */ │ │ │ │ │ +101 for( unsigned int i = 0; i < _d_i_m; ++i ) │ │ │ │ │ +102 x[i].set(i,1); │ │ │ │ │ +103 std::vector< MI > val( basis._s_i_z_e() ); │ │ │ │ │ +104 │ │ │ │ │ +105 // val now contains all monomials in $n$ dimensions with degree $\leq │ │ │ │ │ +order+1$ │ │ │ │ │ +106 basis._e_v_a_l_u_a_t_e( x, val ); │ │ │ │ │ +107 │ │ │ │ │ +108 _c_o_l__ = basis._s_i_z_e(); │ │ │ │ │ +109 │ │ │ │ │ +110 // get $\dim (\P_{n,order-1})$ │ │ │ │ │ +111 unsigned int notHomogen = 0; │ │ │ │ │ +112 if (order>0) │ │ │ │ │ +113 notHomogen = basis._s_i_z_e_s()[order-1]; │ │ │ │ │ +114 │ │ │ │ │ +115 // the number of basis functions for the set of homogeneous polynomials │ │ │ │ │ +with degree $order$ │ │ │ │ │ +116 unsigned int homogen = basis._s_i_z_e_s()[order]-notHomogen; │ │ │ │ │ +117 │ │ │ │ │ +118 /* │ │ │ │ │ +119 * 2D: │ │ │ │ │ +120 * \begin{equation*} │ │ │ │ │ +121 * Ned_{order} = (\P_{order-1})^2 \oplus (-y,x)^T \widetilde \P_{order-1} │ │ │ │ │ +122 * \end{equation*} │ │ │ │ │ +123 * │ │ │ │ │ +124 * It gets more complicated in higher dimensions. │ │ │ │ │ +125 * │ │ │ │ │ +126 * 3D: │ │ │ │ │ +127 * \begin{equation*} │ │ │ │ │ +128 * Ned_{order} = (\P_{n,order-1})^3 \oplus (z,0,-x)^T \widetilde \P_ │ │ │ │ │ +{n,order-1} \oplus (-y,x,0)^T \widetilde \P_{n,order-1} \oplus (0,-z,y)^T │ │ │ │ │ +\widetilde \P_{n-1,order-1} │ │ │ │ │ +129 * \end{equation*} │ │ │ │ │ +130 * │ │ │ │ │ +131 * Note the last term. The index $n-1$ is on purpose. │ │ │ │ │ +132 * Else i.e. k=2 │ │ │ │ │ +133 * │ │ │ │ │ +134 * (0,z,-y)^T x = (z,0,-x)^T y - (y,-x,0)^T z. │ │ │ │ │ +135 * │ │ │ │ │ +136 */ │ │ │ │ │ +137 │ │ │ │ │ +138 /* │ │ │ │ │ +139 * compute the number of rows for the coefficient matrix │ │ │ │ │ +140 * │ │ │ │ │ +141 * row_ = dim* \dim Ned_{order} │ │ │ │ │ +142 */ │ │ │ │ │ +143 if (_d_i_m == 2) │ │ │ │ │ +144 _r_o_w__ = (notHomogen*_d_i_m+homogen*(_d_i_m+1))*_d_i_m; │ │ │ │ │ +145 else if (_d_i_m==3) │ │ │ │ │ +146 { │ │ │ │ │ +147 // get dim \P_{n-1,order-1} │ │ │ │ │ +148 int homogenTwoVariables = 0; │ │ │ │ │ +149 for( int w = notHomogen; w0; │ │ │ │ │ +212 /* │ │ │ │ │ +213 * Init 9 rows to zero. │ │ │ │ │ +214 * If the homogeneous monomial has a positive x-exponent (0,-z,y) gets │ │ │ │ │ +skipped ( see example for the Nedelec space in 3D ) │ │ │ │ │ +215 * In this case only 6 rows get initialised. │ │ │ │ │ +216 */ │ │ │ │ │ +217 for (unsigned int r=0; r<_d_i_m*(_d_i_m-skipLastDim); ++r) │ │ │ │ │ +218 { │ │ │ │ │ +219 // init rows to zero │ │ │ │ │ +220 _m_a_t__[_r_o_w+r] = new Field[_c_o_l__]; │ │ │ │ │ +221 for (unsigned int j=0; j<_c_o_l__; ++j) │ │ │ │ │ +222 _m_a_t__[_r_o_w+r][j] = 0.; │ │ │ │ │ +223 } │ │ │ │ │ +224 │ │ │ │ │ +225 /* │ │ │ │ │ +226 * first $dim$ rows are for (z,0,-x) │ │ │ │ │ +227 * │ │ │ │ │ +228 * second $dim$ rows are for (-y,x,0) │ │ │ │ │ +229 * │ │ │ │ │ +230 * third $dim$ rows are for (0,-z,y) │ │ │ │ │ +231 * │ │ │ │ │ +232 */ │ │ │ │ │ +233 for (unsigned int r=0; r<_d_i_m - skipLastDim; ++r) │ │ │ │ │ +234 { │ │ │ │ │ +235 int index = (r+_d_i_m-1)%_d_i_m; │ │ │ │ │ +236 for (int w=homogen+notHomogen; w │ │ │ │ │ +_2_6_7 void _r_o_w( const unsigned int _r_o_w, Vector &vec ) const │ │ │ │ │ +268 { │ │ │ │ │ +269 const unsigned int N = _c_o_l_s(); │ │ │ │ │ +270 assert( vec.size() == N ); │ │ │ │ │ +271 for (unsigned int i=0; i Traits │ │ │ │ │ -DDeeffiinniittiioonn localfunctions/utility/localfiniteelement.hh:29 │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_._h_h │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:64 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ +NedelecVecMatrix(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_M_I │ │ │ │ │ +MultiIndex< dim, Field > MI │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w__ │ │ │ │ │ +unsigned int row_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:275 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ +unsigned int cols() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:258 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_~_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x │ │ │ │ │ +~NedelecVecMatrix() │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:250 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_M_I_B_a_s_i_s │ │ │ │ │ +MonomialBasis< geometryId, MI > MIBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_c_o_l__ │ │ │ │ │ +unsigned int col_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:275 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_d_i_m │ │ │ │ │ +static const unsigned int dim │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ +void row(const unsigned int row, Vector &vec) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:267 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ +static constexpr GeometryType geometry │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ +unsigned int rows() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:262 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_V_e_c_M_a_t_r_i_x_:_:_m_a_t__ │ │ │ │ │ +Field ** mat_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:276 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:59 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s │ │ │ │ │ +MBasisFactory::Object MBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(Key order) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ +PolynomialBasisWithMatrix< EvalMBasis, SparseCoeffMatrix< Field, dim > > Basis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const Basis Object │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_M_B_a_s_i_s │ │ │ │ │ +StandardEvaluator< MBasis > EvalMBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +MonomialBasisProvider< dim, Field > MBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ +MonomialBasisProvider< dd, FF > Type │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexprebasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ +DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ +void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ +values) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ +const unsigned int * sizes(unsigned int order) const │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ +_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ +int z(int i) const │ │ │ │ │ +DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interpolationhelper.hh File Reference │ │ │ │ +dune-localfunctions: nedelecsimplexinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,50 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interpolationhelper.hh File Reference
│ │ │ │ +
nedelecsimplexinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/concept.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +
#include <fstream>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <numeric>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/utility/interpolationhelper.hh>
│ │ │ │ +#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::InterpolationHelper< F, dimension >
class  Dune::LocalCoefficientsContainer
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Func, Vector, true >
struct  Dune::NedelecCoefficientsFactory< dim >
 
struct  Dune::InterpolationHelper< F, dimension >::Helper< Basis, Matrix, false >
struct  Dune::NedelecL2InterpolationBuilder< dim, Field >
 
class  Dune::NedelecL2Interpolation< dimension, F >
 An L2-based interpolation for Nedelec. More...
 
struct  Dune::NedelecL2InterpolationFactory< dim, Field >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,39 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -interpolationhelper.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +nedelecsimplexinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _> │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _>_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e │ │ │ │ │ - _> │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _d_i_m_ _> │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_ _F_,_ _d_i_m_e_n_s_i_o_n_ _>_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_, │ │ │ │ │ - _f_a_l_s_e_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> │ │ │ │ │ +  An L2-based interpolation for Nedelec. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00476_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interpolationhelper.hh Source File │ │ │ │ +dune-localfunctions: nedelecsimplexinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,199 +70,817 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
interpolationhelper.hh
│ │ │ │ +
nedelecsimplexinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ -
6#define GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/concept.hh>
│ │ │ │ - │ │ │ │ +
8#include <fstream>
│ │ │ │ +
9#include <utility>
│ │ │ │ +
10#include <numeric>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/exceptions.hh>
│ │ │ │
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16 // A small helper class to avoid having to
│ │ │ │ -
17 // write the interpolation twice (once for function
│ │ │ │ -
18 // and once for a basis)
│ │ │ │ -
19 template< class F, unsigned int dimension >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
21 {
│ │ │ │ -
22 template <class Func,class Container, bool type>
│ │ │ │ -
23 struct Helper;
│ │ │ │ -
24 };
│ │ │ │ -
│ │ │ │ -
25 template <class F,unsigned int d>
│ │ │ │ -
26 template <class Func,class Vector>
│ │ │ │ -
│ │ │ │ -
27 struct InterpolationHelper<F,d>::Helper<Func,Vector,true>
│ │ │ │ -
28 // Func is of Function type
│ │ │ │ -
29 {
│ │ │ │ -
30 typedef std::vector< Dune::FieldVector<F,d> > Result;
│ │ │ │ -
│ │ │ │ -
31 Helper(const Func & func, Vector &vec)
│ │ │ │ -
32 : func_(func),
│ │ │ │ -
33 vec_(vec),
│ │ │ │ -
34 tmp_(1)
│ │ │ │ -
35 {}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
36 const typename Vector::value_type &operator()(unsigned int row,unsigned int col)
│ │ │ │ -
37 {
│ │ │ │ -
38 return vec_[row];
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40 template <class Fy>
│ │ │ │ -
│ │ │ │ -
41 void set(unsigned int row,unsigned int col,
│ │ │ │ -
42 const Fy &val)
│ │ │ │ -
43 {
│ │ │ │ -
44 assert(col==0);
│ │ │ │ -
45 assert(row<vec_.size());
│ │ │ │ -
46 field_cast( val, vec_[row] );
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48 template <class Fy>
│ │ │ │ -
│ │ │ │ -
49 void add(unsigned int row,unsigned int col,
│ │ │ │ -
50 const Fy &val)
│ │ │ │ -
51 {
│ │ │ │ -
52 assert(col==0);
│ │ │ │ -
53 assert(row<vec_.size());
│ │ │ │ -
54 vec_[row] += field_cast<typename Vector::value_type>(val);
│ │ │ │ +
14#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
15#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
16#include <dune/geometry/type.hh>
│ │ │ │ +
17
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
22
│ │ │ │ +
23namespace Dune
│ │ │ │ +
24{
│ │ │ │ +
25
│ │ │ │ +
26 // Internal Forward Declarations
│ │ │ │ +
27 // -----------------------------
│ │ │ │ +
28
│ │ │ │ +
32 template < unsigned int dim, class Field >
│ │ │ │ +
33 struct NedelecL2InterpolationFactory;
│ │ │ │ +
34
│ │ │ │ +
35
│ │ │ │ +
36
│ │ │ │ +
37 // LocalCoefficientsContainer
│ │ │ │ +
38 // --------------------------
│ │ │ │ +
39
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
41 {
│ │ │ │ + │ │ │ │ +
43
│ │ │ │ +
44 public:
│ │ │ │ +
45 template <class Setter>
│ │ │ │ +
│ │ │ │ +
46 LocalCoefficientsContainer ( const Setter &setter )
│ │ │ │ +
47 {
│ │ │ │ +
48 setter.setLocalKeys(localKey_);
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
51 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ +
52 {
│ │ │ │ +
53 assert( i < size() );
│ │ │ │ +
54 return localKey_[ i ];
│ │ │ │
55 }
│ │ │ │
│ │ │ │ -
56 template <class DomainVector>
│ │ │ │ +
56
│ │ │ │
│ │ │ │ -
57 const Result &evaluate(const DomainVector &x) const
│ │ │ │ +
57 std::size_t size () const
│ │ │ │
58 {
│ │ │ │ -
59 field_cast(func_(x), tmp_[0] );
│ │ │ │ -
60 return tmp_;
│ │ │ │ -
61 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
62 unsigned int size() const
│ │ │ │ -
63 {
│ │ │ │ -
64 return 1;
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66 const Func &func_;
│ │ │ │ -
67 Vector &vec_;
│ │ │ │ -
68 mutable Result tmp_;
│ │ │ │ -
69 };
│ │ │ │ +
59 return localKey_.size();
│ │ │ │ +
60 }
│ │ │ │
│ │ │ │ -
70 template <class F,unsigned int d>
│ │ │ │ -
71 template <class Basis,class Matrix>
│ │ │ │ +
61
│ │ │ │ +
62 private:
│ │ │ │ +
63 std::vector< LocalKey > localKey_;
│ │ │ │ +
64 };
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66
│ │ │ │ +
67
│ │ │ │ +
68 // NedelecCoefficientsFactory
│ │ │ │ +
69 // --------------------------------
│ │ │ │ +
70
│ │ │ │ +
71 template < unsigned int dim >
│ │ │ │
│ │ │ │ -
72 struct InterpolationHelper<F,d>::Helper<Basis,Matrix,false>
│ │ │ │ -
73 // Func is of Basis type
│ │ │ │ -
74 {
│ │ │ │ -
75 typedef std::vector< Dune::FieldVector<F,d> > Result;
│ │ │ │ -
│ │ │ │ -
76 Helper(const Basis & basis, Matrix &matrix)
│ │ │ │ -
77 : basis_(basis),
│ │ │ │ -
78 matrix_(matrix),
│ │ │ │ -
79 tmp_(basis.size()) {}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
80 const F &operator()(unsigned int row,unsigned int col) const
│ │ │ │ -
81 {
│ │ │ │ -
82 return matrix_[row][col];
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
84 F &operator()(unsigned int row,unsigned int col)
│ │ │ │ -
85 {
│ │ │ │ -
86 return matrix_[row][col];
│ │ │ │ + │ │ │ │ +
73 {
│ │ │ │ +
74 typedef std::size_t Key;
│ │ │ │ + │ │ │ │ +
76
│ │ │ │ +
77 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
78 static Object *create( const Key &key )
│ │ │ │ +
79 {
│ │ │ │ +
80 typedef NedelecL2InterpolationFactory< dim, double > InterpolationFactory;
│ │ │ │ +
81 if( !supports< geometryId >( key ) )
│ │ │ │ +
82 return nullptr;
│ │ │ │ +
83 typename InterpolationFactory::Object *interpolation = InterpolationFactory::template create< geometryId >( key );
│ │ │ │ +
84 Object *localKeys = new Object( *interpolation );
│ │ │ │ +
85 InterpolationFactory::release( interpolation );
│ │ │ │ +
86 return localKeys;
│ │ │ │
87 }
│ │ │ │
│ │ │ │ -
88 template <class Fy>
│ │ │ │ -
│ │ │ │ -
89 void set(unsigned int row,unsigned int col,
│ │ │ │ -
90 const Fy &val)
│ │ │ │ +
88
│ │ │ │ +
89 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
90 static bool supports ( const Key &key )
│ │ │ │
91 {
│ │ │ │ -
92 assert(col<matrix_.cols());
│ │ │ │ -
93 assert(row<matrix_.rows());
│ │ │ │ -
94 field_cast(val,matrix_[row][col]);
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
96 template <class Fy>
│ │ │ │ -
│ │ │ │ -
97 void add(unsigned int row,unsigned int col,
│ │ │ │ -
98 const Fy &val)
│ │ │ │ -
99 {
│ │ │ │ -
100 assert(col<matrix_.cols());
│ │ │ │ -
101 assert(row<matrix_.rows());
│ │ │ │ -
102 matrix_[row][col] += val;
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104 template <class DomainVector>
│ │ │ │ -
│ │ │ │ -
105 const Result &evaluate(const DomainVector &x) const
│ │ │ │ -
106 {
│ │ │ │ -
107 basis_.template evaluate<0>(x,tmp_);
│ │ │ │ -
108 return tmp_;
│ │ │ │ -
109 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
110 unsigned int size() const
│ │ │ │ -
111 {
│ │ │ │ -
112 return basis_.size();
│ │ │ │ -
113 }
│ │ │ │ -
│ │ │ │ -
114
│ │ │ │ -
115 const Basis &basis_;
│ │ │ │ -
116 Matrix &matrix_;
│ │ │ │ -
117 mutable Result tmp_;
│ │ │ │ -
118 };
│ │ │ │ -
│ │ │ │ -
119}
│ │ │ │ -
120#endif // GENERIC_INTERPOLATIONHELPER_HH
│ │ │ │ - │ │ │ │ +
92 GeometryType gt = geometryId;
│ │ │ │ +
93 return gt.isTriangle() || gt.isTetrahedron() ;
│ │ │ │ +
94 }
│ │ │ │ +
│ │ │ │ +
95 static void release( Object *object ) { delete object; }
│ │ │ │ +
96 };
│ │ │ │ +
│ │ │ │ +
97
│ │ │ │ +
98
│ │ │ │ +
99
│ │ │ │ +
100 // NedelecL2InterpolationBuilder
│ │ │ │ +
101 // ------------------------
│ │ │ │ +
102
│ │ │ │ +
103 // L2 Interpolation requires:
│ │ │ │ +
104 // - for element
│ │ │ │ +
105 // - test basis
│ │ │ │ +
106 // - for each face (dynamic)
│ │ │ │ +
107 // - test basis
│ │ │ │ +
108 // - tangents
│ │ │ │ +
109 // - for each edge (dynamic)
│ │ │ │ +
110 // - test basis
│ │ │ │ +
111 // - tangent
│ │ │ │ +
112 template< unsigned int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
114 {
│ │ │ │ +
115 static const unsigned int dimension = dim;
│ │ │ │ +
116
│ │ │ │ +
117 // for the dofs associated to the element
│ │ │ │ + │ │ │ │ + │ │ │ │ +
120
│ │ │ │ +
121 // for the dofs associated to the faces
│ │ │ │ + │ │ │ │ + │ │ │ │ +
124
│ │ │ │ +
125 // for the dofs associated to the edges
│ │ │ │ + │ │ │ │ + │ │ │ │ +
128
│ │ │ │ +
129 // the tangent of the edges
│ │ │ │ +
130 typedef FieldVector< Field, dimension > Tangent;
│ │ │ │ +
131
│ │ │ │ +
132 // the normal and the tangents of the faces
│ │ │ │ +
133 typedef FieldVector< Field, dimension > Normal;
│ │ │ │ +
134 typedef std::array<FieldVector< Field, dimension >,dim-1> FaceTangents;
│ │ │ │ +
135
│ │ │ │ + │ │ │ │ +
137
│ │ │ │ + │ │ │ │ + │ │ │ │ +
140
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
142 {
│ │ │ │ +
143 TestBasisFactory::release( testBasis_ );
│ │ │ │ +
144 for( FaceStructure &f : faceStructure_ )
│ │ │ │ + │ │ │ │ +
146 for( EdgeStructure& e : edgeStructure_ )
│ │ │ │ + │ │ │ │ +
148 }
│ │ │ │ +
│ │ │ │ +
149
│ │ │ │ +
│ │ │ │ +
150 unsigned int topologyId () const
│ │ │ │ +
151 {
│ │ │ │ +
152 return geometry_.id();
│ │ │ │ +
153 }
│ │ │ │ +
│ │ │ │ +
154
│ │ │ │ +
│ │ │ │ +
155 GeometryType type () const
│ │ │ │ +
156 {
│ │ │ │ +
157 return geometry_;
│ │ │ │ +
158 }
│ │ │ │ +
│ │ │ │ +
159
│ │ │ │ +
│ │ │ │ +
160 std::size_t order () const
│ │ │ │ +
161 {
│ │ │ │ +
162 return order_;
│ │ │ │ +
163 }
│ │ │ │ +
│ │ │ │ +
164
│ │ │ │ +
165 // number of faces
│ │ │ │ +
│ │ │ │ +
166 unsigned int faceSize () const
│ │ │ │ +
167 {
│ │ │ │ +
168 return numberOfFaces_;
│ │ │ │ +
169 }
│ │ │ │ +
│ │ │ │ +
170
│ │ │ │ +
171 // number of edges
│ │ │ │ +
│ │ │ │ +
172 unsigned int edgeSize () const
│ │ │ │ +
173 {
│ │ │ │ +
174 return numberOfEdges_;
│ │ │ │ +
175 }
│ │ │ │ +
│ │ │ │ +
176
│ │ │ │ +
177 // basis associated to the element
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
179 {
│ │ │ │ +
180 return testBasis_;
│ │ │ │ +
181 }
│ │ │ │ +
│ │ │ │ +
182
│ │ │ │ +
183 // basis associated to face f
│ │ │ │ +
│ │ │ │ +
184 TestFaceBasis *testFaceBasis ( unsigned int f ) const
│ │ │ │ +
185 {
│ │ │ │ +
186 assert( f < faceSize() );
│ │ │ │ +
187 return faceStructure_[ f ].basis_;
│ │ │ │ +
188 }
│ │ │ │ +
│ │ │ │ +
189
│ │ │ │ +
190 // basis associated to edge e
│ │ │ │ +
│ │ │ │ +
191 TestEdgeBasis *testEdgeBasis ( unsigned int e ) const
│ │ │ │ +
192 {
│ │ │ │ +
193 assert( e < edgeSize() );
│ │ │ │ +
194 return edgeStructure_[ e ].basis_;
│ │ │ │ +
195 }
│ │ │ │ +
│ │ │ │ +
196
│ │ │ │ +
│ │ │ │ +
197 const Tangent& edgeTangent ( unsigned int e ) const
│ │ │ │ +
198 {
│ │ │ │ +
199 assert( e < edgeSize() );
│ │ │ │ +
200 return edgeStructure_[ e ].tangent_;
│ │ │ │ +
201 }
│ │ │ │ +
│ │ │ │ +
202
│ │ │ │ +
│ │ │ │ +
203 const FaceTangents& faceTangents ( unsigned int f ) const
│ │ │ │ +
204 {
│ │ │ │ +
205 assert( f < faceSize() );
│ │ │ │ +
206 return faceStructure_[ f ].faceTangents_;
│ │ │ │ +
207 }
│ │ │ │ +
│ │ │ │ +
208
│ │ │ │ +
│ │ │ │ +
209 const Normal &normal ( unsigned int f ) const
│ │ │ │ +
210 {
│ │ │ │ +
211 assert( f < faceSize() );
│ │ │ │ +
212 return faceStructure_[ f ].normal_;
│ │ │ │ +
213 }
│ │ │ │ +
│ │ │ │ +
214
│ │ │ │ +
215 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
216 void build ( std::size_t order )
│ │ │ │ +
217 {
│ │ │ │ +
218 constexpr GeometryType geometry = geometryId;
│ │ │ │ +
219 order_ = order;
│ │ │ │ +
220 geometry_ = geometry;
│ │ │ │ +
221
│ │ │ │ +
222 /*
│ │ │ │ +
223 * The Nedelec parameter begins at 1.
│ │ │ │ +
224 * This is the numbering used by J.C. Nedelec himself.
│ │ │ │ +
225 * See "Mixed Finite Elements in \R^3" published in 1980.
│ │ │ │ +
226 *
│ │ │ │ +
227 * This construction is based on the construction of Raviart-Thomas elements.
│ │ │ │ +
228 * There the numbering starts at 0.
│ │ │ │ +
229 * Because of this we reduce the order internally by 1.
│ │ │ │ +
230 */
│ │ │ │ +
231 order--;
│ │ │ │ +
232
│ │ │ │ +
233 // if dimension == 2: order-1 on element
│ │ │ │ +
234 // if dimension == 3: order-2 on element
│ │ │ │ +
235 int requiredOrder = static_cast<int>(dimension==3);
│ │ │ │ +
236 testBasis_ = (order > requiredOrder ? TestBasisFactory::template create< geometry >( order-1-requiredOrder ) : nullptr);
│ │ │ │ +
237
│ │ │ │ +
238 const auto &refElement = ReferenceElements< Field, dimension >::general( type() );
│ │ │ │ +
239
│ │ │ │ +
240 numberOfFaces_ = refElement.size( 1 );
│ │ │ │ +
241 faceStructure_.reserve( numberOfFaces_ );
│ │ │ │ +
242
│ │ │ │ +
243 // compute the basis, tangents and normals of each face
│ │ │ │ +
244 for (std::size_t i=0; i<numberOfFaces_; i++)
│ │ │ │ +
245 {
│ │ │ │ +
246 FieldVector<Field,dimension> zero(0);
│ │ │ │ + │ │ │ │ +
248 faceTangents.fill(zero);
│ │ │ │ +
249
│ │ │ │ +
250 // use the first dim-1 vertices of a face to compute the tangents
│ │ │ │ +
251 auto vertices = refElement.subEntities(i,1,dim).begin();
│ │ │ │ +
252 auto vertex1 = *vertices;
│ │ │ │ +
253 for(int j=1; j<dim;j++)
│ │ │ │ +
254 {
│ │ │ │ +
255 auto vertex2 = vertices[j];
│ │ │ │ +
256
│ │ │ │ +
257 faceTangents[j-1] = refElement.position(vertex2,dim) - refElement.position(vertex1,dim);
│ │ │ │ +
258
│ │ │ │ +
259 // By default, edges point from the vertex with the smaller index
│ │ │ │ +
260 // to the vertex with the larger index.
│ │ │ │ +
261 if (vertex1>vertex2)
│ │ │ │ +
262 faceTangents[j-1] *=-1;
│ │ │ │ +
263
│ │ │ │ +
264 vertex1 = vertex2;
│ │ │ │ +
265 }
│ │ │ │ +
266
│ │ │ │ +
267 /* For simplices or cubes of arbitrary dimension you could just use
│ │ │ │ +
268 *
│ │ │ │ +
269 * ```
│ │ │ │ +
270 * GeometryType faceGeometry = Impl::getBase(geometry_);
│ │ │ │ +
271 * TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? TestFaceBasisFactory::template create< faceGeometry >( order-1 ) : nullptr);
│ │ │ │ +
272 * ```
│ │ │ │ +
273 *
│ │ │ │ +
274 * For i.e. Prisms and Pyramids in 3d this does not work because they contain squares and triangles as faces.
│ │ │ │ +
275 * And depending on the dynamic face index a different face geometry is needed.
│ │ │ │ +
276 *
│ │ │ │ +
277 */
│ │ │ │ +
278 TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? Impl::IfGeometryType< CreateFaceBasis, dimension-1 >::apply( refElement.type( i, 1 ), order-1 ) : nullptr);
│ │ │ │ +
279 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal(i), faceTangents );
│ │ │ │ +
280 }
│ │ │ │ +
281 assert( faceStructure_.size() == numberOfFaces_ );
│ │ │ │ +
282
│ │ │ │ +
283 numberOfEdges_ = refElement.size( dim-1 );
│ │ │ │ +
284 edgeStructure_.reserve( numberOfEdges_ );
│ │ │ │ +
285
│ │ │ │ +
286 // compute the basis and tangent of each edge
│ │ │ │ +
287 for (std::size_t i=0; i<numberOfEdges_; i++)
│ │ │ │ +
288 {
│ │ │ │ +
289 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ +
290 auto v0 = *vertexIterator;
│ │ │ │ +
291 auto v1 = *(++vertexIterator);
│ │ │ │ +
292
│ │ │ │ +
293 // By default, edges point from the vertex with the smaller index
│ │ │ │ +
294 // to the vertex with the larger index.
│ │ │ │ +
295 if (v0>v1)
│ │ │ │ +
296 std::swap(v0,v1);
│ │ │ │ +
297 auto tangent = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ +
298
│ │ │ │ +
299 TestEdgeBasis *edgeBasis = Impl::IfGeometryType< CreateEdgeBasis, 1 >::apply( refElement.type( i, dim-1 ), order );
│ │ │ │ +
300 edgeStructure_.emplace_back( edgeBasis, tangent );
│ │ │ │ +
301 }
│ │ │ │ +
302 assert( edgeStructure_.size() == numberOfEdges_ );
│ │ │ │ +
303 }
│ │ │ │ +
│ │ │ │ +
304
│ │ │ │ +
305 private:
│ │ │ │ +
306
│ │ │ │ +
307 // helper struct for edges
│ │ │ │ +
308 struct EdgeStructure
│ │ │ │ +
309 {
│ │ │ │ +
310 EdgeStructure( TestEdgeBasis *teb, const Tangent &t )
│ │ │ │ +
311 : basis_( teb ), tangent_( t )
│ │ │ │ +
312 {}
│ │ │ │ +
313
│ │ │ │ +
314 TestEdgeBasis *basis_;
│ │ │ │ +
315 const Dune::FieldVector< Field, dimension > tangent_;
│ │ │ │ +
316 };
│ │ │ │ +
317
│ │ │ │ +
318 template< GeometryType::Id edgeGeometryId >
│ │ │ │ +
319 struct CreateEdgeBasis
│ │ │ │ +
320 {
│ │ │ │ +
321 static TestEdgeBasis *apply ( std::size_t order ) { return TestEdgeBasisFactory::template create< edgeGeometryId >( order ); }
│ │ │ │ +
322 };
│ │ │ │ +
323
│ │ │ │ +
324 // helper struct for faces
│ │ │ │ +
325 struct FaceStructure
│ │ │ │ +
326 {
│ │ │ │ +
327 FaceStructure( TestFaceBasis *tfb, const Normal& normal, const FaceTangents& faceTangents )
│ │ │ │ +
328 : basis_( tfb ), normal_(normal), faceTangents_( faceTangents )
│ │ │ │ +
329 {}
│ │ │ │ +
330
│ │ │ │ +
331 TestFaceBasis *basis_;
│ │ │ │ +
332 const Dune::FieldVector< Field, dimension > normal_;
│ │ │ │ +
333 const FaceTangents faceTangents_;
│ │ │ │ +
334 };
│ │ │ │ +
335
│ │ │ │ +
336 template< GeometryType::Id faceGeometryId >
│ │ │ │ +
337 struct CreateFaceBasis
│ │ │ │ +
338 {
│ │ │ │ +
339 static TestFaceBasis *apply ( std::size_t order ) { return TestFaceBasisFactory::template create< faceGeometryId >( order ); }
│ │ │ │ +
340 };
│ │ │ │ +
341
│ │ │ │ +
342 TestBasis *testBasis_ = nullptr;
│ │ │ │ +
343 std::vector< FaceStructure > faceStructure_;
│ │ │ │ +
344 unsigned int numberOfFaces_;
│ │ │ │ +
345 std::vector< EdgeStructure > edgeStructure_;
│ │ │ │ +
346 unsigned int numberOfEdges_;
│ │ │ │ +
347 GeometryType geometry_;
│ │ │ │ +
348 std::size_t order_;
│ │ │ │ +
349 };
│ │ │ │ +
│ │ │ │ +
350
│ │ │ │ +
351
│ │ │ │ +
352
│ │ │ │ +
353 // NedelecL2Interpolation
│ │ │ │ +
354 // ----------------------------
│ │ │ │ +
355
│ │ │ │ +
361 template< unsigned int dimension, class F>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
363 : public InterpolationHelper< F ,dimension >
│ │ │ │ +
364 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
367
│ │ │ │ +
368 public:
│ │ │ │ +
369 typedef F Field;
│ │ │ │ + │ │ │ │ + │ │ │ │ +
372
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
374 : order_(0),
│ │ │ │ +
375 size_(0)
│ │ │ │ +
376 {}
│ │ │ │ +
│ │ │ │ +
377
│ │ │ │ +
378 template< class Function, class Vector,
│ │ │ │ +
379 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ +
380 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
381 void interpolate ( const Function &function, Vector &coefficients ) const
│ │ │ │ +
382 {
│ │ │ │ +
383 coefficients.resize(size());
│ │ │ │ +
384 typename Base::template Helper<Function,Vector,true> func( function,coefficients );
│ │ │ │ +
385 interpolate(func);
│ │ │ │ +
386 }
│ │ │ │ +
│ │ │ │ +
387
│ │ │ │ +
388 template< class Basis, class Matrix,
│ │ │ │ +
389 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ +
390 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ +
391 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
392 void interpolate ( const Basis &basis, Matrix &matrix ) const
│ │ │ │ +
393 {
│ │ │ │ +
394 matrix.resize( size(), basis.size() );
│ │ │ │ +
395 typename Base::template Helper<Basis,Matrix,false> func( basis,matrix );
│ │ │ │ +
396 interpolate(func);
│ │ │ │ +
397 }
│ │ │ │ +
│ │ │ │ +
398
│ │ │ │ +
│ │ │ │ +
399 std::size_t order() const
│ │ │ │ +
400 {
│ │ │ │ +
401 return order_;
│ │ │ │ +
402 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
403 std::size_t size() const
│ │ │ │ +
404 {
│ │ │ │ +
405 return size_;
│ │ │ │ +
406 }
│ │ │ │ +
│ │ │ │ +
407
│ │ │ │ +
408 template <GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
409 void build( std::size_t order )
│ │ │ │ +
410 {
│ │ │ │ +
411 size_ = 0;
│ │ │ │ +
412 order_ = order;
│ │ │ │ +
413 builder_.template build<geometryId>(order_);
│ │ │ │ +
414 if (builder_.testBasis())
│ │ │ │ +
415 size_ += dimension*builder_.testBasis()->size();
│ │ │ │ +
416
│ │ │ │ +
417 for ( unsigned int f=0; f<builder_.faceSize(); ++f )
│ │ │ │ +
418 if (builder_.testFaceBasis(f))
│ │ │ │ +
419 size_ += (dimension-1)*builder_.testFaceBasis(f)->size();
│ │ │ │ +
420
│ │ │ │ +
421 for ( unsigned int e=0; e<builder_.edgeSize(); ++e )
│ │ │ │ +
422 if (builder_.testEdgeBasis(e))
│ │ │ │ + │ │ │ │ +
424 }
│ │ │ │ +
│ │ │ │ +
425
│ │ │ │ +
│ │ │ │ +
426 void setLocalKeys(std::vector< LocalKey > &keys) const
│ │ │ │ +
427 {
│ │ │ │ +
428 keys.resize(size());
│ │ │ │ +
429 unsigned int row = 0;
│ │ │ │ +
430 for (unsigned int e=0; e<builder_.edgeSize(); ++e)
│ │ │ │ +
431 {
│ │ │ │ +
432 if (builder_.edgeSize())
│ │ │ │ +
433 for (unsigned int i=0; i<builder_.testEdgeBasis(e)->size(); ++i,++row)
│ │ │ │ +
434 keys[row] = LocalKey(e,dimension-1,i);
│ │ │ │ +
435 }
│ │ │ │ +
436 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ +
437 {
│ │ │ │ +
438 if (builder_.faceSize())
│ │ │ │ +
439 for (unsigned int i=0; i<builder_.testFaceBasis(f)->size()*(dimension-1); ++i,++row)
│ │ │ │ +
440 keys[row] = LocalKey(f,1,i);
│ │ │ │ +
441 }
│ │ │ │ +
442
│ │ │ │ +
443 if (builder_.testBasis())
│ │ │ │ +
444 for (unsigned int i=0; i<builder_.testBasis()->size()*dimension; ++i,++row)
│ │ │ │ +
445 keys[row] = LocalKey(0,0,i);
│ │ │ │ +
446 assert( row == size() );
│ │ │ │ +
447 }
│ │ │ │ +
│ │ │ │ +
448
│ │ │ │ +
449 protected:
│ │ │ │ +
450 template< class Func, class Container, bool type >
│ │ │ │ +
│ │ │ │ +
451 void interpolate ( typename Base::template Helper<Func,Container,type> &func ) const
│ │ │ │ +
452 {
│ │ │ │ +
453 const Dune::GeometryType geoType( builder_.topologyId(), dimension );
│ │ │ │ +
454
│ │ │ │ +
455 std::vector<Field> testBasisVal;
│ │ │ │ +
456
│ │ │ │ +
457 for (unsigned int i=0; i<size(); ++i)
│ │ │ │ +
458 for (unsigned int j=0; j<func.size(); ++j)
│ │ │ │ +
459 func.set(i,j,0);
│ │ │ │ +
460
│ │ │ │ +
461 unsigned int row = 0;
│ │ │ │ +
462
│ │ │ │ +
463 // edge dofs:
│ │ │ │ +
464 typedef Dune::QuadratureRule<Field, 1> EdgeQuadrature;
│ │ │ │ +
465 typedef Dune::QuadratureRules<Field, 1> EdgeQuadratureRules;
│ │ │ │ +
466
│ │ │ │ +
467 const auto &refElement = Dune::ReferenceElements< Field, dimension >::general( geoType );
│ │ │ │ +
468
│ │ │ │ +
469 for (unsigned int e=0; e<builder_.edgeSize(); ++e)
│ │ │ │ +
470 {
│ │ │ │ +
471 if (!builder_.testEdgeBasis(e))
│ │ │ │ +
472 continue;
│ │ │ │ +
473 testBasisVal.resize(builder_.testEdgeBasis(e)->size());
│ │ │ │ +
474
│ │ │ │ +
475 const auto &geometry = refElement.template geometry< dimension-1 >( e );
│ │ │ │ +
476 const Dune::GeometryType subGeoType( geometry.type().id(), 1 );
│ │ │ │ +
477 const EdgeQuadrature &edgeQuad = EdgeQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ +
478
│ │ │ │ +
479 const unsigned int quadratureSize = edgeQuad.size();
│ │ │ │ +
480 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ +
481 {
│ │ │ │ +
482 if (dimension>1)
│ │ │ │ +
483 builder_.testEdgeBasis(e)->template evaluate<0>(edgeQuad[qi].position(),testBasisVal);
│ │ │ │ +
484 else
│ │ │ │ +
485 testBasisVal[0] = 1.;
│ │ │ │ +
486 computeEdgeDofs(row,
│ │ │ │ +
487 testBasisVal,
│ │ │ │ +
488 func.evaluate( geometry.global( edgeQuad[qi].position() ) ),
│ │ │ │ + │ │ │ │ +
490 edgeQuad[qi].weight(),
│ │ │ │ +
491 func);
│ │ │ │ +
492 }
│ │ │ │ +
493
│ │ │ │ +
494 row += builder_.testEdgeBasis(e)->size();
│ │ │ │ +
495 }
│ │ │ │ +
496
│ │ │ │ +
497 // face dofs:
│ │ │ │ +
498 typedef Dune::QuadratureRule<Field, dimension-1> FaceQuadrature;
│ │ │ │ +
499 typedef Dune::QuadratureRules<Field, dimension-1> FaceQuadratureRules;
│ │ │ │ +
500
│ │ │ │ +
501 for (unsigned int f=0; f<builder_.faceSize(); ++f)
│ │ │ │ +
502 {
│ │ │ │ +
503 if (builder_.testFaceBasis(f))
│ │ │ │ +
504 {
│ │ │ │ +
505 testBasisVal.resize(builder_.testFaceBasis(f)->size());
│ │ │ │ +
506
│ │ │ │ +
507 const auto &geometry = refElement.template geometry< 1 >( f );
│ │ │ │ +
508 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 );
│ │ │ │ +
509 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, 2*order_+2 );
│ │ │ │ +
510
│ │ │ │ +
511 const unsigned int quadratureSize = faceQuad.size();
│ │ │ │ +
512 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ +
513 {
│ │ │ │ +
514 if (dimension>1)
│ │ │ │ +
515 builder_.testFaceBasis(f)->template evaluate<0>(faceQuad[qi].position(),testBasisVal);
│ │ │ │ +
516 else
│ │ │ │ +
517 testBasisVal[0] = 1.;
│ │ │ │ +
518
│ │ │ │ +
519 computeFaceDofs( row,
│ │ │ │ +
520 testBasisVal,
│ │ │ │ +
521 func.evaluate( geometry.global( faceQuad[qi].position() ) ),
│ │ │ │ + │ │ │ │ +
523 builder_.normal(f),
│ │ │ │ +
524 faceQuad[qi].weight(),
│ │ │ │ +
525 func);
│ │ │ │ +
526 }
│ │ │ │ +
527
│ │ │ │ +
528 row += builder_.testFaceBasis(f)->size()*(dimension-1);
│ │ │ │ +
529 }
│ │ │ │ +
530 }
│ │ │ │ +
531
│ │ │ │ +
532 // element dofs
│ │ │ │ +
533 if (builder_.testBasis())
│ │ │ │ +
534 {
│ │ │ │ +
535 testBasisVal.resize(builder_.testBasis()->size());
│ │ │ │ +
536
│ │ │ │ +
537 typedef Dune::QuadratureRule<Field, dimension> Quadrature;
│ │ │ │ +
538 typedef Dune::QuadratureRules<Field, dimension> QuadratureRules;
│ │ │ │ +
539 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*order_+1 );
│ │ │ │ +
540
│ │ │ │ +
541 const unsigned int quadratureSize = elemQuad.size();
│ │ │ │ +
542 for( unsigned int qi = 0; qi < quadratureSize; ++qi )
│ │ │ │ +
543 {
│ │ │ │ +
544 builder_.testBasis()->template evaluate<0>(elemQuad[qi].position(),testBasisVal);
│ │ │ │ +
545 computeInteriorDofs(row,
│ │ │ │ +
546 testBasisVal,
│ │ │ │ +
547 func.evaluate(elemQuad[qi].position()),
│ │ │ │ +
548 elemQuad[qi].weight(),
│ │ │ │ +
549 func );
│ │ │ │ +
550 }
│ │ │ │ +
551
│ │ │ │ +
552 row += builder_.testBasis()->size()*dimension;
│ │ │ │ +
553 }
│ │ │ │ +
554 assert(row==size());
│ │ │ │ +
555 }
│ │ │ │ +
│ │ │ │ +
556
│ │ │ │ +
557 private:
│ │ │ │ +
567 template <class MVal, class NedVal,class Matrix>
│ │ │ │ +
568 void computeEdgeDofs (unsigned int startRow,
│ │ │ │ +
569 const MVal &mVal,
│ │ │ │ +
570 const NedVal &nedVal,
│ │ │ │ +
571 const FieldVector<Field,dimension> &tangent,
│ │ │ │ +
572 const Field &weight,
│ │ │ │ +
573 Matrix &matrix) const
│ │ │ │ +
574 {
│ │ │ │ +
575 const unsigned int endRow = startRow+mVal.size();
│ │ │ │ +
576 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ +
577 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ +
578 {
│ │ │ │ +
579 Field cFactor = (*nedIter)*tangent;
│ │ │ │ +
580 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ +
581 for (unsigned int row = startRow; row!=endRow; ++mIter, ++row )
│ │ │ │ +
582 matrix.add(row,col, (weight*cFactor)*(*mIter) );
│ │ │ │ +
583
│ │ │ │ +
584 assert( mIter == mVal.end() );
│ │ │ │ +
585 }
│ │ │ │ +
586 }
│ │ │ │ +
587
│ │ │ │ +
598 template <class MVal, class NedVal,class Matrix>
│ │ │ │ +
599 void computeFaceDofs (unsigned int startRow,
│ │ │ │ +
600 const MVal &mVal,
│ │ │ │ +
601 const NedVal &nedVal,
│ │ │ │ +
602 const FaceTangents& faceTangents,
│ │ │ │ +
603 const FieldVector<Field,dimension> &normal,
│ │ │ │ +
604 const Field &weight,
│ │ │ │ +
605 Matrix &matrix) const
│ │ │ │ +
606 {
│ │ │ │ +
607 const unsigned int endRow = startRow+mVal.size()*(dimension-1);
│ │ │ │ +
608 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ +
609 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ +
610 {
│ │ │ │ +
611 auto const& u=*nedIter;
│ │ │ │ +
612 auto const& n=normal;
│ │ │ │ +
613 FieldVector<Field,dimension> nedTimesNormal = { u[1]*n[2]-u[2]*n[1],
│ │ │ │ +
614 u[2]*n[0]-u[0]*n[2],
│ │ │ │ +
615 u[0]*n[1]-u[1]*n[0]};
│ │ │ │ +
616 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ +
617 for (unsigned int row = startRow; row!=endRow; ++mIter)
│ │ │ │ +
618 {
│ │ │ │ +
619 for(int i=0; i<dimension-1;i++)
│ │ │ │ +
620 {
│ │ │ │ +
621 auto test = *mIter*faceTangents[i];
│ │ │ │ +
622 matrix.add(row+i,col, weight*(nedTimesNormal*test) );
│ │ │ │ +
623 }
│ │ │ │ +
624 row += dimension-1;
│ │ │ │ +
625 }
│ │ │ │ +
626
│ │ │ │ +
627 assert( mIter == mVal.end() );
│ │ │ │ +
628 }
│ │ │ │ +
629 }
│ │ │ │ +
630
│ │ │ │ +
639 template <class MVal, class NedVal,class Matrix>
│ │ │ │ +
640 void computeInteriorDofs (unsigned int startRow,
│ │ │ │ +
641 const MVal &mVal,
│ │ │ │ +
642 const NedVal &nedVal,
│ │ │ │ +
643 Field weight,
│ │ │ │ +
644 Matrix &matrix) const
│ │ │ │ +
645 {
│ │ │ │ +
646 const unsigned int endRow = startRow+mVal.size()*dimension;
│ │ │ │ +
647 typename NedVal::const_iterator nedIter = nedVal.begin();
│ │ │ │ +
648 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col)
│ │ │ │ +
649 {
│ │ │ │ +
650 typename MVal::const_iterator mIter = mVal.begin();
│ │ │ │ +
651 for (unsigned int row = startRow; row!=endRow; ++mIter,row+=dimension )
│ │ │ │ +
652 for (unsigned int i=0; i<dimension; ++i)
│ │ │ │ +
653 matrix.add(row+i,col, (weight*(*mIter))*(*nedIter)[i] );
│ │ │ │ +
654
│ │ │ │ +
655 assert( mIter == mVal.end() );
│ │ │ │ +
656 }
│ │ │ │ +
657 }
│ │ │ │ +
658
│ │ │ │ +
659 public:
│ │ │ │ + │ │ │ │ +
661 std::size_t order_;
│ │ │ │ +
662 std::size_t size_;
│ │ │ │ +
663 };
│ │ │ │ +
│ │ │ │ +
664
│ │ │ │ +
665 template < unsigned int dim, class Field >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
667 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
670 typedef std::size_t Key;
│ │ │ │ +
671 typedef typename std::remove_const<Object>::type NonConstObject;
│ │ │ │ +
672
│ │ │ │ +
673 template <GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
674 static Object *create( const Key &key )
│ │ │ │ +
675 {
│ │ │ │ +
676 if ( !supports<geometryId>(key) )
│ │ │ │ +
677 return 0;
│ │ │ │ +
678 NonConstObject *interpol = new NonConstObject();
│ │ │ │ +
679 interpol->template build<geometryId>(key);
│ │ │ │ +
680 return interpol;
│ │ │ │ +
681 }
│ │ │ │ +
│ │ │ │ +
682
│ │ │ │ +
683 template <GeometryType::Id geometryId>
│ │ │ │ +
│ │ │ │ +
684 static bool supports( const Key &key )
│ │ │ │ +
685 {
│ │ │ │ +
686 GeometryType gt = geometryId;
│ │ │ │ +
687 return gt.isTriangle() || gt.isTetrahedron() ;
│ │ │ │ +
688 }
│ │ │ │ +
│ │ │ │ +
689 static void release( Object *object ) { delete object; }
│ │ │ │ +
690 };
│ │ │ │ +
│ │ │ │ +
691
│ │ │ │ +
692} // namespace Dune
│ │ │ │ +
693
│ │ │ │ +
694#endif // #ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Definition nedelecsimplexinterpolation.hh:667
│ │ │ │ +
static Object * create(const Key &key)
Definition nedelecsimplexinterpolation.hh:674
│ │ │ │ +
const NedelecL2Interpolation< dim, Field > Object
Definition nedelecsimplexinterpolation.hh:669
│ │ │ │ +
NedelecL2InterpolationBuilder< dim, Field > Builder
Definition nedelecsimplexinterpolation.hh:668
│ │ │ │ +
std::size_t Key
Definition nedelecsimplexinterpolation.hh:670
│ │ │ │ +
static bool supports(const Key &key)
Definition nedelecsimplexinterpolation.hh:684
│ │ │ │ +
std::remove_const< Object >::type NonConstObject
Definition nedelecsimplexinterpolation.hh:671
│ │ │ │ +
static void release(Object *object)
Definition nedelecsimplexinterpolation.hh:689
│ │ │ │ +
Definition nedelecsimplexinterpolation.hh:41
│ │ │ │ +
LocalCoefficientsContainer(const Setter &setter)
Definition nedelecsimplexinterpolation.hh:46
│ │ │ │ +
const LocalKey & localKey(const unsigned int i) const
Definition nedelecsimplexinterpolation.hh:51
│ │ │ │ +
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:57
│ │ │ │ +
Definition nedelecsimplexinterpolation.hh:73
│ │ │ │ +
static Object * create(const Key &key)
Definition nedelecsimplexinterpolation.hh:78
│ │ │ │ +
static bool supports(const Key &key)
Definition nedelecsimplexinterpolation.hh:90
│ │ │ │ +
const LocalCoefficientsContainer Object
Definition nedelecsimplexinterpolation.hh:75
│ │ │ │ +
std::size_t Key
Definition nedelecsimplexinterpolation.hh:74
│ │ │ │ +
static void release(Object *object)
Definition nedelecsimplexinterpolation.hh:95
│ │ │ │ +
Definition nedelecsimplexinterpolation.hh:114
│ │ │ │ +
TestEdgeBasis * testEdgeBasis(unsigned int e) const
Definition nedelecsimplexinterpolation.hh:191
│ │ │ │ +
~NedelecL2InterpolationBuilder()
Definition nedelecsimplexinterpolation.hh:141
│ │ │ │ +
GeometryType type() const
Definition nedelecsimplexinterpolation.hh:155
│ │ │ │ +
TestBasisFactory::Object TestBasis
Definition nedelecsimplexinterpolation.hh:119
│ │ │ │ +
FieldVector< Field, dimension > Tangent
Definition nedelecsimplexinterpolation.hh:130
│ │ │ │ +
TestFaceBasisFactory::Object TestFaceBasis
Definition nedelecsimplexinterpolation.hh:123
│ │ │ │ +
TestFaceBasis * testFaceBasis(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:184
│ │ │ │ +
TestEdgeBasisFactory::Object TestEdgeBasis
Definition nedelecsimplexinterpolation.hh:127
│ │ │ │ +
FieldVector< Field, dimension > Normal
Definition nedelecsimplexinterpolation.hh:133
│ │ │ │ +
void build(std::size_t order)
Definition nedelecsimplexinterpolation.hh:216
│ │ │ │ +
OrthonormalBasisFactory< dimension, Field > TestBasisFactory
Definition nedelecsimplexinterpolation.hh:118
│ │ │ │ +
OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory
Definition nedelecsimplexinterpolation.hh:122
│ │ │ │ +
const FaceTangents & faceTangents(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:203
│ │ │ │ +
unsigned int faceSize() const
Definition nedelecsimplexinterpolation.hh:166
│ │ │ │ +
TestBasis * testBasis() const
Definition nedelecsimplexinterpolation.hh:178
│ │ │ │ +
std::array< FieldVector< Field, dimension >, dim-1 > FaceTangents
Definition nedelecsimplexinterpolation.hh:134
│ │ │ │ +
OrthonormalBasisFactory< 1, Field > TestEdgeBasisFactory
Definition nedelecsimplexinterpolation.hh:126
│ │ │ │ +
const Tangent & edgeTangent(unsigned int e) const
Definition nedelecsimplexinterpolation.hh:197
│ │ │ │ +
NedelecL2InterpolationBuilder(NedelecL2InterpolationBuilder &&)=delete
│ │ │ │ +
std::size_t order() const
Definition nedelecsimplexinterpolation.hh:160
│ │ │ │ +
unsigned int edgeSize() const
Definition nedelecsimplexinterpolation.hh:172
│ │ │ │ +
unsigned int topologyId() const
Definition nedelecsimplexinterpolation.hh:150
│ │ │ │ +
NedelecL2InterpolationBuilder(const NedelecL2InterpolationBuilder &)=delete
│ │ │ │ +
static const unsigned int dimension
Definition nedelecsimplexinterpolation.hh:115
│ │ │ │ + │ │ │ │ +
const Normal & normal(unsigned int f) const
Definition nedelecsimplexinterpolation.hh:209
│ │ │ │ +
An L2-based interpolation for Nedelec.
Definition nedelecsimplexinterpolation.hh:364
│ │ │ │ +
Builder::FaceTangents FaceTangents
Definition nedelecsimplexinterpolation.hh:371
│ │ │ │ +
F Field
Definition nedelecsimplexinterpolation.hh:369
│ │ │ │ +
std::size_t size() const
Definition nedelecsimplexinterpolation.hh:403
│ │ │ │ +
void interpolate(typename Base::template Helper< Func, Container, type > &func) const
Definition nedelecsimplexinterpolation.hh:451
│ │ │ │ +
std::size_t order_
Definition nedelecsimplexinterpolation.hh:661
│ │ │ │ +
NedelecL2InterpolationBuilder< dimension, Field > Builder
Definition nedelecsimplexinterpolation.hh:370
│ │ │ │ +
std::size_t size_
Definition nedelecsimplexinterpolation.hh:662
│ │ │ │ +
NedelecL2Interpolation()
Definition nedelecsimplexinterpolation.hh:373
│ │ │ │ +
void interpolate(const Function &function, Vector &coefficients) const
Definition nedelecsimplexinterpolation.hh:381
│ │ │ │ +
void build(std::size_t order)
Definition nedelecsimplexinterpolation.hh:409
│ │ │ │ +
std::size_t order() const
Definition nedelecsimplexinterpolation.hh:399
│ │ │ │ +
void setLocalKeys(std::vector< LocalKey > &keys) const
Definition nedelecsimplexinterpolation.hh:426
│ │ │ │ +
Builder builder_
Definition nedelecsimplexinterpolation.hh:660
│ │ │ │ +
Definition orthonormalbasis.hh:20
│ │ │ │ +
static void release(Object *object)
Definition orthonormalbasis.hh:57
│ │ │ │
Definition interpolationhelper.hh:21
│ │ │ │
Definition interpolationhelper.hh:23
│ │ │ │ -
void add(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:49
│ │ │ │ -
const Func & func_
Definition interpolationhelper.hh:66
│ │ │ │ -
Helper(const Func &func, Vector &vec)
Definition interpolationhelper.hh:31
│ │ │ │ -
const Result & evaluate(const DomainVector &x) const
Definition interpolationhelper.hh:57
│ │ │ │ -
std::vector< Dune::FieldVector< F, d > > Result
Definition interpolationhelper.hh:30
│ │ │ │ -
unsigned int size() const
Definition interpolationhelper.hh:62
│ │ │ │ -
Vector & vec_
Definition interpolationhelper.hh:67
│ │ │ │ -
void set(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:41
│ │ │ │ -
Result tmp_
Definition interpolationhelper.hh:68
│ │ │ │ -
const Vector::value_type & operator()(unsigned int row, unsigned int col)
Definition interpolationhelper.hh:36
│ │ │ │ -
const Basis & basis_
Definition interpolationhelper.hh:115
│ │ │ │ -
const Result & evaluate(const DomainVector &x) const
Definition interpolationhelper.hh:105
│ │ │ │ -
F & operator()(unsigned int row, unsigned int col)
Definition interpolationhelper.hh:84
│ │ │ │ -
void set(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:89
│ │ │ │ -
Helper(const Basis &basis, Matrix &matrix)
Definition interpolationhelper.hh:76
│ │ │ │ -
unsigned int size() const
Definition interpolationhelper.hh:110
│ │ │ │ -
Result tmp_
Definition interpolationhelper.hh:117
│ │ │ │ -
void add(unsigned int row, unsigned int col, const Fy &val)
Definition interpolationhelper.hh:97
│ │ │ │ -
std::vector< Dune::FieldVector< F, d > > Result
Definition interpolationhelper.hh:75
│ │ │ │ -
Matrix & matrix_
Definition interpolationhelper.hh:116
│ │ │ │ -
const F & operator()(unsigned int row, unsigned int col) const
Definition interpolationhelper.hh:80
│ │ │ │ +
Definition polynomialbasis.hh:65
│ │ │ │ +
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,207 +1,895 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -interpolationhelper.hh │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ + * _n_e_d_e_l_e_c_s_i_m_p_l_e_x │ │ │ │ │ +nedelecsimplexinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ -6#define GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ +5#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ +6#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 // A small helper class to avoid having to │ │ │ │ │ -17 // write the interpolation twice (once for function │ │ │ │ │ -18 // and once for a basis) │ │ │ │ │ -19 template< class F, unsigned int dimension > │ │ │ │ │ -_2_0 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ -21 { │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 struct _H_e_l_p_e_r; │ │ │ │ │ -24 }; │ │ │ │ │ -25 template │ │ │ │ │ -26 template │ │ │ │ │ -_2_7 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r::_H_e_l_p_e_r │ │ │ │ │ -28 // Func is of Function type │ │ │ │ │ -29 { │ │ │ │ │ -_3_0 typedef std::vector< Dune::FieldVector > _R_e_s_u_l_t; │ │ │ │ │ -_3_1 _H_e_l_p_e_r(const Func & func, Vector &vec) │ │ │ │ │ -32 : func_(func), │ │ │ │ │ -33 vec_(vec), │ │ │ │ │ -34 tmp_(1) │ │ │ │ │ -35 {} │ │ │ │ │ -_3_6 const typename Vector::value_type &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int │ │ │ │ │ -col) │ │ │ │ │ -37 { │ │ │ │ │ -38 return vec_[row]; │ │ │ │ │ -39 } │ │ │ │ │ -40 template │ │ │ │ │ -_4_1 void _s_e_t(unsigned int row,unsigned int col, │ │ │ │ │ -42 const Fy &val) │ │ │ │ │ -43 { │ │ │ │ │ -44 assert(col==0); │ │ │ │ │ -45 assert(row │ │ │ │ │ -_4_9 void _a_d_d(unsigned int row,unsigned int col, │ │ │ │ │ -50 const Fy &val) │ │ │ │ │ -51 { │ │ │ │ │ -52 assert(col==0); │ │ │ │ │ -53 assert(row(val); │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_o_r_t_h_o_n_o_r_m_a_l_/_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +22 │ │ │ │ │ +23namespace _D_u_n_e │ │ │ │ │ +24{ │ │ │ │ │ +25 │ │ │ │ │ +26 // Internal Forward Declarations │ │ │ │ │ +27 // ----------------------------- │ │ │ │ │ +28 │ │ │ │ │ +32 template < unsigned int dim, class Field > │ │ │ │ │ +33 struct NedelecL2InterpolationFactory; │ │ │ │ │ +34 │ │ │ │ │ +35 │ │ │ │ │ +36 │ │ │ │ │ +37 // LocalCoefficientsContainer │ │ │ │ │ +38 // -------------------------- │ │ │ │ │ +39 │ │ │ │ │ +_4_0 class _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +41 { │ │ │ │ │ +42 typedef _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _T_h_i_s; │ │ │ │ │ +43 │ │ │ │ │ +44 public: │ │ │ │ │ +45 template │ │ │ │ │ +_4_6 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r ( const Setter &setter ) │ │ │ │ │ +47 { │ │ │ │ │ +48 setter.setLocalKeys(localKey_); │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_1 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ +52 { │ │ │ │ │ +53 assert( i < _s_i_z_e() ); │ │ │ │ │ +54 return localKey_[ i ]; │ │ │ │ │ 55 } │ │ │ │ │ -56 template │ │ │ │ │ -_5_7 const _R_e_s_u_l_t &_e_v_a_l_u_a_t_e(const DomainVector &x) const │ │ │ │ │ +56 │ │ │ │ │ +_5_7 std::size_t _s_i_z_e () const │ │ │ │ │ 58 { │ │ │ │ │ -59 _f_i_e_l_d___c_a_s_t(func_(x), tmp_[0] ); │ │ │ │ │ -60 return tmp_; │ │ │ │ │ -61 } │ │ │ │ │ -_6_2 unsigned int _s_i_z_e() const │ │ │ │ │ -63 { │ │ │ │ │ -64 return 1; │ │ │ │ │ -65 } │ │ │ │ │ -_6_6 const Func &_f_u_n_c__; │ │ │ │ │ -_6_7 Vector &_v_e_c__; │ │ │ │ │ -_6_8 mutable _R_e_s_u_l_t _t_m_p__; │ │ │ │ │ -69 }; │ │ │ │ │ -70 template │ │ │ │ │ -71 template │ │ │ │ │ -_7_2 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r::_H_e_l_p_e_r │ │ │ │ │ -73 // Func is of Basis type │ │ │ │ │ -74 { │ │ │ │ │ -_7_5 typedef std::vector< Dune::FieldVector > _R_e_s_u_l_t; │ │ │ │ │ -_7_6 _H_e_l_p_e_r(const Basis & basis, Matrix &matrix) │ │ │ │ │ -77 : basis_(basis), │ │ │ │ │ -78 matrix_(matrix), │ │ │ │ │ -79 tmp_(basis.size()) {} │ │ │ │ │ -_8_0 const F &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int col) const │ │ │ │ │ -81 { │ │ │ │ │ -82 return matrix_[row][col]; │ │ │ │ │ -83 } │ │ │ │ │ -_8_4 F &_o_p_e_r_a_t_o_r_(_)(unsigned int row,unsigned int col) │ │ │ │ │ -85 { │ │ │ │ │ -86 return matrix_[row][col]; │ │ │ │ │ +59 return localKey_.size(); │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +62 private: │ │ │ │ │ +63 std::vector< LocalKey > localKey_; │ │ │ │ │ +64 }; │ │ │ │ │ +65 │ │ │ │ │ +66 │ │ │ │ │ +67 │ │ │ │ │ +68 // NedelecCoefficientsFactory │ │ │ │ │ +69 // -------------------------------- │ │ │ │ │ +70 │ │ │ │ │ +71 template < unsigned int dim > │ │ │ │ │ +_7_2 struct _N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +73 { │ │ │ │ │ +_7_4 typedef std::size_t _K_e_y; │ │ │ │ │ +_7_5 typedef const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r _O_b_j_e_c_t; │ │ │ │ │ +76 │ │ │ │ │ +77 template< GeometryType::Id geometryId > │ │ │ │ │ +_7_8 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ +79 { │ │ │ │ │ +80 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _d_i_m_,_ _d_o_u_b_l_e_ _> InterpolationFactory; │ │ │ │ │ +81 if( !supports< geometryId >( key ) ) │ │ │ │ │ +82 return nullptr; │ │ │ │ │ +83 typename InterpolationFactory::Object *interpolation = │ │ │ │ │ +InterpolationFactory::template create< geometryId >( key ); │ │ │ │ │ +84 _O_b_j_e_c_t *localKeys = new _O_b_j_e_c_t( *interpolation ); │ │ │ │ │ +85 InterpolationFactory::release( interpolation ); │ │ │ │ │ +86 return localKeys; │ │ │ │ │ 87 } │ │ │ │ │ -88 template │ │ │ │ │ -_8_9 void _s_e_t(unsigned int row,unsigned int col, │ │ │ │ │ -90 const Fy &val) │ │ │ │ │ +88 │ │ │ │ │ +89 template< GeometryType::Id geometryId > │ │ │ │ │ +_9_0 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ 91 { │ │ │ │ │ -92 assert(col │ │ │ │ │ -_9_7 void _a_d_d(unsigned int row,unsigned int col, │ │ │ │ │ -98 const Fy &val) │ │ │ │ │ -99 { │ │ │ │ │ -100 assert(col │ │ │ │ │ -_1_0_5 const _R_e_s_u_l_t &_e_v_a_l_u_a_t_e(const DomainVector &x) const │ │ │ │ │ -106 { │ │ │ │ │ -107 basis_.template evaluate<0>(x,tmp_); │ │ │ │ │ -108 return tmp_; │ │ │ │ │ -109 } │ │ │ │ │ -_1_1_0 unsigned int _s_i_z_e() const │ │ │ │ │ -111 { │ │ │ │ │ -112 return basis_.size(); │ │ │ │ │ -113 } │ │ │ │ │ -114 │ │ │ │ │ -_1_1_5 const Basis &_b_a_s_i_s__; │ │ │ │ │ -_1_1_6 Matrix &_m_a_t_r_i_x__; │ │ │ │ │ -_1_1_7 mutable _R_e_s_u_l_t _t_m_p__; │ │ │ │ │ -118 }; │ │ │ │ │ -119} │ │ │ │ │ -120#endif // GENERIC_INTERPOLATIONHELPER_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ +92 GeometryType gt = geometryId; │ │ │ │ │ +93 return gt.isTriangle() || gt.isTetrahedron() ; │ │ │ │ │ +94 } │ │ │ │ │ +_9_5 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +96 }; │ │ │ │ │ +97 │ │ │ │ │ +98 │ │ │ │ │ +99 │ │ │ │ │ +100 // NedelecL2InterpolationBuilder │ │ │ │ │ +101 // ------------------------ │ │ │ │ │ +102 │ │ │ │ │ +103 // L2 Interpolation requires: │ │ │ │ │ +104 // - for element │ │ │ │ │ +105 // - test basis │ │ │ │ │ +106 // - for each face (dynamic) │ │ │ │ │ +107 // - test basis │ │ │ │ │ +108 // - tangents │ │ │ │ │ +109 // - for each edge (dynamic) │ │ │ │ │ +110 // - test basis │ │ │ │ │ +111 // - tangent │ │ │ │ │ +112 template< unsigned int dim, class Field > │ │ │ │ │ +_1_1_3 struct _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +114 { │ │ │ │ │ +_1_1_5 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ +116 │ │ │ │ │ +117 // for the dofs associated to the element │ │ │ │ │ +_1_1_8 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_e_n_s_i_o_n_,_ _F_i_e_l_d_ _> _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_1_1_9 typedef typename _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_B_a_s_i_s; │ │ │ │ │ +120 │ │ │ │ │ +121 // for the dofs associated to the faces │ │ │ │ │ +_1_2_2 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y< _d_i_m_e_n_s_i_o_n-1, Field > _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_1_2_3 typedef typename _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_F_a_c_e_B_a_s_i_s; │ │ │ │ │ +124 │ │ │ │ │ +125 // for the dofs associated to the edges │ │ │ │ │ +_1_2_6 typedef _O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _1_,_ _F_i_e_l_d_ _> _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ +_1_2_7 typedef typename _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _T_e_s_t_E_d_g_e_B_a_s_i_s; │ │ │ │ │ +128 │ │ │ │ │ +129 // the tangent of the edges │ │ │ │ │ +_1_3_0 typedef FieldVector< Field, dimension > _T_a_n_g_e_n_t; │ │ │ │ │ +131 │ │ │ │ │ +132 // the normal and the tangents of the faces │ │ │ │ │ +_1_3_3 typedef FieldVector< Field, dimension > _N_o_r_m_a_l; │ │ │ │ │ +_1_3_4 typedef std::array,dim-1> _F_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ +135 │ │ │ │ │ +_1_3_6 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () = default; │ │ │ │ │ +137 │ │ │ │ │ +_1_3_8 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( const _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r & ) = │ │ │ │ │ +delete; │ │ │ │ │ +_1_3_9 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r ( _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r && ) = │ │ │ │ │ +delete; │ │ │ │ │ +140 │ │ │ │ │ +_1_4_1 _~_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r () │ │ │ │ │ +142 { │ │ │ │ │ +143 _T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( testBasis_ ); │ │ │ │ │ +144 for( FaceStructure &f : faceStructure_ ) │ │ │ │ │ +145 _T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( f.basis_ ); │ │ │ │ │ +146 for( EdgeStructure& e : edgeStructure_ ) │ │ │ │ │ +147 _T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( e.basis_ ); │ │ │ │ │ +148 } │ │ │ │ │ +149 │ │ │ │ │ +_1_5_0 unsigned int _t_o_p_o_l_o_g_y_I_d () const │ │ │ │ │ +151 { │ │ │ │ │ +152 return geometry_.id(); │ │ │ │ │ +153 } │ │ │ │ │ +154 │ │ │ │ │ +_1_5_5 GeometryType _t_y_p_e () const │ │ │ │ │ +156 { │ │ │ │ │ +157 return geometry_; │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +_1_6_0 std::size_t _o_r_d_e_r () const │ │ │ │ │ +161 { │ │ │ │ │ +162 return order_; │ │ │ │ │ +163 } │ │ │ │ │ +164 │ │ │ │ │ +165 // number of faces │ │ │ │ │ +_1_6_6 unsigned int _f_a_c_e_S_i_z_e () const │ │ │ │ │ +167 { │ │ │ │ │ +168 return numberOfFaces_; │ │ │ │ │ +169 } │ │ │ │ │ +170 │ │ │ │ │ +171 // number of edges │ │ │ │ │ +_1_7_2 unsigned int _e_d_g_e_S_i_z_e () const │ │ │ │ │ +173 { │ │ │ │ │ +174 return numberOfEdges_; │ │ │ │ │ +175 } │ │ │ │ │ +176 │ │ │ │ │ +177 // basis associated to the element │ │ │ │ │ +_1_7_8 _T_e_s_t_B_a_s_i_s *_t_e_s_t_B_a_s_i_s () const │ │ │ │ │ +179 { │ │ │ │ │ +180 return testBasis_; │ │ │ │ │ +181 } │ │ │ │ │ +182 │ │ │ │ │ +183 // basis associated to face f │ │ │ │ │ +_1_8_4 _T_e_s_t_F_a_c_e_B_a_s_i_s *_t_e_s_t_F_a_c_e_B_a_s_i_s ( unsigned int f ) const │ │ │ │ │ +185 { │ │ │ │ │ +186 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ +187 return faceStructure_[ f ].basis_; │ │ │ │ │ +188 } │ │ │ │ │ +189 │ │ │ │ │ +190 // basis associated to edge e │ │ │ │ │ +_1_9_1 _T_e_s_t_E_d_g_e_B_a_s_i_s *_t_e_s_t_E_d_g_e_B_a_s_i_s ( unsigned int e ) const │ │ │ │ │ +192 { │ │ │ │ │ +193 assert( e < _e_d_g_e_S_i_z_e() ); │ │ │ │ │ +194 return edgeStructure_[ e ].basis_; │ │ │ │ │ +195 } │ │ │ │ │ +196 │ │ │ │ │ +_1_9_7 const _T_a_n_g_e_n_t& _e_d_g_e_T_a_n_g_e_n_t ( unsigned int e ) const │ │ │ │ │ +198 { │ │ │ │ │ +199 assert( e < _e_d_g_e_S_i_z_e() ); │ │ │ │ │ +200 return edgeStructure_[ e ].tangent_; │ │ │ │ │ +201 } │ │ │ │ │ +202 │ │ │ │ │ +_2_0_3 const _F_a_c_e_T_a_n_g_e_n_t_s& _f_a_c_e_T_a_n_g_e_n_t_s ( unsigned int f ) const │ │ │ │ │ +204 { │ │ │ │ │ +205 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ +206 return faceStructure_[ f ].faceTangents_; │ │ │ │ │ +207 } │ │ │ │ │ +208 │ │ │ │ │ +_2_0_9 const _N_o_r_m_a_l &_n_o_r_m_a_l ( unsigned int f ) const │ │ │ │ │ +210 { │ │ │ │ │ +211 assert( f < _f_a_c_e_S_i_z_e() ); │ │ │ │ │ +212 return faceStructure_[ f ].normal_; │ │ │ │ │ +213 } │ │ │ │ │ +214 │ │ │ │ │ +215 template< GeometryType::Id geometryId > │ │ │ │ │ +_2_1_6 void _b_u_i_l_d ( std::size_t _o_r_d_e_r ) │ │ │ │ │ +217 { │ │ │ │ │ +218 constexpr GeometryType geometry = geometryId; │ │ │ │ │ +219 order_ = _o_r_d_e_r; │ │ │ │ │ +220 geometry_ = geometry; │ │ │ │ │ +221 │ │ │ │ │ +222 /* │ │ │ │ │ +223 * The Nedelec parameter begins at 1. │ │ │ │ │ +224 * This is the numbering used by J.C. Nedelec himself. │ │ │ │ │ +225 * See "Mixed Finite Elements in \R^3" published in 1980. │ │ │ │ │ +226 * │ │ │ │ │ +227 * This construction is based on the construction of Raviart-Thomas │ │ │ │ │ +elements. │ │ │ │ │ +228 * There the numbering starts at 0. │ │ │ │ │ +229 * Because of this we reduce the order internally by 1. │ │ │ │ │ +230 */ │ │ │ │ │ +231 _o_r_d_e_r--; │ │ │ │ │ +232 │ │ │ │ │ +233 // if dimension == 2: order-1 on element │ │ │ │ │ +234 // if dimension == 3: order-2 on element │ │ │ │ │ +235 int requiredOrder = static_cast(_d_i_m_e_n_s_i_o_n==3); │ │ │ │ │ +236 testBasis_ = (_o_r_d_e_r > requiredOrder ? TestBasisFactory::template create< │ │ │ │ │ +geometry >( _o_r_d_e_r-1-requiredOrder ) : nullptr); │ │ │ │ │ +237 │ │ │ │ │ +238 const auto &refElement = ReferenceElements< Field, dimension >::general │ │ │ │ │ +( _t_y_p_e() ); │ │ │ │ │ +239 │ │ │ │ │ +240 numberOfFaces_ = refElement.size( 1 ); │ │ │ │ │ +241 faceStructure_.reserve( numberOfFaces_ ); │ │ │ │ │ +242 │ │ │ │ │ +243 // compute the basis, tangents and normals of each face │ │ │ │ │ +244 for (std::size_t i=0; i zero(0); │ │ │ │ │ +247 _F_a_c_e_T_a_n_g_e_n_t_s _f_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ +248 _f_a_c_e_T_a_n_g_e_n_t_s.fill(zero); │ │ │ │ │ +249 │ │ │ │ │ +250 // use the first dim-1 vertices of a face to compute the tangents │ │ │ │ │ +251 auto vertices = refElement.subEntities(i,1,dim).begin(); │ │ │ │ │ +252 auto vertex1 = *vertices; │ │ │ │ │ +253 for(int j=1; jvertex2) │ │ │ │ │ +262 _f_a_c_e_T_a_n_g_e_n_t_s[j-1] *=-1; │ │ │ │ │ +263 │ │ │ │ │ +264 vertex1 = vertex2; │ │ │ │ │ +265 } │ │ │ │ │ +266 │ │ │ │ │ +267 /* For simplices or cubes of arbitrary dimension you could just use │ │ │ │ │ +268 * │ │ │ │ │ +269 * ``` │ │ │ │ │ +270 * GeometryType faceGeometry = Impl::getBase(geometry_); │ │ │ │ │ +271 * TestFaceBasis *faceBasis = ( dim == 3 && order > 0 ? │ │ │ │ │ +TestFaceBasisFactory::template create< faceGeometry >( order-1 ) : nullptr); │ │ │ │ │ +272 * ``` │ │ │ │ │ +273 * │ │ │ │ │ +274 * For i.e. Prisms and Pyramids in 3d this does not work because they │ │ │ │ │ +contain squares and triangles as faces. │ │ │ │ │ +275 * And depending on the dynamic face index a different face geometry is │ │ │ │ │ +needed. │ │ │ │ │ +276 * │ │ │ │ │ +277 */ │ │ │ │ │ +278 _T_e_s_t_F_a_c_e_B_a_s_i_s *faceBasis = ( dim == 3 && _o_r_d_e_r > 0 ? Impl::IfGeometryType< │ │ │ │ │ +CreateFaceBasis, dimension-1 >::apply( refElement.type( i, 1 ), _o_r_d_e_r-1 ) : │ │ │ │ │ +nullptr); │ │ │ │ │ +279 faceStructure_.emplace_back( faceBasis, refElement.integrationOuterNormal │ │ │ │ │ +(i), _f_a_c_e_T_a_n_g_e_n_t_s ); │ │ │ │ │ +280 } │ │ │ │ │ +281 assert( faceStructure_.size() == numberOfFaces_ ); │ │ │ │ │ +282 │ │ │ │ │ +283 numberOfEdges_ = refElement.size( dim-1 ); │ │ │ │ │ +284 edgeStructure_.reserve( numberOfEdges_ ); │ │ │ │ │ +285 │ │ │ │ │ +286 // compute the basis and tangent of each edge │ │ │ │ │ +287 for (std::size_t i=0; iv1) │ │ │ │ │ +296 std::swap(v0,v1); │ │ │ │ │ +297 auto tangent = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ +298 │ │ │ │ │ +299 _T_e_s_t_E_d_g_e_B_a_s_i_s *edgeBasis = Impl::IfGeometryType< CreateEdgeBasis, 1 >:: │ │ │ │ │ +apply( refElement.type( i, dim-1 ), _o_r_d_e_r ); │ │ │ │ │ +300 edgeStructure_.emplace_back( edgeBasis, tangent ); │ │ │ │ │ +301 } │ │ │ │ │ +302 assert( edgeStructure_.size() == numberOfEdges_ ); │ │ │ │ │ +303 } │ │ │ │ │ +304 │ │ │ │ │ +305 private: │ │ │ │ │ +306 │ │ │ │ │ +307 // helper struct for edges │ │ │ │ │ +308 struct EdgeStructure │ │ │ │ │ +309 { │ │ │ │ │ +310 EdgeStructure( _T_e_s_t_E_d_g_e_B_a_s_i_s *teb, const _T_a_n_g_e_n_t &t ) │ │ │ │ │ +311 : basis_( teb ), tangent_( t ) │ │ │ │ │ +312 {} │ │ │ │ │ +313 │ │ │ │ │ +314 _T_e_s_t_E_d_g_e_B_a_s_i_s *basis_; │ │ │ │ │ +315 const Dune::FieldVector< Field, dimension > tangent_; │ │ │ │ │ +316 }; │ │ │ │ │ +317 │ │ │ │ │ +318 template< GeometryType::Id edgeGeometryId > │ │ │ │ │ +319 struct CreateEdgeBasis │ │ │ │ │ +320 { │ │ │ │ │ +321 static _T_e_s_t_E_d_g_e_B_a_s_i_s *apply ( std::size_t _o_r_d_e_r ) { return │ │ │ │ │ +TestEdgeBasisFactory::template create< edgeGeometryId >( _o_r_d_e_r ); } │ │ │ │ │ +322 }; │ │ │ │ │ +323 │ │ │ │ │ +324 // helper struct for faces │ │ │ │ │ +325 struct FaceStructure │ │ │ │ │ +326 { │ │ │ │ │ +327 FaceStructure( _T_e_s_t_F_a_c_e_B_a_s_i_s *tfb, const _N_o_r_m_a_l& _n_o_r_m_a_l, const │ │ │ │ │ +_F_a_c_e_T_a_n_g_e_n_t_s& _f_a_c_e_T_a_n_g_e_n_t_s ) │ │ │ │ │ +328 : basis_( tfb ), normal_(_n_o_r_m_a_l), faceTangents_( _f_a_c_e_T_a_n_g_e_n_t_s ) │ │ │ │ │ +329 {} │ │ │ │ │ +330 │ │ │ │ │ +331 _T_e_s_t_F_a_c_e_B_a_s_i_s *basis_; │ │ │ │ │ +332 const Dune::FieldVector< Field, dimension > normal_; │ │ │ │ │ +333 const _F_a_c_e_T_a_n_g_e_n_t_s faceTangents_; │ │ │ │ │ +334 }; │ │ │ │ │ +335 │ │ │ │ │ +336 template< GeometryType::Id faceGeometryId > │ │ │ │ │ +337 struct CreateFaceBasis │ │ │ │ │ +338 { │ │ │ │ │ +339 static _T_e_s_t_F_a_c_e_B_a_s_i_s *apply ( std::size_t _o_r_d_e_r ) { return │ │ │ │ │ +TestFaceBasisFactory::template create< faceGeometryId >( _o_r_d_e_r ); } │ │ │ │ │ +340 }; │ │ │ │ │ +341 │ │ │ │ │ +342 _T_e_s_t_B_a_s_i_s *testBasis_ = nullptr; │ │ │ │ │ +343 std::vector< FaceStructure > faceStructure_; │ │ │ │ │ +344 unsigned int numberOfFaces_; │ │ │ │ │ +345 std::vector< EdgeStructure > edgeStructure_; │ │ │ │ │ +346 unsigned int numberOfEdges_; │ │ │ │ │ +347 GeometryType geometry_; │ │ │ │ │ +348 std::size_t order_; │ │ │ │ │ +349 }; │ │ │ │ │ +350 │ │ │ │ │ +351 │ │ │ │ │ +352 │ │ │ │ │ +353 // NedelecL2Interpolation │ │ │ │ │ +354 // ---------------------------- │ │ │ │ │ +355 │ │ │ │ │ +361 template< unsigned int dimension, class F> │ │ │ │ │ +_3_6_2 class _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +363 : public _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r< F ,dimension > │ │ │ │ │ +364 { │ │ │ │ │ +365 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _T_h_i_s; │ │ │ │ │ +366 typedef _I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_<_F_,_d_i_m_e_n_s_i_o_n_> _B_a_s_e; │ │ │ │ │ +367 │ │ │ │ │ +368 public: │ │ │ │ │ +_3_6_9 typedef F _F_i_e_l_d; │ │ │ │ │ +_3_7_0 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ +_3_7_1 typedef typename _B_u_i_l_d_e_r_:_:_F_a_c_e_T_a_n_g_e_n_t_s _F_a_c_e_T_a_n_g_e_n_t_s; │ │ │ │ │ +372 │ │ │ │ │ +_3_7_3 _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n() │ │ │ │ │ +374 : _o_r_d_e_r__(0), │ │ │ │ │ +375 _s_i_z_e__(0) │ │ │ │ │ +376 {} │ │ │ │ │ +377 │ │ │ │ │ +378 template< class Function, class Vector, │ │ │ │ │ +379 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ +380 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ +_3_8_1 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, Vector &coefficients ) const │ │ │ │ │ +382 { │ │ │ │ │ +383 coefficients.resize(_s_i_z_e()); │ │ │ │ │ +384 typename Base::template _H_e_l_p_e_r_<_F_u_n_c_t_i_o_n_,_V_e_c_t_o_r_,_t_r_u_e_> func │ │ │ │ │ +( function,coefficients ); │ │ │ │ │ +385 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ +386 } │ │ │ │ │ +387 │ │ │ │ │ +388 template< class Basis, class Matrix, │ │ │ │ │ +389 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ +390 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ +391 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ +_3_9_2 void _i_n_t_e_r_p_o_l_a_t_e ( const Basis &basis, Matrix &matrix ) const │ │ │ │ │ +393 { │ │ │ │ │ +394 matrix.resize( _s_i_z_e(), basis.size() ); │ │ │ │ │ +395 typename Base::template _H_e_l_p_e_r_<_B_a_s_i_s_,_M_a_t_r_i_x_,_f_a_l_s_e_> func( basis,matrix ); │ │ │ │ │ +396 _i_n_t_e_r_p_o_l_a_t_e(func); │ │ │ │ │ +397 } │ │ │ │ │ +398 │ │ │ │ │ +_3_9_9 std::size_t _o_r_d_e_r() const │ │ │ │ │ +400 { │ │ │ │ │ +401 return _o_r_d_e_r__; │ │ │ │ │ +402 } │ │ │ │ │ +_4_0_3 std::size_t _s_i_z_e() const │ │ │ │ │ +404 { │ │ │ │ │ +405 return _s_i_z_e__; │ │ │ │ │ +406 } │ │ │ │ │ +407 │ │ │ │ │ +408 template │ │ │ │ │ +_4_0_9 void _b_u_i_l_d( std::size_t _o_r_d_e_r ) │ │ │ │ │ +410 { │ │ │ │ │ +411 _s_i_z_e__ = 0; │ │ │ │ │ +412 _o_r_d_e_r__ = _o_r_d_e_r; │ │ │ │ │ +413 _b_u_i_l_d_e_r__.template build(_o_r_d_e_r__); │ │ │ │ │ +414 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +415 _s_i_z_e__ += dimension*_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e(); │ │ │ │ │ +416 │ │ │ │ │ +417 for ( unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f ) │ │ │ │ │ +418 if (_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)) │ │ │ │ │ +419 _s_i_z_e__ += (dimension-1)*_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e(); │ │ │ │ │ +420 │ │ │ │ │ +421 for ( unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e ) │ │ │ │ │ +422 if (_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)) │ │ │ │ │ +423 _s_i_z_e__ += _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); │ │ │ │ │ +424 } │ │ │ │ │ +425 │ │ │ │ │ +_4_2_6 void _s_e_t_L_o_c_a_l_K_e_y_s(std::vector< LocalKey > &keys) const │ │ │ │ │ +427 { │ │ │ │ │ +428 keys.resize(_s_i_z_e()); │ │ │ │ │ +429 unsigned int row = 0; │ │ │ │ │ +430 for (unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e) │ │ │ │ │ +431 { │ │ │ │ │ +432 if (_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e()) │ │ │ │ │ +433 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); ++i,++row) │ │ │ │ │ +434 keys[row] = _L_o_c_a_l_K_e_y(e,dimension-1,i); │ │ │ │ │ +435 } │ │ │ │ │ +436 for (unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f) │ │ │ │ │ +437 { │ │ │ │ │ +438 if (_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e()) │ │ │ │ │ +439 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()*(dimension-1); │ │ │ │ │ +++i,++row) │ │ │ │ │ +440 keys[row] = _L_o_c_a_l_K_e_y(f,1,i); │ │ │ │ │ +441 } │ │ │ │ │ +442 │ │ │ │ │ +443 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +444 for (unsigned int i=0; i<_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; ++i,++row) │ │ │ │ │ +445 keys[row] = _L_o_c_a_l_K_e_y(0,0,i); │ │ │ │ │ +446 assert( row == _s_i_z_e() ); │ │ │ │ │ +447 } │ │ │ │ │ +448 │ │ │ │ │ +449 protected: │ │ │ │ │ +450 template< class Func, class Container, bool type > │ │ │ │ │ +_4_5_1 void _i_n_t_e_r_p_o_l_a_t_e ( typename Base::template _H_e_l_p_e_r_<_F_u_n_c_,_C_o_n_t_a_i_n_e_r_,_t_y_p_e_> │ │ │ │ │ +&func ) const │ │ │ │ │ +452 { │ │ │ │ │ +453 const Dune::GeometryType geoType( _b_u_i_l_d_e_r__._t_o_p_o_l_o_g_y_I_d(), dimension ); │ │ │ │ │ +454 │ │ │ │ │ +455 std::vector testBasisVal; │ │ │ │ │ +456 │ │ │ │ │ +457 for (unsigned int i=0; i<_s_i_z_e(); ++i) │ │ │ │ │ +458 for (unsigned int j=0; j EdgeQuadrature; │ │ │ │ │ +465 typedef Dune::QuadratureRules EdgeQuadratureRules; │ │ │ │ │ +466 │ │ │ │ │ +467 const auto &refElement = Dune::ReferenceElements< Field, dimension >:: │ │ │ │ │ +general( geoType ); │ │ │ │ │ +468 │ │ │ │ │ +469 for (unsigned int e=0; e<_b_u_i_l_d_e_r__._e_d_g_e_S_i_z_e(); ++e) │ │ │ │ │ +470 { │ │ │ │ │ +471 if (!_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)) │ │ │ │ │ +472 continue; │ │ │ │ │ +473 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e()); │ │ │ │ │ +474 │ │ │ │ │ +475 const auto &geometry = refElement.template geometry< dimension-1 >( e ); │ │ │ │ │ +476 const Dune::GeometryType subGeoType( geometry.type().id(), 1 ); │ │ │ │ │ +477 const EdgeQuadrature &edgeQuad = EdgeQuadratureRules::rule( subGeoType, │ │ │ │ │ +2*_o_r_d_e_r__+2 ); │ │ │ │ │ +478 │ │ │ │ │ +479 const unsigned int quadratureSize = edgeQuad.size(); │ │ │ │ │ +480 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ +481 { │ │ │ │ │ +482 if (dimension>1) │ │ │ │ │ +483 _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->template evaluate<0>(edgeQuad[qi].position │ │ │ │ │ +(),testBasisVal); │ │ │ │ │ +484 else │ │ │ │ │ +485 testBasisVal[0] = 1.; │ │ │ │ │ +486 computeEdgeDofs(row, │ │ │ │ │ +487 testBasisVal, │ │ │ │ │ +488 func.evaluate( geometry.global( edgeQuad[qi].position() ) ), │ │ │ │ │ +489 _b_u_i_l_d_e_r__._e_d_g_e_T_a_n_g_e_n_t(e), │ │ │ │ │ +490 edgeQuad[qi].weight(), │ │ │ │ │ +491 func); │ │ │ │ │ +492 } │ │ │ │ │ +493 │ │ │ │ │ +494 row += _b_u_i_l_d_e_r__._t_e_s_t_E_d_g_e_B_a_s_i_s(e)->_s_i_z_e(); │ │ │ │ │ +495 } │ │ │ │ │ +496 │ │ │ │ │ +497 // face dofs: │ │ │ │ │ +498 typedef Dune::QuadratureRule<_F_i_e_l_d, dimension-1> FaceQuadrature; │ │ │ │ │ +499 typedef Dune::QuadratureRules<_F_i_e_l_d, dimension-1> FaceQuadratureRules; │ │ │ │ │ +500 │ │ │ │ │ +501 for (unsigned int f=0; f<_b_u_i_l_d_e_r__._f_a_c_e_S_i_z_e(); ++f) │ │ │ │ │ +502 { │ │ │ │ │ +503 if (_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)) │ │ │ │ │ +504 { │ │ │ │ │ +505 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()); │ │ │ │ │ +506 │ │ │ │ │ +507 const auto &geometry = refElement.template geometry< 1 >( f ); │ │ │ │ │ +508 const Dune::GeometryType subGeoType( geometry.type().id(), dimension-1 ); │ │ │ │ │ +509 const FaceQuadrature &faceQuad = FaceQuadratureRules::rule( subGeoType, │ │ │ │ │ +2*_o_r_d_e_r__+2 ); │ │ │ │ │ +510 │ │ │ │ │ +511 const unsigned int quadratureSize = faceQuad.size(); │ │ │ │ │ +512 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ +513 { │ │ │ │ │ +514 if (dimension>1) │ │ │ │ │ +515 _b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->template evaluate<0>(faceQuad[qi].position │ │ │ │ │ +(),testBasisVal); │ │ │ │ │ +516 else │ │ │ │ │ +517 testBasisVal[0] = 1.; │ │ │ │ │ +518 │ │ │ │ │ +519 computeFaceDofs( row, │ │ │ │ │ +520 testBasisVal, │ │ │ │ │ +521 func.evaluate( geometry.global( faceQuad[qi].position() ) ), │ │ │ │ │ +522 _b_u_i_l_d_e_r__._f_a_c_e_T_a_n_g_e_n_t_s(f), │ │ │ │ │ +523 _b_u_i_l_d_e_r__._n_o_r_m_a_l(f), │ │ │ │ │ +524 faceQuad[qi].weight(), │ │ │ │ │ +525 func); │ │ │ │ │ +526 } │ │ │ │ │ +527 │ │ │ │ │ +528 row += _b_u_i_l_d_e_r__._t_e_s_t_F_a_c_e_B_a_s_i_s(f)->_s_i_z_e()*(dimension-1); │ │ │ │ │ +529 } │ │ │ │ │ +530 } │ │ │ │ │ +531 │ │ │ │ │ +532 // element dofs │ │ │ │ │ +533 if (_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()) │ │ │ │ │ +534 { │ │ │ │ │ +535 testBasisVal.resize(_b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()); │ │ │ │ │ +536 │ │ │ │ │ +537 typedef Dune::QuadratureRule Quadrature; │ │ │ │ │ +538 typedef Dune::QuadratureRules QuadratureRules; │ │ │ │ │ +539 const Quadrature &elemQuad = QuadratureRules::rule( geoType, 2*_o_r_d_e_r__+1 ); │ │ │ │ │ +540 │ │ │ │ │ +541 const unsigned int quadratureSize = elemQuad.size(); │ │ │ │ │ +542 for( unsigned int qi = 0; qi < quadratureSize; ++qi ) │ │ │ │ │ +543 { │ │ │ │ │ +544 _b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->template evaluate<0>(elemQuad[qi].position │ │ │ │ │ +(),testBasisVal); │ │ │ │ │ +545 computeInteriorDofs(row, │ │ │ │ │ +546 testBasisVal, │ │ │ │ │ +547 func.evaluate(elemQuad[qi].position()), │ │ │ │ │ +548 elemQuad[qi].weight(), │ │ │ │ │ +549 func ); │ │ │ │ │ +550 } │ │ │ │ │ +551 │ │ │ │ │ +552 row += _b_u_i_l_d_e_r__._t_e_s_t_B_a_s_i_s()->_s_i_z_e()*dimension; │ │ │ │ │ +553 } │ │ │ │ │ +554 assert(row==_s_i_z_e()); │ │ │ │ │ +555 } │ │ │ │ │ +556 │ │ │ │ │ +557 private: │ │ │ │ │ +567 template │ │ │ │ │ +568 void computeEdgeDofs (unsigned int startRow, │ │ │ │ │ +569 const MVal &mVal, │ │ │ │ │ +570 const NedVal &nedVal, │ │ │ │ │ +571 const FieldVector &tangent, │ │ │ │ │ +572 const _F_i_e_l_d &weight, │ │ │ │ │ +573 Matrix &matrix) const │ │ │ │ │ +574 { │ │ │ │ │ +575 const unsigned int endRow = startRow+mVal.size(); │ │ │ │ │ +576 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ +577 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ +578 { │ │ │ │ │ +579 _F_i_e_l_d cFactor = (*nedIter)*tangent; │ │ │ │ │ +580 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ +581 for (unsigned int row = startRow; row!=endRow; ++mIter, ++row ) │ │ │ │ │ +582 matrix.add(row,col, (weight*cFactor)*(*mIter) ); │ │ │ │ │ +583 │ │ │ │ │ +584 assert( mIter == mVal.end() ); │ │ │ │ │ +585 } │ │ │ │ │ +586 } │ │ │ │ │ +587 │ │ │ │ │ +598 template │ │ │ │ │ +599 void computeFaceDofs (unsigned int startRow, │ │ │ │ │ +600 const MVal &mVal, │ │ │ │ │ +601 const NedVal &nedVal, │ │ │ │ │ +602 const _F_a_c_e_T_a_n_g_e_n_t_s& faceTangents, │ │ │ │ │ +603 const FieldVector &normal, │ │ │ │ │ +604 const _F_i_e_l_d &weight, │ │ │ │ │ +605 Matrix &matrix) const │ │ │ │ │ +606 { │ │ │ │ │ +607 const unsigned int endRow = startRow+mVal.size()*(dimension-1); │ │ │ │ │ +608 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ +609 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ +610 { │ │ │ │ │ +611 auto const& u=*nedIter; │ │ │ │ │ +612 auto const& n=normal; │ │ │ │ │ +613 FieldVector nedTimesNormal = { u[1]*n[2]-u[2]*n[1], │ │ │ │ │ +614 u[2]*n[0]-u[0]*n[2], │ │ │ │ │ +615 u[0]*n[1]-u[1]*n[0]}; │ │ │ │ │ +616 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ +617 for (unsigned int row = startRow; row!=endRow; ++mIter) │ │ │ │ │ +618 { │ │ │ │ │ +619 for(int i=0; i │ │ │ │ │ +640 void computeInteriorDofs (unsigned int startRow, │ │ │ │ │ +641 const MVal &mVal, │ │ │ │ │ +642 const NedVal &nedVal, │ │ │ │ │ +643 _F_i_e_l_d weight, │ │ │ │ │ +644 Matrix &matrix) const │ │ │ │ │ +645 { │ │ │ │ │ +646 const unsigned int endRow = startRow+mVal.size()*dimension; │ │ │ │ │ +647 typename NedVal::const_iterator nedIter = nedVal.begin(); │ │ │ │ │ +648 for ( unsigned int col = 0; col < nedVal.size() ; ++nedIter,++col) │ │ │ │ │ +649 { │ │ │ │ │ +650 typename MVal::const_iterator mIter = mVal.begin(); │ │ │ │ │ +651 for (unsigned int row = startRow; row!=endRow; ++mIter,row+=dimension ) │ │ │ │ │ +652 for (unsigned int i=0; i │ │ │ │ │ +_6_6_6 struct _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +667 { │ │ │ │ │ +_6_6_8 typedef _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_<_d_i_m_,_F_i_e_l_d_> _B_u_i_l_d_e_r; │ │ │ │ │ +_6_6_9 typedef const _N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_d_i_m_,_F_i_e_l_d_> _O_b_j_e_c_t; │ │ │ │ │ +_6_7_0 typedef std::size_t _K_e_y; │ │ │ │ │ +_6_7_1 typedef typename std::remove_const::type _N_o_n_C_o_n_s_t_O_b_j_e_c_t; │ │ │ │ │ +672 │ │ │ │ │ +673 template │ │ │ │ │ +_6_7_4 static _O_b_j_e_c_t *_c_r_e_a_t_e( const _K_e_y &key ) │ │ │ │ │ +675 { │ │ │ │ │ +676 if ( !supports(key) ) │ │ │ │ │ +677 return 0; │ │ │ │ │ +678 _N_o_n_C_o_n_s_t_O_b_j_e_c_t *interpol = new _N_o_n_C_o_n_s_t_O_b_j_e_c_t(); │ │ │ │ │ +679 interpol->template build(key); │ │ │ │ │ +680 return interpol; │ │ │ │ │ +681 } │ │ │ │ │ +682 │ │ │ │ │ +683 template │ │ │ │ │ +_6_8_4 static bool _s_u_p_p_o_r_t_s( const _K_e_y &key ) │ │ │ │ │ +685 { │ │ │ │ │ +686 GeometryType gt = geometryId; │ │ │ │ │ +687 return gt.isTriangle() || gt.isTetrahedron() ; │ │ │ │ │ +688 } │ │ │ │ │ +_6_8_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ +690 }; │ │ │ │ │ +691 │ │ │ │ │ +692} // namespace Dune │ │ │ │ │ +693 │ │ │ │ │ +694#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_NEDELEC_NEDELECSIMPLEX_NEDELECSIMPLEXINTERPOLATION_HH │ │ │ │ │ +_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_i_o_n_h_e_l_p_e_r_._h_h │ │ │ │ │ +_o_r_t_h_o_n_o_r_m_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:667 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:674 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const NedelecL2Interpolation< dim, Field > Object │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:669 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_u_i_l_d_e_r │ │ │ │ │ +NedelecL2InterpolationBuilder< dim, Field > Builder │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:668 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:670 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:684 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_N_o_n_C_o_n_s_t_O_b_j_e_c_t │ │ │ │ │ +std::remove_const< Object >::type NonConstObject │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:671 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:689 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r │ │ │ │ │ +LocalCoefficientsContainer(const Setter &setter) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_C_o_n_t_a_i_n_e_r_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:73 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const LocalCoefficientsContainer Object │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:95 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:114 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_E_d_g_e_B_a_s_i_s │ │ │ │ │ +TestEdgeBasis * testEdgeBasis(unsigned int e) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:191 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_~_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +~NedelecL2InterpolationBuilder() │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:141 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:155 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s │ │ │ │ │ +TestBasisFactory::Object TestBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_a_n_g_e_n_t │ │ │ │ │ +FieldVector< Field, dimension > Tangent │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:130 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ +TestFaceBasisFactory::Object TestFaceBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:123 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_F_a_c_e_B_a_s_i_s │ │ │ │ │ +TestFaceBasis * testFaceBasis(unsigned int f) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:184 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_E_d_g_e_B_a_s_i_s │ │ │ │ │ +TestEdgeBasisFactory::Object TestEdgeBasis │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_o_r_m_a_l │ │ │ │ │ +FieldVector< Field, dimension > Normal │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_b_u_i_l_d │ │ │ │ │ +void build(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:216 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +OrthonormalBasisFactory< dimension, Field > TestBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:118 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_F_a_c_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +OrthonormalBasisFactory< dimension-1, Field > TestFaceBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:122 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ +const FaceTangents & faceTangents(unsigned int f) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:203 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_f_a_c_e_S_i_z_e │ │ │ │ │ +unsigned int faceSize() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:166 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_e_s_t_B_a_s_i_s │ │ │ │ │ +TestBasis * testBasis() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:178 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_F_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ +std::array< FieldVector< Field, dimension >, dim-1 > FaceTangents │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:134 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_T_e_s_t_E_d_g_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +OrthonormalBasisFactory< 1, Field > TestEdgeBasisFactory │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:126 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_e_d_g_e_T_a_n_g_e_n_t │ │ │ │ │ +const Tangent & edgeTangent(unsigned int e) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:197 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +NedelecL2InterpolationBuilder(NedelecL2InterpolationBuilder &&)=delete │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:160 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_e_d_g_e_S_i_z_e │ │ │ │ │ +unsigned int edgeSize() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:172 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_t_o_p_o_l_o_g_y_I_d │ │ │ │ │ +unsigned int topologyId() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:150 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +NedelecL2InterpolationBuilder(const NedelecL2InterpolationBuilder &)=delete │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r │ │ │ │ │ +NedelecL2InterpolationBuilder()=default │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_u_i_l_d_e_r_:_:_n_o_r_m_a_l │ │ │ │ │ +const Normal & normal(unsigned int f) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:209 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +An L2-based interpolation for Nedelec. │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:364 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_a_c_e_T_a_n_g_e_n_t_s │ │ │ │ │ +Builder::FaceTangents FaceTangents │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:371 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ +F Field │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:369 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:403 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(typename Base::template Helper< Func, Container, type > &func) │ │ │ │ │ +const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:451 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r__ │ │ │ │ │ +std::size_t order_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:661 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_B_u_i_l_d_e_r │ │ │ │ │ +NedelecL2InterpolationBuilder< dimension, Field > Builder │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:370 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_i_z_e__ │ │ │ │ │ +std::size_t size_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:662 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +NedelecL2Interpolation() │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:373 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const Function &function, Vector &coefficients) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:381 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d │ │ │ │ │ +void build(std::size_t order) │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:409 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:399 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_s_e_t_L_o_c_a_l_K_e_y_s │ │ │ │ │ +void setLocalKeys(std::vector< LocalKey > &keys) const │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:426 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_b_u_i_l_d_e_r__ │ │ │ │ │ +Builder builder_ │ │ │ │ │ +DDeeffiinniittiioonn nedelecsimplexinterpolation.hh:660 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_O_r_t_h_o_n_o_r_m_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn orthonormalbasis.hh:57 │ │ │ │ │ _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r │ │ │ │ │ DDeeffiinniittiioonn interpolationhelper.hh:21 │ │ │ │ │ _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r │ │ │ │ │ DDeeffiinniittiioonn interpolationhelper.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_a_d_d │ │ │ │ │ -void add(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_f_u_n_c__ │ │ │ │ │ -const Func & func_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_H_e_l_p_e_r │ │ │ │ │ -Helper(const Func &func, Vector &vec) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -const Result & evaluate(const DomainVector &x) const │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_R_e_s_u_l_t │ │ │ │ │ -std::vector< Dune::FieldVector< F, d > > Result │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_v_e_c__ │ │ │ │ │ -Vector & vec_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_s_e_t │ │ │ │ │ -void set(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_t_m_p__ │ │ │ │ │ -Result tmp_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _F_u_n_c_,_ _V_e_c_t_o_r_,_ _t_r_u_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ -const Vector::value_type & operator()(unsigned int row, unsigned int col) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_b_a_s_i_s__ │ │ │ │ │ -const Basis & basis_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -const Result & evaluate(const DomainVector &x) const │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ -F & operator()(unsigned int row, unsigned int col) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_s_e_t │ │ │ │ │ -void set(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_H_e_l_p_e_r │ │ │ │ │ -Helper(const Basis &basis, Matrix &matrix) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_t_m_p__ │ │ │ │ │ -Result tmp_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:117 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_a_d_d │ │ │ │ │ -void add(unsigned int row, unsigned int col, const Fy &val) │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:97 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_R_e_s_u_l_t │ │ │ │ │ -std::vector< Dune::FieldVector< F, d > > Result │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_m_a_t_r_i_x__ │ │ │ │ │ -Matrix & matrix_ │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:116 │ │ │ │ │ -_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_H_e_l_p_e_r_:_:_H_e_l_p_e_r_<_ _B_a_s_i_s_,_ _M_a_t_r_i_x_,_ _f_a_l_s_e_ _>_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ -const F & operator()(unsigned int row, unsigned int col) const │ │ │ │ │ -DDeeffiinniittiioonn interpolationhelper.hh:80 │ │ │ │ │ +DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisprint.hh File Reference │ │ │ │ +dune-localfunctions: nedelec1stkindsimplex.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,42 +65,45 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
basisprint.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
nedelec1stkindsimplex.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::Nedelec1stKindSimplexLocalFiniteElement< D, R, dim, k >
 Nédélec elements of the first kind for simplex elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<int deriv, class BasisFactory , class PrintField , GeometryType::Id geometryId>
void Dune::basisPrint (std::ostream &out, typename BasisFactory::Object &basis)
 
template<int deriv, class BasisFactory , class PrintField = typename BasisFactory::StorageField>
void Dune::basisPrint (std::ostream &out, typename BasisFactory::Key &key)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── encoding │ │ │ │ │ @@ -1 +1 @@ │ │ │ │ │ -us-ascii │ │ │ │ │ +utf-8 │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,27 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -basisprint.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +nedelec1stkindsimplex.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_,_ _k_ _> │ │ │ │ │ +  Nédélec elements of the first kind for simplex elements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ -void  _D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t (std::ostream &out, typename BasisFactory::Object │ │ │ │ │ - &basis) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -void  _D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t (std::ostream &out, typename BasisFactory::Key &key) │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00479_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisprint.hh Source File │ │ │ │ +dune-localfunctions: nedelec1stkindsimplex.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,105 +70,423 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basisprint.hh
│ │ │ │ +
nedelec1stkindsimplex.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef BASISPRINT
│ │ │ │ -
6#define BASISPRINT
│ │ │ │ - │ │ │ │ - │ │ │ │ -
9namespace Dune {
│ │ │ │ -
10 /**********************************************
│ │ │ │ -
11 * Methods for printing a PolynomialBasis.
│ │ │ │ -
12 * Is achieved by using the MultiIndex class as
│ │ │ │ -
13 * Field type and printing the results.
│ │ │ │ -
14 * The basis and higher order derivatives can be
│ │ │ │ -
15 * printed. This could be the basis for printing
│ │ │ │ -
16 * routings providing C++ or matlab methods
│ │ │ │ -
17 * for computing the basisfunctions for given
│ │ │ │ -
18 * orders or reference elements.
│ │ │ │ -
19 **********************************************/
│ │ │ │ -
20 // default argument does not work for gcc 4.1.2
│ │ │ │ -
21 // template <int deriv,class BasisFactory,class PrintField=typename BasisFactory::StorageField>
│ │ │ │ -
22 template <int deriv,class BasisFactory,class PrintField,GeometryType::Id geometryId>
│ │ │ │ -
│ │ │ │ -
23 void basisPrint(std::ostream &out,
│ │ │ │ -
24 typename BasisFactory::Object &basis)
│ │ │ │ -
25 {
│ │ │ │ -
26 typedef typename BasisFactory::Object Basis;
│ │ │ │ -
27 const int dimension = Basis::dimension;
│ │ │ │ -
28
│ │ │ │ - │ │ │ │ -
30 typedef typename BasisFactory::template EvaluationBasisFactory<dimension,Field>::Type
│ │ │ │ -
31 MIBasisFactory;
│ │ │ │ -
32 typedef typename MIBasisFactory::Object MIBasis;
│ │ │ │ -
33 typedef typename Basis::CoefficientMatrix CMatrix;
│ │ │ │ -
34 typedef PolynomialBasis<StandardEvaluator<MIBasis>, CMatrix > PrintBasis;
│ │ │ │ -
35
│ │ │ │ -
36 MIBasis *miBasis = MIBasisFactory::template create<geometryId>( basis.basis().order());
│ │ │ │ -
37 PrintBasis printBasis(*miBasis,basis.matrix(),basis.size());
│ │ │ │ -
38
│ │ │ │ -
39 unsigned int size = printBasis.size();
│ │ │ │ -
40
│ │ │ │ -
41 out << "% Number of base functions: " << size << std::endl;
│ │ │ │ -
42 out << "% Derivative order: " << deriv << std::endl;
│ │ │ │ -
43
│ │ │ │ -
44 std::vector< FieldVector<
│ │ │ │ -
45 FieldVector<Field,LFETensor<Field,dimension,deriv>::size>,
│ │ │ │ -
46 PrintBasis::dimRange> > y( size );
│ │ │ │ -
47
│ │ │ │ -
48 FieldVector< Field, dimension > x;
│ │ │ │ -
49 for( int i = 0; i < dimension; ++i )
│ │ │ │ -
50 x[ i ].set( i, 1 );
│ │ │ │ -
51 printBasis.template evaluateSingle<deriv>( x, y );
│ │ │ │ -
52 for (unsigned int i=0; i<size; ++i)
│ │ │ │ -
53 {
│ │ │ │ -
54 out << "$\\varphi_" << i << "(a,b,c)$&$=$&$" << std::endl;
│ │ │ │ -
55 out << "( ";
│ │ │ │ -
56 for (unsigned int r=0; r<PrintBasis::dimRange; ++r)
│ │ │ │ -
57 out << y[i][r] << (r<PrintBasis::dimRange-1 ? " , $ \\\\ && $" : " )$ \\\\");
│ │ │ │ -
58 out << std::endl;
│ │ │ │ -
59 }
│ │ │ │ -
60 MIBasisFactory::release(miBasis);
│ │ │ │ -
61 }
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
63 template <int deriv,class BasisFactory,class PrintField=typename BasisFactory::StorageField>
│ │ │ │ -
│ │ │ │ -
64 void basisPrint(std::ostream &out,
│ │ │ │ -
65 typename BasisFactory::Key &key)
│ │ │ │ -
66 {
│ │ │ │ -
67 typename BasisFactory::Object *basis = BasisFactory::create(key);
│ │ │ │ -
68 basisPrint<deriv,BasisFactory,PrintField>(out,*basis);
│ │ │ │ -
69 BasisFactory::release(basis);
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ -
71}
│ │ │ │ -
72
│ │ │ │ -
73
│ │ │ │ -
74#endif // BASISPRINT
│ │ │ │ - │ │ │ │ - │ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9
│ │ │ │ +
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
14#include <dune/geometry/type.hh>
│ │ │ │ +
15
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
19
│ │ │ │ +
20namespace Dune
│ │ │ │ +
21{
│ │ │ │ +
22namespace Impl
│ │ │ │ +
23{
│ │ │ │ +
36 template<class D, class R, int dim, int k>
│ │ │ │ +
37 class Nedelec1stKindSimplexLocalBasis
│ │ │ │ +
38 {
│ │ │ │ +
39 // Number of edges of the reference simplex
│ │ │ │ +
40 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2;
│ │ │ │ +
41
│ │ │ │ +
42 public:
│ │ │ │ +
43 using Traits = LocalBasisTraits<D,dim,FieldVector<D,dim>,
│ │ │ │ +
44 R,dim,FieldVector<R,dim>,
│ │ │ │ +
45 FieldMatrix<R,dim,dim> >;
│ │ │ │ +
46
│ │ │ │ +
53 Nedelec1stKindSimplexLocalBasis()
│ │ │ │ +
54 {
│ │ │ │ +
55 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0);
│ │ │ │ +
56 }
│ │ │ │ +
57
│ │ │ │ +
60 Nedelec1stKindSimplexLocalBasis(std::bitset<numberOfEdges> edgeOrientation)
│ │ │ │ +
61 : Nedelec1stKindSimplexLocalBasis()
│ │ │ │ +
62 {
│ │ │ │ +
63 for (std::size_t i=0; i<edgeOrientation_.size(); i++)
│ │ │ │ +
64 edgeOrientation_[i] *= edgeOrientation[i] ? -1.0 : 1.0;
│ │ │ │ +
65 }
│ │ │ │ +
66
│ │ │ │ +
68 static constexpr unsigned int size()
│ │ │ │ +
69 {
│ │ │ │ +
70 static_assert(dim==2 || dim==3, "Nedelec shape functions are implemented only for 2d and 3d simplices.");
│ │ │ │ +
71 if (dim==2)
│ │ │ │ +
72 return k * (k+2);
│ │ │ │ +
73 if (dim==3)
│ │ │ │ +
74 return k * (k+2) * (k+3) / 2;
│ │ │ │ +
75 }
│ │ │ │ +
76
│ │ │ │ +
82 void evaluateFunction(const typename Traits::DomainType& in,
│ │ │ │ +
83 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
84 {
│ │ │ │ +
85 static_assert(k==1, "Evaluating Nédélec shape functions is implemented only for first order.");
│ │ │ │ +
86 out.resize(size());
│ │ │ │ +
87
│ │ │ │ +
88 if (dim==2)
│ │ │ │ +
89 {
│ │ │ │ +
90 // First-order Nédélec shape functions on a triangle are of the form
│ │ │ │ +
91 //
│ │ │ │ +
92 // (a1, a2) + b(-x2, x1)^T, a_1, a_2, b \in R
│ │ │ │ +
93 out[0] = {D(1) - in[1], in[0]};
│ │ │ │ +
94 out[1] = {in[1], -in[0]+D(1)};
│ │ │ │ +
95 out[2] = {-in[1], in[0]};
│ │ │ │ +
96 }
│ │ │ │ +
97
│ │ │ │ +
98 if constexpr (dim==3)
│ │ │ │ +
99 {
│ │ │ │ +
100 // First-order Nédélec shape functions on a tetrahedron are of the form
│ │ │ │ +
101 //
│ │ │ │ +
102 // a + b \times x, a, b \in R^3
│ │ │ │ +
103 //
│ │ │ │ +
104 // The following coefficients create the six basis vectors
│ │ │ │ +
105 // that are dual to the edge degrees of freedom:
│ │ │ │ +
106 //
│ │ │ │ +
107 // a[0] = { 1, 0, 0} b[0] = { 0, -1, 1}
│ │ │ │ +
108 // a[1] = { 0, 1, 0} b[1] = { 1, 0, -1}
│ │ │ │ +
109 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 1}
│ │ │ │ +
110 // a[3] = { 0, 0, 1} b[3] = {-1, 1, 0}
│ │ │ │ +
111 // a[4] = { 0, 0, 0} b[4] = { 0, -1, 0}
│ │ │ │ +
112 // a[5] = { 0, 0, 0} b[5] = { 1, 0, 0}
│ │ │ │ +
113 //
│ │ │ │ +
114 // The following implementation uses these values, and simply
│ │ │ │ +
115 // skips all the zeros.
│ │ │ │ +
116
│ │ │ │ +
117 out[0] = { 1 - in[1] - in[2], in[0] , in[0] };
│ │ │ │ +
118 out[1] = { in[1] , 1 - in[0] - in[2], in[1]};
│ │ │ │ +
119 out[2] = { - in[1] , in[0] , 0 };
│ │ │ │ +
120 out[3] = { in[2], in[2], 1 - in[0] - in[1]};
│ │ │ │ +
121 out[4] = { -in[2], 0 , in[0] };
│ │ │ │ +
122 out[5] = { 0 , -in[2], in[1]};
│ │ │ │ +
123 }
│ │ │ │ +
124
│ │ │ │ +
125 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
126 out[i] *= edgeOrientation_[i];
│ │ │ │ +
127 }
│ │ │ │ +
128
│ │ │ │ +
134 void evaluateJacobian(const typename Traits::DomainType& in,
│ │ │ │ +
135 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
136 {
│ │ │ │ +
137 out.resize(size());
│ │ │ │ +
138 if (dim==2)
│ │ │ │ +
139 {
│ │ │ │ +
140 out[0][0] = { 0, -1};
│ │ │ │ +
141 out[0][1] = { 1, 0};
│ │ │ │ +
142
│ │ │ │ +
143 out[1][0] = { 0, 1};
│ │ │ │ +
144 out[1][1] = {-1, 0};
│ │ │ │ +
145
│ │ │ │ +
146 out[2][0] = { 0, -1};
│ │ │ │ +
147 out[2][1] = { 1, 0};
│ │ │ │ +
148 }
│ │ │ │ +
149 if (dim==3)
│ │ │ │ +
150 {
│ │ │ │ +
151 out[0][0] = { 0,-1,-1};
│ │ │ │ +
152 out[0][1] = { 1, 0, 0};
│ │ │ │ +
153 out[0][2] = { 1, 0, 0};
│ │ │ │ +
154
│ │ │ │ +
155 out[1][0] = { 0, 1, 0};
│ │ │ │ +
156 out[1][1] = {-1, 0, -1};
│ │ │ │ +
157 out[1][2] = { 0, 1, 0};
│ │ │ │ +
158
│ │ │ │ +
159 out[2][0] = { 0, -1, 0};
│ │ │ │ +
160 out[2][1] = { 1, 0, 0};
│ │ │ │ +
161 out[2][2] = { 0, 0, 0};
│ │ │ │ +
162
│ │ │ │ +
163 out[3][0] = { 0, 0, 1};
│ │ │ │ +
164 out[3][1] = { 0, 0, 1};
│ │ │ │ +
165 out[3][2] = {-1, -1, 0};
│ │ │ │ +
166
│ │ │ │ +
167 out[4][0] = { 0, 0, -1};
│ │ │ │ +
168 out[4][1] = { 0, 0, 0};
│ │ │ │ +
169 out[4][2] = { 1, 0, 0};
│ │ │ │ +
170
│ │ │ │ +
171 out[5][0] = { 0, 0, 0};
│ │ │ │ +
172 out[5][1] = { 0, 0, -1};
│ │ │ │ +
173 out[5][2] = { 0, 1, 0};
│ │ │ │ +
174 }
│ │ │ │ +
175
│ │ │ │ +
176 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
177 out[i] *= edgeOrientation_[i];
│ │ │ │ +
178
│ │ │ │ +
179 }
│ │ │ │ +
180
│ │ │ │ +
187 void partial(const std::array<unsigned int, dim>& order,
│ │ │ │ +
188 const typename Traits::DomainType& in,
│ │ │ │ +
189 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
190 {
│ │ │ │ +
191 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
192 if (totalOrder == 0) {
│ │ │ │ +
193 evaluateFunction(in, out);
│ │ │ │ +
194 } else if (totalOrder == 1) {
│ │ │ │ +
195 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
196 out.resize(size());
│ │ │ │ +
197
│ │ │ │ +
198 if (dim==2)
│ │ │ │ +
199 {
│ │ │ │ +
200 if (direction==0)
│ │ │ │ +
201 {
│ │ │ │ +
202 out[0] = {0, 1};
│ │ │ │ +
203 out[1] = {0, -1};
│ │ │ │ +
204 out[2] = {0, 1};
│ │ │ │ +
205 }
│ │ │ │ +
206 else
│ │ │ │ +
207 {
│ │ │ │ +
208 out[0] = {-1, 0};
│ │ │ │ +
209 out[1] = { 1, 0};
│ │ │ │ +
210 out[2] = {-1, 0};
│ │ │ │ +
211 }
│ │ │ │ +
212 }
│ │ │ │ +
213
│ │ │ │ +
214 if (dim==3)
│ │ │ │ +
215 {
│ │ │ │ +
216 switch (direction)
│ │ │ │ +
217 {
│ │ │ │ +
218 case 0:
│ │ │ │ +
219 out[0] = { 0, 1, 1};
│ │ │ │ +
220 out[1] = { 0,-1, 0};
│ │ │ │ +
221 out[2] = { 0, 1, 0};
│ │ │ │ +
222 out[3] = { 0, 0,-1};
│ │ │ │ +
223 out[4] = { 0, 0, 1};
│ │ │ │ +
224 out[5] = { 0, 0, 0};
│ │ │ │ +
225 break;
│ │ │ │ +
226
│ │ │ │ +
227 case 1:
│ │ │ │ +
228 out[0] = {-1, 0, 0};
│ │ │ │ +
229 out[1] = { 1, 0, 1};
│ │ │ │ +
230 out[2] = {-1, 0, 0};
│ │ │ │ +
231 out[3] = { 0, 0,-1};
│ │ │ │ +
232 out[4] = { 0, 0, 0};
│ │ │ │ +
233 out[5] = { 0, 0, 1};
│ │ │ │ +
234 break;
│ │ │ │ +
235
│ │ │ │ +
236 case 2:
│ │ │ │ +
237 out[0] = {-1, 0, 0};
│ │ │ │ +
238 out[1] = { 0,-1, 0};
│ │ │ │ +
239 out[2] = { 0, 0, 0};
│ │ │ │ +
240 out[3] = { 1, 1, 0};
│ │ │ │ +
241 out[4] = {-1, 0, 0};
│ │ │ │ +
242 out[5] = { 0,-1, 0};
│ │ │ │ +
243 break;
│ │ │ │ +
244 }
│ │ │ │ +
245 }
│ │ │ │ +
246
│ │ │ │ +
247 for (std::size_t i=0; i<out.size(); i++)
│ │ │ │ +
248 out[i] *= edgeOrientation_[i];
│ │ │ │ +
249
│ │ │ │ +
250 } else {
│ │ │ │ +
251 out.resize(size());
│ │ │ │ +
252 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
253 for (std::size_t j = 0; j < dim; ++j)
│ │ │ │ +
254 out[i][j] = 0;
│ │ │ │ +
255 }
│ │ │ │ +
256
│ │ │ │ +
257 }
│ │ │ │ +
258
│ │ │ │ +
260 unsigned int order() const
│ │ │ │ +
261 {
│ │ │ │ +
262 return k;
│ │ │ │ +
263 }
│ │ │ │ +
264
│ │ │ │ +
265 private:
│ │ │ │ +
266
│ │ │ │ +
267 // Orientations of the simplex edges
│ │ │ │ +
268 std::array<R,numberOfEdges> edgeOrientation_;
│ │ │ │ +
269 };
│ │ │ │ +
270
│ │ │ │ +
271
│ │ │ │ +
276 template <int dim, int k>
│ │ │ │ +
277 class Nedelec1stKindSimplexLocalCoefficients
│ │ │ │ +
278 {
│ │ │ │ +
279 public:
│ │ │ │ +
281 Nedelec1stKindSimplexLocalCoefficients ()
│ │ │ │ +
282 : localKey_(size())
│ │ │ │ +
283 {
│ │ │ │ +
284 static_assert(k==1, "Only first-order Nédélec local coefficients are implemented.");
│ │ │ │ +
285 // Assign all degrees of freedom to edges
│ │ │ │ +
286 // TODO: This is correct only for first-order Nédélec elements
│ │ │ │ +
287 for (std::size_t i=0; i<size(); i++)
│ │ │ │ +
288 localKey_[i] = LocalKey(i,dim-1,0);
│ │ │ │ +
289 }
│ │ │ │ +
290
│ │ │ │ +
292 std::size_t size() const
│ │ │ │ +
293 {
│ │ │ │ +
294 static_assert(dim==2 || dim==3, "Nédélec shape functions are implemented only for 2d and 3d simplices.");
│ │ │ │ +
295 return (dim==2) ? k * (k+2)
│ │ │ │ +
296 : k * (k+2) * (k+3) / 2;
│ │ │ │ +
297 }
│ │ │ │ +
298
│ │ │ │ +
301 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
302 {
│ │ │ │ +
303 return localKey_[i];
│ │ │ │ +
304 }
│ │ │ │ +
305
│ │ │ │ +
306 private:
│ │ │ │ +
307 std::vector<LocalKey> localKey_;
│ │ │ │ +
308 };
│ │ │ │ +
309
│ │ │ │ +
314 template<class LB>
│ │ │ │ +
315 class Nedelec1stKindSimplexLocalInterpolation
│ │ │ │ +
316 {
│ │ │ │ +
317 static constexpr auto dim = LB::Traits::dimDomain;
│ │ │ │ +
318 static constexpr auto size = LB::size();
│ │ │ │ +
319
│ │ │ │ +
320 // Number of edges of the reference simplex
│ │ │ │ +
321 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2;
│ │ │ │ +
322
│ │ │ │ +
323 public:
│ │ │ │ +
324
│ │ │ │ +
326 Nedelec1stKindSimplexLocalInterpolation (std::bitset<numberOfEdges> s = 0)
│ │ │ │ +
327 {
│ │ │ │ +
328 auto refElement = Dune::referenceElement<double,dim>(GeometryTypes::simplex(dim));
│ │ │ │ +
329
│ │ │ │ +
330 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ +
331 m_[i] = refElement.position(i,dim-1);
│ │ │ │ +
332
│ │ │ │ +
333 for (std::size_t i=0; i<numberOfEdges; i++)
│ │ │ │ +
334 {
│ │ │ │ +
335 auto vertexIterator = refElement.subEntities(i,dim-1,dim).begin();
│ │ │ │ +
336 auto v0 = *vertexIterator;
│ │ │ │ +
337 auto v1 = *(++vertexIterator);
│ │ │ │ +
338 // By default, edges point from the vertex with the smaller index
│ │ │ │ +
339 // to the vertex with the larger index.
│ │ │ │ +
340 if (v0>v1)
│ │ │ │ +
341 std::swap(v0,v1);
│ │ │ │ +
342 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim);
│ │ │ │ +
343 edge_[i] *= (s[i]) ? -1.0 : 1.0;
│ │ │ │ +
344 }
│ │ │ │ +
345 }
│ │ │ │ +
346
│ │ │ │ +
352 template<typename F, typename C>
│ │ │ │ +
353 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
354 {
│ │ │ │ +
355 out.resize(size);
│ │ │ │ +
356
│ │ │ │ +
357 for (std::size_t i=0; i<size; i++)
│ │ │ │ +
358 {
│ │ │ │ +
359 auto y = f(m_[i]);
│ │ │ │ +
360 out[i] = 0.0;
│ │ │ │ +
361 for (int j=0; j<dim; j++)
│ │ │ │ +
362 out[i] += y[j]*edge_[i][j];
│ │ │ │ +
363 }
│ │ │ │ +
364 }
│ │ │ │ +
365
│ │ │ │ +
366 private:
│ │ │ │ +
367 // Edge midpoints of the reference simplex
│ │ │ │ +
368 std::array<typename LB::Traits::DomainType, numberOfEdges> m_;
│ │ │ │ +
369 // Edges of the reference simplex
│ │ │ │ +
370 std::array<typename LB::Traits::DomainType, numberOfEdges> edge_;
│ │ │ │ +
371 };
│ │ │ │ +
372
│ │ │ │ +
373}
│ │ │ │ +
374
│ │ │ │ +
375
│ │ │ │ +
401 template<class D, class R, int dim, int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
403 {
│ │ │ │ +
404 public:
│ │ │ │ + │ │ │ │ +
406 Impl::Nedelec1stKindSimplexLocalCoefficients<dim,k>,
│ │ │ │ +
407 Impl::Nedelec1stKindSimplexLocalInterpolation<Impl::Nedelec1stKindSimplexLocalBasis<D,R,dim,k> > >;
│ │ │ │ +
408
│ │ │ │ +
409 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for 2d and 3d elements.");
│ │ │ │ +
410 static_assert(k==1, "Nedelec elements of the first kind are currently only implemented for order k==1.");
│ │ │ │ +
411
│ │ │ │ + │ │ │ │ +
415
│ │ │ │ +
│ │ │ │ +
421 Nedelec1stKindSimplexLocalFiniteElement (std::bitset<dim*(dim+1)/2> s) :
│ │ │ │ +
422 basis_(s),
│ │ │ │ +
423 interpolation_(s)
│ │ │ │ +
424 {}
│ │ │ │ +
│ │ │ │ +
425
│ │ │ │ +
│ │ │ │ +
426 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
427 {
│ │ │ │ +
428 return basis_;
│ │ │ │ +
429 }
│ │ │ │ +
│ │ │ │ +
430
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
432 {
│ │ │ │ +
433 return coefficients_;
│ │ │ │ +
434 }
│ │ │ │ +
│ │ │ │ +
435
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
437 {
│ │ │ │ +
438 return interpolation_;
│ │ │ │ +
439 }
│ │ │ │ +
│ │ │ │ +
440
│ │ │ │ +
│ │ │ │ +
441 static constexpr unsigned int size ()
│ │ │ │ +
442 {
│ │ │ │ +
443 return Traits::LocalBasisType::size();
│ │ │ │ +
444 }
│ │ │ │ +
│ │ │ │ +
445
│ │ │ │ +
│ │ │ │ +
446 static constexpr GeometryType type ()
│ │ │ │ +
447 {
│ │ │ │ +
448 return GeometryTypes::simplex(dim);
│ │ │ │ +
449 }
│ │ │ │ +
│ │ │ │ +
450
│ │ │ │ +
451 private:
│ │ │ │ +
452 typename Traits::LocalBasisType basis_;
│ │ │ │ +
453 typename Traits::LocalCoefficientsType coefficients_;
│ │ │ │ +
454 typename Traits::LocalInterpolationType interpolation_;
│ │ │ │ +
455 };
│ │ │ │ +
│ │ │ │ +
456
│ │ │ │ +
457}
│ │ │ │ +
458
│ │ │ │ +
459#endif
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void basisPrint(std::ostream &out, typename BasisFactory::Object &basis)
Definition basisprint.hh:23
│ │ │ │ -
Definition multiindex.hh:38
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Nédélec elements of the first kind for simplex elements.
Definition nedelec1stkindsimplex.hh:403
│ │ │ │ +
static constexpr unsigned int size()
Definition nedelec1stkindsimplex.hh:441
│ │ │ │ +
Nedelec1stKindSimplexLocalFiniteElement()=default
Default constructor.
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition nedelec1stkindsimplex.hh:436
│ │ │ │ +
Nedelec1stKindSimplexLocalFiniteElement(std::bitset< dim *(dim+1)/2 > s)
Constructor with explicitly given edge orientations.
Definition nedelec1stkindsimplex.hh:421
│ │ │ │ +
static constexpr GeometryType type()
Definition nedelec1stkindsimplex.hh:446
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition nedelec1stkindsimplex.hh:426
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition nedelec1stkindsimplex.hh:431
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,103 +1,441 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -basisprint.hh │ │ │ │ │ + * _n_e_d_e_l_e_c │ │ │ │ │ +nedelec1stkindsimplex.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef BASISPRINT │ │ │ │ │ -6#define BASISPRINT │ │ │ │ │ -7#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -9namespace _D_u_n_e { │ │ │ │ │ -10 /********************************************** │ │ │ │ │ -11 * Methods for printing a PolynomialBasis. │ │ │ │ │ -12 * Is achieved by using the MultiIndex class as │ │ │ │ │ -13 * Field type and printing the results. │ │ │ │ │ -14 * The basis and higher order derivatives can be │ │ │ │ │ -15 * printed. This could be the basis for printing │ │ │ │ │ -16 * routings providing C++ or matlab methods │ │ │ │ │ -17 * for computing the basisfunctions for given │ │ │ │ │ -18 * orders or reference elements. │ │ │ │ │ -19 **********************************************/ │ │ │ │ │ -20 // default argument does not work for gcc 4.1.2 │ │ │ │ │ -21 // template │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 void _b_a_s_i_s_P_r_i_n_t(std::ostream &out, │ │ │ │ │ -24 typename BasisFactory::Object &basis) │ │ │ │ │ -25 { │ │ │ │ │ -26 typedef typename BasisFactory::Object Basis; │ │ │ │ │ -27 const int dimension = Basis::dimension; │ │ │ │ │ -28 │ │ │ │ │ -29 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_e_n_s_i_o_n_,_ _P_r_i_n_t_F_i_e_l_d_ _> Field; │ │ │ │ │ -30 typedef typename BasisFactory::template │ │ │ │ │ -EvaluationBasisFactory::Type │ │ │ │ │ -31 MIBasisFactory; │ │ │ │ │ -32 typedef typename MIBasisFactory::Object MIBasis; │ │ │ │ │ -33 typedef typename Basis::CoefficientMatrix CMatrix; │ │ │ │ │ -34 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_M_I_B_a_s_i_s_>, CMatrix > PrintBasis; │ │ │ │ │ -35 │ │ │ │ │ -36 MIBasis *miBasis = MIBasisFactory::template create( basis.basis │ │ │ │ │ -().order()); │ │ │ │ │ -37 PrintBasis printBasis(*miBasis,basis.matrix(),basis.size()); │ │ │ │ │ -38 │ │ │ │ │ -39 unsigned int size = printBasis.size(); │ │ │ │ │ -40 │ │ │ │ │ -41 out << "% Number of base functions: " << size << std::endl; │ │ │ │ │ -42 out << "% Derivative order: " << deriv << std::endl; │ │ │ │ │ -43 │ │ │ │ │ -44 std::vector< FieldVector< │ │ │ │ │ -45 FieldVector::size>, │ │ │ │ │ -46 PrintBasis::dimRange> > y( size ); │ │ │ │ │ -47 │ │ │ │ │ -48 FieldVector< Field, dimension > x; │ │ │ │ │ -49 for( int i = 0; i < dimension; ++i ) │ │ │ │ │ -50 x[ i ].set( i, 1 ); │ │ │ │ │ -51 printBasis.template evaluateSingle( x, y ); │ │ │ │ │ -52 for (unsigned int i=0; i │ │ │ │ │ -_6_4 void _b_a_s_i_s_P_r_i_n_t(std::ostream &out, │ │ │ │ │ -65 typename BasisFactory::Key &key) │ │ │ │ │ -66 { │ │ │ │ │ -67 typename BasisFactory::Object *basis = BasisFactory::create(key); │ │ │ │ │ -68 basisPrint(out,*basis); │ │ │ │ │ -69 BasisFactory::release(basis); │ │ │ │ │ -70 } │ │ │ │ │ -71} │ │ │ │ │ -72 │ │ │ │ │ -73 │ │ │ │ │ -74#endif // BASISPRINT │ │ │ │ │ -_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_NEDELEC_NEDELEC1STKINDSIMPLEX_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +19 │ │ │ │ │ +20namespace _D_u_n_e │ │ │ │ │ +21{ │ │ │ │ │ +22namespace Impl │ │ │ │ │ +23{ │ │ │ │ │ +36 template │ │ │ │ │ +37 class Nedelec1stKindSimplexLocalBasis │ │ │ │ │ +38 { │ │ │ │ │ +39 // Number of edges of the reference simplex │ │ │ │ │ +40 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2; │ │ │ │ │ +41 │ │ │ │ │ +42 public: │ │ │ │ │ +43 using Traits = LocalBasisTraits, │ │ │ │ │ +44 R,dim,FieldVector, │ │ │ │ │ +45 FieldMatrix >; │ │ │ │ │ +46 │ │ │ │ │ +53 Nedelec1stKindSimplexLocalBasis() │ │ │ │ │ +54 { │ │ │ │ │ +55 std::fill(edgeOrientation_.begin(), edgeOrientation_.end(), 1.0); │ │ │ │ │ +56 } │ │ │ │ │ +57 │ │ │ │ │ +60 Nedelec1stKindSimplexLocalBasis(std::bitset edgeOrientation) │ │ │ │ │ +61 : Nedelec1stKindSimplexLocalBasis() │ │ │ │ │ +62 { │ │ │ │ │ +63 for (std::size_t i=0; i& out) const │ │ │ │ │ +84 { │ │ │ │ │ +85 static_assert(k==1, "Evaluating Nédélec shape functions is implemented │ │ │ │ │ +only for first order."); │ │ │ │ │ +86 out.resize(size()); │ │ │ │ │ +87 │ │ │ │ │ +88 if (dim==2) │ │ │ │ │ +89 { │ │ │ │ │ +90 // First-order Nédélec shape functions on a triangle are of the form │ │ │ │ │ +91 // │ │ │ │ │ +92 // (a1, a2) + b(-x2, x1)^T, a_1, a_2, b \in R │ │ │ │ │ +93 out[0] = {D(1) - in[1], in[0]}; │ │ │ │ │ +94 out[1] = {in[1], -in[0]+D(1)}; │ │ │ │ │ +95 out[2] = {-in[1], in[0]}; │ │ │ │ │ +96 } │ │ │ │ │ +97 │ │ │ │ │ +98 if constexpr (dim==3) │ │ │ │ │ +99 { │ │ │ │ │ +100 // First-order Nédélec shape functions on a tetrahedron are of the form │ │ │ │ │ +101 // │ │ │ │ │ +102 // a + b \times x, a, b \in R^3 │ │ │ │ │ +103 // │ │ │ │ │ +104 // The following coefficients create the six basis vectors │ │ │ │ │ +105 // that are dual to the edge degrees of freedom: │ │ │ │ │ +106 // │ │ │ │ │ +107 // a[0] = { 1, 0, 0} b[0] = { 0, -1, 1} │ │ │ │ │ +108 // a[1] = { 0, 1, 0} b[1] = { 1, 0, -1} │ │ │ │ │ +109 // a[2] = { 0, 0, 0} b[2] = { 0, 0, 1} │ │ │ │ │ +110 // a[3] = { 0, 0, 1} b[3] = {-1, 1, 0} │ │ │ │ │ +111 // a[4] = { 0, 0, 0} b[4] = { 0, -1, 0} │ │ │ │ │ +112 // a[5] = { 0, 0, 0} b[5] = { 1, 0, 0} │ │ │ │ │ +113 // │ │ │ │ │ +114 // The following implementation uses these values, and simply │ │ │ │ │ +115 // skips all the zeros. │ │ │ │ │ +116 │ │ │ │ │ +117 out[0] = { 1 - in[1] - in[2], in[0] , in[0] }; │ │ │ │ │ +118 out[1] = { in[1] , 1 - in[0] - in[2], in[1]}; │ │ │ │ │ +119 out[2] = { - in[1] , in[0] , 0 }; │ │ │ │ │ +120 out[3] = { in[2], in[2], 1 - in[0] - in[1]}; │ │ │ │ │ +121 out[4] = { -in[2], 0 , in[0] }; │ │ │ │ │ +122 out[5] = { 0 , -in[2], in[1]}; │ │ │ │ │ +123 } │ │ │ │ │ +124 │ │ │ │ │ +125 for (std::size_t i=0; i& out) const │ │ │ │ │ +136 { │ │ │ │ │ +137 out.resize(size()); │ │ │ │ │ +138 if (dim==2) │ │ │ │ │ +139 { │ │ │ │ │ +140 out[0][0] = { 0, -1}; │ │ │ │ │ +141 out[0][1] = { 1, 0}; │ │ │ │ │ +142 │ │ │ │ │ +143 out[1][0] = { 0, 1}; │ │ │ │ │ +144 out[1][1] = {-1, 0}; │ │ │ │ │ +145 │ │ │ │ │ +146 out[2][0] = { 0, -1}; │ │ │ │ │ +147 out[2][1] = { 1, 0}; │ │ │ │ │ +148 } │ │ │ │ │ +149 if (dim==3) │ │ │ │ │ +150 { │ │ │ │ │ +151 out[0][0] = { 0,-1,-1}; │ │ │ │ │ +152 out[0][1] = { 1, 0, 0}; │ │ │ │ │ +153 out[0][2] = { 1, 0, 0}; │ │ │ │ │ +154 │ │ │ │ │ +155 out[1][0] = { 0, 1, 0}; │ │ │ │ │ +156 out[1][1] = {-1, 0, -1}; │ │ │ │ │ +157 out[1][2] = { 0, 1, 0}; │ │ │ │ │ +158 │ │ │ │ │ +159 out[2][0] = { 0, -1, 0}; │ │ │ │ │ +160 out[2][1] = { 1, 0, 0}; │ │ │ │ │ +161 out[2][2] = { 0, 0, 0}; │ │ │ │ │ +162 │ │ │ │ │ +163 out[3][0] = { 0, 0, 1}; │ │ │ │ │ +164 out[3][1] = { 0, 0, 1}; │ │ │ │ │ +165 out[3][2] = {-1, -1, 0}; │ │ │ │ │ +166 │ │ │ │ │ +167 out[4][0] = { 0, 0, -1}; │ │ │ │ │ +168 out[4][1] = { 0, 0, 0}; │ │ │ │ │ +169 out[4][2] = { 1, 0, 0}; │ │ │ │ │ +170 │ │ │ │ │ +171 out[5][0] = { 0, 0, 0}; │ │ │ │ │ +172 out[5][1] = { 0, 0, -1}; │ │ │ │ │ +173 out[5][2] = { 0, 1, 0}; │ │ │ │ │ +174 } │ │ │ │ │ +175 │ │ │ │ │ +176 for (std::size_t i=0; i& order, │ │ │ │ │ +188 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +189 std::vector& out) const │ │ │ │ │ +190 { │ │ │ │ │ +191 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +192 if (totalOrder == 0) { │ │ │ │ │ +193 evaluateFunction(in, out); │ │ │ │ │ +194 } else if (totalOrder == 1) { │ │ │ │ │ +195 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +196 out.resize(size()); │ │ │ │ │ +197 │ │ │ │ │ +198 if (dim==2) │ │ │ │ │ +199 { │ │ │ │ │ +200 if (direction==0) │ │ │ │ │ +201 { │ │ │ │ │ +202 out[0] = {0, 1}; │ │ │ │ │ +203 out[1] = {0, -1}; │ │ │ │ │ +204 out[2] = {0, 1}; │ │ │ │ │ +205 } │ │ │ │ │ +206 else │ │ │ │ │ +207 { │ │ │ │ │ +208 out[0] = {-1, 0}; │ │ │ │ │ +209 out[1] = { 1, 0}; │ │ │ │ │ +210 out[2] = {-1, 0}; │ │ │ │ │ +211 } │ │ │ │ │ +212 } │ │ │ │ │ +213 │ │ │ │ │ +214 if (dim==3) │ │ │ │ │ +215 { │ │ │ │ │ +216 switch (direction) │ │ │ │ │ +217 { │ │ │ │ │ +218 case 0: │ │ │ │ │ +219 out[0] = { 0, 1, 1}; │ │ │ │ │ +220 out[1] = { 0,-1, 0}; │ │ │ │ │ +221 out[2] = { 0, 1, 0}; │ │ │ │ │ +222 out[3] = { 0, 0,-1}; │ │ │ │ │ +223 out[4] = { 0, 0, 1}; │ │ │ │ │ +224 out[5] = { 0, 0, 0}; │ │ │ │ │ +225 break; │ │ │ │ │ +226 │ │ │ │ │ +227 case 1: │ │ │ │ │ +228 out[0] = {-1, 0, 0}; │ │ │ │ │ +229 out[1] = { 1, 0, 1}; │ │ │ │ │ +230 out[2] = {-1, 0, 0}; │ │ │ │ │ +231 out[3] = { 0, 0,-1}; │ │ │ │ │ +232 out[4] = { 0, 0, 0}; │ │ │ │ │ +233 out[5] = { 0, 0, 1}; │ │ │ │ │ +234 break; │ │ │ │ │ +235 │ │ │ │ │ +236 case 2: │ │ │ │ │ +237 out[0] = {-1, 0, 0}; │ │ │ │ │ +238 out[1] = { 0,-1, 0}; │ │ │ │ │ +239 out[2] = { 0, 0, 0}; │ │ │ │ │ +240 out[3] = { 1, 1, 0}; │ │ │ │ │ +241 out[4] = {-1, 0, 0}; │ │ │ │ │ +242 out[5] = { 0,-1, 0}; │ │ │ │ │ +243 break; │ │ │ │ │ +244 } │ │ │ │ │ +245 } │ │ │ │ │ +246 │ │ │ │ │ +247 for (std::size_t i=0; i edgeOrientation_; │ │ │ │ │ +269 }; │ │ │ │ │ +270 │ │ │ │ │ +271 │ │ │ │ │ +276 template │ │ │ │ │ +277 class Nedelec1stKindSimplexLocalCoefficients │ │ │ │ │ +278 { │ │ │ │ │ +279 public: │ │ │ │ │ +281 Nedelec1stKindSimplexLocalCoefficients () │ │ │ │ │ +282 : localKey_(size()) │ │ │ │ │ +283 { │ │ │ │ │ +284 static_assert(k==1, "Only first-order Nédélec local coefficients are │ │ │ │ │ +implemented."); │ │ │ │ │ +285 // Assign all degrees of freedom to edges │ │ │ │ │ +286 // TODO: This is correct only for first-order Nédélec elements │ │ │ │ │ +287 for (std::size_t i=0; i localKey_; │ │ │ │ │ +308 }; │ │ │ │ │ +309 │ │ │ │ │ +314 template │ │ │ │ │ +315 class Nedelec1stKindSimplexLocalInterpolation │ │ │ │ │ +316 { │ │ │ │ │ +317 static constexpr auto dim = LB::Traits::dimDomain; │ │ │ │ │ +318 static constexpr auto size = LB::size(); │ │ │ │ │ +319 │ │ │ │ │ +320 // Number of edges of the reference simplex │ │ │ │ │ +321 constexpr static std::size_t numberOfEdges = dim*(dim+1)/2; │ │ │ │ │ +322 │ │ │ │ │ +323 public: │ │ │ │ │ +324 │ │ │ │ │ +326 Nedelec1stKindSimplexLocalInterpolation (std::bitset s = 0) │ │ │ │ │ +327 { │ │ │ │ │ +328 auto refElement = Dune::referenceElement(GeometryTypes::simplex │ │ │ │ │ +(dim)); │ │ │ │ │ +329 │ │ │ │ │ +330 for (std::size_t i=0; iv1) │ │ │ │ │ +341 std::swap(v0,v1); │ │ │ │ │ +342 edge_[i] = refElement.position(v1,dim) - refElement.position(v0,dim); │ │ │ │ │ +343 edge_[i] *= (s[i]) ? -1.0 : 1.0; │ │ │ │ │ +344 } │ │ │ │ │ +345 } │ │ │ │ │ +346 │ │ │ │ │ +352 template │ │ │ │ │ +353 void interpolate (const F& f, std::vector& out) const │ │ │ │ │ +354 { │ │ │ │ │ +355 out.resize(size); │ │ │ │ │ +356 │ │ │ │ │ +357 for (std::size_t i=0; i m_; │ │ │ │ │ +369 // Edges of the reference simplex │ │ │ │ │ +370 std::array edge_; │ │ │ │ │ +371 }; │ │ │ │ │ +372 │ │ │ │ │ +373} │ │ │ │ │ +374 │ │ │ │ │ +375 │ │ │ │ │ +401 template │ │ │ │ │ +_4_0_2 class _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +403 { │ │ │ │ │ +404 public: │ │ │ │ │ +_4_0_5 using _T_r_a_i_t_s = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_I_m_p_l_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_,_k_>, │ │ │ │ │ +406 Impl::Nedelec1stKindSimplexLocalCoefficients, │ │ │ │ │ +407 Impl::Nedelec1stKindSimplexLocalInterpolation > >; │ │ │ │ │ +408 │ │ │ │ │ +409 static_assert(dim==2 || dim==3, "Nedelec elements are only implemented for │ │ │ │ │ +2d and 3d elements."); │ │ │ │ │ +410 static_assert(k==1, "Nedelec elements of the first kind are currently only │ │ │ │ │ +implemented for order k==1."); │ │ │ │ │ +411 │ │ │ │ │ +_4_1_4 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() = default; │ │ │ │ │ +415 │ │ │ │ │ +_4_2_1 _N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (std::bitset s) : │ │ │ │ │ +422 basis_(s), │ │ │ │ │ +423 interpolation_(s) │ │ │ │ │ +424 {} │ │ │ │ │ +425 │ │ │ │ │ +_4_2_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +427 { │ │ │ │ │ +428 return basis_; │ │ │ │ │ +429 } │ │ │ │ │ +430 │ │ │ │ │ +_4_3_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +432 { │ │ │ │ │ +433 return coefficients_; │ │ │ │ │ +434 } │ │ │ │ │ +435 │ │ │ │ │ +_4_3_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +437 { │ │ │ │ │ +438 return interpolation_; │ │ │ │ │ +439 } │ │ │ │ │ +440 │ │ │ │ │ +_4_4_1 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +442 { │ │ │ │ │ +443 return Traits::LocalBasisType::size(); │ │ │ │ │ +444 } │ │ │ │ │ +445 │ │ │ │ │ +_4_4_6 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +447 { │ │ │ │ │ +448 return GeometryTypes::simplex(dim); │ │ │ │ │ +449 } │ │ │ │ │ +450 │ │ │ │ │ +451 private: │ │ │ │ │ +452 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e basis_; │ │ │ │ │ +453 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients_; │ │ │ │ │ +454 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e interpolation_; │ │ │ │ │ +455 }; │ │ │ │ │ +456 │ │ │ │ │ +457} │ │ │ │ │ +458 │ │ │ │ │ +459#endif │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_b_a_s_i_s_P_r_i_n_t │ │ │ │ │ -void basisPrint(std::ostream &out, typename BasisFactory::Object &basis) │ │ │ │ │ -DDeeffiinniittiioonn basisprint.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nédélec elements of the first kind for simplex elements. │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:403 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:441 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nedelec1stKindSimplexLocalFiniteElement()=default │ │ │ │ │ +Default constructor. │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:436 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ +_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Nedelec1stKindSimplexLocalFiniteElement(std::bitset< dim *(dim+1)/2 > s) │ │ │ │ │ +Constructor with explicitly given edge orientations. │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:421 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:446 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:426 │ │ │ │ │ +_D_u_n_e_:_:_N_e_d_e_l_e_c_1_s_t_K_i_n_d_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn nedelec1stkindsimplex.hh:431 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basismatrix.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,43 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
basismatrix.hh File Reference
│ │ │ │ +
rannachertureklocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/dynmatrix.hh>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/utility/polynomialbasis.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::BasisMatrixBase< PreBasis, Interpolation, Field >
struct  Dune::RannacherTurekLocalBasis< D, R, 2 >
 
struct  Dune::BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const PolynomialBasis< Eval, CM, D, R >, Interpolation, Field >
 
struct  Dune::BasisMatrix< const PolynomialBasisWithMatrix< Eval, CM >, Interpolation, Field >
struct  Dune::RannacherTurekLocalBasis< D, R, 3 >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -basismatrix.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +rannachertureklocalbasis.hh File Reference │ │ │ │ │ +#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_ _P_r_e_B_a_s_i_s_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_, │ │ │ │ │ - _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_, │ │ │ │ │ - _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_, │ │ │ │ │ - _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_, │ │ │ │ │ - _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00482_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basismatrix.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,277 +70,60 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basismatrix.hh
│ │ │ │ +
rannachertureklocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_BASISMATRIX_HH
│ │ │ │ -
6#define DUNE_BASISMATRIX_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/dynmatrix.hh>
│ │ │ │ -
10#include <dune/common/exceptions.hh>
│ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17 /****************************************
│ │ │ │ -
18 * A dense matrix representation of a ''polynomial''
│ │ │ │ -
19 * basis. Its represent a basis as a linear
│ │ │ │ -
20 * combination of a second basis, i.e., a
│ │ │ │ -
21 * monomial basis. It is simular to the PolynomialBasis
│ │ │ │ -
22 * but it not derived from the LocalBasis class.
│ │ │ │ -
23 * It is used to define a ''pre basis''.
│ │ │ │ -
24 ****************************************/
│ │ │ │ -
25 template< class PreBasis, class Interpolation,
│ │ │ │ -
26 class Field >
│ │ │ │ - │ │ │ │ -
28
│ │ │ │ -
29 template< class PreBasis, class Interpolation,
│ │ │ │ -
30 class Field >
│ │ │ │ -
│ │ │ │ -
31 struct BasisMatrixBase : public DynamicMatrix<Field>
│ │ │ │ -
32 {
│ │ │ │ -
33 typedef DynamicMatrix<Field> Matrix;
│ │ │ │ -
34
│ │ │ │ -
│ │ │ │ -
35 BasisMatrixBase( const PreBasis& preBasis,
│ │ │ │ -
36 const Interpolation& localInterpolation )
│ │ │ │ -
37 : cols_(preBasis.size())
│ │ │ │ -
38 {
│ │ │ │ -
39 localInterpolation.interpolate( preBasis, *this );
│ │ │ │ -
40 this->invert();
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
42 unsigned int cols () const
│ │ │ │ -
43 {
│ │ │ │ -
44 return cols_;
│ │ │ │ -
45 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
46 unsigned int rows () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return Matrix::rows();
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50 private:
│ │ │ │ -
51 unsigned int cols_;
│ │ │ │ -
52 };
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54 template< GeometryType::Id geometryId, class F,
│ │ │ │ -
55 class Interpolation,
│ │ │ │ -
56 class Field >
│ │ │ │ -
│ │ │ │ -
57 struct BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field >
│ │ │ │ -
58 : public BasisMatrixBase< const MonomialBasis< geometryId, F >, Interpolation, Field >
│ │ │ │ -
59 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
62 typedef typename Base::Matrix Matrix;
│ │ │ │ -
63
│ │ │ │ -
│ │ │ │ -
64 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ -
65 const Interpolation& localInterpolation )
│ │ │ │ -
66 : Base(preBasis, localInterpolation)
│ │ │ │ -
67 {}
│ │ │ │ -
│ │ │ │ -
68 template <class Vector>
│ │ │ │ -
│ │ │ │ -
69 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
70 {
│ │ │ │ -
71 const unsigned int N = Matrix::rows();
│ │ │ │ -
72 assert( Matrix::cols() == N && vec.size() == N );
│ │ │ │ -
73 // note: that the transposed matrix is computed,
│ │ │ │ -
74 // and is square
│ │ │ │ -
75 for (unsigned int i=0; i<N; ++i)
│ │ │ │ -
76 field_cast((*this)[i][row],vec[i]);
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78 };
│ │ │ │ -
│ │ │ │ -
79 template< int dim, class F,
│ │ │ │ -
80 class Interpolation,
│ │ │ │ -
81 class Field >
│ │ │ │ -
│ │ │ │ -
82 struct BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field >
│ │ │ │ -
83 : public BasisMatrixBase< const VirtualMonomialBasis< dim, F >, Interpolation, Field >
│ │ │ │ -
84 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
87 typedef typename Base::Matrix Matrix;
│ │ │ │ -
88
│ │ │ │ -
│ │ │ │ -
89 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ -
90 const Interpolation& localInterpolation )
│ │ │ │ -
91 : Base(preBasis, localInterpolation)
│ │ │ │ -
92 {}
│ │ │ │ -
│ │ │ │ -
93 template <class Vector>
│ │ │ │ -
│ │ │ │ -
94 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
95 {
│ │ │ │ -
96 const unsigned int N = Matrix::rows();
│ │ │ │ -
97 assert( Matrix::cols() == N && vec.size() == N );
│ │ │ │ -
98 // note: that the transposed matrix is computed,
│ │ │ │ -
99 // and is square
│ │ │ │ -
100 for (unsigned int i=0; i<N; ++i)
│ │ │ │ -
101 field_cast((*this)[i][row],vec[i]);
│ │ │ │ -
102 }
│ │ │ │ -
│ │ │ │ -
103 };
│ │ │ │ -
│ │ │ │ -
104 template< class Eval, class CM, class D, class R,
│ │ │ │ -
105 class Interpolation,
│ │ │ │ -
106 class Field >
│ │ │ │ -
│ │ │ │ -
107 struct BasisMatrix< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
│ │ │ │ -
108 : public BasisMatrixBase< const PolynomialBasis<Eval,CM,D,R>, Interpolation, Field >
│ │ │ │ -
109 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
112 typedef typename Base::Matrix Matrix;
│ │ │ │ -
113
│ │ │ │ -
│ │ │ │ -
114 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ -
115 const Interpolation& localInterpolation )
│ │ │ │ -
116 : Base(preBasis, localInterpolation),
│ │ │ │ -
117 preBasis_(preBasis)
│ │ │ │ -
118 {}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
119 unsigned int cols() const
│ │ │ │ -
120 {
│ │ │ │ -
121 return preBasis_.matrix().baseSize() ;
│ │ │ │ -
122 }
│ │ │ │ -
│ │ │ │ -
123 template <class Vector>
│ │ │ │ -
│ │ │ │ -
124 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
125 {
│ │ │ │ -
126 assert( Matrix::rows() == Matrix::cols() );
│ │ │ │ -
127 assert( vec.size() == preBasis_.matrix().baseSize() );
│ │ │ │ -
128 assert( Matrix::cols() == preBasis_.size() );
│ │ │ │ -
129 for (unsigned int j=0; j<Matrix::cols(); ++j)
│ │ │ │ -
130 vec[j] = 0;
│ │ │ │ -
131 for (unsigned int i=0; i<Matrix::rows(); ++i)
│ │ │ │ -
132 preBasis_.matrix().
│ │ │ │ -
133 addRow(i,(*this)[i][row],vec);
│ │ │ │ -
134 }
│ │ │ │ -
│ │ │ │ -
135 private:
│ │ │ │ -
136 const PreBasis& preBasis_;
│ │ │ │ -
137 };
│ │ │ │ -
│ │ │ │ -
138 template< class Eval, class CM,
│ │ │ │ -
139 class Interpolation,
│ │ │ │ -
140 class Field >
│ │ │ │ -
│ │ │ │ -
141 struct BasisMatrix< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
│ │ │ │ -
142 : public BasisMatrixBase< const PolynomialBasisWithMatrix<Eval,CM>, Interpolation, Field >
│ │ │ │ -
143 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
146 typedef typename Base::Matrix Matrix;
│ │ │ │ -
147
│ │ │ │ -
│ │ │ │ -
148 BasisMatrix( const PreBasis& preBasis,
│ │ │ │ -
149 const Interpolation& localInterpolation )
│ │ │ │ -
150 : Base(preBasis, localInterpolation),
│ │ │ │ -
151 preBasis_(preBasis)
│ │ │ │ -
152 {}
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
153 unsigned int cols() const
│ │ │ │ -
154 {
│ │ │ │ -
155 return preBasis_.matrix().baseSize() ;
│ │ │ │ -
156 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
157 unsigned int rows () const
│ │ │ │ -
158 {
│ │ │ │ -
159 assert( Matrix::rows() == preBasis_.matrix().size() );
│ │ │ │ -
160 return preBasis_.matrix().size()*CM::blockSize ;
│ │ │ │ -
161 }
│ │ │ │ -
│ │ │ │ -
162 template <class Vector>
│ │ │ │ -
│ │ │ │ -
163 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
164 {
│ │ │ │ -
165 unsigned int r = row / CM::blockSize;
│ │ │ │ -
166 assert( r < Matrix::rows() );
│ │ │ │ -
167 assert( Matrix::rows() == Matrix::cols() );
│ │ │ │ -
168 assert( vec.size() == preBasis_.matrix().baseSize() );
│ │ │ │ -
169 assert( Matrix::cols() == preBasis_.size() );
│ │ │ │ -
170 for (unsigned int j=0; j<vec.size(); ++j)
│ │ │ │ -
171 vec[j] = 0;
│ │ │ │ -
172 for (unsigned int i=0; i<Matrix::rows(); ++i)
│ │ │ │ -
173 preBasis_.matrix().
│ │ │ │ -
174 addRow(i*CM::blockSize+row%CM::blockSize,(*this)[i][r],vec);
│ │ │ │ -
175 }
│ │ │ │ -
│ │ │ │ -
176 private:
│ │ │ │ -
177 const PreBasis& preBasis_;
│ │ │ │ -
178 };
│ │ │ │ -
│ │ │ │ -
179}
│ │ │ │ -
180
│ │ │ │ -
181#endif // DUNE_BASISMATRIX_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
10
│ │ │ │ +
11namespace Dune
│ │ │ │ +
12{
│ │ │ │ +
13
│ │ │ │ +
24 template< class D, class R, unsigned int d >
│ │ │ │ + │ │ │ │ +
26
│ │ │ │ +
27 template< class D, class R >
│ │ │ │ +
│ │ │ │ +
28 struct RannacherTurekLocalBasis< D, R, 2 >
│ │ │ │ +
29 : public RannacherTurek2DLocalBasis< D, R >
│ │ │ │ +
30 {};
│ │ │ │ +
│ │ │ │ +
31
│ │ │ │ +
32 template< class D, class R >
│ │ │ │ +
│ │ │ │ +
33 struct RannacherTurekLocalBasis< D, R, 3 >
│ │ │ │ +
34 : public RannacherTurek3DLocalBasis< D, R >
│ │ │ │ +
35 {};
│ │ │ │ +
│ │ │ │ +
36
│ │ │ │ +
37} // namespace Dune
│ │ │ │ +
38
│ │ │ │ +
39#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition basismatrix.hh:27
│ │ │ │ -
Definition basismatrix.hh:32
│ │ │ │ -
unsigned int cols() const
Definition basismatrix.hh:42
│ │ │ │ -
DynamicMatrix< Field > Matrix
Definition basismatrix.hh:33
│ │ │ │ -
unsigned int rows() const
Definition basismatrix.hh:46
│ │ │ │ -
BasisMatrixBase(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:35
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:69
│ │ │ │ -
const MonomialBasis< geometryId, F > PreBasis
Definition basismatrix.hh:60
│ │ │ │ - │ │ │ │ -
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:64
│ │ │ │ -
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:61
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:94
│ │ │ │ -
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:86
│ │ │ │ - │ │ │ │ -
const VirtualMonomialBasis< dim, F > PreBasis
Definition basismatrix.hh:85
│ │ │ │ -
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:89
│ │ │ │ - │ │ │ │ -
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:111
│ │ │ │ -
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:114
│ │ │ │ - │ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:124
│ │ │ │ -
const PolynomialBasis< Eval, CM, D, R > PreBasis
Definition basismatrix.hh:110
│ │ │ │ -
const PolynomialBasisWithMatrix< Eval, CM > PreBasis
Definition basismatrix.hh:144
│ │ │ │ -
BasisMatrixBase< PreBasis, Interpolation, Field > Base
Definition basismatrix.hh:145
│ │ │ │ - │ │ │ │ - │ │ │ │ -
BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation)
Definition basismatrix.hh:148
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition basismatrix.hh:163
│ │ │ │ - │ │ │ │ -
Definition monomialbasis.hh:440
│ │ │ │ -
Definition monomialbasis.hh:612
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ -
Definition polynomialbasis.hh:348
│ │ │ │ +
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ +
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ +
Rannacher-Turek shape functions.
Definition rannachertureklocalbasis.hh:25
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,326 +1,52 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -basismatrix.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ +rannachertureklocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_BASISMATRIX_HH │ │ │ │ │ -6#define DUNE_BASISMATRIX_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_p_o_l_y_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 /**************************************** │ │ │ │ │ -18 * A dense matrix representation of a ''polynomial'' │ │ │ │ │ -19 * basis. Its represent a basis as a linear │ │ │ │ │ -20 * combination of a second basis, i.e., a │ │ │ │ │ -21 * monomial basis. It is simular to the PolynomialBasis │ │ │ │ │ -22 * but it not derived from the LocalBasis class. │ │ │ │ │ -23 * It is used to define a ''pre basis''. │ │ │ │ │ -24 ****************************************/ │ │ │ │ │ -25 template< class PreBasis, class Interpolation, │ │ │ │ │ -26 class Field > │ │ │ │ │ -_2_7 struct _B_a_s_i_s_M_a_t_r_i_x; │ │ │ │ │ -28 │ │ │ │ │ -29 template< class PreBasis, class Interpolation, │ │ │ │ │ -30 class Field > │ │ │ │ │ -_3_1 struct _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e : public DynamicMatrix │ │ │ │ │ -32 { │ │ │ │ │ -_3_3 typedef DynamicMatrix _M_a_t_r_i_x; │ │ │ │ │ -34 │ │ │ │ │ -_3_5 _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e( const PreBasis& preBasis, │ │ │ │ │ -36 const Interpolation& localInterpolation ) │ │ │ │ │ -37 : cols_(preBasis.size()) │ │ │ │ │ -38 { │ │ │ │ │ -39 localInterpolation.interpolate( preBasis, *this ); │ │ │ │ │ -40 this->invert(); │ │ │ │ │ -41 } │ │ │ │ │ -_4_2 unsigned int _c_o_l_s () const │ │ │ │ │ -43 { │ │ │ │ │ -44 return cols_; │ │ │ │ │ -45 } │ │ │ │ │ -_4_6 unsigned int _r_o_w_s () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return Matrix::rows(); │ │ │ │ │ -49 } │ │ │ │ │ -50 private: │ │ │ │ │ -51 unsigned int cols_; │ │ │ │ │ -52 }; │ │ │ │ │ -53 │ │ │ │ │ -54 template< GeometryType::Id geometryId, class F, │ │ │ │ │ -55 class Interpolation, │ │ │ │ │ -56 class Field > │ │ │ │ │ -_5_7 struct _B_a_s_i_s_M_a_t_r_i_x< const _M_o_n_o_m_i_a_l_B_a_s_i_s< geometryId, F >, Interpolation, │ │ │ │ │ -Field > │ │ │ │ │ -58 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const MonomialBasis< geometryId, F >, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -59 { │ │ │ │ │ -_6_0 typedef const _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _P_r_e_B_a_s_i_s; │ │ │ │ │ -_6_1 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ -_6_2 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ -63 │ │ │ │ │ -_6_4 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ -65 const Interpolation& localInterpolation ) │ │ │ │ │ -66 : _B_a_s_e(preBasis, localInterpolation) │ │ │ │ │ -67 {} │ │ │ │ │ -68 template │ │ │ │ │ -_6_9 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ -70 { │ │ │ │ │ -71 const unsigned int N = Matrix::rows(); │ │ │ │ │ -72 assert( Matrix::cols() == N && vec.size() == N ); │ │ │ │ │ -73 // note: that the transposed matrix is computed, │ │ │ │ │ -74 // and is square │ │ │ │ │ -75 for (unsigned int i=0; i │ │ │ │ │ -_8_2 struct _B_a_s_i_s_M_a_t_r_i_x< const _D_u_n_e::_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< dim, F >, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -83 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const VirtualMonomialBasis< dim, F >, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -84 { │ │ │ │ │ -_8_5 typedef const _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _P_r_e_B_a_s_i_s; │ │ │ │ │ -_8_6 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ -_8_7 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ -88 │ │ │ │ │ -_8_9 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ -90 const Interpolation& localInterpolation ) │ │ │ │ │ -91 : _B_a_s_e(preBasis, localInterpolation) │ │ │ │ │ -92 {} │ │ │ │ │ -93 template │ │ │ │ │ -_9_4 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ -95 { │ │ │ │ │ -96 const unsigned int N = Matrix::rows(); │ │ │ │ │ -97 assert( Matrix::cols() == N && vec.size() == N ); │ │ │ │ │ -98 // note: that the transposed matrix is computed, │ │ │ │ │ -99 // and is square │ │ │ │ │ -100 for (unsigned int i=0; i │ │ │ │ │ -_1_0_7 struct _B_a_s_i_s_M_a_t_r_i_x< const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s, Interpolation, │ │ │ │ │ -Field > │ │ │ │ │ -108 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const PolynomialBasis, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -109 { │ │ │ │ │ -_1_1_0 typedef const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_E_v_a_l_,_C_M_,_D_,_R_> _P_r_e_B_a_s_i_s; │ │ │ │ │ -_1_1_1 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ -_1_1_2 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ -113 │ │ │ │ │ -_1_1_4 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ -115 const Interpolation& localInterpolation ) │ │ │ │ │ -116 : _B_a_s_e(preBasis, localInterpolation), │ │ │ │ │ -117 preBasis_(preBasis) │ │ │ │ │ -118 {} │ │ │ │ │ -_1_1_9 unsigned int _c_o_l_s() const │ │ │ │ │ -120 { │ │ │ │ │ -121 return preBasis_.matrix().baseSize() ; │ │ │ │ │ -122 } │ │ │ │ │ -123 template │ │ │ │ │ -_1_2_4 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ -125 { │ │ │ │ │ -126 assert( Matrix::rows() == Matrix::cols() ); │ │ │ │ │ -127 assert( vec.size() == preBasis_.matrix().baseSize() ); │ │ │ │ │ -128 assert( Matrix::cols() == preBasis_.size() ); │ │ │ │ │ -129 for (unsigned int j=0; j │ │ │ │ │ -_1_4_1 struct _B_a_s_i_s_M_a_t_r_i_x< const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -142 : public _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e< const PolynomialBasisWithMatrix, │ │ │ │ │ -Interpolation, Field > │ │ │ │ │ -143 { │ │ │ │ │ -_1_4_4 typedef const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_E_v_a_l_,_C_M_> _P_r_e_B_a_s_i_s; │ │ │ │ │ -_1_4_5 typedef _B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_<_P_r_e_B_a_s_i_s_,_I_n_t_e_r_p_o_l_a_t_i_o_n_,_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ -_1_4_6 typedef typename _B_a_s_e_:_:_M_a_t_r_i_x _M_a_t_r_i_x; │ │ │ │ │ -147 │ │ │ │ │ -_1_4_8 _B_a_s_i_s_M_a_t_r_i_x( const _P_r_e_B_a_s_i_s& preBasis, │ │ │ │ │ -149 const Interpolation& localInterpolation ) │ │ │ │ │ -150 : _B_a_s_e(preBasis, localInterpolation), │ │ │ │ │ -151 preBasis_(preBasis) │ │ │ │ │ -152 {} │ │ │ │ │ -_1_5_3 unsigned int _c_o_l_s() const │ │ │ │ │ -154 { │ │ │ │ │ -155 return preBasis_.matrix().baseSize() ; │ │ │ │ │ -156 } │ │ │ │ │ -_1_5_7 unsigned int _r_o_w_s () const │ │ │ │ │ -158 { │ │ │ │ │ -159 assert( Matrix::rows() == preBasis_.matrix().size() ); │ │ │ │ │ -160 return preBasis_.matrix().size()*CM::blockSize ; │ │ │ │ │ -161 } │ │ │ │ │ -162 template │ │ │ │ │ -_1_6_3 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ -164 { │ │ │ │ │ -165 unsigned int r = row / CM::blockSize; │ │ │ │ │ -166 assert( r < Matrix::rows() ); │ │ │ │ │ -167 assert( Matrix::rows() == Matrix::cols() ); │ │ │ │ │ -168 assert( vec.size() == preBasis_.matrix().baseSize() ); │ │ │ │ │ -169 assert( Matrix::cols() == preBasis_.size() ); │ │ │ │ │ -170 for (unsigned int j=0; j │ │ │ │ │ +_2_5 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s; │ │ │ │ │ +26 │ │ │ │ │ +27 template< class D, class R > │ │ │ │ │ +_2_8 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s< D, R, 2 > │ │ │ │ │ +29 : public _R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s< D, R > │ │ │ │ │ +30 {}; │ │ │ │ │ +31 │ │ │ │ │ +32 template< class D, class R > │ │ │ │ │ +_3_3 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s< D, R, 3 > │ │ │ │ │ +34 : public _R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s< D, R > │ │ │ │ │ +35 {}; │ │ │ │ │ +36 │ │ │ │ │ +37} // namespace Dune │ │ │ │ │ +38 │ │ │ │ │ +39#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALBASIS_HH │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_M_a_t_r_i_x │ │ │ │ │ -DynamicMatrix< Field > Matrix │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_r_o_w_s │ │ │ │ │ -unsigned int rows() const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e_:_:_B_a_s_i_s_M_a_t_r_i_x_B_a_s_e │ │ │ │ │ -BasisMatrixBase(const PreBasis &preBasis, const Interpolation │ │ │ │ │ -&localInterpolation) │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ -_>_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ -_>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ -const MonomialBasis< geometryId, F > PreBasis │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ -_>_:_:_M_a_t_r_i_x │ │ │ │ │ -Base::Matrix Matrix │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ -_>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:64 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _F_i_e_l_d │ │ │ │ │ -_>_:_:_B_a_s_e │ │ │ │ │ -BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:94 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ -BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:86 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ -Base::Matrix Matrix │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ -const VirtualMonomialBasis< dim, F > PreBasis │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ -Base::Matrix Matrix │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:112 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ -BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:114 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:124 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ -const PolynomialBasis< Eval, CM, D, R > PreBasis │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ -const PolynomialBasisWithMatrix< Eval, CM > PreBasis │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:144 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_e │ │ │ │ │ -BasisMatrixBase< PreBasis, Interpolation, Field > Base │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:145 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_r_o_w_s │ │ │ │ │ -unsigned int rows() const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:157 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_M_a_t_r_i_x │ │ │ │ │ -Base::Matrix Matrix │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:146 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -BasisMatrix(const PreBasis &preBasis, const Interpolation &localInterpolation) │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:148 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x_<_ _c_o_n_s_t_ _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_ _>_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_, │ │ │ │ │ -_F_i_e_l_d_ _>_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:153 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Rannacher-Turek shape functions. │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalbasis.hh:25 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: field.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek3dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,128 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
field.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
rannacherturek3dlocalbasis.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/common/gmpfield.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::Unity< Field >
 A class representing the unit of a given Field. More...
 
struct  Dune::Zero< Field >
 A class representing the zero of a given Field. More...
 
struct  Dune::FieldCast< F2, V >
 
struct  Dune::FieldCast< F2, Dune::FieldVector< F1, dim > >
 
struct  Dune::FieldCast< F2, Dune::FieldMatrix< F1, dim1, dim2 > >
 
struct  Dune::Precision< double >
 
struct  Dune::Precision< long double >
 
struct  Dune::Precision< float >
 
struct  Dune::ComputeField< Field, sum >
class  Dune::RannacherTurek3DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<class Field >
Field Dune::operator+ (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator- (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator* (const Unity< Field > &u, const Field &f)
 
template<class Field >
Field Dune::operator/ (const Unity< Field > &u, const Field &f)
 
template<class Field >
bool Dune::operator== (const Zero< Field > &, const Field &f)
 
template<class Field >
bool Dune::operator== (const Field &f, const Zero< Field > &z)
 
template<class Field >
bool Dune::operator< (const Zero< Field > &, const Field &f)
 
template<class Field >
bool Dune::operator< (const Field &f, const Zero< Field > &)
 
template<class Field >
bool Dune::operator> (const Zero< Field > &z, const Field &f)
 
template<class Field >
bool Dune::operator> (const Field &f, const Zero< Field > &z)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, F2 &f2)
 a helper class to cast from one field to another
 
template<class F2 , class F1 , int dim>
void Dune::field_cast (const Dune::FieldVector< F1, dim > &f1, Dune::FieldVector< F2, dim > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, F2 &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class F1 , int rdim, int cdim>
void Dune::field_cast (const Dune::FieldMatrix< F1, rdim, cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, F2 &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const F1 &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, Dune::FieldMatrix< F2, 1, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldMatrix< F1, 1, 1 > &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class F1 >
void Dune::field_cast (const Dune::FieldVector< F1, 1 > &f1, Dune::FieldVector< F2, 1 > &f2)
 
template<class F2 , class V >
FieldCast< F2, V >::type Dune::field_cast (const V &f1)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,127 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -field.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +rannacherturek3dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_U_n_i_t_y_<_ _F_i_e_l_d_ _> │ │ │ │ │ -  A class representing the unit of a given Field. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_Z_e_r_o_<_ _F_i_e_l_d_ _> │ │ │ │ │ -  A class representing the zero of a given Field. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _V_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_ _F_1_,_ _d_i_m_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_M_a_t_r_i_x_<_ _F_1_,_ _d_i_m_1_,_ _d_i_m_2_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _d_o_u_b_l_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _l_o_n_g_ _d_o_u_b_l_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_P_r_e_c_i_s_i_o_n_<_ _f_l_o_a_t_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d_<_ _F_i_e_l_d_,_ _s_u_m_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ - Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_- (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - Field  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (const _U_n_i_t_y< Field > &u, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= (const _Z_e_r_o< Field > &, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ - &z) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _Z_e_r_o< Field > &, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ - &) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_> (const _Z_e_r_o< Field > &z, const Field │ │ │ │ │ - &f) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_> (const Field &f, const _Z_e_r_o< Field > │ │ │ │ │ - &z) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, F2 &f2) │ │ │ │ │ -  a helper class to cast from one field to another │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, dim > │ │ │ │ │ - &f1, Dune::FieldVector< F2, dim > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ - &f1, F2 &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, Dune::FieldVector< │ │ │ │ │ - F2, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, rdim, │ │ │ │ │ - cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ - &f1, Dune::FieldMatrix< F2, 1, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ - &f1, F2 &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const F1 &f1, Dune::FieldMatrix< │ │ │ │ │ - F2, 1, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ - &f1, Dune::FieldMatrix< F2, 1, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldMatrix< F1, 1, 1 > │ │ │ │ │ - &f1, Dune::FieldVector< F2, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - void  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const Dune::FieldVector< F1, 1 > │ │ │ │ │ - &f1, Dune::FieldVector< F2, 1 > &f2) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -_F_i_e_l_d_C_a_s_t< F2, V >::type  _D_u_n_e_:_:_f_i_e_l_d___c_a_s_t (const V &f1) │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00485_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: field.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek3dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,385 +70,167 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
field.hh
│ │ │ │ +
rannacherturek3dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/common/gmpfield.hh>
│ │ │ │ -
9#include <dune/common/fvector.hh>
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
14
│ │ │ │ -
15 // Unity
│ │ │ │ -
16 // -----
│ │ │ │ -
17
│ │ │ │ -
28 template< class Field >
│ │ │ │ -
│ │ │ │ -
29 struct Unity
│ │ │ │ -
30 {
│ │ │ │ -
│ │ │ │ -
31 operator Field () const
│ │ │ │ -
32 {
│ │ │ │ -
33 return Field( 1 );
│ │ │ │ -
34 }
│ │ │ │ -
│ │ │ │ -
35 };
│ │ │ │ -
│ │ │ │ -
36
│ │ │ │ -
37 template< class Field >
│ │ │ │ -
│ │ │ │ -
38 Field operator+ ( const Unity< Field > &u, const Field &f )
│ │ │ │ -
39 {
│ │ │ │ -
40 return (Field)u + f;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
43 template< class Field >
│ │ │ │ -
│ │ │ │ -
44 Field operator- ( const Unity< Field > &u, const Field &f )
│ │ │ │ -
45 {
│ │ │ │ -
46 return (Field)u - f;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
49 template< class Field >
│ │ │ │ -
│ │ │ │ -
50 Field operator* ( const Unity< Field > &u, const Field &f )
│ │ │ │ -
51 {
│ │ │ │ -
52 return f;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 template< class Field >
│ │ │ │ -
│ │ │ │ -
56 Field operator/ ( const Unity< Field > &u, const Field &f )
│ │ │ │ -
57 {
│ │ │ │ -
58 return (Field)u / f;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
61
│ │ │ │ -
62
│ │ │ │ -
63 // Zero
│ │ │ │ -
64 // ----
│ │ │ │ -
65
│ │ │ │ -
77 template< class Field >
│ │ │ │ -
│ │ │ │ -
78 struct Zero
│ │ │ │ -
79 {
│ │ │ │ -
│ │ │ │ -
80 operator Field () const
│ │ │ │ -
81 {
│ │ │ │ -
82 return Field( 0 );
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
84 static const Field epsilon()
│ │ │ │ -
85 {
│ │ │ │ -
86 return Field(1e-12);
│ │ │ │ -
87 }
│ │ │ │ -
│ │ │ │ -
88 };
│ │ │ │ -
│ │ │ │ -
89
│ │ │ │ -
90#if HAVE_GMP
│ │ │ │ -
91 template< unsigned int precision >
│ │ │ │ -
92 struct Zero< GMPField< precision > >
│ │ │ │ -
93 {
│ │ │ │ -
94 typedef GMPField< precision > Field;
│ │ │ │ -
95 operator Field () const
│ │ │ │ -
96 {
│ │ │ │ -
97 return Field( 0 );
│ │ │ │ -
98 }
│ │ │ │ -
99 static const Field epsilon()
│ │ │ │ -
100 {
│ │ │ │ -
101 return Field(1e-20);
│ │ │ │ -
102 }
│ │ │ │ -
103 };
│ │ │ │ -
104#endif
│ │ │ │ -
105
│ │ │ │ -
106 template< class Field >
│ │ │ │ -
│ │ │ │ -
107 inline bool operator == ( const Zero< Field > &, const Field &f )
│ │ │ │ -
108 {
│ │ │ │ -
109 return ( f < Zero<Field>::epsilon() && f > -Zero<Field>::epsilon() );
│ │ │ │ -
110 }
│ │ │ │ -
│ │ │ │ -
111
│ │ │ │ -
112 template< class Field >
│ │ │ │ -
│ │ │ │ -
113 inline bool operator == ( const Field &f, const Zero< Field > &z)
│ │ │ │ -
114 {
│ │ │ │ -
115 return ( z == f );
│ │ │ │ -
116 }
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
118 template< class Field >
│ │ │ │ -
│ │ │ │ -
119 inline bool operator< ( const Zero< Field > &, const Field &f )
│ │ │ │ -
120 {
│ │ │ │ -
121 return f > Zero<Field>::epsilon();
│ │ │ │ -
122 }
│ │ │ │ -
│ │ │ │ -
123
│ │ │ │ -
124 template< class Field >
│ │ │ │ -
│ │ │ │ -
125 inline bool operator< ( const Field &f, const Zero< Field > & )
│ │ │ │ -
126 {
│ │ │ │ -
127 return f < -Zero<Field>::epsilon();
│ │ │ │ -
128 }
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
22 template< class D, class R >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 static const int coefficients[ 6 ][ 6 ];
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ + │ │ │ │ +
29 R, 1, FieldVector< R, 1 >,
│ │ │ │ +
30 FieldMatrix< R, 1, 3 > > Traits;
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
33 unsigned int size () const
│ │ │ │ +
34 {
│ │ │ │ +
35 return 6;
│ │ │ │ +
36 }
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
39 inline void evaluateFunction ( const typename Traits::DomainType &in,
│ │ │ │ +
40 std::vector< typename Traits::RangeType > &out ) const
│ │ │ │ +
41 {
│ │ │ │ +
42 typedef typename Traits::RangeFieldType RangeFieldType;
│ │ │ │ +
43 RangeFieldType y[ 6 ] = { 1, in[ 0 ], in[ 1 ], in[ 2 ],
│ │ │ │ +
44 in[ 0 ]*in[ 0 ] - in[ 1 ]*in[ 1 ],
│ │ │ │ +
45 in[ 1 ]*in[ 1 ] - in[ 2 ]*in[ 2 ] };
│ │ │ │ +
46 out.resize( size() );
│ │ │ │ +
47 for( unsigned int i = 0; i < size(); ++i )
│ │ │ │ +
48 {
│ │ │ │ +
49 out[ i ] = RangeFieldType( 0 );
│ │ │ │ +
50 for( unsigned int j = 0; j < 6; ++j )
│ │ │ │ +
51 out[ i ] += coefficients[ i ][ j ]*y[ j ];
│ │ │ │ +
52 out[ i ] /= RangeFieldType( 3 );
│ │ │ │ +
53 }
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ +
57 inline void evaluateJacobian ( const typename Traits::DomainType &in,
│ │ │ │ +
58 std::vector< typename Traits::JacobianType > &out ) const
│ │ │ │ +
59 {
│ │ │ │ +
60 typedef typename Traits::RangeFieldType RangeFieldType;
│ │ │ │ +
61 RangeFieldType y0[ 5 ] = { 1, 0, 0, 2*in[ 0 ], 0 };
│ │ │ │ +
62 RangeFieldType y1[ 5 ] = { 0, 1, 0, -2*in[ 1 ], 2*in[ 1 ] };
│ │ │ │ +
63 RangeFieldType y2[ 5 ] = { 0, 0, 1, 0, -2*in[ 2 ] };
│ │ │ │ +
64
│ │ │ │ +
65 out.resize( size() );
│ │ │ │ +
66 for( unsigned int i = 0; i < size(); ++i )
│ │ │ │ +
67 {
│ │ │ │ +
68 out[ i ] = RangeFieldType( 0 );
│ │ │ │ +
69 for( unsigned int j = 0; j < 5; ++j )
│ │ │ │ +
70 {
│ │ │ │ +
71 out[ i ][ 0 ][ 0 ] += coefficients[ i ][ j+1 ]*y0[ j ];
│ │ │ │ +
72 out[ i ][ 0 ][ 1 ] += coefficients[ i ][ j+1 ]*y1[ j ];
│ │ │ │ +
73 out[ i ][ 0 ][ 2 ] += coefficients[ i ][ j+1 ]*y2[ j ];
│ │ │ │ +
74 }
│ │ │ │ +
75 out[ i ] /= RangeFieldType( 3 );
│ │ │ │ +
76 }
│ │ │ │ +
77 }
│ │ │ │
│ │ │ │ +
78
│ │ │ │ +
│ │ │ │ +
80 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
81 const typename Traits::DomainType& in, // position
│ │ │ │ +
82 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
83 {
│ │ │ │ +
84 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
85 if (totalOrder == 0) {
│ │ │ │ +
86 evaluateFunction(in, out);
│ │ │ │ +
87 } else if (totalOrder == 1) {
│ │ │ │ +
88 out.resize(size());
│ │ │ │ +
89 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
90
│ │ │ │ +
91 using RangeFieldType = typename Traits::RangeFieldType;
│ │ │ │ +
92 RangeFieldType y[3][5] = { { 1.0, 0.0, 0.0, 2*in[0], 0.0 },
│ │ │ │ +
93 { 0.0, 1.0, 0.0, -2*in[1], 2*in[1] },
│ │ │ │ +
94 { 0.0, 0.0, 1.0, 0.0, -2*in[2] } };
│ │ │ │ +
95
│ │ │ │ +
96 for (std::size_t i = 0; i < size(); ++i) {
│ │ │ │ +
97 out[i] = RangeFieldType{0};
│ │ │ │ +
98 for (std::size_t j = 0; j < 5; ++j)
│ │ │ │ +
99 out[i] += coefficients[i][j+1] * y[direction][j];
│ │ │ │ +
100 out[i] /= RangeFieldType{3};
│ │ │ │ +
101 }
│ │ │ │ +
102 } else {
│ │ │ │ +
103 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
104 }
│ │ │ │ +
105 }
│ │ │ │ +
│ │ │ │ +
106
│ │ │ │ +
│ │ │ │ +
108 unsigned int order () const
│ │ │ │ +
109 {
│ │ │ │ +
110 return 2;
│ │ │ │ +
111 }
│ │ │ │ +
│ │ │ │ +
112 };
│ │ │ │ +
│ │ │ │ +
113
│ │ │ │ +
114
│ │ │ │ +
115
│ │ │ │ +
116 // RannacherTurek3DLocalBasis::coefficients
│ │ │ │ +
117 // ----------------------------------------
│ │ │ │ +
118
│ │ │ │ +
119 template< class D, class R >
│ │ │ │ +
120 const int RannacherTurek3DLocalBasis< D, R >
│ │ │ │ +
121 ::coefficients[ 6 ][ 6 ] = {{ 2, -7, 2, 2, 4, 2 },
│ │ │ │ +
122 { -1, -1, 2, 2, 4, 2 },
│ │ │ │ +
123 { 2, 2, -7, 2, -2, 2 },
│ │ │ │ +
124 { -1, 2, -1, 2, -2, 2 },
│ │ │ │ +
125 { 2, 2, 2, -7, -2, -4 },
│ │ │ │ +
126 { -1, 2, 2, -1, -2, -4 }};
│ │ │ │ +
127
│ │ │ │ +
128} //namespace Dune
│ │ │ │
129
│ │ │ │ -
130 template< class Field >
│ │ │ │ -
│ │ │ │ -
131 inline bool operator> ( const Zero< Field > &z, const Field &f )
│ │ │ │ -
132 {
│ │ │ │ -
133 return f < z;
│ │ │ │ -
134 }
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
136 template< class Field >
│ │ │ │ -
│ │ │ │ -
137 inline bool operator> ( const Field &f, const Zero< Field > &z )
│ │ │ │ -
138 {
│ │ │ │ -
139 return z < f;
│ │ │ │ -
140 }
│ │ │ │ -
│ │ │ │ -
141
│ │ │ │ -
142
│ │ │ │ -
143 // field_cast
│ │ │ │ -
144 // ----------
│ │ │ │ -
145
│ │ │ │ -
158 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
159 inline void field_cast ( const F1 &f1, F2 &f2 )
│ │ │ │ -
160 {
│ │ │ │ -
161 f2 = f1;
│ │ │ │ -
162 }
│ │ │ │ -
│ │ │ │ -
163
│ │ │ │ -
164#if HAVE_GMP
│ │ │ │ -
165 template< unsigned int precision >
│ │ │ │ -
166 inline void field_cast ( const Dune::GMPField< precision > &f1, double &f2 )
│ │ │ │ -
167 {
│ │ │ │ -
168 f2 = f1.get_d();
│ │ │ │ -
169 }
│ │ │ │ -
170
│ │ │ │ -
171 template< unsigned int precision >
│ │ │ │ -
172 inline void field_cast ( const Dune::GMPField< precision > &f1, long double &f2 )
│ │ │ │ -
173 {
│ │ │ │ -
174 f2 = f1.get_d();
│ │ │ │ -
175 }
│ │ │ │ -
176#endif
│ │ │ │ -
177
│ │ │ │ -
178 template< class F2, class F1, int dim >
│ │ │ │ -
│ │ │ │ -
179 inline void field_cast ( const Dune::FieldVector< F1, dim > &f1, Dune::FieldVector< F2, dim > &f2 )
│ │ │ │ -
180 {
│ │ │ │ -
181 for( int d = 0; d < dim; ++d )
│ │ │ │ -
182 field_cast( f1[ d ], f2[ d ] );
│ │ │ │ -
183 }
│ │ │ │ -
│ │ │ │ -
184 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
185 inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, F2 &f2 )
│ │ │ │ -
186 {
│ │ │ │ -
187 field_cast( f1[ 0 ], f2 );
│ │ │ │ -
188 }
│ │ │ │ -
│ │ │ │ -
189 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
190 inline void field_cast ( const F1 &f1, Dune::FieldVector< F2, 1 > &f2 )
│ │ │ │ -
191 {
│ │ │ │ -
192 field_cast( f1, f2[ 0 ] );
│ │ │ │ -
193 }
│ │ │ │ -
│ │ │ │ -
194
│ │ │ │ -
195 template< class F2, class F1, int rdim, int cdim >
│ │ │ │ -
│ │ │ │ -
196 inline void field_cast ( const Dune::FieldMatrix< F1, rdim, cdim > &f1, Dune::FieldMatrix< F2, rdim, cdim > &f2 )
│ │ │ │ -
197 {
│ │ │ │ -
198 for( int r = 0; r < rdim; ++r )
│ │ │ │ -
199 field_cast( f1[ r ], f2[ r ] );
│ │ │ │ -
200 }
│ │ │ │ -
│ │ │ │ -
201 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
202 inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ -
203 {
│ │ │ │ -
204 field_cast( f1[ 0 ][ 0 ], f2[ 0 ][ 0 ] );
│ │ │ │ -
205 }
│ │ │ │ -
│ │ │ │ -
206 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
207 inline void field_cast ( const Dune::FieldMatrix< F1, 1,1 > &f1, F2 &f2 )
│ │ │ │ -
208 {
│ │ │ │ -
209 field_cast( f1[ 0 ][ 0 ], f2 );
│ │ │ │ -
210 }
│ │ │ │ -
│ │ │ │ -
211 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
212 inline void field_cast ( const F1 &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ -
213 {
│ │ │ │ -
214 field_cast( f1, f2[ 0 ][ 0 ] );
│ │ │ │ -
215 }
│ │ │ │ -
│ │ │ │ -
216 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
217 inline void field_cast ( const Dune::FieldVector<F1,1> &f1, Dune::FieldMatrix< F2, 1,1 > &f2 )
│ │ │ │ -
218 {
│ │ │ │ -
219 field_cast( f1[ 0 ], f2[ 0 ][ 0 ] );
│ │ │ │ -
220 }
│ │ │ │ -
│ │ │ │ -
221 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
222 inline void field_cast ( const Dune::FieldMatrix<F1,1,1> &f1, Dune::FieldVector< F2, 1 > &f2 )
│ │ │ │ -
223 {
│ │ │ │ -
224 field_cast( f1[ 0 ][ 0 ], f2[ 0 ] );
│ │ │ │ -
225 }
│ │ │ │ -
│ │ │ │ -
226
│ │ │ │ -
227 template< class F2, class F1 >
│ │ │ │ -
│ │ │ │ -
228 inline void field_cast ( const Dune::FieldVector< F1, 1 > &f1, Dune::FieldVector<F2, 1> &f2 )
│ │ │ │ -
229 {
│ │ │ │ -
230 field_cast( f1[ 0 ], f2[ 0 ] );
│ │ │ │ -
231 }
│ │ │ │ -
│ │ │ │ -
232
│ │ │ │ -
233 template< class F2,class V >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
235 {
│ │ │ │ -
236 typedef F2 type;
│ │ │ │ -
237 };
│ │ │ │ -
│ │ │ │ -
238 template< class F2,class F1,int dim >
│ │ │ │ -
│ │ │ │ -
239 struct FieldCast< F2, Dune::FieldVector<F1,dim> >
│ │ │ │ -
240 {
│ │ │ │ -
241 typedef Dune::FieldVector<F2,dim> type;
│ │ │ │ -
242 };
│ │ │ │ -
│ │ │ │ -
243 template< class F2,class F1,int dim1, int dim2>
│ │ │ │ -
│ │ │ │ -
244 struct FieldCast< F2, Dune::FieldMatrix<F1,dim1,dim2> >
│ │ │ │ -
245 {
│ │ │ │ -
246 typedef Dune::FieldMatrix<F2,dim1,dim2> type;
│ │ │ │ -
247 };
│ │ │ │ -
│ │ │ │ -
248 template< class F2,class V >
│ │ │ │ -
│ │ │ │ -
249 inline typename FieldCast<F2,V>::type field_cast ( const V &f1 )
│ │ │ │ -
250 {
│ │ │ │ -
251 typename FieldCast<F2,V>::type f2;
│ │ │ │ -
252 field_cast( f1, f2 );
│ │ │ │ -
253 return f2;
│ │ │ │ -
254 }
│ │ │ │ -
│ │ │ │ -
255
│ │ │ │ -
256
│ │ │ │ -
257 // Precision
│ │ │ │ -
258 // this is not a perfect solution to obtain the
│ │ │ │ -
259 // precision of a field - definition is not clear
│ │ │ │ -
260 // to be removed
│ │ │ │ -
261 // ---------
│ │ │ │ -
262
│ │ │ │ -
263 template <class Field>
│ │ │ │ -
264 struct Precision;
│ │ │ │ -
265
│ │ │ │ -
266 template<>
│ │ │ │ -
│ │ │ │ -
267 struct Precision< double >
│ │ │ │ -
268 {
│ │ │ │ -
269 static const unsigned int value = 64;
│ │ │ │ -
270 };
│ │ │ │ -
│ │ │ │ -
271
│ │ │ │ -
272 template<>
│ │ │ │ -
│ │ │ │ -
273 struct Precision< long double >
│ │ │ │ -
274 {
│ │ │ │ -
275 static const unsigned int value = 80;
│ │ │ │ -
276 };
│ │ │ │ -
│ │ │ │ -
277
│ │ │ │ -
278 template<>
│ │ │ │ -
│ │ │ │ -
279 struct Precision< float >
│ │ │ │ -
280 {
│ │ │ │ -
281 static const unsigned int value = 32;
│ │ │ │ -
282 };
│ │ │ │ -
│ │ │ │ -
283
│ │ │ │ -
284#if HAVE_GMP
│ │ │ │ -
285 template< unsigned int precision >
│ │ │ │ -
286 struct Precision< GMPField< precision > >
│ │ │ │ -
287 {
│ │ │ │ -
288 static const unsigned int value = precision;
│ │ │ │ -
289 };
│ │ │ │ -
290#endif
│ │ │ │ -
291
│ │ │ │ -
292 // ComputeField
│ │ │ │ -
293 // ------------
│ │ │ │ -
294
│ │ │ │ -
295 template <class Field,unsigned int sum>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
297 {
│ │ │ │ -
298 typedef Field Type;
│ │ │ │ -
299 };
│ │ │ │ -
│ │ │ │ -
300
│ │ │ │ -
301#if HAVE_GMP
│ │ │ │ -
302 template< unsigned int precision, unsigned int sum >
│ │ │ │ -
303 struct ComputeField< GMPField< precision >, sum >
│ │ │ │ -
304 {
│ │ │ │ -
305 typedef GMPField<precision+sum> Type;
│ │ │ │ -
306 };
│ │ │ │ -
307#endif
│ │ │ │ -
308} // namespace Dune
│ │ │ │ -
309
│ │ │ │ -
310#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH
│ │ │ │ +
130#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Field operator-(const Unity< Field > &u, const Field &f)
Definition field.hh:44
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
bool operator<(const Zero< Field > &, const Field &f)
Definition field.hh:119
│ │ │ │ -
bool operator==(const Zero< Field > &, const Field &f)
Definition field.hh:107
│ │ │ │ -
bool operator>(const Zero< Field > &z, const Field &f)
Definition field.hh:131
│ │ │ │ -
Field operator+(const Unity< Field > &u, const Field &f)
Definition field.hh:38
│ │ │ │ -
Field operator/(const Unity< Field > &u, const Field &f)
Definition field.hh:56
│ │ │ │ -
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ -
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
static const Field epsilon()
Definition field.hh:84
│ │ │ │ -
Definition field.hh:235
│ │ │ │ -
F2 type
Definition field.hh:236
│ │ │ │ -
Dune::FieldVector< F2, dim > type
Definition field.hh:241
│ │ │ │ -
Dune::FieldMatrix< F2, dim1, dim2 > type
Definition field.hh:246
│ │ │ │ -
Definition field.hh:264
│ │ │ │ -
Definition field.hh:297
│ │ │ │ -
Field Type
Definition field.hh:298
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ +
Definition rannacherturek3dlocalbasis.hh:24
│ │ │ │ +
LocalBasisTraits< D, 3, FieldVector< D, 3 >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, 3 > > Traits
Definition rannacherturek3dlocalbasis.hh:30
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
evaluate all shape functions
Definition rannacherturek3dlocalbasis.hh:39
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition rannacherturek3dlocalbasis.hh:33
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
evaluate jacobian of all shape functions
Definition rannacherturek3dlocalbasis.hh:57
│ │ │ │ +
unsigned int order() const
polynomial order of the shape functions
Definition rannacherturek3dlocalbasis.hh:108
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition rannacherturek3dlocalbasis.hh:80
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,351 +1,179 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -field.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_3_d │ │ │ │ │ +rannacherturek3dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -14 │ │ │ │ │ -15 // Unity │ │ │ │ │ -16 // ----- │ │ │ │ │ -17 │ │ │ │ │ -28 template< class Field > │ │ │ │ │ -_2_9 struct _U_n_i_t_y │ │ │ │ │ -30 { │ │ │ │ │ -_3_1 operator Field () const │ │ │ │ │ -32 { │ │ │ │ │ -33 return Field( 1 ); │ │ │ │ │ -34 } │ │ │ │ │ -35 }; │ │ │ │ │ -36 │ │ │ │ │ -37 template< class Field > │ │ │ │ │ -_3_8 Field _o_p_e_r_a_t_o_r_+_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ -39 { │ │ │ │ │ -40 return (Field)u + f; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -43 template< class Field > │ │ │ │ │ -_4_4 Field _o_p_e_r_a_t_o_r_-_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ -45 { │ │ │ │ │ -46 return (Field)u - f; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -49 template< class Field > │ │ │ │ │ -_5_0 Field _o_p_e_r_a_t_o_r_*_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ -51 { │ │ │ │ │ -52 return f; │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +22 template< class D, class R > │ │ │ │ │ +_2_3 class _R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +24 { │ │ │ │ │ +25 static const int coefficients[ 6 ][ 6 ]; │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +28 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _3_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _3_ _>, │ │ │ │ │ +29 R, 1, FieldVector< R, 1 >, │ │ │ │ │ +_3_0 FieldMatrix< R, 1, 3 > > _T_r_a_i_t_s; │ │ │ │ │ +31 │ │ │ │ │ +_3_3 unsigned int _s_i_z_e () const │ │ │ │ │ +34 { │ │ │ │ │ +35 return 6; │ │ │ │ │ +36 } │ │ │ │ │ +37 │ │ │ │ │ +_3_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ +40 std::vector< typename Traits::RangeType > &out ) const │ │ │ │ │ +41 { │ │ │ │ │ +42 typedef typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e RangeFieldType; │ │ │ │ │ +43 RangeFieldType y[ 6 ] = { 1, in[ 0 ], in[ 1 ], in[ 2 ], │ │ │ │ │ +44 in[ 0 ]*in[ 0 ] - in[ 1 ]*in[ 1 ], │ │ │ │ │ +45 in[ 1 ]*in[ 1 ] - in[ 2 ]*in[ 2 ] }; │ │ │ │ │ +46 out.resize( _s_i_z_e() ); │ │ │ │ │ +47 for( unsigned int i = 0; i < _s_i_z_e(); ++i ) │ │ │ │ │ +48 { │ │ │ │ │ +49 out[ i ] = RangeFieldType( 0 ); │ │ │ │ │ +50 for( unsigned int j = 0; j < 6; ++j ) │ │ │ │ │ +51 out[ i ] += coefficients[ i ][ j ]*y[ j ]; │ │ │ │ │ +52 out[ i ] /= RangeFieldType( 3 ); │ │ │ │ │ 53 } │ │ │ │ │ -54 │ │ │ │ │ -55 template< class Field > │ │ │ │ │ -_5_6 Field _o_p_e_r_a_t_o_r_/_ ( const _U_n_i_t_y_<_ _F_i_e_l_d_ _> &u, const Field &f ) │ │ │ │ │ -57 { │ │ │ │ │ -58 return (Field)u / f; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -61 │ │ │ │ │ -62 │ │ │ │ │ -63 // Zero │ │ │ │ │ -64 // ---- │ │ │ │ │ -65 │ │ │ │ │ -77 template< class Field > │ │ │ │ │ -_7_8 struct _Z_e_r_o │ │ │ │ │ -79 { │ │ │ │ │ -_8_0 operator Field () const │ │ │ │ │ -81 { │ │ │ │ │ -82 return Field( 0 ); │ │ │ │ │ -83 } │ │ │ │ │ -_8_4 static const Field _e_p_s_i_l_o_n() │ │ │ │ │ -85 { │ │ │ │ │ -86 return Field(1e-12); │ │ │ │ │ -87 } │ │ │ │ │ -88 }; │ │ │ │ │ -89 │ │ │ │ │ -90#if HAVE_GMP │ │ │ │ │ -91 template< unsigned int precision > │ │ │ │ │ -92 struct Zero< GMPField< precision > > │ │ │ │ │ -93 { │ │ │ │ │ -94 typedef GMPField< precision > Field; │ │ │ │ │ -95 operator Field () const │ │ │ │ │ -96 { │ │ │ │ │ -97 return Field( 0 ); │ │ │ │ │ -98 } │ │ │ │ │ -99 static const Field _e_p_s_i_l_o_n() │ │ │ │ │ -100 { │ │ │ │ │ -101 return Field(1e-20); │ │ │ │ │ -102 } │ │ │ │ │ -103 }; │ │ │ │ │ -104#endif │ │ │ │ │ -105 │ │ │ │ │ -106 template< class Field > │ │ │ │ │ -_1_0_7 inline bool _o_p_e_r_a_t_o_r_ _=_=_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &, const Field &f ) │ │ │ │ │ -108 { │ │ │ │ │ -109 return ( f < _Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n() && f > -_Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n() ); │ │ │ │ │ -110 } │ │ │ │ │ -111 │ │ │ │ │ -112 template< class Field > │ │ │ │ │ -_1_1_3 inline bool _o_p_e_r_a_t_o_r_ _=_=_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z) │ │ │ │ │ -114 { │ │ │ │ │ -115 return ( z == f ); │ │ │ │ │ -116 } │ │ │ │ │ -117 │ │ │ │ │ -118 template< class Field > │ │ │ │ │ -_1_1_9 inline bool _o_p_e_r_a_t_o_r_<_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &, const Field &f ) │ │ │ │ │ -120 { │ │ │ │ │ -121 return f > _Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n(); │ │ │ │ │ -122 } │ │ │ │ │ -123 │ │ │ │ │ -124 template< class Field > │ │ │ │ │ -_1_2_5 inline bool _o_p_e_r_a_t_o_r_<_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> & ) │ │ │ │ │ -126 { │ │ │ │ │ -127 return f < -_Z_e_r_o_<_F_i_e_l_d_>_:_:_e_p_s_i_l_o_n(); │ │ │ │ │ -128 } │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_7 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ +58 std::vector< typename Traits::JacobianType > &out ) const │ │ │ │ │ +59 { │ │ │ │ │ +60 typedef typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e RangeFieldType; │ │ │ │ │ +61 RangeFieldType y0[ 5 ] = { 1, 0, 0, 2*in[ 0 ], 0 }; │ │ │ │ │ +62 RangeFieldType y1[ 5 ] = { 0, 1, 0, -2*in[ 1 ], 2*in[ 1 ] }; │ │ │ │ │ +63 RangeFieldType y2[ 5 ] = { 0, 0, 1, 0, -2*in[ 2 ] }; │ │ │ │ │ +64 │ │ │ │ │ +65 out.resize( _s_i_z_e() ); │ │ │ │ │ +66 for( unsigned int i = 0; i < _s_i_z_e(); ++i ) │ │ │ │ │ +67 { │ │ │ │ │ +68 out[ i ] = RangeFieldType( 0 ); │ │ │ │ │ +69 for( unsigned int j = 0; j < 5; ++j ) │ │ │ │ │ +70 { │ │ │ │ │ +71 out[ i ][ 0 ][ 0 ] += coefficients[ i ][ j+1 ]*y0[ j ]; │ │ │ │ │ +72 out[ i ][ 0 ][ 1 ] += coefficients[ i ][ j+1 ]*y1[ j ]; │ │ │ │ │ +73 out[ i ][ 0 ][ 2 ] += coefficients[ i ][ j+1 ]*y2[ j ]; │ │ │ │ │ +74 } │ │ │ │ │ +75 out[ i ] /= RangeFieldType( 3 ); │ │ │ │ │ +76 } │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +_8_0 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +81 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +82 std::vector& out) const // return value │ │ │ │ │ +83 { │ │ │ │ │ +84 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +85 if (totalOrder == 0) { │ │ │ │ │ +86 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +87 } else if (totalOrder == 1) { │ │ │ │ │ +88 out.resize(_s_i_z_e()); │ │ │ │ │ +89 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +90 │ │ │ │ │ +91 using RangeFieldType = typename _T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ +92 RangeFieldType y[3][5] = { { 1.0, 0.0, 0.0, 2*in[0], 0.0 }, │ │ │ │ │ +93 { 0.0, 1.0, 0.0, -2*in[1], 2*in[1] }, │ │ │ │ │ +94 { 0.0, 0.0, 1.0, 0.0, -2*in[2] } }; │ │ │ │ │ +95 │ │ │ │ │ +96 for (std::size_t i = 0; i < _s_i_z_e(); ++i) { │ │ │ │ │ +97 out[i] = RangeFieldType{0}; │ │ │ │ │ +98 for (std::size_t j = 0; j < 5; ++j) │ │ │ │ │ +99 out[i] += coefficients[i][j+1] * y[direction][j]; │ │ │ │ │ +100 out[i] /= RangeFieldType{3}; │ │ │ │ │ +101 } │ │ │ │ │ +102 } else { │ │ │ │ │ +103 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +104 } │ │ │ │ │ +105 } │ │ │ │ │ +106 │ │ │ │ │ +_1_0_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ +109 { │ │ │ │ │ +110 return 2; │ │ │ │ │ +111 } │ │ │ │ │ +112 }; │ │ │ │ │ +113 │ │ │ │ │ +114 │ │ │ │ │ +115 │ │ │ │ │ +116 // RannacherTurek3DLocalBasis::coefficients │ │ │ │ │ +117 // ---------------------------------------- │ │ │ │ │ +118 │ │ │ │ │ +119 template< class D, class R > │ │ │ │ │ +120 const int RannacherTurek3DLocalBasis< D, R > │ │ │ │ │ +121 ::coefficients[ 6 ][ 6 ] = {{ 2, -7, 2, 2, 4, 2 }, │ │ │ │ │ +122 { -1, -1, 2, 2, 4, 2 }, │ │ │ │ │ +123 { 2, 2, -7, 2, -2, 2 }, │ │ │ │ │ +124 { -1, 2, -1, 2, -2, 2 }, │ │ │ │ │ +125 { 2, 2, 2, -7, -2, -4 }, │ │ │ │ │ +126 { -1, 2, 2, -1, -2, -4 }}; │ │ │ │ │ +127 │ │ │ │ │ +128} //namespace Dune │ │ │ │ │ 129 │ │ │ │ │ -130 template< class Field > │ │ │ │ │ -_1_3_1 inline bool _o_p_e_r_a_t_o_r_>_ ( const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z, const Field &f ) │ │ │ │ │ -132 { │ │ │ │ │ -133 return f < z; │ │ │ │ │ -134 } │ │ │ │ │ -135 │ │ │ │ │ -136 template< class Field > │ │ │ │ │ -_1_3_7 inline bool _o_p_e_r_a_t_o_r_>_ ( const Field &f, const _Z_e_r_o_<_ _F_i_e_l_d_ _> &z ) │ │ │ │ │ -138 { │ │ │ │ │ -139 return z < f; │ │ │ │ │ -140 } │ │ │ │ │ -141 │ │ │ │ │ -142 │ │ │ │ │ -143 // field_cast │ │ │ │ │ -144 // ---------- │ │ │ │ │ -145 │ │ │ │ │ -158 template< class F2, class F1 > │ │ │ │ │ -_1_5_9 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, F2 &f2 ) │ │ │ │ │ -160 { │ │ │ │ │ -161 f2 = f1; │ │ │ │ │ -162 } │ │ │ │ │ -163 │ │ │ │ │ -164#if HAVE_GMP │ │ │ │ │ -165 template< unsigned int precision > │ │ │ │ │ -166 inline void _f_i_e_l_d___c_a_s_t ( const Dune::GMPField< precision > &f1, double &f2 │ │ │ │ │ -) │ │ │ │ │ -167 { │ │ │ │ │ -168 f2 = f1.get_d(); │ │ │ │ │ -169 } │ │ │ │ │ -170 │ │ │ │ │ -171 template< unsigned int precision > │ │ │ │ │ -172 inline void _f_i_e_l_d___c_a_s_t ( const Dune::GMPField< precision > &f1, long double │ │ │ │ │ -&f2 ) │ │ │ │ │ -173 { │ │ │ │ │ -174 f2 = f1.get_d(); │ │ │ │ │ -175 } │ │ │ │ │ -176#endif │ │ │ │ │ -177 │ │ │ │ │ -178 template< class F2, class F1, int dim > │ │ │ │ │ -_1_7_9 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, dim > &f1, Dune:: │ │ │ │ │ -FieldVector< F2, dim > &f2 ) │ │ │ │ │ -180 { │ │ │ │ │ -181 for( int d = 0; d < dim; ++d ) │ │ │ │ │ -182 _f_i_e_l_d___c_a_s_t( f1[ d ], f2[ d ] ); │ │ │ │ │ -183 } │ │ │ │ │ -184 template< class F2, class F1 > │ │ │ │ │ -_1_8_5 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, 1 > &f1, F2 &f2 ) │ │ │ │ │ -186 { │ │ │ │ │ -187 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2 ); │ │ │ │ │ -188 } │ │ │ │ │ -189 template< class F2, class F1 > │ │ │ │ │ -_1_9_0 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, Dune::FieldVector< F2, 1 > &f2 ) │ │ │ │ │ -191 { │ │ │ │ │ -192 _f_i_e_l_d___c_a_s_t( f1, f2[ 0 ] ); │ │ │ │ │ -193 } │ │ │ │ │ -194 │ │ │ │ │ -195 template< class F2, class F1, int rdim, int cdim > │ │ │ │ │ -_1_9_6 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix< F1, rdim, cdim > &f1, │ │ │ │ │ -Dune::FieldMatrix< F2, rdim, cdim > &f2 ) │ │ │ │ │ -197 { │ │ │ │ │ -198 for( int r = 0; r < rdim; ++r ) │ │ │ │ │ -199 _f_i_e_l_d___c_a_s_t( f1[ r ], f2[ r ] ); │ │ │ │ │ -200 } │ │ │ │ │ -201 template< class F2, class F1 > │ │ │ │ │ -_2_0_2 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix &f1, Dune:: │ │ │ │ │ -FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ -203 { │ │ │ │ │ -204 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2[ 0 ][ 0 ] ); │ │ │ │ │ -205 } │ │ │ │ │ -206 template< class F2, class F1 > │ │ │ │ │ -_2_0_7 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix< F1, 1,1 > &f1, F2 &f2 ) │ │ │ │ │ -208 { │ │ │ │ │ -209 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2 ); │ │ │ │ │ -210 } │ │ │ │ │ -211 template< class F2, class F1 > │ │ │ │ │ -_2_1_2 inline void _f_i_e_l_d___c_a_s_t ( const F1 &f1, Dune::FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ -213 { │ │ │ │ │ -214 _f_i_e_l_d___c_a_s_t( f1, f2[ 0 ][ 0 ] ); │ │ │ │ │ -215 } │ │ │ │ │ -216 template< class F2, class F1 > │ │ │ │ │ -_2_1_7 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector &f1, Dune:: │ │ │ │ │ -FieldMatrix< F2, 1,1 > &f2 ) │ │ │ │ │ -218 { │ │ │ │ │ -219 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2[ 0 ][ 0 ] ); │ │ │ │ │ -220 } │ │ │ │ │ -221 template< class F2, class F1 > │ │ │ │ │ -_2_2_2 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldMatrix &f1, Dune:: │ │ │ │ │ -FieldVector< F2, 1 > &f2 ) │ │ │ │ │ -223 { │ │ │ │ │ -224 _f_i_e_l_d___c_a_s_t( f1[ 0 ][ 0 ], f2[ 0 ] ); │ │ │ │ │ -225 } │ │ │ │ │ -226 │ │ │ │ │ -227 template< class F2, class F1 > │ │ │ │ │ -_2_2_8 inline void _f_i_e_l_d___c_a_s_t ( const Dune::FieldVector< F1, 1 > &f1, Dune:: │ │ │ │ │ -FieldVector &f2 ) │ │ │ │ │ -229 { │ │ │ │ │ -230 _f_i_e_l_d___c_a_s_t( f1[ 0 ], f2[ 0 ] ); │ │ │ │ │ -231 } │ │ │ │ │ -232 │ │ │ │ │ -233 template< class F2,class V > │ │ │ │ │ -_2_3_4 struct _F_i_e_l_d_C_a_s_t │ │ │ │ │ -235 { │ │ │ │ │ -_2_3_6 typedef F2 _t_y_p_e; │ │ │ │ │ -237 }; │ │ │ │ │ -238 template< class F2,class F1,int dim > │ │ │ │ │ -_2_3_9 struct _F_i_e_l_d_C_a_s_t< F2, _D_u_n_e::FieldVector > │ │ │ │ │ -240 { │ │ │ │ │ -_2_4_1 typedef Dune::FieldVector _t_y_p_e; │ │ │ │ │ -242 }; │ │ │ │ │ -243 template< class F2,class F1,int dim1, int dim2> │ │ │ │ │ -_2_4_4 struct _F_i_e_l_d_C_a_s_t< F2, _D_u_n_e::FieldMatrix > │ │ │ │ │ -245 { │ │ │ │ │ -_2_4_6 typedef Dune::FieldMatrix _t_y_p_e; │ │ │ │ │ -247 }; │ │ │ │ │ -248 template< class F2,class V > │ │ │ │ │ -_2_4_9 inline typename _F_i_e_l_d_C_a_s_t_<_F_2_,_V_>_:_:_t_y_p_e _f_i_e_l_d___c_a_s_t ( const V &f1 ) │ │ │ │ │ -250 { │ │ │ │ │ -251 typename _F_i_e_l_d_C_a_s_t_<_F_2_,_V_>_:_:_t_y_p_e f2; │ │ │ │ │ -252 _f_i_e_l_d___c_a_s_t( f1, f2 ); │ │ │ │ │ -253 return f2; │ │ │ │ │ -254 } │ │ │ │ │ -255 │ │ │ │ │ -256 │ │ │ │ │ -257 // Precision │ │ │ │ │ -258 // this is not a perfect solution to obtain the │ │ │ │ │ -259 // precision of a field - definition is not clear │ │ │ │ │ -260 // to be removed │ │ │ │ │ -261 // --------- │ │ │ │ │ -262 │ │ │ │ │ -263 template │ │ │ │ │ -_2_6_4 struct _P_r_e_c_i_s_i_o_n; │ │ │ │ │ -265 │ │ │ │ │ -266 template<> │ │ │ │ │ -_2_6_7 struct _P_r_e_c_i_s_i_o_n< double > │ │ │ │ │ -268 { │ │ │ │ │ -_2_6_9 static const unsigned int value = 64; │ │ │ │ │ -270 }; │ │ │ │ │ -271 │ │ │ │ │ -272 template<> │ │ │ │ │ -_2_7_3 struct _P_r_e_c_i_s_i_o_n< long double > │ │ │ │ │ -274 { │ │ │ │ │ -_2_7_5 static const unsigned int value = 80; │ │ │ │ │ -276 }; │ │ │ │ │ -277 │ │ │ │ │ -278 template<> │ │ │ │ │ -_2_7_9 struct _P_r_e_c_i_s_i_o_n< float > │ │ │ │ │ -280 { │ │ │ │ │ -_2_8_1 static const unsigned int value = 32; │ │ │ │ │ -282 }; │ │ │ │ │ -283 │ │ │ │ │ -284#if HAVE_GMP │ │ │ │ │ -285 template< unsigned int precision > │ │ │ │ │ -286 struct _P_r_e_c_i_s_i_o_n< GMPField< precision > > │ │ │ │ │ -287 { │ │ │ │ │ -288 static const unsigned int value = precision; │ │ │ │ │ -289 }; │ │ │ │ │ -290#endif │ │ │ │ │ -291 │ │ │ │ │ -292 // ComputeField │ │ │ │ │ -293 // ------------ │ │ │ │ │ -294 │ │ │ │ │ -295 template │ │ │ │ │ -_2_9_6 struct _C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ -297 { │ │ │ │ │ -_2_9_8 typedef Field _T_y_p_e; │ │ │ │ │ -299 }; │ │ │ │ │ -300 │ │ │ │ │ -301#if HAVE_GMP │ │ │ │ │ -302 template< unsigned int precision, unsigned int sum > │ │ │ │ │ -303 struct _C_o_m_p_u_t_e_F_i_e_l_d< GMPField< precision >, sum > │ │ │ │ │ -304 { │ │ │ │ │ -305 typedef GMPField _T_y_p_e; │ │ │ │ │ -306 }; │ │ │ │ │ -307#endif │ │ │ │ │ -308} // namespace Dune │ │ │ │ │ -309 │ │ │ │ │ -310#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_FIELD_HH │ │ │ │ │ +130#endif // #ifndef DUNE_RANNACHER_TUREK_3D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ -Field operator-(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ -bool operator<(const Zero< Field > &, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ -bool operator==(const Zero< Field > &, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_> │ │ │ │ │ -bool operator>(const Zero< Field > &z, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ │ -Field operator+(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ -Field operator/(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ -Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ -A class representing the unit of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o_:_:_e_p_s_i_l_o_n │ │ │ │ │ -static const Field epsilon() │ │ │ │ │ -DDeeffiinniittiioonn field.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t │ │ │ │ │ -DDeeffiinniittiioonn field.hh:235 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_:_:_t_y_p_e │ │ │ │ │ -F2 type │ │ │ │ │ -DDeeffiinniittiioonn field.hh:236 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_ _F_1_,_ _d_i_m_ _>_ _>_:_:_t_y_p_e │ │ │ │ │ -Dune::FieldVector< F2, dim > type │ │ │ │ │ -DDeeffiinniittiioonn field.hh:241 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_C_a_s_t_<_ _F_2_,_ _D_u_n_e_:_:_F_i_e_l_d_M_a_t_r_i_x_<_ _F_1_,_ _d_i_m_1_,_ _d_i_m_2_ _>_ _>_:_:_t_y_p_e │ │ │ │ │ -Dune::FieldMatrix< F2, dim1, dim2 > type │ │ │ │ │ -DDeeffiinniittiioonn field.hh:246 │ │ │ │ │ -_D_u_n_e_:_:_P_r_e_c_i_s_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn field.hh:264 │ │ │ │ │ -_D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ -DDeeffiinniittiioonn field.hh:297 │ │ │ │ │ -_D_u_n_e_:_:_C_o_m_p_u_t_e_F_i_e_l_d_:_:_T_y_p_e │ │ │ │ │ -Field Type │ │ │ │ │ -DDeeffiinniittiioonn field.hh:298 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ +RF RangeFieldType │ │ │ │ │ +Export type for range field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, FieldVector< D, 3 >, R, 1, FieldVector< R, 1 >, │ │ │ │ │ +FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +evaluate all shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +evaluate jacobian of all shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:57 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +polynomial order of the shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:108 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_3_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek3dlocalbasis.hh:80 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coeffmatrix.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,36 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
coeffmatrix.hh File Reference
│ │ │ │ +
rannachertureklocalcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <iostream>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │ +
#include <algorithm>
│ │ │ │ +#include <array>
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::Mult< Field, Field2 >
 
struct  Dune::Mult< Field, FieldVector< Field2, dimRange > >
 
class  Dune::SparseCoeffMatrix< F, bSize >
struct  Dune::RannacherTurekLocalCoefficients< d >
 layout for Rannacher-Turek elements More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -coeffmatrix.hh File Reference │ │ │ │ │ +rannachertureklocalcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_2_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _F_,_ _b_S_i_z_e_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_ _> │ │ │ │ │ +  layout for Rannacher-Turek elements _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00488_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coeffmatrix.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,338 +70,96 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
coeffmatrix.hh
│ │ │ │ +
rannachertureklocalcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_COEFFMATRIX_HH
│ │ │ │ -
6#define DUNE_COEFFMATRIX_HH
│ │ │ │ -
7#include <cassert>
│ │ │ │ -
8#include <iostream>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ - │ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
16 /*************************************************
│ │ │ │ -
17 * Default class for storing a coefficient matrix
│ │ │ │ -
18 * for the PolynomialBasis. Basically a simple
│ │ │ │ -
19 * CRS structure is used. The additional complexity
│ │ │ │ -
20 * is due to the storage and efficient evaluation
│ │ │ │ -
21 * of higher order derivatives. See the remarks
│ │ │ │ -
22 * in tensor.hh which also hold true for this file.
│ │ │ │ -
23 *************************************************/
│ │ │ │ -
24 template <class Field, class Field2>
│ │ │ │ -
│ │ │ │ -
25 struct Mult
│ │ │ │ -
26 {
│ │ │ │ -
27 typedef Field2 BasisEntry;
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <algorithm>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <cassert>
│ │ │ │ +
11#include <cstddef>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
25 template< unsigned int d >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 {
│ │ │ │
│ │ │ │ -
28 static void add(const Field &vec1, const BasisEntry &vec2,
│ │ │ │ -
29 BasisEntry &res)
│ │ │ │ -
30 {
│ │ │ │ -
31 res += vec1*vec2;
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 for( std::size_t i = 0; i < 2*d; ++i )
│ │ │ │ +
31 localKeys_[ i ] = LocalKey( i, 1, 0 );
│ │ │ │
32 }
│ │ │ │
│ │ │ │ -
33 };
│ │ │ │ +
33
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 (*this) = other;
│ │ │ │ +
37 }
│ │ │ │
│ │ │ │ -
34
│ │ │ │ -
35 template <class Field,class Field2, int dimRange>
│ │ │ │ -
│ │ │ │ -
36 struct Mult< Field,FieldVector<Field2,dimRange> >
│ │ │ │ -
37 {
│ │ │ │ -
38 typedef FieldVector<Field2,dimRange> BasisEntry;
│ │ │ │ +
38
│ │ │ │
│ │ │ │ -
39 static void add(const Field &vec1, const BasisEntry &vec2,
│ │ │ │ -
40 BasisEntry &res)
│ │ │ │ -
41 {
│ │ │ │ -
42 res.axpy(vec1,vec2);
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 std::copy( other.localKeys_.begin(), other.localKeys_.end(), localKeys_.begin() );
│ │ │ │ +
42 return *this;
│ │ │ │
43 }
│ │ │ │
│ │ │ │ -
44 };
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 template< class F , unsigned int bSize >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
48 {
│ │ │ │ -
49 public:
│ │ │ │ -
50 typedef F Field;
│ │ │ │ -
51 static const unsigned int blockSize = bSize;
│ │ │ │ - │ │ │ │ -
53
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
55 : coeff_(0),
│ │ │ │ -
56 rows_(0),
│ │ │ │ -
57 skip_(0),
│ │ │ │ -
58 numRows_(0),
│ │ │ │ -
59 numCols_(0)
│ │ │ │ -
60 {}
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 std::size_t size () const
│ │ │ │ +
47 {
│ │ │ │ +
48 return 2*d;
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
│ │ │ │ +
52 const LocalKey &localKey ( std::size_t i ) const
│ │ │ │ +
53 {
│ │ │ │ +
54 assert( i < 2*d );
│ │ │ │ +
55 return localKeys_[ i ];
│ │ │ │ +
56 }
│ │ │ │ +
│ │ │ │ +
57
│ │ │ │ +
58 private:
│ │ │ │ +
59 std::array< LocalKey, 2*d > localKeys_;
│ │ │ │ +
60 };
│ │ │ │
│ │ │ │
61
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
63 {
│ │ │ │ -
64 delete [] coeff_;
│ │ │ │ -
65 delete [] rows_;
│ │ │ │ -
66 delete [] skip_;
│ │ │ │ -
67 }
│ │ │ │ -
│ │ │ │ -
68
│ │ │ │ -
│ │ │ │ -
69 unsigned int size () const
│ │ │ │ -
70 {
│ │ │ │ -
71 return numRows_/blockSize;
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
73 unsigned int baseSize () const
│ │ │ │ -
74 {
│ │ │ │ -
75 return numCols_;
│ │ │ │ -
76 }
│ │ │ │ -
│ │ │ │ -
77
│ │ │ │ -
78 template< class BasisIterator, class FF>
│ │ │ │ -
│ │ │ │ -
79 void mult ( const BasisIterator &x,
│ │ │ │ -
80 unsigned int numLsg,
│ │ │ │ -
81 FF *y ) const
│ │ │ │ -
82 {
│ │ │ │ -
83 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ -
84 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ -
85 unsigned int row = 0;
│ │ │ │ -
86 Field *pos = rows_[ 0 ];
│ │ │ │ -
87 unsigned int *skipIt = skip_;
│ │ │ │ -
88 XDerivatives val;
│ │ │ │ -
89 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ -
90 {
│ │ │ │ -
91 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ -
92 {
│ │ │ │ -
93 val = 0;
│ │ │ │ -
94 BasisIterator itx = x;
│ │ │ │ -
95 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ -
96 {
│ │ │ │ -
97 itx += *skipIt;
│ │ │ │ -
98 val.axpy(*pos,*itx);
│ │ │ │ -
99 }
│ │ │ │ -
100 DerivativeAssign<XDerivatives,FF>::apply(r,val,*(y+i*XDerivatives::size*blockSize));
│ │ │ │ -
101 }
│ │ │ │ -
102 }
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104 template< class BasisIterator, class Vector>
│ │ │ │ -
│ │ │ │ -
105 void mult ( const BasisIterator &x,
│ │ │ │ -
106 Vector &y ) const
│ │ │ │ -
107 {
│ │ │ │ -
108 typedef typename Vector::value_type YDerivatives;
│ │ │ │ -
109 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ -
110 size_t numLsg = y.size();
│ │ │ │ -
111 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ -
112 unsigned int row = 0;
│ │ │ │ -
113 Field *pos = rows_[ 0 ];
│ │ │ │ -
114 unsigned int *skipIt = skip_;
│ │ │ │ -
115 XDerivatives val;
│ │ │ │ -
116 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ -
117 {
│ │ │ │ -
118 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ -
119 {
│ │ │ │ -
120 val = 0;
│ │ │ │ -
121 BasisIterator itx = x;
│ │ │ │ -
122 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ -
123 {
│ │ │ │ -
124 itx += *skipIt;
│ │ │ │ -
125 val.axpy(*pos,*itx);
│ │ │ │ -
126 }
│ │ │ │ - │ │ │ │ -
128 }
│ │ │ │ -
129 }
│ │ │ │ -
130 }
│ │ │ │ -
│ │ │ │ -
131 template <unsigned int deriv, class BasisIterator, class Vector>
│ │ │ │ -
│ │ │ │ -
132 void mult ( const BasisIterator &x,
│ │ │ │ -
133 Vector &y ) const
│ │ │ │ -
134 {
│ │ │ │ -
135 typedef typename Vector::value_type YDerivatives;
│ │ │ │ -
136 typedef typename BasisIterator::Derivatives XDerivatives;
│ │ │ │ -
137 typedef FieldVector<typename XDerivatives::Field,YDerivatives::dimension> XLFETensor;
│ │ │ │ -
138 size_t numLsg = y.size();
│ │ │ │ -
139 assert( numLsg*blockSize <= (size_t)numRows_ );
│ │ │ │ -
140 unsigned int row = 0;
│ │ │ │ -
141 Field *pos = rows_[ 0 ];
│ │ │ │ -
142 unsigned int *skipIt = skip_;
│ │ │ │ -
143 for( size_t i = 0; i < numLsg; ++i)
│ │ │ │ -
144 {
│ │ │ │ -
145 XLFETensor val(typename XDerivatives::Field(0));
│ │ │ │ -
146 for( unsigned int r = 0; r < blockSize; ++r, ++row )
│ │ │ │ -
147 {
│ │ │ │ -
148 BasisIterator itx = x;
│ │ │ │ -
149 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt )
│ │ │ │ -
150 {
│ │ │ │ -
151 itx += *skipIt;
│ │ │ │ - │ │ │ │ -
153 }
│ │ │ │ -
154 }
│ │ │ │ -
155 field_cast(val,y[i]);
│ │ │ │ -
156 }
│ │ │ │ -
157 }
│ │ │ │ -
│ │ │ │ -
158
│ │ │ │ -
159 template< class RowMatrix >
│ │ │ │ -
│ │ │ │ -
160 void fill ( const RowMatrix &mat, bool verbose=false )
│ │ │ │ -
161 {
│ │ │ │ -
162 numRows_ = mat.rows();
│ │ │ │ -
163 numCols_ = mat.cols();
│ │ │ │ -
164 unsigned int size = numRows_*numCols_;
│ │ │ │ -
165
│ │ │ │ -
166 delete [] coeff_;
│ │ │ │ -
167 delete [] rows_;
│ │ │ │ -
168 delete [] skip_;
│ │ │ │ -
169
│ │ │ │ -
170 Field* coeff = new Field[ size ];
│ │ │ │ -
171 // we always initialize the next skip entry to zero,
│ │ │ │ -
172 // including the one following the end, so allocate
│ │ │ │ -
173 // size+1 entries so we will stay within the bounds.
│ │ │ │ -
174 unsigned int *skip = new unsigned int[ size+1 ];
│ │ │ │ -
175 rows_ = new Field*[ numRows_+1 ];
│ │ │ │ -
176 std::vector<Field> row( numCols_ );
│ │ │ │ -
177
│ │ │ │ -
178 rows_[ 0 ] = coeff;
│ │ │ │ -
179 Field *cit = coeff;
│ │ │ │ -
180 unsigned int *sit = skip;
│ │ │ │ -
181 for( unsigned int r = 0; r < numRows_; ++r )
│ │ │ │ -
182 {
│ │ │ │ -
183 *sit = 0;
│ │ │ │ -
184 mat.row( r, row );
│ │ │ │ -
185 for( unsigned int c = 0; c < numCols_; ++c )
│ │ │ │ -
186 {
│ │ │ │ -
187 const Field &val = row[c];
│ │ │ │ -
188 if (val < Zero<Field>() || Zero<Field>() < val)
│ │ │ │ -
189 {
│ │ │ │ -
190 *cit = val;
│ │ │ │ -
191 ++sit;
│ │ │ │ -
192 ++cit;
│ │ │ │ -
193 *sit = 1;
│ │ │ │ -
194 } else
│ │ │ │ -
195 {
│ │ │ │ -
196 ++(*sit);
│ │ │ │ -
197 }
│ │ │ │ -
198 }
│ │ │ │ -
199 rows_[ r+1 ] = cit;
│ │ │ │ -
200 }
│ │ │ │ -
201 assert( size_t(rows_[numRows_]-rows_[0]) <= size_t(size) );
│ │ │ │ -
202 size = rows_[numRows_]-rows_[0];
│ │ │ │ -
203 coeff_ = new Field[ size ];
│ │ │ │ -
204 skip_ = new unsigned int[ size ];
│ │ │ │ -
205 for (unsigned int i=0; i<size; ++i)
│ │ │ │ -
206 {
│ │ │ │ -
207 coeff_[i] = coeff[i];
│ │ │ │ -
208 skip_[i] = skip[i];
│ │ │ │ -
209 }
│ │ │ │ -
210 for (unsigned int i=0; i<=numRows_; ++i)
│ │ │ │ -
211 rows_[ i ] = coeff_ + (rows_[ i ] - coeff);
│ │ │ │ -
212
│ │ │ │ -
213 delete [] coeff;
│ │ │ │ -
214 delete [] skip;
│ │ │ │ -
215
│ │ │ │ -
216 if (verbose)
│ │ │ │ -
217 std::cout << "Entries: " << (rows_[numRows_]-rows_[0])
│ │ │ │ -
218 << " full: " << numCols_*numRows_
│ │ │ │ -
219 << std::endl;
│ │ │ │ -
220 }
│ │ │ │ -
│ │ │ │ -
221 // b += a*C[k]
│ │ │ │ -
222 template <class Vector>
│ │ │ │ -
│ │ │ │ -
223 void addRow( unsigned int k, const Field &a, Vector &b) const
│ │ │ │ -
224 {
│ │ │ │ -
225 assert(k<numRows_);
│ │ │ │ -
226 unsigned int j=0;
│ │ │ │ -
227 unsigned int *skipIt = skip_ + (rows_[ k ]-rows_[ 0 ]);
│ │ │ │ -
228 for( Field *pos = rows_[ k ];
│ │ │ │ -
229 pos != rows_[ k+1 ];
│ │ │ │ -
230 ++pos, ++skipIt )
│ │ │ │ -
231 {
│ │ │ │ -
232 j += *skipIt;
│ │ │ │ -
233 assert( j < b.size() );
│ │ │ │ -
234 b[j] += field_cast<typename Vector::value_type>( (*pos)*a ); // field_cast
│ │ │ │ -
235 }
│ │ │ │ -
236 }
│ │ │ │ -
│ │ │ │ -
237 private:
│ │ │ │ -
238 SparseCoeffMatrix ( const This &other )
│ │ │ │ -
239 : numRows_( other.numRows_ ),
│ │ │ │ -
240 numCols_( other.numCols_ )
│ │ │ │ -
241 {
│ │ │ │ -
242 const unsigned int size = other.rows_[numRows_]-other.rows_[0];
│ │ │ │ -
243 coeff_ = new Field[ size ];
│ │ │ │ -
244 rows_ = new Field*[ numRows_+1 ];
│ │ │ │ -
245 skip_ = new unsigned int[ size ];
│ │ │ │ -
246 for (unsigned int i=0; i<size; ++i)
│ │ │ │ -
247 {
│ │ │ │ -
248 coeff_[i] = other.coeff_[i];
│ │ │ │ -
249 skip_[i] = other.skip_[i];
│ │ │ │ -
250 }
│ │ │ │ -
251 for (unsigned int i=0; i<=numRows_; ++i)
│ │ │ │ -
252 rows_[ i ] = coeff_ + (other.rows_[ i ] - other.coeff_);
│ │ │ │ -
253 }
│ │ │ │ -
254
│ │ │ │ -
255 This &operator= (const This&);
│ │ │ │ -
256 Field *coeff_;
│ │ │ │ -
257 Field **rows_;
│ │ │ │ -
258 unsigned int *skip_;
│ │ │ │ -
259 unsigned int numRows_,numCols_;
│ │ │ │ -
260 };
│ │ │ │ -
│ │ │ │ -
261
│ │ │ │ -
262}
│ │ │ │ -
263
│ │ │ │ -
264#endif // DUNE_COEFFMATRIX_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
62} // namespace Dune
│ │ │ │ +
63
│ │ │ │ +
64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition coeffmatrix.hh:26
│ │ │ │ -
static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res)
Definition coeffmatrix.hh:28
│ │ │ │ -
Field2 BasisEntry
Definition coeffmatrix.hh:27
│ │ │ │ -
FieldVector< Field2, dimRange > BasisEntry
Definition coeffmatrix.hh:38
│ │ │ │ -
static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res)
Definition coeffmatrix.hh:39
│ │ │ │ -
Definition coeffmatrix.hh:48
│ │ │ │ -
static const unsigned int blockSize
Definition coeffmatrix.hh:51
│ │ │ │ -
SparseCoeffMatrix()
Definition coeffmatrix.hh:54
│ │ │ │ -
F Field
Definition coeffmatrix.hh:50
│ │ │ │ -
unsigned int baseSize() const
Definition coeffmatrix.hh:73
│ │ │ │ -
SparseCoeffMatrix< Field, blockSize > This
Definition coeffmatrix.hh:52
│ │ │ │ -
unsigned int size() const
Definition coeffmatrix.hh:69
│ │ │ │ -
void fill(const RowMatrix &mat, bool verbose=false)
Definition coeffmatrix.hh:160
│ │ │ │ -
void addRow(unsigned int k, const Field &a, Vector &b) const
Definition coeffmatrix.hh:223
│ │ │ │ -
void mult(const BasisIterator &x, unsigned int numLsg, FF *y) const
Definition coeffmatrix.hh:79
│ │ │ │ -
void mult(const BasisIterator &x, Vector &y) const
Definition coeffmatrix.hh:132
│ │ │ │ -
void mult(const BasisIterator &x, Vector &y) const
Definition coeffmatrix.hh:105
│ │ │ │ -
~SparseCoeffMatrix()
Definition coeffmatrix.hh:62
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:587
│ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:665
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
layout for Rannacher-Turek elements
Definition rannachertureklocalcoefficients.hh:27
│ │ │ │ +
RannacherTurekLocalCoefficients()
Definition rannachertureklocalcoefficients.hh:28
│ │ │ │ +
RannacherTurekLocalCoefficients(const RannacherTurekLocalCoefficients &other)
Definition rannachertureklocalcoefficients.hh:34
│ │ │ │ +
RannacherTurekLocalCoefficients & operator=(const RannacherTurekLocalCoefficients &other)
Definition rannachertureklocalcoefficients.hh:39
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
map index i to local key
Definition rannachertureklocalcoefficients.hh:52
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition rannachertureklocalcoefficients.hh:46
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,347 +1,96 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -coeffmatrix.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ +rannachertureklocalcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_COEFFMATRIX_HH │ │ │ │ │ -6#define DUNE_COEFFMATRIX_HH │ │ │ │ │ -7#include │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -16 /************************************************* │ │ │ │ │ -17 * Default class for storing a coefficient matrix │ │ │ │ │ -18 * for the PolynomialBasis. Basically a simple │ │ │ │ │ -19 * CRS structure is used. The additional complexity │ │ │ │ │ -20 * is due to the storage and efficient evaluation │ │ │ │ │ -21 * of higher order derivatives. See the remarks │ │ │ │ │ -22 * in tensor.hh which also hold true for this file. │ │ │ │ │ -23 *************************************************/ │ │ │ │ │ -24 template │ │ │ │ │ -_2_5 struct _M_u_l_t │ │ │ │ │ -26 { │ │ │ │ │ -_2_7 typedef Field2 _B_a_s_i_s_E_n_t_r_y; │ │ │ │ │ -_2_8 static void _a_d_d(const Field &vec1, const _B_a_s_i_s_E_n_t_r_y &vec2, │ │ │ │ │ -29 _B_a_s_i_s_E_n_t_r_y &res) │ │ │ │ │ -30 { │ │ │ │ │ -31 res += vec1*vec2; │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +25 template< unsigned int d > │ │ │ │ │ +_2_6 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +27 { │ │ │ │ │ +_2_8 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ +29 { │ │ │ │ │ +30 for( std::size_t i = 0; i < 2*d; ++i ) │ │ │ │ │ +31 localKeys_[ i ] = _L_o_c_a_l_K_e_y( i, 1, 0 ); │ │ │ │ │ 32 } │ │ │ │ │ -33 }; │ │ │ │ │ -34 │ │ │ │ │ -35 template │ │ │ │ │ -_3_6 struct _M_u_l_t< Field,FieldVector > │ │ │ │ │ -37 { │ │ │ │ │ -_3_8 typedef FieldVector _B_a_s_i_s_E_n_t_r_y; │ │ │ │ │ -_3_9 static void _a_d_d(const Field &vec1, const _B_a_s_i_s_E_n_t_r_y &vec2, │ │ │ │ │ -40 _B_a_s_i_s_E_n_t_r_y &res) │ │ │ │ │ -41 { │ │ │ │ │ -42 res.axpy(vec1,vec2); │ │ │ │ │ +33 │ │ │ │ │ +_3_4 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s ( const _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +&other ) │ │ │ │ │ +35 { │ │ │ │ │ +36 (*this) = other; │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +_3_9 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s &_o_p_e_r_a_t_o_r_=_ ( const │ │ │ │ │ +_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s &other ) │ │ │ │ │ +40 { │ │ │ │ │ +41 std::copy( other.localKeys_.begin(), other.localKeys_.end(), │ │ │ │ │ +localKeys_.begin() ); │ │ │ │ │ +42 return *this; │ │ │ │ │ 43 } │ │ │ │ │ -44 }; │ │ │ │ │ -45 │ │ │ │ │ -46 template< class F , unsigned int bSize > │ │ │ │ │ -_4_7 class _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ -48 { │ │ │ │ │ -49 public: │ │ │ │ │ -_5_0 typedef F _F_i_e_l_d; │ │ │ │ │ -_5_1 static const unsigned int _b_l_o_c_k_S_i_z_e = bSize; │ │ │ │ │ -_5_2 typedef _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_F_i_e_l_d_,_b_l_o_c_k_S_i_z_e_> _T_h_i_s; │ │ │ │ │ -53 │ │ │ │ │ -_5_4 _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x() │ │ │ │ │ -55 : coeff_(0), │ │ │ │ │ -56 rows_(0), │ │ │ │ │ -57 skip_(0), │ │ │ │ │ -58 numRows_(0), │ │ │ │ │ -59 numCols_(0) │ │ │ │ │ -60 {} │ │ │ │ │ +44 │ │ │ │ │ +_4_6 std::size_t _s_i_z_e () const │ │ │ │ │ +47 { │ │ │ │ │ +48 return 2*d; │ │ │ │ │ +49 } │ │ │ │ │ +50 │ │ │ │ │ +_5_2 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( std::size_t i ) const │ │ │ │ │ +53 { │ │ │ │ │ +54 assert( i < 2*d ); │ │ │ │ │ +55 return localKeys_[ i ]; │ │ │ │ │ +56 } │ │ │ │ │ +57 │ │ │ │ │ +58 private: │ │ │ │ │ +59 std::array< LocalKey, 2*d > localKeys_; │ │ │ │ │ +60 }; │ │ │ │ │ 61 │ │ │ │ │ -_6_2 _~_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x() │ │ │ │ │ -63 { │ │ │ │ │ -64 delete [] coeff_; │ │ │ │ │ -65 delete [] rows_; │ │ │ │ │ -66 delete [] skip_; │ │ │ │ │ -67 } │ │ │ │ │ -68 │ │ │ │ │ -_6_9 unsigned int _s_i_z_e () const │ │ │ │ │ -70 { │ │ │ │ │ -71 return numRows_/_b_l_o_c_k_S_i_z_e; │ │ │ │ │ -72 } │ │ │ │ │ -_7_3 unsigned int _b_a_s_e_S_i_z_e () const │ │ │ │ │ -74 { │ │ │ │ │ -75 return numCols_; │ │ │ │ │ -76 } │ │ │ │ │ -77 │ │ │ │ │ -78 template< class BasisIterator, class FF> │ │ │ │ │ -_7_9 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ -80 unsigned int numLsg, │ │ │ │ │ -81 FF *y ) const │ │ │ │ │ -82 { │ │ │ │ │ -83 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ -84 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ -85 unsigned int row = 0; │ │ │ │ │ -86 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ -87 unsigned int *skipIt = skip_; │ │ │ │ │ -88 XDerivatives val; │ │ │ │ │ -89 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ -90 { │ │ │ │ │ -91 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ -92 { │ │ │ │ │ -93 val = 0; │ │ │ │ │ -94 BasisIterator itx = x; │ │ │ │ │ -95 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt ) │ │ │ │ │ -96 { │ │ │ │ │ -97 itx += *skipIt; │ │ │ │ │ -98 val.axpy(*pos,*itx); │ │ │ │ │ -99 } │ │ │ │ │ -100 _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_X_D_e_r_i_v_a_t_i_v_e_s_,_F_F_>_:_:_a_p_p_l_y(r,val,*(y+i*XDerivatives:: │ │ │ │ │ -size*_b_l_o_c_k_S_i_z_e)); │ │ │ │ │ -101 } │ │ │ │ │ -102 } │ │ │ │ │ -103 } │ │ │ │ │ -104 template< class BasisIterator, class Vector> │ │ │ │ │ -_1_0_5 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ -106 Vector &y ) const │ │ │ │ │ -107 { │ │ │ │ │ -108 typedef typename Vector::value_type YDerivatives; │ │ │ │ │ -109 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ -110 size_t numLsg = y.size(); │ │ │ │ │ -111 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ -112 unsigned int row = 0; │ │ │ │ │ -113 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ -114 unsigned int *skipIt = skip_; │ │ │ │ │ -115 XDerivatives val; │ │ │ │ │ -116 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ -117 { │ │ │ │ │ -118 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ -119 { │ │ │ │ │ -120 val = 0; │ │ │ │ │ -121 BasisIterator itx = x; │ │ │ │ │ -122 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt ) │ │ │ │ │ -123 { │ │ │ │ │ -124 itx += *skipIt; │ │ │ │ │ -125 val.axpy(*pos,*itx); │ │ │ │ │ -126 } │ │ │ │ │ -127 _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_X_D_e_r_i_v_a_t_i_v_e_s_,_Y_D_e_r_i_v_a_t_i_v_e_s_>_:_:_a_p_p_l_y(r,val,y[i]); │ │ │ │ │ -128 } │ │ │ │ │ -129 } │ │ │ │ │ -130 } │ │ │ │ │ -131 template │ │ │ │ │ -_1_3_2 void _m_u_l_t ( const BasisIterator &x, │ │ │ │ │ -133 Vector &y ) const │ │ │ │ │ -134 { │ │ │ │ │ -135 typedef typename Vector::value_type YDerivatives; │ │ │ │ │ -136 typedef typename BasisIterator::Derivatives XDerivatives; │ │ │ │ │ -137 typedef FieldVector │ │ │ │ │ -XLFETensor; │ │ │ │ │ -138 size_t numLsg = y.size(); │ │ │ │ │ -139 assert( numLsg*_b_l_o_c_k_S_i_z_e <= (size_t)numRows_ ); │ │ │ │ │ -140 unsigned int row = 0; │ │ │ │ │ -141 _F_i_e_l_d *pos = rows_[ 0 ]; │ │ │ │ │ -142 unsigned int *skipIt = skip_; │ │ │ │ │ -143 for( size_t i = 0; i < numLsg; ++i) │ │ │ │ │ -144 { │ │ │ │ │ -145 XLFETensor val(typename XDerivatives::Field(0)); │ │ │ │ │ -146 for( unsigned int r = 0; r < _b_l_o_c_k_S_i_z_e; ++r, ++row ) │ │ │ │ │ -147 { │ │ │ │ │ -148 BasisIterator itx = x; │ │ │ │ │ -149 for( ; pos != rows_[ row+1 ]; ++pos, ++skipIt ) │ │ │ │ │ -150 { │ │ │ │ │ -151 itx += *skipIt; │ │ │ │ │ -152 _L_F_E_T_e_n_s_o_r_A_x_p_y_<_X_D_e_r_i_v_a_t_i_v_e_s_,_X_L_F_E_T_e_n_s_o_r_,_d_e_r_i_v_>_:_:_a_p_p_l_y(r,*pos,*itx,val); │ │ │ │ │ -153 } │ │ │ │ │ -154 } │ │ │ │ │ -155 _f_i_e_l_d___c_a_s_t(val,y[i]); │ │ │ │ │ -156 } │ │ │ │ │ -157 } │ │ │ │ │ -158 │ │ │ │ │ -159 template< class RowMatrix > │ │ │ │ │ -_1_6_0 void _f_i_l_l ( const RowMatrix &mat, bool verbose=false ) │ │ │ │ │ -161 { │ │ │ │ │ -162 numRows_ = mat.rows(); │ │ │ │ │ -163 numCols_ = mat.cols(); │ │ │ │ │ -164 unsigned int _s_i_z_e = numRows_*numCols_; │ │ │ │ │ -165 │ │ │ │ │ -166 delete [] coeff_; │ │ │ │ │ -167 delete [] rows_; │ │ │ │ │ -168 delete [] skip_; │ │ │ │ │ -169 │ │ │ │ │ -170 _F_i_e_l_d* coeff = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ -171 // we always initialize the next skip entry to zero, │ │ │ │ │ -172 // including the one following the end, so allocate │ │ │ │ │ -173 // size+1 entries so we will stay within the bounds. │ │ │ │ │ -174 unsigned int *skip = new unsigned int[ _s_i_z_e+1 ]; │ │ │ │ │ -175 rows_ = new _F_i_e_l_d*[ numRows_+1 ]; │ │ │ │ │ -176 std::vector row( numCols_ ); │ │ │ │ │ -177 │ │ │ │ │ -178 rows_[ 0 ] = coeff; │ │ │ │ │ -179 _F_i_e_l_d *cit = coeff; │ │ │ │ │ -180 unsigned int *sit = skip; │ │ │ │ │ -181 for( unsigned int r = 0; r < numRows_; ++r ) │ │ │ │ │ -182 { │ │ │ │ │ -183 *sit = 0; │ │ │ │ │ -184 mat.row( r, row ); │ │ │ │ │ -185 for( unsigned int c = 0; c < numCols_; ++c ) │ │ │ │ │ -186 { │ │ │ │ │ -187 const _F_i_e_l_d &val = row[c]; │ │ │ │ │ -188 if (val < _Z_e_r_o_<_F_i_e_l_d_>() || _Z_e_r_o_<_F_i_e_l_d_>() < val) │ │ │ │ │ -189 { │ │ │ │ │ -190 *cit = val; │ │ │ │ │ -191 ++sit; │ │ │ │ │ -192 ++cit; │ │ │ │ │ -193 *sit = 1; │ │ │ │ │ -194 } else │ │ │ │ │ -195 { │ │ │ │ │ -196 ++(*sit); │ │ │ │ │ -197 } │ │ │ │ │ -198 } │ │ │ │ │ -199 rows_[ r+1 ] = cit; │ │ │ │ │ -200 } │ │ │ │ │ -201 assert( size_t(rows_[numRows_]-rows_[0]) <= size_t(_s_i_z_e) ); │ │ │ │ │ -202 _s_i_z_e = rows_[numRows_]-rows_[0]; │ │ │ │ │ -203 coeff_ = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ -204 skip_ = new unsigned int[ _s_i_z_e ]; │ │ │ │ │ -205 for (unsigned int i=0; i<_s_i_z_e; ++i) │ │ │ │ │ -206 { │ │ │ │ │ -207 coeff_[i] = coeff[i]; │ │ │ │ │ -208 skip_[i] = skip[i]; │ │ │ │ │ -209 } │ │ │ │ │ -210 for (unsigned int i=0; i<=numRows_; ++i) │ │ │ │ │ -211 rows_[ i ] = coeff_ + (rows_[ i ] - coeff); │ │ │ │ │ -212 │ │ │ │ │ -213 delete [] coeff; │ │ │ │ │ -214 delete [] skip; │ │ │ │ │ -215 │ │ │ │ │ -216 if (verbose) │ │ │ │ │ -217 std::cout << "Entries: " << (rows_[numRows_]-rows_[0]) │ │ │ │ │ -218 << " full: " << numCols_*numRows_ │ │ │ │ │ -219 << std::endl; │ │ │ │ │ -220 } │ │ │ │ │ -221 // b += a*C[k] │ │ │ │ │ -222 template │ │ │ │ │ -_2_2_3 void _a_d_d_R_o_w( unsigned int k, const _F_i_e_l_d &a, Vector &b) const │ │ │ │ │ -224 { │ │ │ │ │ -225 assert(k( (*pos)*a ); // field_cast │ │ │ │ │ -235 } │ │ │ │ │ -236 } │ │ │ │ │ -237 private: │ │ │ │ │ -238 _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x ( const _T_h_i_s &other ) │ │ │ │ │ -239 : numRows_( other.numRows_ ), │ │ │ │ │ -240 numCols_( other.numCols_ ) │ │ │ │ │ -241 { │ │ │ │ │ -242 const unsigned int _s_i_z_e = other.rows_[numRows_]-other.rows_[0]; │ │ │ │ │ -243 coeff_ = new _F_i_e_l_d[ _s_i_z_e ]; │ │ │ │ │ -244 rows_ = new _F_i_e_l_d*[ numRows_+1 ]; │ │ │ │ │ -245 skip_ = new unsigned int[ _s_i_z_e ]; │ │ │ │ │ -246 for (unsigned int i=0; i<_s_i_z_e; ++i) │ │ │ │ │ -247 { │ │ │ │ │ -248 coeff_[i] = other.coeff_[i]; │ │ │ │ │ -249 skip_[i] = other.skip_[i]; │ │ │ │ │ -250 } │ │ │ │ │ -251 for (unsigned int i=0; i<=numRows_; ++i) │ │ │ │ │ -252 rows_[ i ] = coeff_ + (other.rows_[ i ] - other.coeff_); │ │ │ │ │ -253 } │ │ │ │ │ -254 │ │ │ │ │ -255 _T_h_i_s &operator= (const _T_h_i_s&); │ │ │ │ │ -256 _F_i_e_l_d *coeff_; │ │ │ │ │ -257 _F_i_e_l_d **rows_; │ │ │ │ │ -258 unsigned int *skip_; │ │ │ │ │ -259 unsigned int numRows_,numCols_; │ │ │ │ │ -260 }; │ │ │ │ │ -261 │ │ │ │ │ -262} │ │ │ │ │ -263 │ │ │ │ │ -264#endif // DUNE_COEFFMATRIX_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ -_t_e_n_s_o_r_._h_h │ │ │ │ │ +62} // namespace Dune │ │ │ │ │ +63 │ │ │ │ │ +64#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALCOEFFICIENTS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_:_:_a_d_d │ │ │ │ │ -static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res) │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_:_:_B_a_s_i_s_E_n_t_r_y │ │ │ │ │ -Field2 BasisEntry │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _>_:_:_B_a_s_i_s_E_n_t_r_y │ │ │ │ │ -FieldVector< Field2, dimRange > BasisEntry │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_<_ _F_i_e_l_d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_i_e_l_d_2_,_ _d_i_m_R_a_n_g_e_ _>_ _>_:_:_a_d_d │ │ │ │ │ -static void add(const Field &vec1, const BasisEntry &vec2, BasisEntry &res) │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_b_l_o_c_k_S_i_z_e │ │ │ │ │ -static const unsigned int blockSize │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ -SparseCoeffMatrix() │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:54 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_b_a_s_e_S_i_z_e │ │ │ │ │ -unsigned int baseSize() const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_T_h_i_s │ │ │ │ │ -SparseCoeffMatrix< Field, blockSize > This │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ -void fill(const RowMatrix &mat, bool verbose=false) │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:160 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_a_d_d_R_o_w │ │ │ │ │ -void addRow(unsigned int k, const Field &a, Vector &b) const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:223 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ -void mult(const BasisIterator &x, unsigned int numLsg, FF *y) const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ -void mult(const BasisIterator &x, Vector &y) const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:132 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_m_u_l_t │ │ │ │ │ -void mult(const BasisIterator &x, Vector &y) const │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_:_:_~_S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x │ │ │ │ │ -~SparseCoeffMatrix() │ │ │ │ │ -DDeeffiinniittiioonn coeffmatrix.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:587 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:665 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +layout for Rannacher-Turek elements │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RannacherTurekLocalCoefficients() │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RannacherTurekLocalCoefficients(const RannacherTurekLocalCoefficients &other) │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +RannacherTurekLocalCoefficients & operator=(const │ │ │ │ │ +RannacherTurekLocalCoefficients &other) │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +map index i to local key │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:46 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisevaluator.hh File Reference │ │ │ │ +dune-localfunctions: rannachertureklocalinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,36 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
basisevaluator.hh File Reference
│ │ │ │ +
rannachertureklocalinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ +
#include <cassert>
│ │ │ │ +#include <vector>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ -#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │ +#include <dune/geometry/referenceelements.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::MonomialEvaluator< B >
 
struct  Dune::MonomialEvaluator< B >::Iterator< deriv >
 
struct  Dune::MonomialEvaluator< B >::BaseIterator< Deriv >
 
struct  Dune::StandardEvaluator< B >
 
struct  Dune::StandardEvaluator< B >::Iterator< deriv >
class  Dune::RannacherTurekLocalInterpolation< D, R, d >
 please doc me More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,34 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -basisevaluator.hh File Reference │ │ │ │ │ +rannachertureklocalinterpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_I_t_e_r_a_t_o_r_<_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_B_a_s_e_I_t_e_r_a_t_o_r_<_ _D_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _B_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _B_ _>_:_:_I_t_e_r_a_t_o_r_<_ _d_e_r_i_v_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ +  please doc me _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00491_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basisevaluator.hh Source File │ │ │ │ +dune-localfunctions: rannachertureklocalinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,279 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
basisevaluator.hh
│ │ │ │ +
rannachertureklocalinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_BASISEVALUATOR_HH
│ │ │ │ -
6#define DUNE_BASISEVALUATOR_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fmatrix.hh>
│ │ │ │ +
8#include <cassert>
│ │ │ │ +
9#include <vector>
│ │ │ │ +
10
│ │ │ │
11#include <dune/common/fvector.hh>
│ │ │ │ -
12#include <dune/common/typetraits.hh>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/geometry/type.hh>
│ │ │ │ -
15
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/referenceelements.hh>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
17namespace Dune
│ │ │ │ +
18{
│ │ │ │
19
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ -
22 /*******************************************
│ │ │ │ -
23 * Should be removed as soon as the Tensor
│ │ │ │ -
24 * classes have been revisited. See remarks
│ │ │ │ -
25 * in tensor.hh (also hold true here).
│ │ │ │ -
26 *******************************************/
│ │ │ │ -
27
│ │ │ │ -
28
│ │ │ │ -
29 template <class B>
│ │ │ │ +
29 template< class D, class R, unsigned int d >
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
31 {
│ │ │ │ -
32 typedef B Basis;
│ │ │ │ -
33 typedef typename Basis::Field Field;
│ │ │ │ -
34 typedef typename Basis::DomainVector DomainVector;
│ │ │ │ -
35 static const int dimension = Basis::dimension;
│ │ │ │ -
36 static const int dimRange = Basis::dimRange;
│ │ │ │ -
37
│ │ │ │ -
38 typedef std::vector<Field> Container;
│ │ │ │ -
39
│ │ │ │ -
40 template< class Deriv >
│ │ │ │ -
41 struct BaseIterator;
│ │ │ │ -
42
│ │ │ │ -
43 template <unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
44 struct Iterator
│ │ │ │ -
45 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
50 unsigned int size() const
│ │ │ │ -
51 {
│ │ │ │ -
52 return size_;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 protected:
│ │ │ │ -
│ │ │ │ -
56 MonomialEvaluator(const Basis &basis,unsigned int order,unsigned int size)
│ │ │ │ -
57 : basis_(basis),
│ │ │ │ -
58 order_(order),
│ │ │ │ -
59 size_(size),
│ │ │ │ -
60 container_(0)
│ │ │ │ -
61 {}
│ │ │ │ -
│ │ │ │ -
62 template <int deriv>
│ │ │ │ -
│ │ │ │ -
63 void resize()
│ │ │ │ -
64 {
│ │ │ │ - │ │ │ │ -
66 container_.resize(totalSize);
│ │ │ │ -
67 }
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
69 const Basis &basis_;
│ │ │ │ -
70 unsigned int order_,size_;
│ │ │ │ - │ │ │ │ -
72 };
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
74
│ │ │ │ -
75 template< class B >
│ │ │ │ -
76 template< class Deriv >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
78 {
│ │ │ │ -
79 typedef Deriv Derivatives;
│ │ │ │ -
80 typedef typename Deriv::Field Field;
│ │ │ │ -
81 static const unsigned int blockSize = Deriv::size;
│ │ │ │ -
82 typedef Dune::FieldVector<Field,blockSize> Block;
│ │ │ │ -
83 static const DerivativeLayoutNS::DerivativeLayout layout = Deriv::layout;
│ │ │ │ -
84 static const unsigned int dimDomain = Deriv::dimDomain;
│ │ │ │ -
85 static const unsigned int dimRange = Deriv::dimRange;
│ │ │ │ -
86
│ │ │ │ -
87 typedef std::vector<Field> Container;
│ │ │ │ -
88 typedef typename Container::iterator CIter;
│ │ │ │ -
89
│ │ │ │ -
│ │ │ │ -
90 explicit BaseIterator ( Container &container )
│ │ │ │ -
91 : pos_( container.begin() ),
│ │ │ │ -
92 end_( container.end() )
│ │ │ │ -
93 {}
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
│ │ │ │ -
95 const Deriv &operator*() const
│ │ │ │ -
96 {
│ │ │ │ -
97 assert(!done());
│ │ │ │ -
98 return reinterpret_cast<const Deriv&>(*pos_);
│ │ │ │ -
99 }
│ │ │ │ -
│ │ │ │ -
100
│ │ │ │ -
│ │ │ │ -
101 const Deriv *operator->() const
│ │ │ │ -
102 {
│ │ │ │ -
103 return &(operator*());
│ │ │ │ -
104 }
│ │ │ │ -
│ │ │ │ -
105
│ │ │ │ -
│ │ │ │ -
106 bool done () const
│ │ │ │ -
107 {
│ │ │ │ -
108 return pos_ == end_;
│ │ │ │ -
109 }
│ │ │ │ -
│ │ │ │ -
110
│ │ │ │ -
│ │ │ │ -
111 BaseIterator &operator++ ()
│ │ │ │ -
112 {
│ │ │ │ -
113 pos_ += blockSize;
│ │ │ │ -
114 return *this;
│ │ │ │ -
115 }
│ │ │ │ -
│ │ │ │ -
116
│ │ │ │ -
│ │ │ │ -
117 BaseIterator &operator+= ( unsigned int skip )
│ │ │ │ -
118 {
│ │ │ │ -
119 pos_ += skip*blockSize;
│ │ │ │ -
120 return *this;
│ │ │ │ -
121 }
│ │ │ │ -
│ │ │ │ -
122
│ │ │ │ -
123 private:
│ │ │ │ -
124 CIter pos_;
│ │ │ │ -
125 const CIter end_;
│ │ │ │ -
126 };
│ │ │ │ -
│ │ │ │ -
127
│ │ │ │ -
128 template< class B >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
130 : public MonomialEvaluator< B >
│ │ │ │ -
131 {
│ │ │ │ -
132 typedef B Basis;
│ │ │ │ -
133 typedef typename Basis::Field Field;
│ │ │ │ -
134 typedef typename Basis::DomainVector DomainVector;
│ │ │ │ -
135 typedef std::vector<Field> Container;
│ │ │ │ -
136 static const int dimension = Basis::dimension;
│ │ │ │ -
137 static const int dimRange = Basis::dimRange;
│ │ │ │ - │ │ │ │ -
139
│ │ │ │ -
140 template <unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
141 struct Iterator : public Base::template Iterator<deriv>
│ │ │ │ -
142 {};
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
145 : Base(basis,basis.order(),basis.size())
│ │ │ │ -
146 {}
│ │ │ │ -
│ │ │ │ -
147 template <unsigned int deriv,class DVector>
│ │ │ │ -
│ │ │ │ -
148 typename Iterator<deriv>::All evaluate(const DVector &x)
│ │ │ │ -
149 {
│ │ │ │ -
150 Base::template resize<deriv>();
│ │ │ │ -
151 basis_.template evaluate<deriv>(x,&(container_[0]));
│ │ │ │ -
152 return typename Iterator<deriv>::All(container_);
│ │ │ │ -
153 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
155 {
│ │ │ │ -
156 Base::template resize<0>();
│ │ │ │ -
157 basis_.integrate(&(container_[0]));
│ │ │ │ -
158 return typename Iterator<0>::Integrate(container_);
│ │ │ │ -
159 }
│ │ │ │ -
│ │ │ │ -
160
│ │ │ │ -
161 protected:
│ │ │ │ -
│ │ │ │ -
162 StandardEvaluator ( const Basis &basis, unsigned int size )
│ │ │ │ -
163 : Base( basis, basis.order(), size )
│ │ │ │ -
164 {}
│ │ │ │ -
│ │ │ │ -
165
│ │ │ │ -
166 private:
│ │ │ │ - │ │ │ │ -
168 using Base::basis_;
│ │ │ │ -
169 using Base::container_;
│ │ │ │ -
170 };
│ │ │ │ -
│ │ │ │ -
171
│ │ │ │ -
172}
│ │ │ │ -
173
│ │ │ │ -
174#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
33 R, 1, FieldVector< R, 1 >,
│ │ │ │ +
34 FieldMatrix< R, 1, d > > Traits;
│ │ │ │ +
35
│ │ │ │ +
36 public:
│ │ │ │ +
37 template< class F, class C >
│ │ │ │ +
│ │ │ │ +
38 void interpolate ( const F &f, std::vector< C > &out ) const
│ │ │ │ +
39 {
│ │ │ │ +
40 typedef typename Traits::DomainType DomainType;
│ │ │ │ +
41
│ │ │ │ +
42 // get cubic reference element
│ │ │ │ +
43 auto referenceElement = ReferenceElements< D, d >::cube();
│ │ │ │ +
44
│ │ │ │ +
45 const int size = 2*d;
│ │ │ │ +
46 assert( size == referenceElement.size( 1 ) );
│ │ │ │ +
47
│ │ │ │ +
48 // resize vector
│ │ │ │ +
49 out.resize( size );
│ │ │ │ +
50
│ │ │ │ +
51 // evaluate local function in barycenter of codim 1 subentities
│ │ │ │ +
52 for( int i = 0; i < size; ++i )
│ │ │ │ +
53 {
│ │ │ │ +
54 const DomainType &x = referenceElement.position( i, 1 );
│ │ │ │ +
55 out[ i ] = f(x);
│ │ │ │ +
56 }
│ │ │ │ +
57 }
│ │ │ │ +
│ │ │ │ +
58
│ │ │ │ +
59 };
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
61} // namespace Dune
│ │ │ │ +
62
│ │ │ │ +
63#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ -
DerivativeLayout
Definition tensor.hh:176
│ │ │ │ -
Definition basisevaluator.hh:31
│ │ │ │ -
static const int dimRange
Definition basisevaluator.hh:36
│ │ │ │ -
B Basis
Definition basisevaluator.hh:32
│ │ │ │ -
unsigned int order_
Definition basisevaluator.hh:70
│ │ │ │ -
const Basis & basis_
Definition basisevaluator.hh:69
│ │ │ │ -
MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size)
Definition basisevaluator.hh:56
│ │ │ │ -
Basis::Field Field
Definition basisevaluator.hh:33
│ │ │ │ -
unsigned int size_
Definition basisevaluator.hh:70
│ │ │ │ -
Basis::DomainVector DomainVector
Definition basisevaluator.hh:34
│ │ │ │ -
void resize()
Definition basisevaluator.hh:63
│ │ │ │ -
Container container_
Definition basisevaluator.hh:71
│ │ │ │ -
unsigned int size() const
Definition basisevaluator.hh:50
│ │ │ │ -
std::vector< Field > Container
Definition basisevaluator.hh:38
│ │ │ │ -
MonomialEvaluator(const MonomialEvaluator &)
│ │ │ │ -
static const int dimension
Definition basisevaluator.hh:35
│ │ │ │ -
Definition basisevaluator.hh:78
│ │ │ │ -
BaseIterator(Container &container)
Definition basisevaluator.hh:90
│ │ │ │ -
const Deriv & operator*() const
Definition basisevaluator.hh:95
│ │ │ │ -
Dune::FieldVector< Field, blockSize > Block
Definition basisevaluator.hh:82
│ │ │ │ -
bool done() const
Definition basisevaluator.hh:106
│ │ │ │ -
Container::iterator CIter
Definition basisevaluator.hh:88
│ │ │ │ -
const Deriv * operator->() const
Definition basisevaluator.hh:101
│ │ │ │ -
Deriv Derivatives
Definition basisevaluator.hh:79
│ │ │ │ -
std::vector< Field > Container
Definition basisevaluator.hh:87
│ │ │ │ -
Deriv::Field Field
Definition basisevaluator.hh:80
│ │ │ │ -
Definition basisevaluator.hh:45
│ │ │ │ -
BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > > Integrate
Definition basisevaluator.hh:47
│ │ │ │ -
BaseIterator< Derivatives< Field, dimension, dimRange, deriv, DerivativeLayoutNS::derivative > > All
Definition basisevaluator.hh:46
│ │ │ │ -
Definition basisevaluator.hh:131
│ │ │ │ -
Basis::Field Field
Definition basisevaluator.hh:133
│ │ │ │ -
Basis::DomainVector DomainVector
Definition basisevaluator.hh:134
│ │ │ │ -
Iterator< deriv >::All evaluate(const DVector &x)
Definition basisevaluator.hh:148
│ │ │ │ -
MonomialEvaluator< B > Base
Definition basisevaluator.hh:138
│ │ │ │ -
StandardEvaluator(const Basis &basis)
Definition basisevaluator.hh:144
│ │ │ │ -
static const int dimRange
Definition basisevaluator.hh:137
│ │ │ │ -
std::vector< Field > Container
Definition basisevaluator.hh:135
│ │ │ │ -
Iterator< 0 >::Integrate integrate()
Definition basisevaluator.hh:154
│ │ │ │ -
B Basis
Definition basisevaluator.hh:132
│ │ │ │ -
StandardEvaluator(const Basis &basis, unsigned int size)
Definition basisevaluator.hh:162
│ │ │ │ -
static const int dimension
Definition basisevaluator.hh:136
│ │ │ │ -
Definition basisevaluator.hh:142
│ │ │ │ -
Definition tensor.hh:180
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
please doc me
Definition rannachertureklocalinterpolation.hh:31
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition rannachertureklocalinterpolation.hh:38
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,323 +1,82 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -basisevaluator.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ +rannachertureklocalinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_BASISEVALUATOR_HH │ │ │ │ │ -6#define DUNE_BASISEVALUATOR_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10 │ │ │ │ │ 11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e │ │ │ │ │ +18{ │ │ │ │ │ 19 │ │ │ │ │ -20namespace _D_u_n_e │ │ │ │ │ -21{ │ │ │ │ │ -22 /******************************************* │ │ │ │ │ -23 * Should be removed as soon as the Tensor │ │ │ │ │ -24 * classes have been revisited. See remarks │ │ │ │ │ -25 * in tensor.hh (also hold true here). │ │ │ │ │ -26 *******************************************/ │ │ │ │ │ -27 │ │ │ │ │ -28 │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 struct _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ +29 template< class D, class R, unsigned int d > │ │ │ │ │ +_3_0 class _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ 31 { │ │ │ │ │ -_3_2 typedef B _B_a_s_i_s; │ │ │ │ │ -_3_3 typedef typename Basis::Field _F_i_e_l_d; │ │ │ │ │ -_3_4 typedef typename Basis::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -_3_5 static const int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ -_3_6 static const int _d_i_m_R_a_n_g_e = Basis::dimRange; │ │ │ │ │ -37 │ │ │ │ │ -_3_8 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ -39 │ │ │ │ │ -40 template< class Deriv > │ │ │ │ │ -41 struct _B_a_s_e_I_t_e_r_a_t_o_r; │ │ │ │ │ -42 │ │ │ │ │ -43 template │ │ │ │ │ -_4_4 struct _I_t_e_r_a_t_o_r │ │ │ │ │ -45 { │ │ │ │ │ -_4_6 typedef │ │ │ │ │ -_B_a_s_e_I_t_e_r_a_t_o_r_<_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_d_i_m_R_a_n_g_e_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> > _A_l_l; │ │ │ │ │ -_4_7 typedef _B_a_s_e_I_t_e_r_a_t_o_r_<_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_> > _I_n_t_e_g_r_a_t_e; │ │ │ │ │ -48 }; │ │ │ │ │ -49 │ │ │ │ │ -_5_0 unsigned int _s_i_z_e() const │ │ │ │ │ -51 { │ │ │ │ │ -52 return _s_i_z_e__; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -55 protected: │ │ │ │ │ -_5_6 _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r(const _B_a_s_i_s &basis,unsigned int order,unsigned int _s_i_z_e) │ │ │ │ │ -57 : _b_a_s_i_s__(basis), │ │ │ │ │ -58 _o_r_d_e_r__(order), │ │ │ │ │ -59 _s_i_z_e__(_s_i_z_e), │ │ │ │ │ -60 _c_o_n_t_a_i_n_e_r__(0) │ │ │ │ │ -61 {} │ │ │ │ │ -62 template │ │ │ │ │ -_6_3 void _r_e_s_i_z_e() │ │ │ │ │ -64 { │ │ │ │ │ -65 const int totalSize = │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_d_i_m_R_a_n_g_e_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_>_:_: │ │ │ │ │ -_s_i_z_e*_s_i_z_e__; │ │ │ │ │ -66 _c_o_n_t_a_i_n_e_r__.resize(totalSize); │ │ │ │ │ -67 } │ │ │ │ │ -_6_8 _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r(const _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r&); │ │ │ │ │ -_6_9 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ -_7_0 unsigned int _o_r_d_e_r__,_s_i_z_e__; │ │ │ │ │ -_7_1 _C_o_n_t_a_i_n_e_r _c_o_n_t_a_i_n_e_r__; │ │ │ │ │ -72 }; │ │ │ │ │ -73 │ │ │ │ │ -74 │ │ │ │ │ -75 template< class B > │ │ │ │ │ -76 template< class Deriv > │ │ │ │ │ -_7_7 struct _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r< B >::_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ -78 { │ │ │ │ │ -_7_9 typedef Deriv _D_e_r_i_v_a_t_i_v_e_s; │ │ │ │ │ -_8_0 typedef typename Deriv::Field _F_i_e_l_d; │ │ │ │ │ -_8_1 static const unsigned int blockSize = Deriv::size; │ │ │ │ │ -_8_2 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ -_8_3 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = Deriv::layout; │ │ │ │ │ -_8_4 static const unsigned int dimDomain = Deriv::dimDomain; │ │ │ │ │ -_8_5 static const unsigned int _d_i_m_R_a_n_g_e = Deriv::dimRange; │ │ │ │ │ -86 │ │ │ │ │ -_8_7 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ -_8_8 typedef typename Container::iterator _C_I_t_e_r; │ │ │ │ │ -89 │ │ │ │ │ -_9_0 explicit _B_a_s_e_I_t_e_r_a_t_o_r ( _C_o_n_t_a_i_n_e_r &container ) │ │ │ │ │ -91 : pos_( container.begin() ), │ │ │ │ │ -92 end_( container.end() ) │ │ │ │ │ -93 {} │ │ │ │ │ -94 │ │ │ │ │ -_9_5 const Deriv &_o_p_e_r_a_t_o_r_*() const │ │ │ │ │ -96 { │ │ │ │ │ -97 assert(!done()); │ │ │ │ │ -98 return reinterpret_cast(*pos_); │ │ │ │ │ -99 } │ │ │ │ │ -100 │ │ │ │ │ -_1_0_1 const Deriv *_o_p_e_r_a_t_o_r_-_>() const │ │ │ │ │ -102 { │ │ │ │ │ -103 return &(_o_p_e_r_a_t_o_r_*()); │ │ │ │ │ -104 } │ │ │ │ │ -105 │ │ │ │ │ -_1_0_6 bool _d_o_n_e () const │ │ │ │ │ -107 { │ │ │ │ │ -108 return pos_ == end_; │ │ │ │ │ -109 } │ │ │ │ │ -110 │ │ │ │ │ -_1_1_1 _B_a_s_e_I_t_e_r_a_t_o_r &operator++ () │ │ │ │ │ -112 { │ │ │ │ │ -113 pos_ += blockSize; │ │ │ │ │ -114 return *this; │ │ │ │ │ -115 } │ │ │ │ │ -116 │ │ │ │ │ -_1_1_7 _B_a_s_e_I_t_e_r_a_t_o_r &operator+= ( unsigned int skip ) │ │ │ │ │ -118 { │ │ │ │ │ -119 pos_ += skip*blockSize; │ │ │ │ │ -120 return *this; │ │ │ │ │ -121 } │ │ │ │ │ -122 │ │ │ │ │ -123 private: │ │ │ │ │ -124 CIter pos_; │ │ │ │ │ -125 const CIter end_; │ │ │ │ │ -126 }; │ │ │ │ │ -127 │ │ │ │ │ -128 template< class B > │ │ │ │ │ -_1_2_9 struct _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -130 : public _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r< B > │ │ │ │ │ -131 { │ │ │ │ │ -_1_3_2 typedef B _B_a_s_i_s; │ │ │ │ │ -_1_3_3 typedef typename Basis::Field _F_i_e_l_d; │ │ │ │ │ -_1_3_4 typedef typename Basis::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -_1_3_5 typedef std::vector _C_o_n_t_a_i_n_e_r; │ │ │ │ │ -_1_3_6 static const int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ -_1_3_7 static const int _d_i_m_R_a_n_g_e = Basis::dimRange; │ │ │ │ │ -_1_3_8 typedef _M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_<_B_> _B_a_s_e; │ │ │ │ │ -139 │ │ │ │ │ -140 template │ │ │ │ │ -_1_4_1 struct _I_t_e_r_a_t_o_r : public Base::template _I_t_e_r_a_t_o_r │ │ │ │ │ -142 {}; │ │ │ │ │ -143 │ │ │ │ │ -_1_4_4 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r(const _B_a_s_i_s &basis) │ │ │ │ │ -145 : _B_a_s_e(basis,basis.order(),basis._s_i_z_e()) │ │ │ │ │ -146 {} │ │ │ │ │ -147 template │ │ │ │ │ -_1_4_8 typename _I_t_e_r_a_t_o_r_<_d_e_r_i_v_>_:_:_A_l_l _e_v_a_l_u_a_t_e(const DVector &x) │ │ │ │ │ -149 { │ │ │ │ │ -150 Base::template resize(); │ │ │ │ │ -151 basis_.template evaluate(x,&(container_[0])); │ │ │ │ │ -152 return typename _I_t_e_r_a_t_o_r_<_d_e_r_i_v_>_:_:_A_l_l(container_); │ │ │ │ │ -153 } │ │ │ │ │ -_1_5_4 typename _I_t_e_r_a_t_o_r_<_0_>_:_:_I_n_t_e_g_r_a_t_e _i_n_t_e_g_r_a_t_e() │ │ │ │ │ -155 { │ │ │ │ │ -156 Base::template resize<0>(); │ │ │ │ │ -157 basis_.integrate(&(container_[0])); │ │ │ │ │ -158 return typename _I_t_e_r_a_t_o_r_<_0_>_:_:_I_n_t_e_g_r_a_t_e(container_); │ │ │ │ │ -159 } │ │ │ │ │ -160 │ │ │ │ │ -161 protected: │ │ │ │ │ -_1_6_2 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r ( const _B_a_s_i_s &basis, unsigned int _s_i_z_e ) │ │ │ │ │ -163 : _B_a_s_e( basis, basis.order(), _s_i_z_e ) │ │ │ │ │ -164 {} │ │ │ │ │ -165 │ │ │ │ │ -166 private: │ │ │ │ │ -167 _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r(const _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r&); │ │ │ │ │ -168 using _B_a_s_e_:_:_b_a_s_i_s__; │ │ │ │ │ -169 using _B_a_s_e_:_:_c_o_n_t_a_i_n_e_r__; │ │ │ │ │ -170 }; │ │ │ │ │ -171 │ │ │ │ │ -172} │ │ │ │ │ -173 │ │ │ │ │ -174#endif │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ -_t_e_n_s_o_r_._h_h │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +32 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _d_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _d_ _>, │ │ │ │ │ +33 R, 1, FieldVector< R, 1 >, │ │ │ │ │ +34 FieldMatrix< R, 1, d > > _T_r_a_i_t_s; │ │ │ │ │ +35 │ │ │ │ │ +36 public: │ │ │ │ │ +37 template< class F, class C > │ │ │ │ │ +_3_8 void _i_n_t_e_r_p_o_l_a_t_e ( const F &f, std::vector< C > &out ) const │ │ │ │ │ +39 { │ │ │ │ │ +40 typedef typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e DomainType; │ │ │ │ │ +41 │ │ │ │ │ +42 // get cubic reference element │ │ │ │ │ +43 auto referenceElement = ReferenceElements< D, d >::cube(); │ │ │ │ │ +44 │ │ │ │ │ +45 const int size = 2*d; │ │ │ │ │ +46 assert( size == referenceElement.size( 1 ) ); │ │ │ │ │ +47 │ │ │ │ │ +48 // resize vector │ │ │ │ │ +49 out.resize( size ); │ │ │ │ │ +50 │ │ │ │ │ +51 // evaluate local function in barycenter of codim 1 subentities │ │ │ │ │ +52 for( int i = 0; i < size; ++i ) │ │ │ │ │ +53 { │ │ │ │ │ +54 const DomainType &x = referenceElement.position( i, 1 ); │ │ │ │ │ +55 out[ i ] = f(x); │ │ │ │ │ +56 } │ │ │ │ │ +57 } │ │ │ │ │ +58 │ │ │ │ │ +59 }; │ │ │ │ │ +60 │ │ │ │ │ +61} // namespace Dune │ │ │ │ │ +62 │ │ │ │ │ +63#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALINTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ -Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t │ │ │ │ │ -DerivativeLayout │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const int dimRange │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_i_s │ │ │ │ │ -B Basis │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_o_r_d_e_r__ │ │ │ │ │ -unsigned int order_ │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_b_a_s_i_s__ │ │ │ │ │ -const Basis & basis_ │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ -MonomialEvaluator(const Basis &basis, unsigned int order, unsigned int size) │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ -Basis::Field Field │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_s_i_z_e__ │ │ │ │ │ -unsigned int size_ │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -Basis::DomainVector DomainVector │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_r_e_s_i_z_e │ │ │ │ │ -void resize() │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_c_o_n_t_a_i_n_e_r__ │ │ │ │ │ -Container container_ │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ -std::vector< Field > Container │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r │ │ │ │ │ -MonomialEvaluator(const MonomialEvaluator &) │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r │ │ │ │ │ -BaseIterator(Container &container) │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ -const Deriv & operator*() const │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< Field, blockSize > Block │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:82 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_d_o_n_e │ │ │ │ │ -bool done() const │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:106 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_C_I_t_e_r │ │ │ │ │ -Container::iterator CIter │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_o_p_e_r_a_t_o_r_-_> │ │ │ │ │ -const Deriv * operator->() const │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:101 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -Deriv Derivatives │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ -std::vector< Field > Container │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e_I_t_e_r_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ -Deriv::Field Field │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r_:_:_I_n_t_e_g_r_a_t_e │ │ │ │ │ -BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > │ │ │ │ │ -> Integrate │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r_:_:_A_l_l │ │ │ │ │ -BaseIterator< Derivatives< Field, dimension, dimRange, deriv, │ │ │ │ │ -DerivativeLayoutNS::derivative > > All │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_F_i_e_l_d │ │ │ │ │ -Basis::Field Field │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:133 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -Basis::DomainVector DomainVector │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:134 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -Iterator< deriv >::All evaluate(const DVector &x) │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:148 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_B_a_s_e │ │ │ │ │ -MonomialEvaluator< B > Base │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:138 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -StandardEvaluator(const Basis &basis) │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:144 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const int dimRange │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:137 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_C_o_n_t_a_i_n_e_r │ │ │ │ │ -std::vector< Field > Container │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -Iterator< 0 >::Integrate integrate() │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:154 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_B_a_s_i_s │ │ │ │ │ -B Basis │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:132 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -StandardEvaluator(const Basis &basis, unsigned int size) │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:162 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:136 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_:_:_I_t_e_r_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:142 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +please doc me │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:38 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dglocalcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek2dlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
dglocalcoefficients.hh File Reference
│ │ │ │ +
rannacherturek2dlocalbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ +
#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::DGLocalCoefficients
 A class providing local coefficients for dg spaces. More...
 
struct  Dune::DGLocalCoefficientsFactory< BasisFactory >
 A factory class for the dg local coefficients. More...
struct  Dune::RannacherTurek2DLocalBasis< D, R >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -dglocalcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +rannacherturek2dlocalbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  A class providing local coefficients for dg spaces. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_ _B_a_s_i_s_F_a_c_t_o_r_y_ _> │ │ │ │ │ -  A factory class for the dg local coefficients. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00494_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: dglocalcoefficients.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek2dlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,117 +70,159 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
dglocalcoefficients.hh
│ │ │ │ +
rannacherturek2dlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ +
8#include <numeric>
│ │ │ │
9#include <vector>
│ │ │ │
10
│ │ │ │ - │ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ +
11#include <dune/common/fvector.hh>
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │
15
│ │ │ │ -
16 // DGLocalCoefficients
│ │ │ │ -
17 // -------------------
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │
18
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ - │ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
│ │ │ │ -
28 DGLocalCoefficients ( const unsigned int n )
│ │ │ │ -
29 : localKey_( n )
│ │ │ │ -
30 {
│ │ │ │ -
31 for( unsigned i = 0; i < n; ++i )
│ │ │ │ -
32 localKey_[ i ] = LocalKey( 0, 0, i );
│ │ │ │ +
22 template< class D, class R >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ + │ │ │ │ +
26 R, 1, FieldVector< R, 1 >,
│ │ │ │ +
27 FieldMatrix< R, 1, 2 > > Traits;
│ │ │ │ +
28
│ │ │ │ +
│ │ │ │ +
30 unsigned int size () const
│ │ │ │ +
31 {
│ │ │ │ +
32 return 4;
│ │ │ │
33 }
│ │ │ │
│ │ │ │
34
│ │ │ │ -
│ │ │ │ -
35 const LocalKey &localKey ( const unsigned int i ) const
│ │ │ │ -
36 {
│ │ │ │ -
37 assert( i < size() );
│ │ │ │ -
38 return localKey_[ i ];
│ │ │ │ -
39 }
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ -
41 unsigned int size () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return localKey_.size();
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
46 private:
│ │ │ │ -
47 std::vector< LocalKey > localKey_;
│ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
50
│ │ │ │ -
51
│ │ │ │ -
52 // DGLocalCoefficientsFactory
│ │ │ │ -
53 // --------------------------
│ │ │ │ -
57 template< class BasisFactory >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
59 {
│ │ │ │ -
60 static const unsigned int dimension = BasisFactory::dimension;
│ │ │ │ -
61 typedef typename BasisFactory::Key Key;
│ │ │ │ - │ │ │ │ -
63
│ │ │ │ -
64 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
65 static Object *create ( const Key &key )
│ │ │ │ +
│ │ │ │ +
36 inline void evaluateFunction ( const typename Traits::DomainType &in,
│ │ │ │ +
37 std::vector< typename Traits::RangeType > &out ) const
│ │ │ │ +
38 {
│ │ │ │ +
39 out.resize(4);
│ │ │ │ +
40 typename Traits::DomainFieldType qbase = in[0]*in[0]-in[1]*in[1];
│ │ │ │ +
41 out[0] = .75 - 2*in[0] + in[1] + qbase;
│ │ │ │ +
42 out[1] = -.25 + in[1] + qbase;
│ │ │ │ +
43 out[2] = .75 + in[0] - 2*in[1] - qbase;
│ │ │ │ +
44 out[3] = -.25 + in[0] - qbase;
│ │ │ │ +
45 }
│ │ │ │ +
│ │ │ │ +
46
│ │ │ │ +
│ │ │ │ +
48 inline void evaluateJacobian ( const typename Traits::DomainType &in,
│ │ │ │ +
49 std::vector< typename Traits::JacobianType > &out ) const
│ │ │ │ +
50 {
│ │ │ │ +
51 out.resize(4);
│ │ │ │ +
52
│ │ │ │ +
53 // see http://www.dune-project.org/doc/doxygen/html/classDune_1_1C1LocalBasisInterface.html#d6f8368f8aa43439cc7ef10419f6e2ea
│ │ │ │ +
54 // out[i][j][k] = d_k \phi^i_j , where \phi^i_j is the j'th component of the i'th shape function.
│ │ │ │ +
55
│ │ │ │ +
56 out[0][0][0] = -2 + 2*in[0]; out[0][0][1] = 1 - 2*in[1];
│ │ │ │ +
57 out[1][0][0] = 2*in[0]; out[1][0][1] = 1 - 2*in[1];
│ │ │ │ +
58 out[2][0][0] = 1 - 2*in[0]; out[2][0][1] = -2 + 2*in[1];
│ │ │ │ +
59 out[3][0][0] = 1 - 2*in[0]; out[3][0][1] = 2*in[1];
│ │ │ │ +
60 }
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
63 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
64 const typename Traits::DomainType& in, // position
│ │ │ │ +
65 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │
66 {
│ │ │ │ -
67 const typename BasisFactory::Object *basis
│ │ │ │ -
68 = BasisFactory::template create< geometryId >( key );
│ │ │ │ -
69 Object *coefficients = new Object( basis->size() );
│ │ │ │ -
70 BasisFactory::release( basis );
│ │ │ │ -
71 return coefficients;
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73 static void release( Object *object ) { delete object; }
│ │ │ │ -
74 };
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
76}
│ │ │ │ -
77
│ │ │ │ -
78#endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
67 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
68 if (totalOrder == 0) {
│ │ │ │ +
69 evaluateFunction(in, out);
│ │ │ │ +
70 } else if (totalOrder == 1) {
│ │ │ │ +
71 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
72 out.resize(size());
│ │ │ │ +
73
│ │ │ │ +
74 switch (direction) {
│ │ │ │ +
75 case 0:
│ │ │ │ +
76 out[0] = -2 + 2*in[0];
│ │ │ │ +
77 out[1] = 2*in[0];
│ │ │ │ +
78 out[2] = 1 - 2*in[0];
│ │ │ │ +
79 out[3] = 1 - 2*in[0];
│ │ │ │ +
80 break;
│ │ │ │ +
81 case 1:
│ │ │ │ +
82 out[0] = 1 - 2*in[1];
│ │ │ │ +
83 out[1] = 1 - 2*in[1];
│ │ │ │ +
84 out[2] = -2 + 2*in[1];
│ │ │ │ +
85 out[3] = 2*in[1];
│ │ │ │ +
86 break;
│ │ │ │ +
87 default:
│ │ │ │ +
88 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
89 }
│ │ │ │ +
90 } else if (totalOrder == 2) {
│ │ │ │ +
91 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 2));
│ │ │ │ +
92 out.resize(size());
│ │ │ │ +
93
│ │ │ │ +
94 switch (direction) {
│ │ │ │ +
95 case 0:
│ │ │ │ +
96 out[0] = out[1] = 2;
│ │ │ │ +
97 out[2] = out[3] =-2;
│ │ │ │ +
98 break;
│ │ │ │ +
99 case 1:
│ │ │ │ +
100 out[0] = out[1] =-2;
│ │ │ │ +
101 out[2] = out[3] = 2;
│ │ │ │ +
102 break;
│ │ │ │ +
103 default:
│ │ │ │ +
104 out[0] = out[1] = out[2] = out[3] = 0;
│ │ │ │ +
105 break;
│ │ │ │ +
106 }
│ │ │ │ +
107 } else {
│ │ │ │ +
108 out[0] = out[1] = out[2] = out[3] = 0;
│ │ │ │ +
109 }
│ │ │ │ +
110 }
│ │ │ │ +
│ │ │ │ +
111
│ │ │ │ +
│ │ │ │ +
113 unsigned int order () const
│ │ │ │ +
114 {
│ │ │ │ +
115 // must be 2 here since it contains x^2 and x^2
│ │ │ │ +
116 return 2;
│ │ │ │ +
117 }
│ │ │ │ +
│ │ │ │ +
118 };
│ │ │ │ +
│ │ │ │ +
119
│ │ │ │ +
120} //namespace Dune
│ │ │ │ +
121
│ │ │ │ +
122#endif // #ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
A class providing local coefficients for dg spaces.
Definition dglocalcoefficients.hh:23
│ │ │ │ -
unsigned int size() const
Definition dglocalcoefficients.hh:41
│ │ │ │ -
const LocalKey & localKey(const unsigned int i) const
Definition dglocalcoefficients.hh:35
│ │ │ │ -
DGLocalCoefficients(const unsigned int n)
construct local keys for n basis functions
Definition dglocalcoefficients.hh:28
│ │ │ │ -
A factory class for the dg local coefficients.
Definition dglocalcoefficients.hh:59
│ │ │ │ -
static void release(Object *object)
Definition dglocalcoefficients.hh:73
│ │ │ │ -
const DGLocalCoefficients Object
Definition dglocalcoefficients.hh:62
│ │ │ │ -
static Object * create(const Key &key)
Definition dglocalcoefficients.hh:65
│ │ │ │ -
BasisFactory::Key Key
Definition dglocalcoefficients.hh:61
│ │ │ │ -
static const unsigned int dimension
Definition dglocalcoefficients.hh:60
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ +
Definition rannacherturek2dlocalbasis.hh:24
│ │ │ │ +
LocalBasisTraits< D, 2, FieldVector< D, 2 >, R, 1, FieldVector< R, 1 >, FieldMatrix< R, 1, 2 > > Traits
Definition rannacherturek2dlocalbasis.hh:27
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition rannacherturek2dlocalbasis.hh:63
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition rannacherturek2dlocalbasis.hh:30
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
evaluate all shape functions
Definition rannacherturek2dlocalbasis.hh:36
│ │ │ │ +
unsigned int order() const
polynomial order of the shape functions
Definition rannacherturek2dlocalbasis.hh:113
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
evaluate jacobian of all shape functions
Definition rannacherturek2dlocalbasis.hh:48
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,120 +1,174 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -dglocalcoefficients.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k_2_d │ │ │ │ │ +rannacherturek2dlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9#include │ │ │ │ │ 10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 15 │ │ │ │ │ -16 // DGLocalCoefficients │ │ │ │ │ -17 // ------------------- │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ 18 │ │ │ │ │ -_2_2 class _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -23 { │ │ │ │ │ -24 typedef _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s _T_h_i_s; │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -_2_8 _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s ( const unsigned int n ) │ │ │ │ │ -29 : localKey_( n ) │ │ │ │ │ -30 { │ │ │ │ │ -31 for( unsigned i = 0; i < n; ++i ) │ │ │ │ │ -32 localKey_[ i ] = _L_o_c_a_l_K_e_y( 0, 0, i ); │ │ │ │ │ +22 template< class D, class R > │ │ │ │ │ +_2_3 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +24 { │ │ │ │ │ +25 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_,_ _2_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _D_,_ _2_ _>, │ │ │ │ │ +26 R, 1, FieldVector< R, 1 >, │ │ │ │ │ +_2_7 FieldMatrix< R, 1, 2 > > _T_r_a_i_t_s; │ │ │ │ │ +28 │ │ │ │ │ +_3_0 unsigned int _s_i_z_e () const │ │ │ │ │ +31 { │ │ │ │ │ +32 return 4; │ │ │ │ │ 33 } │ │ │ │ │ 34 │ │ │ │ │ -_3_5 const _L_o_c_a_l_K_e_y &_l_o_c_a_l_K_e_y ( const unsigned int i ) const │ │ │ │ │ -36 { │ │ │ │ │ -37 assert( i < _s_i_z_e() ); │ │ │ │ │ -38 return localKey_[ i ]; │ │ │ │ │ -39 } │ │ │ │ │ -40 │ │ │ │ │ -_4_1 unsigned int _s_i_z_e () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return localKey_.size(); │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -46 private: │ │ │ │ │ -47 std::vector< LocalKey > localKey_; │ │ │ │ │ -48 }; │ │ │ │ │ -49 │ │ │ │ │ -50 │ │ │ │ │ -51 │ │ │ │ │ -52 // DGLocalCoefficientsFactory │ │ │ │ │ -53 // -------------------------- │ │ │ │ │ -57 template< class BasisFactory > │ │ │ │ │ -_5_8 struct _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -59 { │ │ │ │ │ -_6_0 static const unsigned int _d_i_m_e_n_s_i_o_n = BasisFactory::dimension; │ │ │ │ │ -_6_1 typedef typename BasisFactory::Key _K_e_y; │ │ │ │ │ -_6_2 typedef const _D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s _O_b_j_e_c_t; │ │ │ │ │ -63 │ │ │ │ │ -64 template< GeometryType::Id geometryId > │ │ │ │ │ -_6_5 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ +_3_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ +37 std::vector< typename Traits::RangeType > &out ) const │ │ │ │ │ +38 { │ │ │ │ │ +39 out.resize(4); │ │ │ │ │ +40 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e qbase = in[0]*in[0]-in[1]*in[1]; │ │ │ │ │ +41 out[0] = .75 - 2*in[0] + in[1] + qbase; │ │ │ │ │ +42 out[1] = -.25 + in[1] + qbase; │ │ │ │ │ +43 out[2] = .75 + in[0] - 2*in[1] - qbase; │ │ │ │ │ +44 out[3] = -.25 + in[0] - qbase; │ │ │ │ │ +45 } │ │ │ │ │ +46 │ │ │ │ │ +_4_8 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n ( const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e &in, │ │ │ │ │ +49 std::vector< typename Traits::JacobianType > &out ) const │ │ │ │ │ +50 { │ │ │ │ │ +51 out.resize(4); │ │ │ │ │ +52 │ │ │ │ │ +53 // see http://www.dune-project.org/doc/doxygen/html/ │ │ │ │ │ +classDune_1_1C1LocalBasisInterface.html#d6f8368f8aa43439cc7ef10419f6e2ea │ │ │ │ │ +54 // out[i][j][k] = d_k \phi^i_j , where \phi^i_j is the j'th component of the │ │ │ │ │ +i'th shape function. │ │ │ │ │ +55 │ │ │ │ │ +56 out[0][0][0] = -2 + 2*in[0]; out[0][0][1] = 1 - 2*in[1]; │ │ │ │ │ +57 out[1][0][0] = 2*in[0]; out[1][0][1] = 1 - 2*in[1]; │ │ │ │ │ +58 out[2][0][0] = 1 - 2*in[0]; out[2][0][1] = -2 + 2*in[1]; │ │ │ │ │ +59 out[3][0][0] = 1 - 2*in[0]; out[3][0][1] = 2*in[1]; │ │ │ │ │ +60 } │ │ │ │ │ +61 │ │ │ │ │ +_6_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +64 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +65 std::vector& out) const // return value │ │ │ │ │ 66 { │ │ │ │ │ -67 const typename BasisFactory::Object *basis │ │ │ │ │ -68 = BasisFactory::template create< geometryId >( key ); │ │ │ │ │ -69 _O_b_j_e_c_t *coefficients = new _O_b_j_e_c_t( basis->size() ); │ │ │ │ │ -70 BasisFactory::release( basis ); │ │ │ │ │ -71 return coefficients; │ │ │ │ │ -72 } │ │ │ │ │ -_7_3 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -74 }; │ │ │ │ │ -75 │ │ │ │ │ -76} │ │ │ │ │ -77 │ │ │ │ │ -78#endif // #ifndef DUNE_DGLOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +67 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +68 if (totalOrder == 0) { │ │ │ │ │ +69 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +70 } else if (totalOrder == 1) { │ │ │ │ │ +71 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +72 out.resize(_s_i_z_e()); │ │ │ │ │ +73 │ │ │ │ │ +74 switch (direction) { │ │ │ │ │ +75 case 0: │ │ │ │ │ +76 out[0] = -2 + 2*in[0]; │ │ │ │ │ +77 out[1] = 2*in[0]; │ │ │ │ │ +78 out[2] = 1 - 2*in[0]; │ │ │ │ │ +79 out[3] = 1 - 2*in[0]; │ │ │ │ │ +80 break; │ │ │ │ │ +81 case 1: │ │ │ │ │ +82 out[0] = 1 - 2*in[1]; │ │ │ │ │ +83 out[1] = 1 - 2*in[1]; │ │ │ │ │ +84 out[2] = -2 + 2*in[1]; │ │ │ │ │ +85 out[3] = 2*in[1]; │ │ │ │ │ +86 break; │ │ │ │ │ +87 default: │ │ │ │ │ +88 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +89 } │ │ │ │ │ +90 } else if (totalOrder == 2) { │ │ │ │ │ +91 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 2)); │ │ │ │ │ +92 out.resize(_s_i_z_e()); │ │ │ │ │ +93 │ │ │ │ │ +94 switch (direction) { │ │ │ │ │ +95 case 0: │ │ │ │ │ +96 out[0] = out[1] = 2; │ │ │ │ │ +97 out[2] = out[3] =-2; │ │ │ │ │ +98 break; │ │ │ │ │ +99 case 1: │ │ │ │ │ +100 out[0] = out[1] =-2; │ │ │ │ │ +101 out[2] = out[3] = 2; │ │ │ │ │ +102 break; │ │ │ │ │ +103 default: │ │ │ │ │ +104 out[0] = out[1] = out[2] = out[3] = 0; │ │ │ │ │ +105 break; │ │ │ │ │ +106 } │ │ │ │ │ +107 } else { │ │ │ │ │ +108 out[0] = out[1] = out[2] = out[3] = 0; │ │ │ │ │ +109 } │ │ │ │ │ +110 } │ │ │ │ │ +111 │ │ │ │ │ +_1_1_3 unsigned int _o_r_d_e_r () const │ │ │ │ │ +114 { │ │ │ │ │ +115 // must be 2 here since it contains x^2 and x^2 │ │ │ │ │ +116 return 2; │ │ │ │ │ +117 } │ │ │ │ │ +118 }; │ │ │ │ │ +119 │ │ │ │ │ +120} //namespace Dune │ │ │ │ │ +121 │ │ │ │ │ +122#endif // #ifndef DUNE_RANNACHER_TUREK_2D_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -A class providing local coefficients for dg spaces. │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ +DF DomainFieldType │ │ │ │ │ +Export type for domain field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, FieldVector< D, 2 >, R, 1, FieldVector< R, 1 >, │ │ │ │ │ +FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -DGLocalCoefficients(const unsigned int n) │ │ │ │ │ -construct local keys for n basis functions │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -A factory class for the dg local coefficients. │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:59 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const DGLocalCoefficients Object │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -BasisFactory::Key Key │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_D_G_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn dglocalcoefficients.hh:60 │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +evaluate all shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +polynomial order of the shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:113 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_2_D_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +evaluate jacobian of all shape functions │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek2dlocalbasis.hh:48 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomialbasis.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,67 +65,29 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
monomialbasis.hh File Reference
│ │ │ │ +
rannacherturek.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/geometry/topologyfactory.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ -#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ -#include <dune/localfunctions/utility/tensor.hh>
│ │ │ │ + │ │ │ │ +

Convenience header that includes all available Rannacher-Turek LocalFiniteElements. │ │ │ │ +More...

│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::MonomialBasisSize< geometryId >
 
struct  Dune::MonomialBasisHelper< mydim, dim, F >
 
class  Dune::MonomialBasisImpl< geometryId, F >
 
class  Dune::MonomialBasis< geometryId, F >
 
class  Dune::StandardMonomialBasis< dim, F >
 
class  Dune::StandardBiMonomialBasis< dim, F >
 
class  Dune::VirtualMonomialBasis< dim, F >
 
class  Dune::VirtualMonomialBasisImpl< geometryId, F >
 
struct  Dune::MonomialBasisFactory< dim, F >
 
struct  Dune::MonomialBasisFactory< dim, F >::EvaluationBasisFactory< dd, FF >
 
struct  Dune::MonomialBasisProvider< dim, SF >
 
struct  Dune::MonomialBasisProvider< dim, SF >::EvaluationBasisFactory< dd, FF >
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Convenience header that includes all available Rannacher-Turek LocalFiniteElements.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,49 +1,16 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -monomialbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ +rannacherturek.hh File Reference │ │ │ │ │ +Convenience header that includes all available Rannacher-Turek │ │ │ │ │ +LocalFiniteElements. _M_o_r_e_._._. │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_ _g_e_o_m_e_t_r_y_I_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_<_ _m_y_d_i_m_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ - class   _D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_i_m_,_ _F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_ _d_i_m_,_ _S_F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_ _d_i_m_,_ _S_F_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F │ │ │ │ │ - _> │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Convenience header that includes all available Rannacher-Turek │ │ │ │ │ +LocalFiniteElements. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00497_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: monomialbasis.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,1025 +70,27 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
monomialbasis.hh
│ │ │ │ +
rannacherturek.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_MONOMIALBASIS_HH
│ │ │ │ -
6#define DUNE_MONOMIALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10#include <dune/common/fvector.hh>
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/geometry/type.hh>
│ │ │ │ -
14#include <dune/geometry/topologyfactory.hh>
│ │ │ │ -
15
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
19
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ -
22 /************************************************
│ │ │ │ -
23 * Classes for evaluating ''Monomials'' on any order
│ │ │ │ -
24 * for all reference element type.
│ │ │ │ -
25 * For a simplex topology these are the normal
│ │ │ │ -
26 * monomials for cube topologies the bimonomials.
│ │ │ │ -
27 * The construction follows the construction of the
│ │ │ │ -
28 * generic geometries using tensor products for
│ │ │ │ -
29 * prism generation and duffy transform for pyramid
│ │ │ │ -
30 * construction.
│ │ │ │ -
31 * A derivative argument can be applied, in which case
│ │ │ │ -
32 * all derivatives up to the desired order are
│ │ │ │ -
33 * evaluated. Note that for higher order derivatives
│ │ │ │ -
34 * only the ''lower'' part of the symmetric tensor
│ │ │ │ -
35 * is evaluated, e.g., passing derivative equal to 2
│ │ │ │ -
36 * to the class will provide the vector
│ │ │ │ -
37 * (d/dxdx p, d/dxydx p, d/dydy p,
│ │ │ │ -
38 * d/dx p, d/dy p, p)
│ │ │ │ -
39 * Important:
│ │ │ │ -
40 * So far the computation of the derivatives has not
│ │ │ │ -
41 * been fully implemented for general pyramid
│ │ │ │ -
42 * construction, i.e., in the case where a pyramid is
│ │ │ │ -
43 * build over a non simplex base geometry.
│ │ │ │ -
44 *
│ │ │ │ -
45 * Central classes:
│ │ │ │ -
46 * 1) template< GeometryType::Id geometryId, class F >
│ │ │ │ -
47 * class MonomialBasisImpl;
│ │ │ │ -
48 * Implementation of the monomial evaluation for
│ │ │ │ -
49 * a given topology and field type.
│ │ │ │ -
50 * The method evaluate fills a F* vector
│ │ │ │ -
51 * 2) template< GeometryType::Id geometryId, class F >
│ │ │ │ -
52 * class MonomialBasis
│ │ │ │ -
53 * The base class for the static monomial evaluation
│ │ │ │ -
54 * providing additional evaluate methods including
│ │ │ │ -
55 * one taking std::vector<F>.
│ │ │ │ -
56 * 3) template< int dim, class F >
│ │ │ │ -
57 * class VirtualMonomialBasis
│ │ │ │ -
58 * Virtualization of the MonomialBasis.
│ │ │ │ -
59 * 4) template< int dim, class F >
│ │ │ │ -
60 * struct MonomialBasisFactory;
│ │ │ │ -
61 * A factory class for the VirtualMonomialBasis
│ │ │ │ -
62 * 5) template< int dim, class F >
│ │ │ │ -
63 * struct MonomialBasisProvider
│ │ │ │ -
64 * A singleton container for the virtual monomial
│ │ │ │ -
65 * basis
│ │ │ │ -
66 ************************************************/
│ │ │ │ -
67
│ │ │ │ -
68 // Internal Forward Declarations
│ │ │ │ -
69 // -----------------------------
│ │ │ │ -
70
│ │ │ │ -
71 template< GeometryType::Id geometryId >
│ │ │ │ -
72 class MonomialBasisSize;
│ │ │ │ -
73
│ │ │ │ -
74 template< GeometryType::Id geometryId, class F >
│ │ │ │ -
75 class MonomialBasis;
│ │ │ │ -
76
│ │ │ │ -
77
│ │ │ │ -
78
│ │ │ │ -
79 // MonomialBasisSize
│ │ │ │ -
80 // -----------------
│ │ │ │ -
81
│ │ │ │ -
82 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
84 {
│ │ │ │ - │ │ │ │ -
86
│ │ │ │ -
87 public:
│ │ │ │ -
│ │ │ │ -
88 static This &instance ()
│ │ │ │ -
89 {
│ │ │ │ -
90 static This _instance;
│ │ │ │ -
91 return _instance;
│ │ │ │ -
92 }
│ │ │ │ -
│ │ │ │ -
93
│ │ │ │ -
94 unsigned int maxOrder_;
│ │ │ │ -
95
│ │ │ │ -
96 // sizes_[ k ]: number of basis functions of exactly order k
│ │ │ │ -
97 mutable unsigned int *sizes_;
│ │ │ │ -
98
│ │ │ │ -
99 // numBaseFunctions_[ k ] = sizes_[ 0 ] + ... + sizes_[ k ]
│ │ │ │ -
100 mutable unsigned int *numBaseFunctions_;
│ │ │ │ -
101
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
103 : maxOrder_( 0 ),
│ │ │ │ -
104 sizes_( 0 ),
│ │ │ │ - │ │ │ │ -
106 {
│ │ │ │ -
107 computeSizes( 2 );
│ │ │ │ -
108 }
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
111 {
│ │ │ │ -
112 delete[] sizes_;
│ │ │ │ -
113 delete[] numBaseFunctions_;
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
115
│ │ │ │ -
│ │ │ │ -
116 unsigned int operator() ( const unsigned int order ) const
│ │ │ │ -
117 {
│ │ │ │ -
118 return numBaseFunctions_[ order ];
│ │ │ │ -
119 }
│ │ │ │ -
│ │ │ │ -
120
│ │ │ │ -
│ │ │ │ -
121 unsigned int maxOrder() const
│ │ │ │ -
122 {
│ │ │ │ -
123 return maxOrder_;
│ │ │ │ -
124 }
│ │ │ │ -
│ │ │ │ -
125
│ │ │ │ -
│ │ │ │ -
126 void computeSizes ( unsigned int order )
│ │ │ │ -
127 {
│ │ │ │ -
128 if (order <= maxOrder_)
│ │ │ │ -
129 return;
│ │ │ │ -
130
│ │ │ │ -
131 maxOrder_ = order;
│ │ │ │ -
132
│ │ │ │ -
133 delete[] sizes_;
│ │ │ │ -
134 delete[] numBaseFunctions_;
│ │ │ │ -
135 sizes_ = new unsigned int[ order+1 ];
│ │ │ │ -
136 numBaseFunctions_ = new unsigned int[ order+1 ];
│ │ │ │ -
137
│ │ │ │ -
138 constexpr GeometryType geometry = geometryId;
│ │ │ │ -
139 constexpr auto dim = geometry.dim();
│ │ │ │ -
140
│ │ │ │ -
141 sizes_[ 0 ] = 1;
│ │ │ │ -
142 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
143 sizes_[ k ] = 0;
│ │ │ │ -
144
│ │ │ │ -
145 std::fill(numBaseFunctions_, numBaseFunctions_+order+1, 1);
│ │ │ │ -
146
│ │ │ │ -
147 for( int codim=dim-1; codim>=0; codim--)
│ │ │ │ -
148 {
│ │ │ │ -
149 if (Impl::isPrism(geometry.id(),dim,codim))
│ │ │ │ -
150 {
│ │ │ │ -
151 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
152 {
│ │ │ │ -
153 sizes_[ k ] = numBaseFunctions_[ k ] + k*sizes_[ k ];
│ │ │ │ -
154 numBaseFunctions_[ k ] = numBaseFunctions_[ k-1 ] + sizes_[ k ];
│ │ │ │ -
155 }
│ │ │ │ -
156 }
│ │ │ │ -
157 else
│ │ │ │ -
158 {
│ │ │ │ -
159 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
160 {
│ │ │ │ -
161 sizes_[ k ] = numBaseFunctions_[ k ];
│ │ │ │ -
162 numBaseFunctions_[ k ] = numBaseFunctions_[ k-1 ] + sizes_[ k ];
│ │ │ │ -
163 }
│ │ │ │ -
164 }
│ │ │ │ -
165 }
│ │ │ │ -
166 }
│ │ │ │ -
│ │ │ │ -
167 };
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
169
│ │ │ │ -
170
│ │ │ │ -
171 // MonomialBasisHelper
│ │ │ │ -
172 // -------------------
│ │ │ │ -
173
│ │ │ │ -
174
│ │ │ │ -
175 template< int mydim, int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
177 {
│ │ │ │ -
178 typedef MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize;
│ │ │ │ -
179 typedef MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size;
│ │ │ │ -
180
│ │ │ │ -
│ │ │ │ -
181 static void copy ( const unsigned int deriv, F *&wit, F *&rit,
│ │ │ │ -
182 const unsigned int numBaseFunctions, const F &z )
│ │ │ │ -
183 {
│ │ │ │ -
184 // n(d,k) = size<k>[d];
│ │ │ │ -
185 MySize &mySize = MySize::instance();
│ │ │ │ -
186 Size &size = Size::instance();
│ │ │ │ -
187
│ │ │ │ -
188 const F *const rend = rit + size( deriv )*numBaseFunctions;
│ │ │ │ -
189 for( ; rit != rend; )
│ │ │ │ -
190 {
│ │ │ │ -
191 F *prit = rit;
│ │ │ │ -
192
│ │ │ │ -
193 *wit = z * *rit;
│ │ │ │ -
194 ++rit, ++wit;
│ │ │ │ -
195
│ │ │ │ -
196 for( unsigned d = 1; d <= deriv; ++d )
│ │ │ │ -
197 {
│ │ │ │ -
198 #ifndef NDEBUG
│ │ │ │ -
199 const F *const derivEnd = rit + mySize.sizes_[ d ];
│ │ │ │ -
200 #endif
│ │ │ │ -
201
│ │ │ │ -
202 {
│ │ │ │ -
203 const F *const drend = rit + mySize.sizes_[ d ] - mySize.sizes_[ d-1 ];
│ │ │ │ -
204 for( ; rit != drend ; ++rit, ++wit )
│ │ │ │ -
205 *wit = z * *rit;
│ │ │ │ -
206 }
│ │ │ │ -
207
│ │ │ │ -
208 for (unsigned int j=1; j<d; ++j)
│ │ │ │ -
209 {
│ │ │ │ -
210 const F *const drend = rit + mySize.sizes_[ d-j ] - mySize.sizes_[ d-j-1 ];
│ │ │ │ -
211 for( ; rit != drend ; ++prit, ++rit, ++wit )
│ │ │ │ -
212 *wit = F(j) * *prit + z * *rit;
│ │ │ │ -
213 }
│ │ │ │ -
214 *wit = F(d) * *prit + z * *rit;
│ │ │ │ -
215 ++prit, ++rit, ++wit;
│ │ │ │ -
216 assert(derivEnd == rit);
│ │ │ │ -
217 rit += size.sizes_[d] - mySize.sizes_[d];
│ │ │ │ -
218 prit += size.sizes_[d-1] - mySize.sizes_[d-1];
│ │ │ │ -
219 const F *const emptyWitEnd = wit + size.sizes_[d] - mySize.sizes_[d];
│ │ │ │ -
220 for ( ; wit != emptyWitEnd; ++wit )
│ │ │ │ -
221 *wit = Zero<F>();
│ │ │ │ -
222 }
│ │ │ │ -
223 }
│ │ │ │ -
224 }
│ │ │ │ -
│ │ │ │ -
225 };
│ │ │ │ -
│ │ │ │ -
226
│ │ │ │ -
227
│ │ │ │ -
228
│ │ │ │ -
229 // MonomialBasisImpl
│ │ │ │ -
230 // -----------------
│ │ │ │ -
231
│ │ │ │ -
232 template< GeometryType::Id geometryId, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
234 {
│ │ │ │ -
235 public:
│ │ │ │ -
236 typedef F Field;
│ │ │ │ -
237
│ │ │ │ -
238 static constexpr GeometryType geometry = geometryId;
│ │ │ │ -
239
│ │ │ │ -
240 static const unsigned int dimDomain = geometry.dim();
│ │ │ │ -
241
│ │ │ │ -
242 typedef FieldVector< Field, dimDomain > DomainVector;
│ │ │ │ -
243
│ │ │ │ -
244 private:
│ │ │ │ -
245 friend class MonomialBasis< geometryId, Field >;
│ │ │ │ -
246
│ │ │ │ - │ │ │ │ -
248 {}
│ │ │ │ -
249
│ │ │ │ -
250 template< int dimD >
│ │ │ │ -
251 void evaluate ( const unsigned int deriv, const unsigned int order,
│ │ │ │ -
252 const FieldVector< Field, dimD > &x,
│ │ │ │ -
253 const unsigned int block, const unsigned int *const offsets,
│ │ │ │ -
254 Field *const values ) const
│ │ │ │ -
255 {
│ │ │ │ -
256 //start with vertex
│ │ │ │ -
257 *values = Unity< F >();
│ │ │ │ -
258 F *const end = values + block;
│ │ │ │ -
259 for( Field *it = values+1 ; it != end; ++it )
│ │ │ │ -
260 *it = Zero< F >();
│ │ │ │ -
261
│ │ │ │ -
262 constexpr GeometryType gt = GeometryTypes::vertex;
│ │ │ │ -
263
│ │ │ │ -
264 if constexpr ( geometry == gt)
│ │ │ │ -
265 return;
│ │ │ │ -
266 else
│ │ │ │ -
267 evaluate<gt,dimD>(deriv, order, x, block, offsets, values );
│ │ │ │ -
268 }
│ │ │ │ -
269
│ │ │ │ -
270 template<GeometryType::Id baseGeometryId, int dimD >
│ │ │ │ -
271 void evaluate ( const unsigned int deriv, const unsigned int order,
│ │ │ │ -
272 const FieldVector< Field, dimD > &x,
│ │ │ │ -
273 const unsigned int block, const unsigned int *const offsets,
│ │ │ │ -
274 Field *const values ) const
│ │ │ │ -
275 {
│ │ │ │ -
276
│ │ │ │ -
277 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ -
278
│ │ │ │ -
279 auto constexpr isPrismatic = geometry.isPrismatic(baseGeometry.dim());
│ │ │ │ -
280
│ │ │ │ -
281 // compute
│ │ │ │ -
282 typedef MonomialBasisHelper< baseGeometry.dim() + 1, dimD, Field > Helper;
│ │ │ │ -
283 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ -
284
│ │ │ │ -
285 const BaseSize &size = BaseSize::instance();
│ │ │ │ -
286 const_cast<BaseSize&>(size).computeSizes(order);
│ │ │ │ -
287
│ │ │ │ -
288 const Field &z = x[ baseGeometry.dim() ];
│ │ │ │ -
289
│ │ │ │ -
290 Field *row0 = values;
│ │ │ │ -
291 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
292 {
│ │ │ │ -
293 Field *row1 = values + block*offsets[ k-1 ];
│ │ │ │ -
294 Field *wit = row1 + block*size.sizes_[ k ];
│ │ │ │ -
295 if constexpr ( isPrismatic )
│ │ │ │ -
296 Helper::copy( deriv, wit, row1, k*size.sizes_[ k ], z );
│ │ │ │ -
297 Helper::copy( deriv, wit, row0, size( k-1 ), z );
│ │ │ │ -
298 row0 = row1;
│ │ │ │ -
299 }
│ │ │ │ -
300
│ │ │ │ -
301 // stop if desired dimension is reached
│ │ │ │ -
302 if constexpr( baseGeometry.dim() == dimDomain-1)
│ │ │ │ -
303 return;
│ │ │ │ -
304 else
│ │ │ │ -
305 {
│ │ │ │ -
306 constexpr GeometryType nextGeometry = isPrismatic ? GeometryTypes::prismaticExtension(baseGeometry)
│ │ │ │ -
307 : GeometryTypes::conicalExtension(baseGeometry);
│ │ │ │ -
308
│ │ │ │ -
309 evaluate<nextGeometry.toId(),dimD>(deriv, order, x, block, offsets, values );
│ │ │ │ -
310 }
│ │ │ │ -
311 }
│ │ │ │ -
312
│ │ │ │ -
313 void integrate ( const unsigned int order,
│ │ │ │ -
314 const unsigned int *const offsets,
│ │ │ │ -
315 Field *const values ) const
│ │ │ │ -
316 {
│ │ │ │ -
317 //start with vertex
│ │ │ │ -
318 values[ 0 ] = Unity< Field >();
│ │ │ │ -
319 static constexpr GeometryType gt = GeometryTypes::vertex;
│ │ │ │ -
320
│ │ │ │ -
321 if constexpr ( geometry == gt)
│ │ │ │ -
322 return;
│ │ │ │ -
323 else
│ │ │ │ -
324 integrate<gt>(order, offsets, values);
│ │ │ │ -
325 }
│ │ │ │ -
326
│ │ │ │ -
327 template<GeometryType::Id baseGeometryId>
│ │ │ │ -
328 void integrate ( const unsigned int order,
│ │ │ │ -
329 const unsigned int *const offsets,
│ │ │ │ -
330 Field *const values) const
│ │ │ │ -
331 {
│ │ │ │ -
332 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ -
333
│ │ │ │ -
334 auto constexpr isPrismatic = geometry.isPrismatic(baseGeometry.dim());
│ │ │ │ -
335
│ │ │ │ -
336 // decide which kind of integration should be performed
│ │ │ │ -
337 if constexpr ( isPrismatic )
│ │ │ │ -
338 integratePrismatic<baseGeometry>(order, offsets, values);
│ │ │ │ -
339 else
│ │ │ │ -
340 integrateConical<baseGeometry>(order, offsets, values);
│ │ │ │ -
341
│ │ │ │ -
342 // stop if the desired dimension is reached
│ │ │ │ -
343 if constexpr( baseGeometry.dim() == dimDomain-1)
│ │ │ │ -
344 return;
│ │ │ │ -
345 else
│ │ │ │ -
346 {
│ │ │ │ -
347 static constexpr GeometryType nextGeometry = (isPrismatic ? GeometryTypes::prismaticExtension(baseGeometry)
│ │ │ │ -
348 : GeometryTypes::conicalExtension(baseGeometry));
│ │ │ │ -
349
│ │ │ │ -
350 integrate<nextGeometry.toId()>(order, offsets, values);
│ │ │ │ -
351 }
│ │ │ │ -
352
│ │ │ │ -
353 }
│ │ │ │ -
354
│ │ │ │ -
355 template<GeometryType::Id baseGeometryId>
│ │ │ │ -
356 void integratePrismatic ( const unsigned int order,
│ │ │ │ -
357 const unsigned int *const offsets,
│ │ │ │ -
358 Field *const values ) const
│ │ │ │ -
359 {
│ │ │ │ -
360 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ -
361 static const BaseSize &size = BaseSize::instance();
│ │ │ │ -
362 const unsigned int *const baseSizes = size.sizes_;
│ │ │ │ -
363
│ │ │ │ -
364 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ -
365 static constexpr GeometryType nextGeometry = GeometryTypes::prismaticExtension(baseGeometry);
│ │ │ │ -
366
│ │ │ │ -
367 typedef MonomialBasisSize<nextGeometry.toId()> Size;
│ │ │ │ -
368 static const Size &mySize = Size::instance();
│ │ │ │ -
369
│ │ │ │ -
370 Field *row0 = values;
│ │ │ │ -
371 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
372 {
│ │ │ │ -
373 Field *const row1begin = values + offsets[ k-1 ];
│ │ │ │ -
374 Field *const row1End = row1begin + mySize.sizes_[ k ];
│ │ │ │ -
375 assert( (unsigned int)(row1End - values) <= offsets[ k ] );
│ │ │ │ -
376
│ │ │ │ -
377 Field *row1 = row1begin;
│ │ │ │ -
378 Field *it = row1begin + baseSizes[ k ];
│ │ │ │ -
379 for( unsigned int j = 1; j <= k; ++j )
│ │ │ │ -
380 {
│ │ │ │ -
381 Field *const end = it + baseSizes[ k ];
│ │ │ │ -
382 assert( (unsigned int)(end - values) <= offsets[ k ] );
│ │ │ │ -
383 for( ; it != end; ++row1, ++it )
│ │ │ │ -
384 *it = (Field( j ) / Field( j+1 )) * (*row1);
│ │ │ │ -
385 }
│ │ │ │ -
386 for( ; it != row1End; ++row0, ++it )
│ │ │ │ -
387 *it = (Field( k ) / Field( k+1 )) * (*row0);
│ │ │ │ -
388 row0 = row1;
│ │ │ │ -
389 }
│ │ │ │ -
390 }
│ │ │ │ -
391
│ │ │ │ -
392
│ │ │ │ -
393 template<GeometryType::Id baseGeometryId>
│ │ │ │ -
394 void integrateConical ( const unsigned int order,
│ │ │ │ -
395 const unsigned int *const offsets,
│ │ │ │ -
396 Field *const values) const
│ │ │ │ -
397 {
│ │ │ │ -
398 typedef MonomialBasisSize<baseGeometryId> BaseSize;
│ │ │ │ -
399 static const BaseSize &size = BaseSize::instance();
│ │ │ │ -
400 const unsigned int *const baseSizes = size.sizes_;
│ │ │ │ -
401
│ │ │ │ -
402 static constexpr GeometryType baseGeometry = baseGeometryId;
│ │ │ │ -
403
│ │ │ │ -
404 {
│ │ │ │ -
405 Field *const col0End = values + baseSizes[ 0 ];
│ │ │ │ -
406 for( Field *it = values; it != col0End; ++it )
│ │ │ │ -
407 *it *= Field( 1 ) / Field( int(baseGeometry.dim()+1) );
│ │ │ │ -
408 }
│ │ │ │ -
409
│ │ │ │ -
410 Field *row0 = values;
│ │ │ │ -
411 for( unsigned int k = 1; k <= order; ++k )
│ │ │ │ -
412 {
│ │ │ │ -
413 const Field factor = (Field( 1 ) / Field( k + baseGeometry.dim()+1));
│ │ │ │ -
414
│ │ │ │ -
415 Field *const row1 = values+offsets[ k-1 ];
│ │ │ │ -
416 Field *const col0End = row1 + baseSizes[ k ];
│ │ │ │ -
417 Field *it = row1;
│ │ │ │ -
418 for( ; it != col0End; ++it )
│ │ │ │ -
419 *it *= factor;
│ │ │ │ -
420 for( unsigned int i = 1; i <= k; ++i )
│ │ │ │ -
421 {
│ │ │ │ -
422 Field *const end = it + baseSizes[ k-i ];
│ │ │ │ -
423 assert( (unsigned int)(end - values) <= offsets[ k ] );
│ │ │ │ -
424 for( ; it != end; ++row0, ++it )
│ │ │ │ -
425 *it = (*row0) * (Field( i ) * factor);
│ │ │ │ -
426 }
│ │ │ │ -
427 row0 = row1;
│ │ │ │ -
428 }
│ │ │ │ -
429 }
│ │ │ │ -
430
│ │ │ │ -
431 };
│ │ │ │ -
│ │ │ │ -
432
│ │ │ │ -
433
│ │ │ │ -
434 // MonomialBasis
│ │ │ │ -
435 // -------------
│ │ │ │ -
436
│ │ │ │ -
437 template< GeometryType::Id geometryId, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
439 : public MonomialBasisImpl< geometryId, F >
│ │ │ │ -
440 {
│ │ │ │ -
441 static constexpr GeometryType geometry = geometryId;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
444
│ │ │ │ -
445 public:
│ │ │ │ -
446 static const unsigned int dimension = Base::dimDomain;
│ │ │ │ -
447 static const unsigned int dimRange = 1;
│ │ │ │ -
448
│ │ │ │ -
449 typedef typename Base::Field Field;
│ │ │ │ -
450
│ │ │ │ - │ │ │ │ -
452
│ │ │ │ -
453 typedef Dune::FieldVector<Field,dimRange> RangeVector;
│ │ │ │ -
454
│ │ │ │ - │ │ │ │ -
456
│ │ │ │ -
│ │ │ │ -
457 MonomialBasis (unsigned int order)
│ │ │ │ -
458 : Base(),
│ │ │ │ -
459 order_(order),
│ │ │ │ -
460 size_(Size::instance())
│ │ │ │ -
461 {
│ │ │ │ -
462 assert(order<=1024); // avoid wrapping of unsigned int (0-1) order=1024 is quite high...)
│ │ │ │ -
463 }
│ │ │ │ -
│ │ │ │ -
464
│ │ │ │ -
│ │ │ │ -
465 const unsigned int *sizes ( unsigned int order ) const
│ │ │ │ -
466 {
│ │ │ │ -
467 size_.computeSizes( order );
│ │ │ │ -
468 return size_.numBaseFunctions_;
│ │ │ │ -
469 }
│ │ │ │ -
│ │ │ │ -
470
│ │ │ │ -
│ │ │ │ -
471 const unsigned int *sizes () const
│ │ │ │ -
472 {
│ │ │ │ -
473 return sizes( order_ );
│ │ │ │ -
474 }
│ │ │ │ -
│ │ │ │ -
475
│ │ │ │ -
│ │ │ │ -
476 unsigned int size () const
│ │ │ │ -
477 {
│ │ │ │ -
478 size_.computeSizes( order_ );
│ │ │ │ -
479 return size_( order_ );
│ │ │ │ -
480 }
│ │ │ │ -
│ │ │ │ -
481
│ │ │ │ -
│ │ │ │ -
482 unsigned int derivSize ( const unsigned int deriv ) const
│ │ │ │ -
483 {
│ │ │ │ -
484 MonomialBasisSize< GeometryTypes::simplex(dimension).toId() >::instance().computeSizes( deriv );
│ │ │ │ -
485 return MonomialBasisSize< GeometryTypes::simplex(dimension).toId() >::instance() ( deriv );
│ │ │ │ -
486 }
│ │ │ │ -
│ │ │ │ -
487
│ │ │ │ -
│ │ │ │ -
488 unsigned int order () const
│ │ │ │ -
489 {
│ │ │ │ -
490 return order_ ;
│ │ │ │ -
491 }
│ │ │ │ -
│ │ │ │ -
492
│ │ │ │ -
│ │ │ │ -
493 unsigned int topologyId ( ) const
│ │ │ │ -
494 {
│ │ │ │ -
495 return geometry.id();
│ │ │ │ -
496 }
│ │ │ │ -
│ │ │ │ -
497
│ │ │ │ -
│ │ │ │ -
498 void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ -
499 Field *const values ) const
│ │ │ │ -
500 {
│ │ │ │ -
501 Base::evaluate( deriv, order_, x, derivSize( deriv ), sizes( order_ ), values );
│ │ │ │ -
502 }
│ │ │ │ -
│ │ │ │ -
503
│ │ │ │ -
504 template <unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
505 void evaluate ( const DomainVector &x,
│ │ │ │ -
506 Field *const values ) const
│ │ │ │ -
507 {
│ │ │ │ -
508 evaluate( deriv, x, values );
│ │ │ │ -
509 }
│ │ │ │ -
│ │ │ │ -
510
│ │ │ │ -
511 template<unsigned int deriv, class Vector >
│ │ │ │ -
│ │ │ │ -
512 void evaluate ( const DomainVector &x,
│ │ │ │ -
513 Vector &values ) const
│ │ │ │ -
514 {
│ │ │ │ -
515 evaluate<deriv>(x,&(values[0]));
│ │ │ │ -
516 }
│ │ │ │ -
│ │ │ │ -
517 template<unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout >
│ │ │ │ -
│ │ │ │ -
518 void evaluate ( const DomainVector &x,
│ │ │ │ - │ │ │ │ -
520 {
│ │ │ │ -
521 evaluate<deriv>(x,&(values->block()));
│ │ │ │ -
522 }
│ │ │ │ -
│ │ │ │ -
523 template< unsigned int deriv >
│ │ │ │ -
│ │ │ │ -
524 void evaluate ( const DomainVector &x,
│ │ │ │ - │ │ │ │ -
526 {
│ │ │ │ -
527 evaluate(0,x,&(values[0][0]));
│ │ │ │ -
528 }
│ │ │ │ -
│ │ │ │ -
529
│ │ │ │ -
530 template<class Vector >
│ │ │ │ -
│ │ │ │ -
531 void evaluate ( const DomainVector &x,
│ │ │ │ -
532 Vector &values ) const
│ │ │ │ -
533 {
│ │ │ │ -
534 evaluate<0>(x,&(values[0]));
│ │ │ │ -
535 }
│ │ │ │ -
│ │ │ │ -
536
│ │ │ │ -
537 template< class DVector, class RVector >
│ │ │ │ -
│ │ │ │ -
538 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ -
539 {
│ │ │ │ -
540 assert( DVector::dimension == dimension);
│ │ │ │ -
541 DomainVector bx;
│ │ │ │ -
542 for( int d = 0; d < dimension; ++d )
│ │ │ │ -
543 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
544 evaluate<0>( bx, values );
│ │ │ │ -
545 }
│ │ │ │ -
│ │ │ │ -
546
│ │ │ │ -
│ │ │ │ -
547 void integrate ( Field *const values ) const
│ │ │ │ -
548 {
│ │ │ │ -
549 Base::integrate( order_, sizes( order_ ), values );
│ │ │ │ -
550 }
│ │ │ │ -
│ │ │ │ -
551 template <class Vector>
│ │ │ │ -
│ │ │ │ -
552 void integrate ( Vector &values ) const
│ │ │ │ -
553 {
│ │ │ │ -
554 integrate( &(values[ 0 ]) );
│ │ │ │ -
555 }
│ │ │ │ -
│ │ │ │ -
556 private:
│ │ │ │ -
557 MonomialBasis(const This&);
│ │ │ │ -
558 This& operator=(const This&);
│ │ │ │ -
559 unsigned int order_;
│ │ │ │ -
560 Size &size_;
│ │ │ │ -
561 };
│ │ │ │ -
│ │ │ │ -
562
│ │ │ │ -
563
│ │ │ │ -
564
│ │ │ │ -
565 // StdMonomialBasis
│ │ │ │ -
566 // ----------------
│ │ │ │ -
567
│ │ │ │ -
568 template< int dim,class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
570 : public MonomialBasis< GeometryTypes::simplex(dim).toId() , F >
│ │ │ │ -
571 {
│ │ │ │ - │ │ │ │ -
573 typedef MonomialBasis< GeometryTypes::simplex(dim).toId(), F > Base;
│ │ │ │ -
574
│ │ │ │ -
575 public:
│ │ │ │ -
576 static constexpr GeometryType geometry = GeometryTypes::simplex(dim);
│ │ │ │ -
577 static const int dimension = dim;
│ │ │ │ -
578
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
580 : Base( order )
│ │ │ │ -
581 {}
│ │ │ │ -
│ │ │ │ -
582 };
│ │ │ │ -
│ │ │ │ -
583
│ │ │ │ -
584
│ │ │ │ -
585
│ │ │ │ -
586 // StandardBiMonomialBasis
│ │ │ │ -
587 // -----------------------
│ │ │ │ -
588
│ │ │ │ -
589 template< int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
591 : public MonomialBasis< GeometryTypes::cube(dim).toId() , F >
│ │ │ │ -
592 {
│ │ │ │ - │ │ │ │ -
594 typedef MonomialBasis< GeometryTypes::cube(dim).toId() , F > Base;
│ │ │ │ -
595
│ │ │ │ -
596 public:
│ │ │ │ -
597 static constexpr GeometryType geometry = GeometryTypes::cube(dim);
│ │ │ │ -
598 static const int dimension = dim;
│ │ │ │ -
599
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
601 : Base( order )
│ │ │ │ -
602 {}
│ │ │ │ -
│ │ │ │ -
603 };
│ │ │ │ -
│ │ │ │ -
604
│ │ │ │ -
605 // -----------------------------------------------------------
│ │ │ │ -
606 // -----------------------------------------------------------
│ │ │ │ -
607 // VirtualMonomialBasis
│ │ │ │ -
608 // -------------------
│ │ │ │ -
609
│ │ │ │ -
610 template< int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
612 {
│ │ │ │ - │ │ │ │ -
614
│ │ │ │ -
615 public:
│ │ │ │ -
616 typedef F Field;
│ │ │ │ -
617 typedef F StorageField;
│ │ │ │ -
618 static const int dimension = dim;
│ │ │ │ -
619 static const unsigned int dimRange = 1;
│ │ │ │ -
620
│ │ │ │ -
621 typedef FieldVector<Field,dimension> DomainVector;
│ │ │ │ -
622 typedef FieldVector<Field,dimRange> RangeVector;
│ │ │ │ -
623
│ │ │ │ -
│ │ │ │ -
624 explicit VirtualMonomialBasis(const GeometryType& gt,
│ │ │ │ -
625 unsigned int order)
│ │ │ │ -
626 : order_(order), geometry_(gt) {}
│ │ │ │ -
│ │ │ │ -
627
│ │ │ │ - │ │ │ │ -
629
│ │ │ │ -
630 virtual const unsigned int *sizes ( ) const = 0;
│ │ │ │ -
631
│ │ │ │ -
│ │ │ │ -
632 unsigned int size ( ) const
│ │ │ │ -
633 {
│ │ │ │ -
634 return sizes( )[ order_ ];
│ │ │ │ -
635 }
│ │ │ │ -
│ │ │ │ -
636
│ │ │ │ -
│ │ │ │ -
637 unsigned int order () const
│ │ │ │ -
638 {
│ │ │ │ -
639 return order_;
│ │ │ │ -
640 }
│ │ │ │ -
│ │ │ │ -
641
│ │ │ │ -
│ │ │ │ -
642 GeometryType type() const
│ │ │ │ -
643 {
│ │ │ │ -
644 return geometry_;
│ │ │ │ -
645 }
│ │ │ │ -
│ │ │ │ -
646
│ │ │ │ -
647 virtual void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ -
648 Field *const values ) const = 0;
│ │ │ │ -
649 template < unsigned int deriv >
│ │ │ │ -
│ │ │ │ -
650 void evaluate ( const DomainVector &x,
│ │ │ │ -
651 Field *const values ) const
│ │ │ │ -
652 {
│ │ │ │ -
653 evaluate( deriv, x, values );
│ │ │ │ -
654 }
│ │ │ │ -
│ │ │ │ -
655 template < unsigned int deriv, int size >
│ │ │ │ -
│ │ │ │ -
656 void evaluate ( const DomainVector &x,
│ │ │ │ -
657 Dune::FieldVector<Field,size> *const values ) const
│ │ │ │ -
658 {
│ │ │ │ -
659 evaluate( deriv, x, &(values[0][0]) );
│ │ │ │ -
660 }
│ │ │ │ -
│ │ │ │ -
661 template<unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout >
│ │ │ │ -
│ │ │ │ -
662 void evaluate ( const DomainVector &x,
│ │ │ │ - │ │ │ │ -
664 {
│ │ │ │ -
665 evaluate<deriv>(x,&(values->block()));
│ │ │ │ -
666 }
│ │ │ │ -
│ │ │ │ -
667 template <unsigned int deriv, class Vector>
│ │ │ │ -
│ │ │ │ -
668 void evaluate ( const DomainVector &x,
│ │ │ │ -
669 Vector &values ) const
│ │ │ │ -
670 {
│ │ │ │ -
671 evaluate<deriv>( x, &(values[ 0 ]) );
│ │ │ │ -
672 }
│ │ │ │ -
│ │ │ │ -
673 template< class Vector >
│ │ │ │ -
│ │ │ │ -
674 void evaluate ( const DomainVector &x,
│ │ │ │ -
675 Vector &values ) const
│ │ │ │ -
676 {
│ │ │ │ -
677 evaluate<0>(x,values);
│ │ │ │ -
678 }
│ │ │ │ -
│ │ │ │ -
679 template< class DVector, class RVector >
│ │ │ │ -
│ │ │ │ -
680 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ -
681 {
│ │ │ │ -
682 assert( DVector::dimension == dimension);
│ │ │ │ -
683 DomainVector bx;
│ │ │ │ -
684 for( int d = 0; d < dimension; ++d )
│ │ │ │ -
685 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
686 evaluate<0>( bx, values );
│ │ │ │ -
687 }
│ │ │ │ -
│ │ │ │ -
688 template< unsigned int deriv, class DVector, class RVector >
│ │ │ │ -
│ │ │ │ -
689 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ -
690 {
│ │ │ │ -
691 assert( DVector::dimension == dimension);
│ │ │ │ -
692 DomainVector bx;
│ │ │ │ -
693 for( int d = 0; d < dimension; ++d )
│ │ │ │ -
694 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
695 evaluate<deriv>( bx, values );
│ │ │ │ -
696 }
│ │ │ │ -
│ │ │ │ -
697
│ │ │ │ -
698 virtual void integrate ( Field *const values ) const = 0;
│ │ │ │ -
699 template <class Vector>
│ │ │ │ -
│ │ │ │ -
700 void integrate ( Vector &values ) const
│ │ │ │ -
701 {
│ │ │ │ -
702 integrate( &(values[ 0 ]) );
│ │ │ │ -
703 }
│ │ │ │ -
│ │ │ │ -
704 protected:
│ │ │ │ -
705 unsigned int order_;
│ │ │ │ -
706 GeometryType geometry_;
│ │ │ │ -
707 };
│ │ │ │ -
│ │ │ │ -
708
│ │ │ │ -
709 template< GeometryType::Id geometryId, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
711 : public VirtualMonomialBasis< static_cast<GeometryType>(geometryId).dim(), F >
│ │ │ │ -
712 {
│ │ │ │ -
713 static constexpr GeometryType geometry = geometryId;
│ │ │ │ -
714 typedef VirtualMonomialBasis< geometry.dim(), F > Base;
│ │ │ │ - │ │ │ │ -
716
│ │ │ │ -
717 public:
│ │ │ │ -
718 typedef typename Base::Field Field;
│ │ │ │ - │ │ │ │ -
720
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
722 : Base(geometry,order), basis_(order)
│ │ │ │ -
723 {}
│ │ │ │ -
│ │ │ │ -
724
│ │ │ │ -
│ │ │ │ -
725 const unsigned int *sizes ( ) const
│ │ │ │ -
726 {
│ │ │ │ -
727 return basis_.sizes(order_);
│ │ │ │ -
728 }
│ │ │ │ -
│ │ │ │ -
729
│ │ │ │ -
│ │ │ │ -
730 void evaluate ( const unsigned int deriv, const DomainVector &x,
│ │ │ │ -
731 Field *const values ) const
│ │ │ │ -
732 {
│ │ │ │ -
733 basis_.evaluate(deriv,x,values);
│ │ │ │ -
734 }
│ │ │ │ -
│ │ │ │ -
735
│ │ │ │ -
│ │ │ │ -
736 void integrate ( Field *const values ) const
│ │ │ │ -
737 {
│ │ │ │ -
738 basis_.integrate(values);
│ │ │ │ -
739 }
│ │ │ │ -
│ │ │ │ -
740
│ │ │ │ -
741 private:
│ │ │ │ - │ │ │ │ -
743 using Base::order_;
│ │ │ │ -
744 };
│ │ │ │ -
│ │ │ │ -
745
│ │ │ │ -
746 // MonomialBasisFactory
│ │ │ │ -
747 // --------------------
│ │ │ │ -
748
│ │ │ │ -
749 template< int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
751 {
│ │ │ │ -
752 static const unsigned int dimension = dim;
│ │ │ │ -
753 typedef F StorageField;
│ │ │ │ -
754
│ │ │ │ -
755 typedef unsigned int Key;
│ │ │ │ - │ │ │ │ -
757
│ │ │ │ -
758 template < int dd, class FF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
760 {
│ │ │ │ - │ │ │ │ -
762 };
│ │ │ │ -
│ │ │ │ -
763
│ │ │ │ -
764 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
765 static Object* create ( const Key &order )
│ │ │ │ -
766 {
│ │ │ │ - │ │ │ │ -
768 }
│ │ │ │ -
│ │ │ │ -
769 static void release( Object *object ) { delete object; }
│ │ │ │ -
770 };
│ │ │ │ -
│ │ │ │ -
771
│ │ │ │ -
772
│ │ │ │ -
773
│ │ │ │ -
774 // MonomialBasisProvider
│ │ │ │ -
775 // ---------------------
│ │ │ │ -
776
│ │ │ │ -
777 template< int dim, class SF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
779 : public TopologySingletonFactory< MonomialBasisFactory< dim, SF > >
│ │ │ │ -
780 {
│ │ │ │ -
781 static const unsigned int dimension = dim;
│ │ │ │ -
782 typedef SF StorageField;
│ │ │ │ -
783 template < int dd, class FF >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
785 {
│ │ │ │ - │ │ │ │ -
787 };
│ │ │ │ -
│ │ │ │ -
788 };
│ │ │ │ -
│ │ │ │ -
789
│ │ │ │ -
790}
│ │ │ │ -
791
│ │ │ │ -
792#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
Definition monomialbasis.hh:84
│ │ │ │ -
unsigned int * numBaseFunctions_
Definition monomialbasis.hh:100
│ │ │ │ -
void computeSizes(unsigned int order)
Definition monomialbasis.hh:126
│ │ │ │ -
unsigned int * sizes_
Definition monomialbasis.hh:97
│ │ │ │ -
MonomialBasisSize()
Definition monomialbasis.hh:102
│ │ │ │ -
~MonomialBasisSize()
Definition monomialbasis.hh:110
│ │ │ │ -
unsigned int operator()(const unsigned int order) const
Definition monomialbasis.hh:116
│ │ │ │ -
unsigned int maxOrder_
Definition monomialbasis.hh:94
│ │ │ │ -
unsigned int maxOrder() const
Definition monomialbasis.hh:121
│ │ │ │ -
static This & instance()
Definition monomialbasis.hh:88
│ │ │ │ -
Definition monomialbasis.hh:440
│ │ │ │ -
unsigned int size() const
Definition monomialbasis.hh:476
│ │ │ │ -
static const unsigned int dimension
Definition monomialbasis.hh:446
│ │ │ │ -
Dune::FieldVector< Field, dimRange > RangeVector
Definition monomialbasis.hh:453
│ │ │ │ -
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:498
│ │ │ │ -
const unsigned int * sizes() const
Definition monomialbasis.hh:471
│ │ │ │ -
unsigned int topologyId() const
Definition monomialbasis.hh:493
│ │ │ │ -
void integrate(Vector &values) const
Definition monomialbasis.hh:552
│ │ │ │ -
Base::Field Field
Definition monomialbasis.hh:449
│ │ │ │ -
void integrate(Field *const values) const
Definition monomialbasis.hh:547
│ │ │ │ -
static const unsigned int dimRange
Definition monomialbasis.hh:447
│ │ │ │ -
Base::DomainVector DomainVector
Definition monomialbasis.hh:451
│ │ │ │ -
void evaluate(const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:505
│ │ │ │ -
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:531
│ │ │ │ -
void evaluate(const DomainVector &x, FieldVector< Field, Derivatives< Field, dimension, 1, deriv, DerivativeLayoutNS::value >::size > *values) const
Definition monomialbasis.hh:524
│ │ │ │ -
void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, layout > *values) const
Definition monomialbasis.hh:518
│ │ │ │ -
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:538
│ │ │ │ -
MonomialBasisSize< geometryId > Size
Definition monomialbasis.hh:455
│ │ │ │ -
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:512
│ │ │ │ -
MonomialBasis(unsigned int order)
Definition monomialbasis.hh:457
│ │ │ │ -
unsigned int derivSize(const unsigned int deriv) const
Definition monomialbasis.hh:482
│ │ │ │ -
const unsigned int * sizes(unsigned int order) const
Definition monomialbasis.hh:465
│ │ │ │ -
unsigned int order() const
Definition monomialbasis.hh:488
│ │ │ │ -
Definition monomialbasis.hh:177
│ │ │ │ -
MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size
Definition monomialbasis.hh:179
│ │ │ │ -
static void copy(const unsigned int deriv, F *&wit, F *&rit, const unsigned int numBaseFunctions, const F &z)
Definition monomialbasis.hh:181
│ │ │ │ -
MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize
Definition monomialbasis.hh:178
│ │ │ │ -
Definition monomialbasis.hh:234
│ │ │ │ -
FieldVector< Field, dimDomain > DomainVector
Definition monomialbasis.hh:242
│ │ │ │ -
static constexpr GeometryType geometry
Definition monomialbasis.hh:238
│ │ │ │ -
F Field
Definition monomialbasis.hh:236
│ │ │ │ -
static const unsigned int dimDomain
Definition monomialbasis.hh:240
│ │ │ │ -
Definition monomialbasis.hh:571
│ │ │ │ -
static constexpr GeometryType geometry
Definition monomialbasis.hh:576
│ │ │ │ -
StandardMonomialBasis(unsigned int order)
Definition monomialbasis.hh:579
│ │ │ │ -
static const int dimension
Definition monomialbasis.hh:577
│ │ │ │ -
Definition monomialbasis.hh:592
│ │ │ │ -
static const int dimension
Definition monomialbasis.hh:598
│ │ │ │ -
static constexpr GeometryType geometry
Definition monomialbasis.hh:597
│ │ │ │ -
StandardBiMonomialBasis(unsigned int order)
Definition monomialbasis.hh:600
│ │ │ │ -
Definition monomialbasis.hh:612
│ │ │ │ -
GeometryType geometry_
Definition monomialbasis.hh:706
│ │ │ │ -
FieldVector< Field, dimension > DomainVector
Definition monomialbasis.hh:621
│ │ │ │ -
unsigned int order_
Definition monomialbasis.hh:705
│ │ │ │ -
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:674
│ │ │ │ -
void evaluate(const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:650
│ │ │ │ -
F Field
Definition monomialbasis.hh:616
│ │ │ │ -
void evaluate(const DomainVector &x, Vector &values) const
Definition monomialbasis.hh:668
│ │ │ │ -
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:680
│ │ │ │ -
unsigned int order() const
Definition monomialbasis.hh:637
│ │ │ │ -
static const unsigned int dimRange
Definition monomialbasis.hh:619
│ │ │ │ -
F StorageField
Definition monomialbasis.hh:617
│ │ │ │ -
static const int dimension
Definition monomialbasis.hh:618
│ │ │ │ -
unsigned int size() const
Definition monomialbasis.hh:632
│ │ │ │ -
FieldVector< Field, dimRange > RangeVector
Definition monomialbasis.hh:622
│ │ │ │ -
virtual ~VirtualMonomialBasis()
Definition monomialbasis.hh:628
│ │ │ │ -
virtual void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const =0
│ │ │ │ -
virtual void integrate(Field *const values) const =0
│ │ │ │ -
void evaluate(const DomainVector &x, Dune::FieldVector< Field, size > *const values) const
Definition monomialbasis.hh:656
│ │ │ │ -
void evaluate(const DVector &x, RVector &values) const
Definition monomialbasis.hh:689
│ │ │ │ -
GeometryType type() const
Definition monomialbasis.hh:642
│ │ │ │ -
void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, layout > *values) const
Definition monomialbasis.hh:662
│ │ │ │ -
VirtualMonomialBasis(const GeometryType &gt, unsigned int order)
Definition monomialbasis.hh:624
│ │ │ │ -
virtual const unsigned int * sizes() const =0
│ │ │ │ -
void integrate(Vector &values) const
Definition monomialbasis.hh:700
│ │ │ │ -
Definition monomialbasis.hh:712
│ │ │ │ -
void integrate(Field *const values) const
Definition monomialbasis.hh:736
│ │ │ │ -
const unsigned int * sizes() const
Definition monomialbasis.hh:725
│ │ │ │ -
Base::DomainVector DomainVector
Definition monomialbasis.hh:719
│ │ │ │ -
Base::Field Field
Definition monomialbasis.hh:718
│ │ │ │ -
void evaluate(const unsigned int deriv, const DomainVector &x, Field *const values) const
Definition monomialbasis.hh:730
│ │ │ │ -
VirtualMonomialBasisImpl(unsigned int order)
Definition monomialbasis.hh:721
│ │ │ │ -
Definition monomialbasis.hh:751
│ │ │ │ -
static void release(Object *object)
Definition monomialbasis.hh:769
│ │ │ │ -
const VirtualMonomialBasis< dimension, F > Object
Definition monomialbasis.hh:756
│ │ │ │ -
static Object * create(const Key &order)
Definition monomialbasis.hh:765
│ │ │ │ -
F StorageField
Definition monomialbasis.hh:753
│ │ │ │ -
static const unsigned int dimension
Definition monomialbasis.hh:752
│ │ │ │ -
unsigned int Key
Definition monomialbasis.hh:755
│ │ │ │ - │ │ │ │ -
MonomialBasisFactory< dd, FF > Type
Definition monomialbasis.hh:761
│ │ │ │ -
Definition monomialbasis.hh:780
│ │ │ │ -
static const unsigned int dimension
Definition monomialbasis.hh:781
│ │ │ │ -
SF StorageField
Definition monomialbasis.hh:782
│ │ │ │ - │ │ │ │ -
MonomialBasisProvider< dd, FF > Type
Definition monomialbasis.hh:786
│ │ │ │ -
Definition tensor.hh:180
│ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,1112 +1,17 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -monomialbasis.hh │ │ │ │ │ +rannacherturek.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_MONOMIALBASIS_HH │ │ │ │ │ -6#define DUNE_MONOMIALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_t_e_n_s_o_r_._h_h> │ │ │ │ │ -19 │ │ │ │ │ -20namespace _D_u_n_e │ │ │ │ │ -21{ │ │ │ │ │ -22 /************************************************ │ │ │ │ │ -23 * Classes for evaluating ''Monomials'' on any order │ │ │ │ │ -24 * for all reference element type. │ │ │ │ │ -25 * For a simplex topology these are the normal │ │ │ │ │ -26 * monomials for cube topologies the bimonomials. │ │ │ │ │ -27 * The construction follows the construction of the │ │ │ │ │ -28 * generic geometries using tensor products for │ │ │ │ │ -29 * prism generation and duffy transform for pyramid │ │ │ │ │ -30 * construction. │ │ │ │ │ -31 * A derivative argument can be applied, in which case │ │ │ │ │ -32 * all derivatives up to the desired order are │ │ │ │ │ -33 * evaluated. Note that for higher order derivatives │ │ │ │ │ -34 * only the ''lower'' part of the symmetric tensor │ │ │ │ │ -35 * is evaluated, e.g., passing derivative equal to 2 │ │ │ │ │ -36 * to the class will provide the vector │ │ │ │ │ -37 * (d/dxdx p, d/dxydx p, d/dydy p, │ │ │ │ │ -38 * d/dx p, d/dy p, p) │ │ │ │ │ -39 * Important: │ │ │ │ │ -40 * So far the computation of the derivatives has not │ │ │ │ │ -41 * been fully implemented for general pyramid │ │ │ │ │ -42 * construction, i.e., in the case where a pyramid is │ │ │ │ │ -43 * build over a non simplex base geometry. │ │ │ │ │ -44 * │ │ │ │ │ -45 * Central classes: │ │ │ │ │ -46 * 1) template< GeometryType::Id geometryId, class F > │ │ │ │ │ -47 * class MonomialBasisImpl; │ │ │ │ │ -48 * Implementation of the monomial evaluation for │ │ │ │ │ -49 * a given topology and field type. │ │ │ │ │ -50 * The method evaluate fills a F* vector │ │ │ │ │ -51 * 2) template< GeometryType::Id geometryId, class F > │ │ │ │ │ -52 * class MonomialBasis │ │ │ │ │ -53 * The base class for the static monomial evaluation │ │ │ │ │ -54 * providing additional evaluate methods including │ │ │ │ │ -55 * one taking std::vector. │ │ │ │ │ -56 * 3) template< int dim, class F > │ │ │ │ │ -57 * class VirtualMonomialBasis │ │ │ │ │ -58 * Virtualization of the MonomialBasis. │ │ │ │ │ -59 * 4) template< int dim, class F > │ │ │ │ │ -60 * struct MonomialBasisFactory; │ │ │ │ │ -61 * A factory class for the VirtualMonomialBasis │ │ │ │ │ -62 * 5) template< int dim, class F > │ │ │ │ │ -63 * struct MonomialBasisProvider │ │ │ │ │ -64 * A singleton container for the virtual monomial │ │ │ │ │ -65 * basis │ │ │ │ │ -66 ************************************************/ │ │ │ │ │ -67 │ │ │ │ │ -68 // Internal Forward Declarations │ │ │ │ │ -69 // ----------------------------- │ │ │ │ │ -70 │ │ │ │ │ -71 template< GeometryType::Id geometryId > │ │ │ │ │ -72 class MonomialBasisSize; │ │ │ │ │ -73 │ │ │ │ │ -74 template< GeometryType::Id geometryId, class F > │ │ │ │ │ -75 class MonomialBasis; │ │ │ │ │ -76 │ │ │ │ │ -77 │ │ │ │ │ -78 │ │ │ │ │ -79 // MonomialBasisSize │ │ │ │ │ -80 // ----------------- │ │ │ │ │ -81 │ │ │ │ │ -82 template< GeometryType::Id geometryId > │ │ │ │ │ -_8_3 class _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ -84 { │ │ │ │ │ -85 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_ _g_e_o_m_e_t_r_y_I_d_ _> _T_h_i_s; │ │ │ │ │ -86 │ │ │ │ │ -87 public: │ │ │ │ │ -_8_8 static _T_h_i_s &_i_n_s_t_a_n_c_e () │ │ │ │ │ -89 { │ │ │ │ │ -90 static _T_h_i_s _instance; │ │ │ │ │ -91 return _instance; │ │ │ │ │ -92 } │ │ │ │ │ -93 │ │ │ │ │ -_9_4 unsigned int _m_a_x_O_r_d_e_r__; │ │ │ │ │ -95 │ │ │ │ │ -96 // sizes_[ k ]: number of basis functions of exactly order k │ │ │ │ │ -_9_7 mutable unsigned int *_s_i_z_e_s__; │ │ │ │ │ -98 │ │ │ │ │ -99 // numBaseFunctions_[ k ] = sizes_[ 0 ] + ... + sizes_[ k ] │ │ │ │ │ -_1_0_0 mutable unsigned int *_n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ -101 │ │ │ │ │ -_1_0_2 _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e () │ │ │ │ │ -103 : _m_a_x_O_r_d_e_r__( 0 ), │ │ │ │ │ -104 _s_i_z_e_s__( 0 ), │ │ │ │ │ -105 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__( 0 ) │ │ │ │ │ -106 { │ │ │ │ │ -107 _c_o_m_p_u_t_e_S_i_z_e_s( 2 ); │ │ │ │ │ -108 } │ │ │ │ │ -109 │ │ │ │ │ -_1_1_0 _~_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e () │ │ │ │ │ -111 { │ │ │ │ │ -112 delete[] _s_i_z_e_s__; │ │ │ │ │ -113 delete[] _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ -114 } │ │ │ │ │ -115 │ │ │ │ │ -_1_1_6 unsigned int _o_p_e_r_a_t_o_r_(_)_ ( const unsigned int order ) const │ │ │ │ │ -117 { │ │ │ │ │ -118 return _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ order ]; │ │ │ │ │ -119 } │ │ │ │ │ -120 │ │ │ │ │ -_1_2_1 unsigned int _m_a_x_O_r_d_e_r() const │ │ │ │ │ -122 { │ │ │ │ │ -123 return _m_a_x_O_r_d_e_r__; │ │ │ │ │ -124 } │ │ │ │ │ -125 │ │ │ │ │ -_1_2_6 void _c_o_m_p_u_t_e_S_i_z_e_s ( unsigned int order ) │ │ │ │ │ -127 { │ │ │ │ │ -128 if (order <= _m_a_x_O_r_d_e_r__) │ │ │ │ │ -129 return; │ │ │ │ │ -130 │ │ │ │ │ -131 _m_a_x_O_r_d_e_r__ = order; │ │ │ │ │ -132 │ │ │ │ │ -133 delete[] _s_i_z_e_s__; │ │ │ │ │ -134 delete[] _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ -135 _s_i_z_e_s__ = new unsigned int[ order+1 ]; │ │ │ │ │ -136 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__ = new unsigned int[ order+1 ]; │ │ │ │ │ -137 │ │ │ │ │ -138 constexpr GeometryType geometry = geometryId; │ │ │ │ │ -139 constexpr auto dim = geometry.dim(); │ │ │ │ │ -140 │ │ │ │ │ -141 _s_i_z_e_s__[ 0 ] = 1; │ │ │ │ │ -142 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -143 _s_i_z_e_s__[ k ] = 0; │ │ │ │ │ -144 │ │ │ │ │ -145 std::fill(_n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__, _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__+order+1, 1); │ │ │ │ │ -146 │ │ │ │ │ -147 for( int codim=dim-1; codim>=0; codim--) │ │ │ │ │ -148 { │ │ │ │ │ -149 if (Impl::isPrism(geometry.id(),dim,codim)) │ │ │ │ │ -150 { │ │ │ │ │ -151 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -152 { │ │ │ │ │ -153 _s_i_z_e_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] + k*_s_i_z_e_s__[ k ]; │ │ │ │ │ -154 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k-1 ] + _s_i_z_e_s__[ k ]; │ │ │ │ │ -155 } │ │ │ │ │ -156 } │ │ │ │ │ -157 else │ │ │ │ │ -158 { │ │ │ │ │ -159 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -160 { │ │ │ │ │ -161 _s_i_z_e_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ]; │ │ │ │ │ -162 _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k ] = _n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__[ k-1 ] + _s_i_z_e_s__[ k ]; │ │ │ │ │ -163 } │ │ │ │ │ -164 } │ │ │ │ │ -165 } │ │ │ │ │ -166 } │ │ │ │ │ -167 }; │ │ │ │ │ -168 │ │ │ │ │ -169 │ │ │ │ │ -170 │ │ │ │ │ -171 // MonomialBasisHelper │ │ │ │ │ -172 // ------------------- │ │ │ │ │ -173 │ │ │ │ │ -174 │ │ │ │ │ -175 template< int mydim, int dim, class F > │ │ │ │ │ -_1_7_6 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r │ │ │ │ │ -177 { │ │ │ │ │ -_1_7_8 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(mydim).toId() > _M_y_S_i_z_e; │ │ │ │ │ -_1_7_9 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(dim).toId() > _S_i_z_e; │ │ │ │ │ -180 │ │ │ │ │ -_1_8_1 static void _c_o_p_y ( const unsigned int deriv, F *&wit, F *&rit, │ │ │ │ │ -182 const unsigned int numBaseFunctions, const F &z ) │ │ │ │ │ -183 { │ │ │ │ │ -184 // n(d,k) = size[d]; │ │ │ │ │ -185 _M_y_S_i_z_e &mySize = _M_y_S_i_z_e_:_:_i_n_s_t_a_n_c_e(); │ │ │ │ │ -186 _S_i_z_e &size = _S_i_z_e_:_:_i_n_s_t_a_n_c_e(); │ │ │ │ │ -187 │ │ │ │ │ -188 const F *const rend = rit + size( deriv )*numBaseFunctions; │ │ │ │ │ -189 for( ; rit != rend; ) │ │ │ │ │ -190 { │ │ │ │ │ -191 F *prit = rit; │ │ │ │ │ -192 │ │ │ │ │ -193 *wit = z * *rit; │ │ │ │ │ -194 ++rit, ++wit; │ │ │ │ │ -195 │ │ │ │ │ -196 for( unsigned d = 1; d <= deriv; ++d ) │ │ │ │ │ -197 { │ │ │ │ │ -198 #ifndef NDEBUG │ │ │ │ │ -199 const F *const derivEnd = rit + mySize._s_i_z_e_s__[ d ]; │ │ │ │ │ -200 #endif │ │ │ │ │ -201 │ │ │ │ │ -202 { │ │ │ │ │ -203 const F *const drend = rit + mySize._s_i_z_e_s__[ d ] - mySize._s_i_z_e_s__[ d-1 ]; │ │ │ │ │ -204 for( ; rit != drend ; ++rit, ++wit ) │ │ │ │ │ -205 *wit = z * *rit; │ │ │ │ │ -206 } │ │ │ │ │ -207 │ │ │ │ │ -208 for (unsigned int j=1; j(); │ │ │ │ │ -222 } │ │ │ │ │ -223 } │ │ │ │ │ -224 } │ │ │ │ │ -225 }; │ │ │ │ │ -226 │ │ │ │ │ -227 │ │ │ │ │ -228 │ │ │ │ │ -229 // MonomialBasisImpl │ │ │ │ │ -230 // ----------------- │ │ │ │ │ -231 │ │ │ │ │ -232 template< GeometryType::Id geometryId, class F> │ │ │ │ │ -_2_3_3 class _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ -234 { │ │ │ │ │ -235 public: │ │ │ │ │ -_2_3_6 typedef F _F_i_e_l_d; │ │ │ │ │ -237 │ │ │ │ │ -_2_3_8 static constexpr GeometryType _g_e_o_m_e_t_r_y = geometryId; │ │ │ │ │ -239 │ │ │ │ │ -_2_4_0 static const unsigned int _d_i_m_D_o_m_a_i_n = _g_e_o_m_e_t_r_y.dim(); │ │ │ │ │ -241 │ │ │ │ │ -_2_4_2 typedef FieldVector< Field, dimDomain > _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -243 │ │ │ │ │ -244 private: │ │ │ │ │ -245 friend class _M_o_n_o_m_i_a_l_B_a_s_i_s< geometryId, _F_i_e_l_d >; │ │ │ │ │ -246 │ │ │ │ │ -247 _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l () │ │ │ │ │ -248 {} │ │ │ │ │ -249 │ │ │ │ │ -250 template< int dimD > │ │ │ │ │ -251 void evaluate ( const unsigned int deriv, const unsigned int order, │ │ │ │ │ -252 const FieldVector< Field, dimD > &x, │ │ │ │ │ -253 const unsigned int block, const unsigned int *const offsets, │ │ │ │ │ -254 _F_i_e_l_d *const values ) const │ │ │ │ │ -255 { │ │ │ │ │ -256 //start with vertex │ │ │ │ │ -257 *values = _U_n_i_t_y_<_ _F_ _>(); │ │ │ │ │ -258 F *const end = values + block; │ │ │ │ │ -259 for( _F_i_e_l_d *it = values+1 ; it != end; ++it ) │ │ │ │ │ -260 *it = _Z_e_r_o_<_ _F_ _>(); │ │ │ │ │ -261 │ │ │ │ │ -262 constexpr GeometryType gt = GeometryTypes::vertex; │ │ │ │ │ -263 │ │ │ │ │ -264 if constexpr ( _g_e_o_m_e_t_r_y == gt) │ │ │ │ │ -265 return; │ │ │ │ │ -266 else │ │ │ │ │ -267 evaluate(deriv, order, x, block, offsets, values ); │ │ │ │ │ -268 } │ │ │ │ │ -269 │ │ │ │ │ -270 template │ │ │ │ │ -271 void evaluate ( const unsigned int deriv, const unsigned int order, │ │ │ │ │ -272 const FieldVector< Field, dimD > &x, │ │ │ │ │ -273 const unsigned int block, const unsigned int *const offsets, │ │ │ │ │ -274 _F_i_e_l_d *const values ) const │ │ │ │ │ -275 { │ │ │ │ │ -276 │ │ │ │ │ -277 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ -278 │ │ │ │ │ -279 auto constexpr isPrismatic = _g_e_o_m_e_t_r_y.isPrismatic(baseGeometry.dim()); │ │ │ │ │ -280 │ │ │ │ │ -281 // compute │ │ │ │ │ -282 typedef MonomialBasisHelper< baseGeometry.dim() + 1, dimD, _F_i_e_l_d > Helper; │ │ │ │ │ -283 typedef MonomialBasisSize BaseSize; │ │ │ │ │ -284 │ │ │ │ │ -285 const BaseSize &size = BaseSize::instance(); │ │ │ │ │ -286 const_cast(size).computeSizes(order); │ │ │ │ │ -287 │ │ │ │ │ -288 const _F_i_e_l_d &z = x[ baseGeometry.dim() ]; │ │ │ │ │ -289 │ │ │ │ │ -290 _F_i_e_l_d *row0 = values; │ │ │ │ │ -291 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -292 { │ │ │ │ │ -293 _F_i_e_l_d *row1 = values + block*offsets[ k-1 ]; │ │ │ │ │ -294 _F_i_e_l_d *wit = row1 + block*size.sizes_[ k ]; │ │ │ │ │ -295 if constexpr ( isPrismatic ) │ │ │ │ │ -296 Helper::copy( deriv, wit, row1, k*size.sizes_[ k ], z ); │ │ │ │ │ -297 Helper::copy( deriv, wit, row0, size( k-1 ), z ); │ │ │ │ │ -298 row0 = row1; │ │ │ │ │ -299 } │ │ │ │ │ -300 │ │ │ │ │ -301 // stop if desired dimension is reached │ │ │ │ │ -302 if constexpr( baseGeometry.dim() == _d_i_m_D_o_m_a_i_n-1) │ │ │ │ │ -303 return; │ │ │ │ │ -304 else │ │ │ │ │ -305 { │ │ │ │ │ -306 constexpr GeometryType nextGeometry = isPrismatic ? GeometryTypes:: │ │ │ │ │ -prismaticExtension(baseGeometry) │ │ │ │ │ -307 : GeometryTypes::conicalExtension(baseGeometry); │ │ │ │ │ -308 │ │ │ │ │ -309 evaluate(deriv, order, x, block, offsets, values │ │ │ │ │ -); │ │ │ │ │ -310 } │ │ │ │ │ -311 } │ │ │ │ │ -312 │ │ │ │ │ -313 void integrate ( const unsigned int order, │ │ │ │ │ -314 const unsigned int *const offsets, │ │ │ │ │ -315 _F_i_e_l_d *const values ) const │ │ │ │ │ -316 { │ │ │ │ │ -317 //start with vertex │ │ │ │ │ -318 values[ 0 ] = Unity< Field >(); │ │ │ │ │ -319 static constexpr GeometryType gt = GeometryTypes::vertex; │ │ │ │ │ -320 │ │ │ │ │ -321 if constexpr ( _g_e_o_m_e_t_r_y == gt) │ │ │ │ │ -322 return; │ │ │ │ │ -323 else │ │ │ │ │ -324 integrate(order, offsets, values); │ │ │ │ │ -325 } │ │ │ │ │ -326 │ │ │ │ │ -327 template │ │ │ │ │ -328 void integrate ( const unsigned int order, │ │ │ │ │ -329 const unsigned int *const offsets, │ │ │ │ │ -330 _F_i_e_l_d *const values) const │ │ │ │ │ -331 { │ │ │ │ │ -332 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ -333 │ │ │ │ │ -334 auto constexpr isPrismatic = _g_e_o_m_e_t_r_y.isPrismatic(baseGeometry.dim()); │ │ │ │ │ -335 │ │ │ │ │ -336 // decide which kind of integration should be performed │ │ │ │ │ -337 if constexpr ( isPrismatic ) │ │ │ │ │ -338 integratePrismatic(order, offsets, values); │ │ │ │ │ -339 else │ │ │ │ │ -340 integrateConical(order, offsets, values); │ │ │ │ │ -341 │ │ │ │ │ -342 // stop if the desired dimension is reached │ │ │ │ │ -343 if constexpr( baseGeometry.dim() == _d_i_m_D_o_m_a_i_n-1) │ │ │ │ │ -344 return; │ │ │ │ │ -345 else │ │ │ │ │ -346 { │ │ │ │ │ -347 static constexpr GeometryType nextGeometry = (isPrismatic ? GeometryTypes:: │ │ │ │ │ -prismaticExtension(baseGeometry) │ │ │ │ │ -348 : GeometryTypes::conicalExtension(baseGeometry)); │ │ │ │ │ -349 │ │ │ │ │ -350 integrate(order, offsets, values); │ │ │ │ │ -351 } │ │ │ │ │ -352 │ │ │ │ │ -353 } │ │ │ │ │ -354 │ │ │ │ │ -355 template │ │ │ │ │ -356 void integratePrismatic ( const unsigned int order, │ │ │ │ │ -357 const unsigned int *const offsets, │ │ │ │ │ -358 _F_i_e_l_d *const values ) const │ │ │ │ │ -359 { │ │ │ │ │ -360 typedef MonomialBasisSize BaseSize; │ │ │ │ │ -361 static const BaseSize &size = BaseSize::instance(); │ │ │ │ │ -362 const unsigned int *const baseSizes = size.sizes_; │ │ │ │ │ -363 │ │ │ │ │ -364 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ -365 static constexpr GeometryType nextGeometry = GeometryTypes:: │ │ │ │ │ -prismaticExtension(baseGeometry); │ │ │ │ │ -366 │ │ │ │ │ -367 typedef MonomialBasisSize Size; │ │ │ │ │ -368 static const Size &mySize = Size::instance(); │ │ │ │ │ -369 │ │ │ │ │ -370 _F_i_e_l_d *row0 = values; │ │ │ │ │ -371 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -372 { │ │ │ │ │ -373 _F_i_e_l_d *const row1begin = values + offsets[ k-1 ]; │ │ │ │ │ -374 _F_i_e_l_d *const row1End = row1begin + mySize.sizes_[ k ]; │ │ │ │ │ -375 assert( (unsigned int)(row1End - values) <= offsets[ k ] ); │ │ │ │ │ -376 │ │ │ │ │ -377 _F_i_e_l_d *row1 = row1begin; │ │ │ │ │ -378 _F_i_e_l_d *it = row1begin + baseSizes[ k ]; │ │ │ │ │ -379 for( unsigned int j = 1; j <= k; ++j ) │ │ │ │ │ -380 { │ │ │ │ │ -381 _F_i_e_l_d *const end = it + baseSizes[ k ]; │ │ │ │ │ -382 assert( (unsigned int)(end - values) <= offsets[ k ] ); │ │ │ │ │ -383 for( ; it != end; ++row1, ++it ) │ │ │ │ │ -384 *it = (_F_i_e_l_d( j ) / _F_i_e_l_d( j+1 )) * (*row1); │ │ │ │ │ -385 } │ │ │ │ │ -386 for( ; it != row1End; ++row0, ++it ) │ │ │ │ │ -387 *it = (_F_i_e_l_d( k ) / _F_i_e_l_d( k+1 )) * (*row0); │ │ │ │ │ -388 row0 = row1; │ │ │ │ │ -389 } │ │ │ │ │ -390 } │ │ │ │ │ -391 │ │ │ │ │ -392 │ │ │ │ │ -393 template │ │ │ │ │ -394 void integrateConical ( const unsigned int order, │ │ │ │ │ -395 const unsigned int *const offsets, │ │ │ │ │ -396 _F_i_e_l_d *const values) const │ │ │ │ │ -397 { │ │ │ │ │ -398 typedef MonomialBasisSize BaseSize; │ │ │ │ │ -399 static const BaseSize &size = BaseSize::instance(); │ │ │ │ │ -400 const unsigned int *const baseSizes = size.sizes_; │ │ │ │ │ -401 │ │ │ │ │ -402 static constexpr GeometryType baseGeometry = baseGeometryId; │ │ │ │ │ -403 │ │ │ │ │ -404 { │ │ │ │ │ -405 _F_i_e_l_d *const col0End = values + baseSizes[ 0 ]; │ │ │ │ │ -406 for( _F_i_e_l_d *it = values; it != col0End; ++it ) │ │ │ │ │ -407 *it *= _F_i_e_l_d( 1 ) / _F_i_e_l_d( int(baseGeometry.dim()+1) ); │ │ │ │ │ -408 } │ │ │ │ │ -409 │ │ │ │ │ -410 _F_i_e_l_d *row0 = values; │ │ │ │ │ -411 for( unsigned int k = 1; k <= order; ++k ) │ │ │ │ │ -412 { │ │ │ │ │ -413 const _F_i_e_l_d factor = (_F_i_e_l_d( 1 ) / _F_i_e_l_d( k + baseGeometry.dim()+1)); │ │ │ │ │ -414 │ │ │ │ │ -415 _F_i_e_l_d *const row1 = values+offsets[ k-1 ]; │ │ │ │ │ -416 _F_i_e_l_d *const col0End = row1 + baseSizes[ k ]; │ │ │ │ │ -417 _F_i_e_l_d *it = row1; │ │ │ │ │ -418 for( ; it != col0End; ++it ) │ │ │ │ │ -419 *it *= factor; │ │ │ │ │ -420 for( unsigned int i = 1; i <= k; ++i ) │ │ │ │ │ -421 { │ │ │ │ │ -422 _F_i_e_l_d *const end = it + baseSizes[ k-i ]; │ │ │ │ │ -423 assert( (unsigned int)(end - values) <= offsets[ k ] ); │ │ │ │ │ -424 for( ; it != end; ++row0, ++it ) │ │ │ │ │ -425 *it = (*row0) * (_F_i_e_l_d( i ) * factor); │ │ │ │ │ -426 } │ │ │ │ │ -427 row0 = row1; │ │ │ │ │ -428 } │ │ │ │ │ -429 } │ │ │ │ │ -430 │ │ │ │ │ -431 }; │ │ │ │ │ -432 │ │ │ │ │ -433 │ │ │ │ │ -434 // MonomialBasis │ │ │ │ │ -435 // ------------- │ │ │ │ │ -436 │ │ │ │ │ -437 template< GeometryType::Id geometryId, class F > │ │ │ │ │ -_4_3_8 class _M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -439 : public _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l< geometryId, F > │ │ │ │ │ -440 { │ │ │ │ │ -441 static constexpr GeometryType geometry = geometryId; │ │ │ │ │ -442 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -443 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _B_a_s_e; │ │ │ │ │ -444 │ │ │ │ │ -445 public: │ │ │ │ │ -_4_4_6 static const unsigned int _d_i_m_e_n_s_i_o_n = _B_a_s_e_:_:_d_i_m_D_o_m_a_i_n; │ │ │ │ │ -_4_4_7 static const unsigned int _d_i_m_R_a_n_g_e = 1; │ │ │ │ │ -448 │ │ │ │ │ -_4_4_9 typedef typename _B_a_s_e_:_:_F_i_e_l_d _F_i_e_l_d; │ │ │ │ │ -450 │ │ │ │ │ -_4_5_1 typedef typename _B_a_s_e_:_:_D_o_m_a_i_n_V_e_c_t_o_r _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -452 │ │ │ │ │ -_4_5_3 typedef Dune::FieldVector _R_a_n_g_e_V_e_c_t_o_r; │ │ │ │ │ -454 │ │ │ │ │ -_4_5_5 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_<_g_e_o_m_e_t_r_y_I_d_> _S_i_z_e; │ │ │ │ │ -456 │ │ │ │ │ -_4_5_7 _M_o_n_o_m_i_a_l_B_a_s_i_s (unsigned int _o_r_d_e_r) │ │ │ │ │ -458 : _B_a_s_e(), │ │ │ │ │ -459 order_(_o_r_d_e_r), │ │ │ │ │ -460 size_(_S_i_z_e::instance()) │ │ │ │ │ -461 { │ │ │ │ │ -462 assert(_o_r_d_e_r<=1024); // avoid wrapping of unsigned int (0-1) order=1024 is │ │ │ │ │ -quite high...) │ │ │ │ │ -463 } │ │ │ │ │ -464 │ │ │ │ │ -_4_6_5 const unsigned int *_s_i_z_e_s ( unsigned int _o_r_d_e_r ) const │ │ │ │ │ -466 { │ │ │ │ │ -467 size_._c_o_m_p_u_t_e_S_i_z_e_s( _o_r_d_e_r ); │ │ │ │ │ -468 return size_._n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__; │ │ │ │ │ -469 } │ │ │ │ │ -470 │ │ │ │ │ -_4_7_1 const unsigned int *_s_i_z_e_s () const │ │ │ │ │ -472 { │ │ │ │ │ -473 return _s_i_z_e_s( order_ ); │ │ │ │ │ -474 } │ │ │ │ │ -475 │ │ │ │ │ -_4_7_6 unsigned int _s_i_z_e () const │ │ │ │ │ -477 { │ │ │ │ │ -478 size_._c_o_m_p_u_t_e_S_i_z_e_s( order_ ); │ │ │ │ │ -479 return size_( order_ ); │ │ │ │ │ -480 } │ │ │ │ │ -481 │ │ │ │ │ -_4_8_2 unsigned int _d_e_r_i_v_S_i_z_e ( const unsigned int deriv ) const │ │ │ │ │ -483 { │ │ │ │ │ -484 _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(_d_i_m_e_n_s_i_o_n).toId() >::instance │ │ │ │ │ -()._c_o_m_p_u_t_e_S_i_z_e_s( deriv ); │ │ │ │ │ -485 return _M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e< GeometryTypes::simplex(_d_i_m_e_n_s_i_o_n).toId() >:: │ │ │ │ │ -instance() ( deriv ); │ │ │ │ │ -486 } │ │ │ │ │ -487 │ │ │ │ │ -_4_8_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ -489 { │ │ │ │ │ -490 return order_ ; │ │ │ │ │ -491 } │ │ │ │ │ -492 │ │ │ │ │ -_4_9_3 unsigned int _t_o_p_o_l_o_g_y_I_d ( ) const │ │ │ │ │ -494 { │ │ │ │ │ -495 return geometry.id(); │ │ │ │ │ -496 } │ │ │ │ │ -497 │ │ │ │ │ -_4_9_8 void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -499 _F_i_e_l_d *const values ) const │ │ │ │ │ -500 { │ │ │ │ │ -501 Base::evaluate( deriv, order_, x, _d_e_r_i_v_S_i_z_e( deriv ), _s_i_z_e_s( order_ ), │ │ │ │ │ -values ); │ │ │ │ │ -502 } │ │ │ │ │ -503 │ │ │ │ │ -504 template │ │ │ │ │ -_5_0_5 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -506 _F_i_e_l_d *const values ) const │ │ │ │ │ -507 { │ │ │ │ │ -508 _e_v_a_l_u_a_t_e( deriv, x, values ); │ │ │ │ │ -509 } │ │ │ │ │ -510 │ │ │ │ │ -511 template │ │ │ │ │ -_5_1_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -513 Vector &values ) const │ │ │ │ │ -514 { │ │ │ │ │ -515 evaluate(x,&(values[0])); │ │ │ │ │ -516 } │ │ │ │ │ -517 template │ │ │ │ │ -_5_1_8 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -519 _D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> *values ) const │ │ │ │ │ -520 { │ │ │ │ │ -521 evaluate(x,&(values->block())); │ │ │ │ │ -522 } │ │ │ │ │ -523 template< unsigned int deriv > │ │ │ │ │ -_5_2_4 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -525 FieldVector<_F_i_e_l_d,_D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_>_:_:_s_i_z_e> *values ) const │ │ │ │ │ -526 { │ │ │ │ │ -527 _e_v_a_l_u_a_t_e(0,x,&(values[0][0])); │ │ │ │ │ -528 } │ │ │ │ │ -529 │ │ │ │ │ -530 template │ │ │ │ │ -_5_3_1 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -532 Vector &values ) const │ │ │ │ │ -533 { │ │ │ │ │ -534 evaluate<0>(x,&(values[0])); │ │ │ │ │ -535 } │ │ │ │ │ -536 │ │ │ │ │ -537 template< class DVector, class RVector > │ │ │ │ │ -_5_3_8 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ -539 { │ │ │ │ │ -540 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -541 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -542 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -543 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -544 evaluate<0>( bx, values ); │ │ │ │ │ -545 } │ │ │ │ │ -546 │ │ │ │ │ -_5_4_7 void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const │ │ │ │ │ -548 { │ │ │ │ │ -549 Base::integrate( order_, _s_i_z_e_s( order_ ), values ); │ │ │ │ │ -550 } │ │ │ │ │ -551 template │ │ │ │ │ -_5_5_2 void _i_n_t_e_g_r_a_t_e ( Vector &values ) const │ │ │ │ │ -553 { │ │ │ │ │ -554 _i_n_t_e_g_r_a_t_e( &(values[ 0 ]) ); │ │ │ │ │ -555 } │ │ │ │ │ -556 private: │ │ │ │ │ -557 _M_o_n_o_m_i_a_l_B_a_s_i_s(const This&); │ │ │ │ │ -558 This& operator=(const This&); │ │ │ │ │ -559 unsigned int order_; │ │ │ │ │ -560 _S_i_z_e &size_; │ │ │ │ │ -561 }; │ │ │ │ │ -562 │ │ │ │ │ -563 │ │ │ │ │ -564 │ │ │ │ │ -565 // StdMonomialBasis │ │ │ │ │ -566 // ---------------- │ │ │ │ │ -567 │ │ │ │ │ -568 template< int dim,class F > │ │ │ │ │ -_5_6_9 class _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -570 : public _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::simplex(dim).toId() , F > │ │ │ │ │ -571 { │ │ │ │ │ -572 typedef _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -573 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::simplex(dim).toId(), F > _B_a_s_e; │ │ │ │ │ -574 │ │ │ │ │ -575 public: │ │ │ │ │ -_5_7_6 static constexpr GeometryType _g_e_o_m_e_t_r_y = GeometryTypes::simplex(dim); │ │ │ │ │ -_5_7_7 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -578 │ │ │ │ │ -_5_7_9 _S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s ( unsigned int _o_r_d_e_r ) │ │ │ │ │ -580 : _B_a_s_e( _o_r_d_e_r ) │ │ │ │ │ -581 {} │ │ │ │ │ -582 }; │ │ │ │ │ -583 │ │ │ │ │ -584 │ │ │ │ │ -585 │ │ │ │ │ -586 // StandardBiMonomialBasis │ │ │ │ │ -587 // ----------------------- │ │ │ │ │ -588 │ │ │ │ │ -589 template< int dim, class F > │ │ │ │ │ -_5_9_0 class _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -591 : public _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::cube(dim).toId() , F > │ │ │ │ │ -592 { │ │ │ │ │ -593 typedef _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -594 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s< GeometryTypes::cube(dim).toId() , F > _B_a_s_e; │ │ │ │ │ -595 │ │ │ │ │ -596 public: │ │ │ │ │ -_5_9_7 static constexpr GeometryType _g_e_o_m_e_t_r_y = GeometryTypes::cube(dim); │ │ │ │ │ -_5_9_8 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -599 │ │ │ │ │ -_6_0_0 _S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s ( unsigned int _o_r_d_e_r ) │ │ │ │ │ -601 : _B_a_s_e( _o_r_d_e_r ) │ │ │ │ │ -602 {} │ │ │ │ │ -603 }; │ │ │ │ │ -604 │ │ │ │ │ -605 // ----------------------------------------------------------- │ │ │ │ │ -606 // ----------------------------------------------------------- │ │ │ │ │ -607 // VirtualMonomialBasis │ │ │ │ │ -608 // ------------------- │ │ │ │ │ -609 │ │ │ │ │ -610 template< int dim, class F > │ │ │ │ │ -_6_1_1 class _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -612 { │ │ │ │ │ -613 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -614 │ │ │ │ │ -615 public: │ │ │ │ │ -_6_1_6 typedef F _F_i_e_l_d; │ │ │ │ │ -_6_1_7 typedef F _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -_6_1_8 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_6_1_9 static const unsigned int _d_i_m_R_a_n_g_e = 1; │ │ │ │ │ -620 │ │ │ │ │ -_6_2_1 typedef FieldVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -_6_2_2 typedef FieldVector _R_a_n_g_e_V_e_c_t_o_r; │ │ │ │ │ -623 │ │ │ │ │ -_6_2_4 explicit _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s(const GeometryType& gt, │ │ │ │ │ -625 unsigned int _o_r_d_e_r) │ │ │ │ │ -626 : _o_r_d_e_r__(_o_r_d_e_r), _g_e_o_m_e_t_r_y__(gt) {} │ │ │ │ │ -627 │ │ │ │ │ -_6_2_8 virtual _~_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s() {} │ │ │ │ │ -629 │ │ │ │ │ -_6_3_0 virtual const unsigned int *_s_i_z_e_s ( ) const = 0; │ │ │ │ │ -631 │ │ │ │ │ -_6_3_2 unsigned int _s_i_z_e ( ) const │ │ │ │ │ -633 { │ │ │ │ │ -634 return _s_i_z_e_s( )[ _o_r_d_e_r__ ]; │ │ │ │ │ -635 } │ │ │ │ │ -636 │ │ │ │ │ -_6_3_7 unsigned int _o_r_d_e_r () const │ │ │ │ │ -638 { │ │ │ │ │ -639 return _o_r_d_e_r__; │ │ │ │ │ -640 } │ │ │ │ │ -641 │ │ │ │ │ -_6_4_2 GeometryType _t_y_p_e() const │ │ │ │ │ -643 { │ │ │ │ │ -644 return _g_e_o_m_e_t_r_y__; │ │ │ │ │ -645 } │ │ │ │ │ -646 │ │ │ │ │ -_6_4_7 virtual void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -648 _F_i_e_l_d *const values ) const = 0; │ │ │ │ │ -649 template < unsigned int deriv > │ │ │ │ │ -_6_5_0 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -651 _F_i_e_l_d *const values ) const │ │ │ │ │ -652 { │ │ │ │ │ -653 _e_v_a_l_u_a_t_e( deriv, x, values ); │ │ │ │ │ -654 } │ │ │ │ │ -655 template < unsigned int deriv, int size > │ │ │ │ │ -_6_5_6 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -657 Dune::FieldVector *const values ) const │ │ │ │ │ -658 { │ │ │ │ │ -659 _e_v_a_l_u_a_t_e( deriv, x, &(values[0][0]) ); │ │ │ │ │ -660 } │ │ │ │ │ -661 template │ │ │ │ │ -_6_6_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -663 _D_e_r_i_v_a_t_i_v_e_s_<_F_i_e_l_d_,_d_i_m_e_n_s_i_o_n_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> *values ) const │ │ │ │ │ -664 { │ │ │ │ │ -665 evaluate(x,&(values->block())); │ │ │ │ │ -666 } │ │ │ │ │ -667 template │ │ │ │ │ -_6_6_8 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -669 Vector &values ) const │ │ │ │ │ -670 { │ │ │ │ │ -671 evaluate( x, &(values[ 0 ]) ); │ │ │ │ │ -672 } │ │ │ │ │ -673 template< class Vector > │ │ │ │ │ -_6_7_4 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -675 Vector &values ) const │ │ │ │ │ -676 { │ │ │ │ │ -677 evaluate<0>(x,values); │ │ │ │ │ -678 } │ │ │ │ │ -679 template< class DVector, class RVector > │ │ │ │ │ -_6_8_0 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ -681 { │ │ │ │ │ -682 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -683 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -684 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -685 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -686 evaluate<0>( bx, values ); │ │ │ │ │ -687 } │ │ │ │ │ -688 template< unsigned int deriv, class DVector, class RVector > │ │ │ │ │ -_6_8_9 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ -690 { │ │ │ │ │ -691 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -692 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -693 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -694 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -695 evaluate( bx, values ); │ │ │ │ │ -696 } │ │ │ │ │ -697 │ │ │ │ │ -_6_9_8 virtual void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const = 0; │ │ │ │ │ -699 template │ │ │ │ │ -_7_0_0 void _i_n_t_e_g_r_a_t_e ( Vector &values ) const │ │ │ │ │ -701 { │ │ │ │ │ -702 _i_n_t_e_g_r_a_t_e( &(values[ 0 ]) ); │ │ │ │ │ -703 } │ │ │ │ │ -704 protected: │ │ │ │ │ -_7_0_5 unsigned int _o_r_d_e_r__; │ │ │ │ │ -_7_0_6 GeometryType _g_e_o_m_e_t_r_y__; │ │ │ │ │ -707 }; │ │ │ │ │ -708 │ │ │ │ │ -709 template< GeometryType::Id geometryId, class F > │ │ │ │ │ -_7_1_0 class _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ -711 : public _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< static_cast(geometryId).dim(), │ │ │ │ │ -F > │ │ │ │ │ -712 { │ │ │ │ │ -713 static constexpr GeometryType geometry = geometryId; │ │ │ │ │ -714 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s< geometry.dim(), F > _B_a_s_e; │ │ │ │ │ -715 typedef _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _F_ _> _T_h_i_s; │ │ │ │ │ -716 │ │ │ │ │ -717 public: │ │ │ │ │ -_7_1_8 typedef typename _B_a_s_e_:_:_F_i_e_l_d _F_i_e_l_d; │ │ │ │ │ -_7_1_9 typedef typename _B_a_s_e_:_:_D_o_m_a_i_n_V_e_c_t_o_r _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -720 │ │ │ │ │ -_7_2_1 _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l(unsigned int _o_r_d_e_r) │ │ │ │ │ -722 : _B_a_s_e(geometry,_o_r_d_e_r), basis_(_o_r_d_e_r) │ │ │ │ │ -723 {} │ │ │ │ │ -724 │ │ │ │ │ -_7_2_5 const unsigned int *_s_i_z_e_s ( ) const │ │ │ │ │ -726 { │ │ │ │ │ -727 return basis_._s_i_z_e_s(order_); │ │ │ │ │ -728 } │ │ │ │ │ -729 │ │ │ │ │ -_7_3_0 void _e_v_a_l_u_a_t_e ( const unsigned int deriv, const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -731 _F_i_e_l_d *const values ) const │ │ │ │ │ -732 { │ │ │ │ │ -733 basis_._e_v_a_l_u_a_t_e(deriv,x,values); │ │ │ │ │ -734 } │ │ │ │ │ -735 │ │ │ │ │ -_7_3_6 void _i_n_t_e_g_r_a_t_e ( _F_i_e_l_d *const values ) const │ │ │ │ │ -737 { │ │ │ │ │ -738 basis_._i_n_t_e_g_r_a_t_e(values); │ │ │ │ │ -739 } │ │ │ │ │ -740 │ │ │ │ │ -741 private: │ │ │ │ │ -742 _M_o_n_o_m_i_a_l_B_a_s_i_s_<_g_e_o_m_e_t_r_y_I_d_,_F_i_e_l_d_> basis_; │ │ │ │ │ -743 using _B_a_s_e_:_:_o_r_d_e_r__; │ │ │ │ │ -744 }; │ │ │ │ │ -745 │ │ │ │ │ -746 // MonomialBasisFactory │ │ │ │ │ -747 // -------------------- │ │ │ │ │ -748 │ │ │ │ │ -749 template< int dim, class F > │ │ │ │ │ -_7_5_0 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -751 { │ │ │ │ │ -_7_5_2 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_7_5_3 typedef F _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -754 │ │ │ │ │ -_7_5_5 typedef unsigned int _K_e_y; │ │ │ │ │ -_7_5_6 typedef const _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_<_ _d_i_m_e_n_s_i_o_n_,_ _F_ _> _O_b_j_e_c_t; │ │ │ │ │ -757 │ │ │ │ │ -758 template < int dd, class FF > │ │ │ │ │ -_7_5_9 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -760 { │ │ │ │ │ -_7_6_1 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ -762 }; │ │ │ │ │ -763 │ │ │ │ │ -764 template< GeometryType::Id geometryId > │ │ │ │ │ -_7_6_5 static _O_b_j_e_c_t* _c_r_e_a_t_e ( const _K_e_y &order ) │ │ │ │ │ -766 { │ │ │ │ │ -767 return new _V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_<_ _g_e_o_m_e_t_r_y_I_d_,_ _S_t_o_r_a_g_e_F_i_e_l_d_ _>( order ); │ │ │ │ │ -768 } │ │ │ │ │ -_7_6_9 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object ) { delete object; } │ │ │ │ │ -770 }; │ │ │ │ │ -771 │ │ │ │ │ -772 │ │ │ │ │ -773 │ │ │ │ │ -774 // MonomialBasisProvider │ │ │ │ │ -775 // --------------------- │ │ │ │ │ -776 │ │ │ │ │ -777 template< int dim, class SF > │ │ │ │ │ -_7_7_8 struct _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ -779 : public TopologySingletonFactory< MonomialBasisFactory< dim, SF > > │ │ │ │ │ -780 { │ │ │ │ │ -_7_8_1 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_7_8_2 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -783 template < int dd, class FF > │ │ │ │ │ -_7_8_4 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -785 { │ │ │ │ │ -_7_8_6 typedef _M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_<_d_d_,_F_F_> _T_y_p_e; │ │ │ │ │ -787 }; │ │ │ │ │ -788 }; │ │ │ │ │ -789 │ │ │ │ │ -790} │ │ │ │ │ -791 │ │ │ │ │ -792#endif │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ -_t_e_n_s_o_r_._h_h │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ -A class representing the unit of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_n_u_m_B_a_s_e_F_u_n_c_t_i_o_n_s__ │ │ │ │ │ -unsigned int * numBaseFunctions_ │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:100 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_c_o_m_p_u_t_e_S_i_z_e_s │ │ │ │ │ -void computeSizes(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:126 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_s_i_z_e_s__ │ │ │ │ │ -unsigned int * sizes_ │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:97 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ -MonomialBasisSize() │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:102 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_~_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e │ │ │ │ │ -~MonomialBasisSize() │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_o_p_e_r_a_t_o_r_(_) │ │ │ │ │ -unsigned int operator()(const unsigned int order) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:116 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_m_a_x_O_r_d_e_r__ │ │ │ │ │ -unsigned int maxOrder_ │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:94 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_m_a_x_O_r_d_e_r │ │ │ │ │ -unsigned int maxOrder() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:121 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_S_i_z_e_:_:_i_n_s_t_a_n_c_e │ │ │ │ │ -static This & instance() │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:440 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:476 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:446 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_R_a_n_g_e_V_e_c_t_o_r │ │ │ │ │ -Dune::FieldVector< Field, dimRange > RangeVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:453 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:498 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ -const unsigned int * sizes() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:471 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_t_o_p_o_l_o_g_y_I_d │ │ │ │ │ -unsigned int topologyId() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:493 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -void integrate(Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:552 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_F_i_e_l_d │ │ │ │ │ -Base::Field Field │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:449 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -void integrate(Field *const values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:547 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const unsigned int dimRange │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:447 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -Base::DomainVector DomainVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:451 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Field *const values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:505 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:531 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, FieldVector< Field, Derivatives< Field, │ │ │ │ │ -dimension, 1, deriv, DerivativeLayoutNS::value >::size > *values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:524 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, │ │ │ │ │ -layout > *values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:518 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:538 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_i_z_e │ │ │ │ │ -MonomialBasisSize< geometryId > Size │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:455 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:512 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -MonomialBasis(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:457 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_e_r_i_v_S_i_z_e │ │ │ │ │ -unsigned int derivSize(const unsigned int deriv) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:482 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ -const unsigned int * sizes(unsigned int order) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:465 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:488 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:177 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_S_i_z_e │ │ │ │ │ -MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:179 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_c_o_p_y │ │ │ │ │ -static void copy(const unsigned int deriv, F *&wit, F *&rit, const unsigned int │ │ │ │ │ -numBaseFunctions, const F &z) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:181 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_H_e_l_p_e_r_:_:_M_y_S_i_z_e │ │ │ │ │ -MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:178 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:234 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -FieldVector< Field, dimDomain > DomainVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:242 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:238 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:236 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ -static const unsigned int dimDomain │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:571 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:576 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -StandardMonomialBasis(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:579 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:577 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:592 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:598 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y │ │ │ │ │ -static constexpr GeometryType geometry │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:597 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_a_n_d_a_r_d_B_i_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -StandardBiMonomialBasis(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:600 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_g_e_o_m_e_t_r_y__ │ │ │ │ │ -GeometryType geometry_ │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:706 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -FieldVector< Field, dimension > DomainVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:621 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r__ │ │ │ │ │ -unsigned int order_ │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:705 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:674 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Field *const values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:650 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:616 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:668 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:680 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:637 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const unsigned int dimRange │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:619 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -F StorageField │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:617 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:618 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:632 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_R_a_n_g_e_V_e_c_t_o_r │ │ │ │ │ -FieldVector< Field, dimRange > RangeVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:622 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_~_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -virtual ~VirtualMonomialBasis() │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:628 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -virtual void evaluate(const unsigned int deriv, const DomainVector &x, Field │ │ │ │ │ -*const values) const =0 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -virtual void integrate(Field *const values) const =0 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Dune::FieldVector< Field, size > *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:656 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:689 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:642 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, Derivatives< Field, dimension, 1, deriv, │ │ │ │ │ -layout > *values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:662 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -VirtualMonomialBasis(const GeometryType >, unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:624 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e_s │ │ │ │ │ -virtual const unsigned int * sizes() const =0 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -void integrate(Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:700 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:712 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -void integrate(Field *const values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:736 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_s_i_z_e_s │ │ │ │ │ -const unsigned int * sizes() const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:725 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -Base::DomainVector DomainVector │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:719 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_F_i_e_l_d │ │ │ │ │ -Base::Field Field │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:718 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const unsigned int deriv, const DomainVector &x, Field *const │ │ │ │ │ -values) const │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:730 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s_I_m_p_l │ │ │ │ │ -VirtualMonomialBasisImpl(unsigned int order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:721 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:751 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:769 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const VirtualMonomialBasis< dimension, F > Object │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:756 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &order) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:765 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -F StorageField │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:753 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:752 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -unsigned int Key │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:755 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:760 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -MonomialBasisFactory< dd, FF > Type │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:761 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:780 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:781 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -SF StorageField │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:782 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:785 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_P_r_o_v_i_d_e_r_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -MonomialBasisProvider< dd, FF > Type │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:786 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_/_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h> │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: tensor.hh File Reference │ │ │ │ +dune-localfunctions: virtualinterface.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,132 +65,57 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Enumerations | │ │ │ │ -Functions
│ │ │ │ -
tensor.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
virtualinterface.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <ostream>
│ │ │ │ +
#include <type_traits>
│ │ │ │ +#include <array>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +#include <functional>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LFETensor< F, dimD, deriv >
class  Dune::LocalBasisVirtualInterface< T >
 virtual base class for a local basis More...
 
struct  Dune::FieldTraits< LFETensor< F, dimD, deriv > >
class  Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType >
 virtual base class for a local interpolation More...
 
struct  Dune::LFETensor< F, 0, deriv >
class  Dune::LocalInterpolationVirtualInterface< DomainType, RangeType >
 virtual base class for a local interpolation More...
 
struct  Dune::LFETensor< F, 0, 0 >
class  Dune::LocalCoefficientsVirtualInterface
 virtual base class for local coefficients More...
 
class  Dune::LFETensor< F, dimD, 0 >
 
struct  Dune::FieldTraits< Derivatives< F, dimD, dimR, deriv, layout > >
 
struct  Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value >
 
struct  Dune::Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value >
 
struct  Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative >
 
struct  Dune::LFETensorAxpy< Vec1, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative >, Vec2, deriv >
 
struct  Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value >, Vec2, deriv >
 
struct  Dune::DerivativeAssign< Vec1, Vec2 >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, layout > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, F2 >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, 1 > >
 
struct  Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, 1 > >
class  Dune::LocalFiniteElementVirtualInterface< T >
 virtual base class for local finite elements with functions More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
namespace  Dune::DerivativeLayoutNS
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Enumerations

enum  Dune::DerivativeLayoutNS::DerivativeLayout { Dune::DerivativeLayoutNS::value │ │ │ │ -, Dune::DerivativeLayoutNS::derivative │ │ │ │ - }
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<class F , int dimD, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const LFETensor< F, dimD, deriv > &tensor)
 
template<class F , int dimD, int dimR, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &d)
 
template<class F , int dimD, int dimR, unsigned int deriv>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > &d)
 
template<class F , int dimD, int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::derivative > &d)
 
template<class F , int dimD, int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > &d)
 
template<class F , int dimD, int dimR, unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Derivatives< F, dimD, dimR, deriv, layout > > &y)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,141 +1,39 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _E_n_u_m_e_r_a_t_i_o_n_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -tensor.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +virtualinterface.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _T_ _> │ │ │ │ │ +  virtual base class for a local basis _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> │ │ │ │ │ +  virtual base class for a local interpolation _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _d_e_r_i_v_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> │ │ │ │ │ +  virtual base class for a local interpolation _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _0_,_ _0_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  virtual base class for local coefficients _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ - class   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ - _d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _V_e_c_1_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ - _d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ - _v_a_l_u_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _V_e_c_1_,_ _V_e_c_2_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2 │ │ │ │ │ - _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_, │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _T_ _> │ │ │ │ │ +  virtual base class for local finite elements with functions _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -namespace   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S │ │ │ │ │ -  │ │ │ │ │ -EEnnuummeerraattiioonnss │ │ │ │ │ -enum   _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t { _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ - _v_a_l_u_e , _D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e } │ │ │ │ │ -  │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _L_F_E_T_e_n_s_o_r< F, dimD, │ │ │ │ │ - deriv > &tensor) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ - dimD, dimR, deriv, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e > &d) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ - dimD, dimR, deriv, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e > &d) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ - dimD, dimR, 0, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e > &d) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s< F, │ │ │ │ │ - dimD, dimR, 0, _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e > &d) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std::vector< │ │ │ │ │ - _D_e_r_i_v_a_t_i_v_e_s< F, dimD, dimR, deriv, layout > > &y) │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00500_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: tensor.hh Source File │ │ │ │ +dune-localfunctions: virtualinterface.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,1417 +70,244 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
tensor.hh
│ │ │ │ +
virtualinterface.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_TENSOR_HH
│ │ │ │ -
7#define DUNE_TENSOR_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <ostream>
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <type_traits>
│ │ │ │ +
9#include <array>
│ │ │ │
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18 /***********************************************
│ │ │ │ -
19 * The classes here are work in progress.
│ │ │ │ -
20 * Basically they provide tensor structures for
│ │ │ │ -
21 * higher order derivatives of vector valued function.
│ │ │ │ -
22 * Two storage structures are provided
│ │ │ │ -
23 * (either based on the components of the vector valued
│ │ │ │ -
24 * functions or on the order of the derivative).
│ │ │ │ -
25 * Conversions are supplied between the two storage
│ │ │ │ -
26 * structures and simple operations, which make the
│ │ │ │ -
27 * code difficult to use and requires rewriting...
│ │ │ │ -
28 ***************************************************/
│ │ │ │ -
29
│ │ │ │ -
30 // Structure for scalar tensor of order deriv
│ │ │ │ -
31 template <class F,int dimD,unsigned int deriv>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 {
│ │ │ │ - │ │ │ │ -
35 typedef LFETensor<F,dimD-1,deriv> BaseDim;
│ │ │ │ -
36 typedef LFETensor<F,dimD,deriv-1> BaseDeriv;
│ │ │ │ -
37
│ │ │ │ -
38 public:
│ │ │ │ -
39 typedef F field_type;
│ │ │ │ -
40 static const unsigned int size = BaseDim::size+BaseDeriv::size;
│ │ │ │ -
41 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ -
42
│ │ │ │ -
43 template< class FF >
│ │ │ │ -
│ │ │ │ -
44 This &operator= ( const FF &f )
│ │ │ │ -
45 {
│ │ │ │ -
46 block() = field_cast< F >( f );
│ │ │ │ -
47 return *this;
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ +
11#include <functional>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/geometry/type.hh>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
18
│ │ │ │ +
19namespace Dune
│ │ │ │ +
20{
│ │ │ │ +
21
│ │ │ │ +
22 // forward declaration needed by the helper traits
│ │ │ │ +
23 template<class DomainType, class RangeType>
│ │ │ │ +
24 class LocalInterpolationVirtualInterface;
│ │ │ │ +
25
│ │ │ │ +
26
│ │ │ │ +
27
│ │ │ │ +
28 // -----------------------------------------------------------------
│ │ │ │ +
29 // Basis
│ │ │ │ +
30 // -----------------------------------------------------------------
│ │ │ │ +
31
│ │ │ │ +
38 template<class T>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 {
│ │ │ │ +
41 public:
│ │ │ │ +
42 using Traits = T;
│ │ │ │ +
43
│ │ │ │ +
44
│ │ │ │ + │ │ │ │ +
46
│ │ │ │ +
48 virtual unsigned int size () const = 0;
│ │ │ │
49
│ │ │ │ -
│ │ │ │ -
50 This &operator= ( const Block &b )
│ │ │ │ -
51 {
│ │ │ │ -
52 block() = b;
│ │ │ │ -
53 return *this;
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
57 {
│ │ │ │ -
58 block() *= f;
│ │ │ │ -
59 return *this;
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
62 const field_type &operator[] ( const unsigned int i ) const
│ │ │ │ -
63 {
│ │ │ │ -
64 return block()[ i ];
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
│ │ │ │ -
67 field_type &operator[] ( const unsigned int i )
│ │ │ │ -
68 {
│ │ │ │ -
69 return block()[ i ];
│ │ │ │ -
70 }
│ │ │ │ -
│ │ │ │ +
51 virtual unsigned int order () const = 0;
│ │ │ │ +
52
│ │ │ │ +
58 virtual void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
59 std::vector<typename Traits::RangeType>& out) const = 0;
│ │ │ │ +
60
│ │ │ │ +
69 virtual void evaluateJacobian(const typename Traits::DomainType& in, // position
│ │ │ │ +
70 std::vector<typename Traits::JacobianType>& out) const = 0;
│ │ │ │
71
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
73 {
│ │ │ │ -
74 return block_;
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
76 const Block &block() const
│ │ │ │ -
77 {
│ │ │ │ -
78 return block_;
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
80 void axpy(const F& a, const This &y)
│ │ │ │ -
81 {
│ │ │ │ -
82 block().axpy(a,y.block());
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
86 {
│ │ │ │ -
87 field_cast(y.block(),block());
│ │ │ │ -
88 }
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
90 };
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
92
│ │ │ │ -
93 template <class F,int dimD,unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
94 struct FieldTraits<LFETensor<F,dimD,deriv>>
│ │ │ │ -
95 {
│ │ │ │ -
96 using field_type = F;
│ │ │ │ -
97 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ -
98 };
│ │ │ │ -
│ │ │ │ -
99
│ │ │ │ -
100 // ******************************************
│ │ │ │ -
101 template <class F,unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
102 struct LFETensor<F,0,deriv>
│ │ │ │ -
103 {
│ │ │ │ -
104 static const int size = 0;
│ │ │ │ -
105 };
│ │ │ │ -
│ │ │ │ -
106
│ │ │ │ -
107 template <class F>
│ │ │ │ -
│ │ │ │ -
108 struct LFETensor<F,0,0>
│ │ │ │ -
109 {
│ │ │ │ -
110 static const int size = 1;
│ │ │ │ -
111 };
│ │ │ │ -
│ │ │ │ +
77 virtual void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ +
78 const typename Traits::DomainType& in,
│ │ │ │ +
79 std::vector<typename Traits::RangeType>& out) const = 0;
│ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
82
│ │ │ │ +
83
│ │ │ │ +
84 // -----------------------------------------------------------------
│ │ │ │ +
85 // Interpolation
│ │ │ │ +
86 // -----------------------------------------------------------------
│ │ │ │ +
87
│ │ │ │ +
100 template<class DomainType, class RangeType>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
102 {
│ │ │ │ +
103 public:
│ │ │ │ +
104
│ │ │ │ +
106 using FunctionType = std::function<RangeType(DomainType)>;
│ │ │ │ +
107
│ │ │ │ +
109 typedef typename RangeType::field_type CoefficientType;
│ │ │ │ +
110
│ │ │ │ + │ │ │ │
112
│ │ │ │ -
113 template <class F,int dimD>
│ │ │ │ -
│ │ │ │ -
114 class LFETensor<F,dimD,0>
│ │ │ │ -
115 {
│ │ │ │ - │ │ │ │ -
117
│ │ │ │ -
118 public:
│ │ │ │ -
119 typedef F field_type;
│ │ │ │ -
120 static const int size = 1;
│ │ │ │ -
121 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ -
122
│ │ │ │ -
123 template< class FF >
│ │ │ │ -
│ │ │ │ -
124 This &operator= ( const FF &f )
│ │ │ │ -
125 {
│ │ │ │ -
126 block() = field_cast< F >( f );
│ │ │ │ -
127 return *this;
│ │ │ │ -
128 }
│ │ │ │ -
│ │ │ │ -
129
│ │ │ │ -
│ │ │ │ -
130 This &operator= ( const Block &b )
│ │ │ │ -
131 {
│ │ │ │ -
132 block() = b;
│ │ │ │ -
133 return *this;
│ │ │ │ -
134 }
│ │ │ │ +
120 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const = 0;
│ │ │ │ +
121 };
│ │ │ │
│ │ │ │ +
122
│ │ │ │ +
130 template<class DomainType, class RangeType>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
132 : public LocalInterpolationVirtualInterfaceBase<DomainType, RangeType>
│ │ │ │ +
133 {
│ │ │ │ +
134 public:
│ │ │ │
135
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
137 {
│ │ │ │ -
138 block() *= f;
│ │ │ │ -
139 return *this;
│ │ │ │ -
140 }
│ │ │ │ -
│ │ │ │ +
137 using FunctionType = std::function<RangeType(DomainType)>;
│ │ │ │ +
138
│ │ │ │ +
140 typedef typename RangeType::field_type CoefficientType;
│ │ │ │
141
│ │ │ │ -
│ │ │ │ -
142 const F &operator[] ( const unsigned int i ) const
│ │ │ │ -
143 {
│ │ │ │ -
144 return block()[ i ];
│ │ │ │ -
145 }
│ │ │ │ -
│ │ │ │ +
142
│ │ │ │ + │ │ │ │ +
144
│ │ │ │ +
145 // This method is only noted again for to make the documentation complete.
│ │ │ │
146
│ │ │ │ -
│ │ │ │ -
147 F &operator[] ( const unsigned int i )
│ │ │ │ -
148 {
│ │ │ │ -
149 return block()[ i ];
│ │ │ │ -
150 }
│ │ │ │ +
154 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const = 0;
│ │ │ │ +
155
│ │ │ │ +
161 template<class F,
│ │ │ │ +
162 std::enable_if_t<not std::is_base_of<FunctionType, F>::value, int> = 0>
│ │ │ │ +
│ │ │ │ +
163 void interpolate (const F& f, std::vector<CoefficientType>& out) const
│ │ │ │ +
164 {
│ │ │ │ + │ │ │ │ +
166 asBase.interpolate(FunctionType(std::cref(f)),out);
│ │ │ │ +
167 }
│ │ │ │
│ │ │ │ -
151
│ │ │ │ -
│ │ │ │ -
152 void axpy(const F& a, const This &y)
│ │ │ │ -
153 {
│ │ │ │ -
154 block().axpy(a,y.block());
│ │ │ │ -
155 }
│ │ │ │ -
│ │ │ │ -
156 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
158 {
│ │ │ │ -
159 field_cast(y.block(),block());
│ │ │ │ -
160 }
│ │ │ │ -
│ │ │ │ -
161
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
163 {
│ │ │ │ -
164 return block_;
│ │ │ │ -
165 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
166 const Block &block() const
│ │ │ │ -
167 {
│ │ │ │ -
168 return block_;
│ │ │ │ -
169 }
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
171 };
│ │ │ │ -
│ │ │ │ -
172 // ***********************************************************
│ │ │ │ -
173 // Structure for all derivatives up to order deriv
│ │ │ │ -
174 // for vector valued function
│ │ │ │ +
168
│ │ │ │ +
174 template<class F, class C>
│ │ │ │
│ │ │ │ -
175 namespace DerivativeLayoutNS {
│ │ │ │ - │ │ │ │ -
177 }
│ │ │ │ -
│ │ │ │ -
178 template <class F,int dimD,int dimR,unsigned int deriv,
│ │ │ │ - │ │ │ │ - │ │ │ │ -
181
│ │ │ │ -
182 template <class F,int dimD,int dimR,unsigned int deriv,
│ │ │ │ - │ │ │ │ -
│ │ │ │ -
184 struct FieldTraits<Derivatives<F,dimD,dimR,deriv,layout>>
│ │ │ │ -
185 {
│ │ │ │ -
186 using field_type = F;
│ │ │ │ -
187 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ -
188 };
│ │ │ │ -
│ │ │ │ -
189
│ │ │ │ -
190 // Implemnetation for valued based layout
│ │ │ │ -
191 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
192 struct Derivatives<F,dimD,dimR,deriv,DerivativeLayoutNS::value>
│ │ │ │ -
193 : public Derivatives<F,dimD,dimR,deriv-1,DerivativeLayoutNS::value>
│ │ │ │ -
194 {
│ │ │ │ - │ │ │ │ -
196 typedef Derivatives<F,dimD,dimR,deriv-1,DerivativeLayoutNS::value> Base;
│ │ │ │ - │ │ │ │ -
198
│ │ │ │ -
199 typedef F Field;
│ │ │ │ -
200 typedef F field_type;
│ │ │ │ -
201
│ │ │ │ - │ │ │ │ -
203 static const unsigned int dimDomain = dimD;
│ │ │ │ -
204 static const unsigned int dimRange = dimR;
│ │ │ │ -
205 constexpr static int size = Base::size+ThisLFETensor::size*dimR;
│ │ │ │ -
206 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ -
207
│ │ │ │ -
│ │ │ │ -
208 This &operator=(const F& f)
│ │ │ │ -
209 {
│ │ │ │ -
210 block() = f;
│ │ │ │ -
211 return *this;
│ │ │ │ -
212 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
213 This &operator=(const Dune::FieldVector<ThisLFETensor,dimR> &t)
│ │ │ │ -
214 {
│ │ │ │ -
215 tensor_ = t;
│ │ │ │ -
216 return *this;
│ │ │ │ -
217 }
│ │ │ │ -
│ │ │ │ -
218 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
219 This &operator=(const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &t)
│ │ │ │ -
220 {
│ │ │ │ -
221 tensor<dorder>() = t;
│ │ │ │ -
222 return *this;
│ │ │ │ -
223 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
225 {
│ │ │ │ -
226 block() = t;
│ │ │ │ -
227 return *this;
│ │ │ │ -
228 }
│ │ │ │ -
│ │ │ │ -
229
│ │ │ │ -
│ │ │ │ -
230 This &operator*= ( const field_type &f )
│ │ │ │ -
231 {
│ │ │ │ -
232 block() *= f;
│ │ │ │ -
233 return *this;
│ │ │ │ -
234 }
│ │ │ │ -
│ │ │ │ -
235
│ │ │ │ -
│ │ │ │ -
236 void axpy(const F &a, const This &y)
│ │ │ │ -
237 {
│ │ │ │ -
238 block().axpy(a,y.block());
│ │ │ │ -
239 }
│ │ │ │ -
│ │ │ │ -
240
│ │ │ │ -
241 // assign with same layout (only different Field)
│ │ │ │ -
242 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
244 {
│ │ │ │ -
245 field_cast(y.block(),block());
│ │ │ │ -
246 }
│ │ │ │ -
│ │ │ │ -
247 // assign with different layout (same dimRange)
│ │ │ │ -
248 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
250 {
│ │ │ │ -
251 Base::assign(y);
│ │ │ │ -
252 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ -
253 tensor_[rr] = y[rr].template tensor<deriv>()[0];
│ │ │ │ -
254 }
│ │ │ │ -
│ │ │ │ -
255 // assign with rth component of function
│ │ │ │ -
256 template <class Fy,int dimRy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
258 {
│ │ │ │ -
259 assign<Fy,dimRy>(y.block(),r);
│ │ │ │ -
260 }
│ │ │ │ -
│ │ │ │ -
261 // assign with scalar functions to component r
│ │ │ │ -
262 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
264 {
│ │ │ │ -
265 assign(r,y.block());
│ │ │ │ -
266 }
│ │ │ │ -
│ │ │ │ -
267 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
269 {
│ │ │ │ -
270 assign(r,y[0]);
│ │ │ │ -
271 }
│ │ │ │ -
│ │ │ │ -
272
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
274 {
│ │ │ │ -
275 return reinterpret_cast<Block&>(*this);
│ │ │ │ -
276 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
277 const Block &block() const
│ │ │ │ -
278 {
│ │ │ │ -
279 return reinterpret_cast<const Block&>(*this);
│ │ │ │ -
280 }
│ │ │ │ -
│ │ │ │ -
281
│ │ │ │ -
282 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
283 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &tensor() const
│ │ │ │ -
284 {
│ │ │ │ -
285 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
286 const std::integral_constant<int,dorder> a = {};
│ │ │ │ -
287 return tensor(a);
│ │ │ │ -
288 }
│ │ │ │ -
│ │ │ │ -
289 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
290 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &tensor()
│ │ │ │ -
291 {
│ │ │ │ -
292 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
293 return tensor(std::integral_constant<int,dorder>());
│ │ │ │ -
294 }
│ │ │ │ -
│ │ │ │ -
295 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
296 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block() const
│ │ │ │ -
297 {
│ │ │ │ -
298 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
299 const std::integral_constant<int,dorder> a = {};
│ │ │ │ -
300 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ -
301 }
│ │ │ │ -
│ │ │ │ -
302 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
303 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block()
│ │ │ │ -
304 {
│ │ │ │ -
305 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
306 const std::integral_constant<int,dorder> a = {};
│ │ │ │ -
307 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ -
308 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
310 return tensor_[r];
│ │ │ │ -
311 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
312 const ThisLFETensor &operator[](int r) const {
│ │ │ │ -
313 return tensor_[r];
│ │ │ │ -
314 }
│ │ │ │ -
│ │ │ │ -
315 protected:
│ │ │ │ -
316 template <class Fy,int dimRy>
│ │ │ │ -
│ │ │ │ -
317 void assign(const FieldVector<Fy,size*dimRy> &y,unsigned int r)
│ │ │ │ -
318 {
│ │ │ │ -
319 Base::template assign<Fy,dimRy>(reinterpret_cast<const FieldVector<Fy,Base::size*dimRy>&>(y),r);
│ │ │ │ -
320 tensor_[0] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[Base::size*dimRy+r*ThisLFETensor::size]);
│ │ │ │ -
321 }
│ │ │ │ -
│ │ │ │ -
322 template <class Fy>
│ │ │ │ -
│ │ │ │ -
323 void assign(unsigned int r,const FieldVector<Fy,size/dimR> &y)
│ │ │ │ -
324 {
│ │ │ │ -
325 Base::assign(r,reinterpret_cast<const FieldVector<Fy,Base::size/dimR>&>(y));
│ │ │ │ -
326 tensor_[r] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[Base::size/dimR]);
│ │ │ │ -
327 }
│ │ │ │ -
│ │ │ │ -
328 // assign with different layout (same dimRange)
│ │ │ │ -
329 template <class Fy,unsigned int dy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
331 {
│ │ │ │ -
332 Base::assign(y);
│ │ │ │ -
333 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ -
334 tensor_[rr] = y[rr].template tensor<deriv>()[0];
│ │ │ │ -
335 }
│ │ │ │ -
│ │ │ │ -
336
│ │ │ │ -
337 template <int dorder>
│ │ │ │ -
338 const Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
│ │ │ │ -
│ │ │ │ -
339 tensor(const std::integral_constant<int,dorder> &dorderVar) const
│ │ │ │ -
340 {
│ │ │ │ -
341 return Base::tensor(dorderVar);
│ │ │ │ -
342 }
│ │ │ │ -
│ │ │ │ -
343 const Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
│ │ │ │ -
│ │ │ │ -
344 tensor(const std::integral_constant<int,deriv> &dorderVar) const
│ │ │ │ -
345 {
│ │ │ │ -
346 return tensor_;
│ │ │ │ -
347 }
│ │ │ │ -
│ │ │ │ -
348 template <int dorder>
│ │ │ │ -
349 Dune::FieldVector<LFETensor<F,dimD,dorder>,dimR> &
│ │ │ │ -
│ │ │ │ -
350 tensor(const std::integral_constant<int,dorder> &dorderVar)
│ │ │ │ -
351 {
│ │ │ │ -
352 return Base::tensor(dorderVar);
│ │ │ │ -
353 }
│ │ │ │ -
│ │ │ │ -
354 Dune::FieldVector<LFETensor<F,dimD,deriv>,dimR> &
│ │ │ │ -
│ │ │ │ -
355 tensor(const std::integral_constant<int,deriv> &dorderVar)
│ │ │ │ -
356 {
│ │ │ │ -
357 return tensor_;
│ │ │ │ -
358 }
│ │ │ │ -
│ │ │ │ -
359 Dune::FieldVector<ThisLFETensor,dimR> tensor_;
│ │ │ │ -
360 };
│ │ │ │ -
│ │ │ │ -
361
│ │ │ │ -
362 template <class F,int dimD,int dimR>
│ │ │ │ -
│ │ │ │ -
363 struct Derivatives<F,dimD,dimR,0,DerivativeLayoutNS::value>
│ │ │ │ -
364 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
367
│ │ │ │ -
368 typedef F Field;
│ │ │ │ -
369 typedef F field_type;
│ │ │ │ -
370
│ │ │ │ - │ │ │ │ -
372 static const unsigned int dimDomain = dimD;
│ │ │ │ -
373 static const unsigned int dimRange = dimR;
│ │ │ │ -
374 constexpr static int size = ThisLFETensor::size*dimR;
│ │ │ │ -
375 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ -
376
│ │ │ │ -
377 template <class FF>
│ │ │ │ -
│ │ │ │ -
378 This &operator=(const FF& f)
│ │ │ │ -
379 {
│ │ │ │ -
380 for (int r=0; r<dimR; ++r)
│ │ │ │ -
381 tensor_[r] = field_cast<F>(f);
│ │ │ │ -
382 return *this;
│ │ │ │ -
383 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
384 This &operator=(const Dune::FieldVector<ThisLFETensor,dimR> &t)
│ │ │ │ -
385 {
│ │ │ │ -
386 tensor_ = t;
│ │ │ │ -
387 return *this;
│ │ │ │ -
388 }
│ │ │ │ -
│ │ │ │ -
389
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
391 {
│ │ │ │ -
392 block() = t;
│ │ │ │ -
393 return *this;
│ │ │ │ -
394 }
│ │ │ │ -
│ │ │ │ -
395
│ │ │ │ -
│ │ │ │ -
396 This &operator*= ( const field_type &f )
│ │ │ │ -
397 {
│ │ │ │ -
398 block() *= f;
│ │ │ │ -
399 return *this;
│ │ │ │ -
400 }
│ │ │ │ -
│ │ │ │ -
401
│ │ │ │ -
│ │ │ │ -
402 void axpy(const F &a, const This &y)
│ │ │ │ -
403 {
│ │ │ │ -
404 block().axpy(a,y.block());
│ │ │ │ -
405 }
│ │ │ │ -
│ │ │ │ -
406 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
408 {
│ │ │ │ -
409 field_cast(y.block(),block());
│ │ │ │ -
410 }
│ │ │ │ -
│ │ │ │ -
411 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
413 {
│ │ │ │ -
414 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ -
415 tensor_[rr] = y[rr].template tensor<0>()[0];
│ │ │ │ -
416 }
│ │ │ │ -
│ │ │ │ -
417 template <class Fy,int dimRy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
419 {
│ │ │ │ -
420 assign<Fy,dimRy>(y.block(),r);
│ │ │ │ -
421 }
│ │ │ │ -
│ │ │ │ -
422 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
424 {
│ │ │ │ -
425 tensor_[r].assign(y[0]);
│ │ │ │ -
426 }
│ │ │ │ -
│ │ │ │ -
427 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
429 {
│ │ │ │ -
430 tensor_[r].assign(y[0][0]);
│ │ │ │ -
431 }
│ │ │ │ -
│ │ │ │ -
432
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
434 {
│ │ │ │ -
435 return reinterpret_cast<Block&>(*this);
│ │ │ │ -
436 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
437 const Block &block() const
│ │ │ │ -
438 {
│ │ │ │ -
439 return reinterpret_cast<const Block&>(*this);
│ │ │ │ -
440 }
│ │ │ │ -
│ │ │ │ -
441
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
443 return tensor_[r];
│ │ │ │ -
444 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
445 const ThisLFETensor &operator[](int r) const {
│ │ │ │ -
446 return tensor_[r];
│ │ │ │ -
447 }
│ │ │ │ -
│ │ │ │ -
448 template <int dorder>
│ │ │ │ -
│ │ │ │ -
449 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &tensor() const
│ │ │ │ -
450 {
│ │ │ │ -
451 return tensor_;
│ │ │ │ -
452 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
453 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &tensor()
│ │ │ │ -
454 {
│ │ │ │ -
455 return tensor_;
│ │ │ │ -
456 }
│ │ │ │ -
│ │ │ │ -
457 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
458 const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block() const
│ │ │ │ -
459 {
│ │ │ │ -
460 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
461 const std::integral_constant<int,dorder> a = {};
│ │ │ │ -
462 return reinterpret_cast<const Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ -
463 }
│ │ │ │ -
│ │ │ │ -
464 template <unsigned int dorder>
│ │ │ │ -
│ │ │ │ -
465 Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR> &block()
│ │ │ │ -
466 {
│ │ │ │ -
467 // use integral_constant<int,...> here to stay compatible with Int2Type
│ │ │ │ -
468 const std::integral_constant<int,dorder> a = {};
│ │ │ │ -
469 return reinterpret_cast<Dune::FieldVector<F,LFETensor<F,dimD,dorder>::size*dimR>&>(tensor(a));
│ │ │ │ -
470 }
│ │ │ │ -
│ │ │ │ -
471
│ │ │ │ -
472 protected:
│ │ │ │ -
473 const Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
│ │ │ │ -
│ │ │ │ -
474 tensor(const std::integral_constant<int,0> &dorderVar) const
│ │ │ │ -
475 {
│ │ │ │ -
476 return tensor_;
│ │ │ │ -
477 }
│ │ │ │ -
│ │ │ │ -
478 Dune::FieldVector<LFETensor<F,dimD,0>,dimR> &
│ │ │ │ -
│ │ │ │ -
479 tensor(const std::integral_constant<int,0> &dorderVar)
│ │ │ │ -
480 {
│ │ │ │ -
481 return tensor_;
│ │ │ │ -
482 }
│ │ │ │ -
│ │ │ │ -
483 template <class Fy,unsigned int dy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
485 {
│ │ │ │ -
486 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ -
487 tensor_[rr] = y[rr].template tensor<0>()[0];
│ │ │ │ -
488 }
│ │ │ │ -
│ │ │ │ -
489 template <class Fy,int dimRy>
│ │ │ │ -
│ │ │ │ -
490 void assign(const FieldVector<Fy,size*dimRy> &y,unsigned int r)
│ │ │ │ -
491 {
│ │ │ │ -
492 tensor_[0] = reinterpret_cast<const FieldVector<Fy,ThisLFETensor::size>&>(y[r*ThisLFETensor::size]);
│ │ │ │ -
493 }
│ │ │ │ -
│ │ │ │ -
494 template <class Fy>
│ │ │ │ -
│ │ │ │ -
495 void assign(unsigned int r,const FieldVector<Fy,size/dimR> &y)
│ │ │ │ -
496 {
│ │ │ │ -
497 tensor_[r] = y;
│ │ │ │ -
498 }
│ │ │ │ -
│ │ │ │ -
499 Dune::FieldVector<ThisLFETensor,dimR> tensor_;
│ │ │ │ -
500 };
│ │ │ │ -
│ │ │ │ -
501
│ │ │ │ -
502 // Implemnetation for DerivativeLayoutNS::derivative based layout
│ │ │ │ -
503 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
504 struct Derivatives<F,dimD,dimR,deriv,DerivativeLayoutNS::derivative>
│ │ │ │ -
505 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
508
│ │ │ │ -
509 typedef F Field;
│ │ │ │ -
510 typedef F field_type;
│ │ │ │ -
511
│ │ │ │ - │ │ │ │ -
513 static const unsigned int dimDomain = dimD;
│ │ │ │ -
514 static const unsigned int dimRange = dimR;
│ │ │ │ -
515 constexpr static int size = ScalarDeriv::size*dimR;
│ │ │ │ -
516 typedef Dune::FieldVector<F,size> Block;
│ │ │ │ -
517
│ │ │ │ -
518 template <class FF>
│ │ │ │ -
│ │ │ │ -
519 This &operator=(const FF& f)
│ │ │ │ -
520 {
│ │ │ │ -
521 block() = field_cast<F>(f);
│ │ │ │ -
522 return *this;
│ │ │ │ -
523 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
525 {
│ │ │ │ -
526 block() = t;
│ │ │ │ -
527 return *this;
│ │ │ │ -
528 }
│ │ │ │ -
│ │ │ │ -
529
│ │ │ │ -
│ │ │ │ -
530 This &operator*= ( const field_type &f )
│ │ │ │ -
531 {
│ │ │ │ -
532 block() *= f;
│ │ │ │ -
533 return *this;
│ │ │ │ -
534 }
│ │ │ │ -
│ │ │ │ -
535
│ │ │ │ -
536 template <class FF>
│ │ │ │ -
│ │ │ │ -
537 void axpy(const FF &a, const This &y)
│ │ │ │ -
538 {
│ │ │ │ -
539 block().axpy(field_cast<F>(a),y.block());
│ │ │ │ -
540 }
│ │ │ │ -
│ │ │ │ -
541 // assign with same layout (only different Field)
│ │ │ │ -
542 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
544 {
│ │ │ │ -
545 field_cast(y.block(),block());
│ │ │ │ -
546 }
│ │ │ │ -
│ │ │ │ -
547 // assign with different layout (same dimRange)
│ │ │ │ -
548 template <class Fy>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
550 {
│ │ │ │ -
551 for (unsigned int rr=0; rr<dimR; ++rr)
│ │ │ │ -
552 deriv_[rr].assign(y,rr);
│ │ │ │ -
553 }
│ │ │ │ -
│ │ │ │ -
554 // assign with scalar functions to component r
│ │ │ │ -
555 template <class Fy,DerivativeLayoutNS::DerivativeLayout layouty>
│ │ │ │ -
│ │ │ │ -
556 void assign(unsigned int r,const Derivatives<Fy,dimD,1,deriv,layouty> &y)
│ │ │ │ -
557 {
│ │ │ │ -
558 deriv_[r].assign(r,y);
│ │ │ │ -
559 }
│ │ │ │ -
│ │ │ │ -
560
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
562 {
│ │ │ │ -
563 return reinterpret_cast<Block&>(*this);
│ │ │ │ -
564 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
565 const Block &block() const
│ │ │ │ -
566 {
│ │ │ │ -
567 return reinterpret_cast<const Block&>(*this);
│ │ │ │ -
568 }
│ │ │ │ -
│ │ │ │ -
569
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
571 return deriv_[r];
│ │ │ │ -
572 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
573 const ScalarDeriv &operator[](int r) const {
│ │ │ │ -
574 return deriv_[r];
│ │ │ │ -
575 }
│ │ │ │ -
│ │ │ │ -
576 protected:
│ │ │ │ -
577 Dune::FieldVector<ScalarDeriv,dimR> deriv_;
│ │ │ │ -
578 };
│ │ │ │ -
│ │ │ │ -
579
│ │ │ │ -
580 // ******************************************
│ │ │ │ -
581 // AXPY *************************************
│ │ │ │ -
582 // ******************************************
│ │ │ │ -
583 template <class Vec1,class Vec2,unsigned int deriv>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
585 {
│ │ │ │ -
586 template <class Field>
│ │ │ │ -
│ │ │ │ -
587 static void apply(unsigned int r,const Field &a,
│ │ │ │ -
588 const Vec1 &x, Vec2 &y)
│ │ │ │ -
589 {
│ │ │ │ -
590 y.axpy(a,x);
│ │ │ │ -
591 }
│ │ │ │ -
│ │ │ │ -
592 };
│ │ │ │ -
│ │ │ │ -
593 template <class F1,int dimD,int dimR,
│ │ │ │ -
594 unsigned int d,
│ │ │ │ -
595 class Vec2,
│ │ │ │ -
596 unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
597 struct LFETensorAxpy<Derivatives<F1,dimD,dimR,d,DerivativeLayoutNS::value>,Vec2,deriv>
│ │ │ │ -
598 {
│ │ │ │ - │ │ │ │ -
600 template <class Field>
│ │ │ │ -
│ │ │ │ -
601 static void apply(unsigned int r,const Field &a,
│ │ │ │ -
602 const Vec1 &x, Vec2 &y)
│ │ │ │ -
603 {
│ │ │ │ -
604 const FieldVector<F1,Vec2::size> &xx = x.template block<deriv>();
│ │ │ │ -
605 for (int i=0; i<y.size; ++i)
│ │ │ │ -
606 y[i] += xx[i]*a;
│ │ │ │ -
607 }
│ │ │ │ -
│ │ │ │ -
608 };
│ │ │ │ -
│ │ │ │ -
609 template <class F1,int dimD,int dimR,
│ │ │ │ -
610 unsigned int d,
│ │ │ │ -
611 class Vec2,
│ │ │ │ -
612 unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
613 struct LFETensorAxpy<Derivatives<F1,dimD,dimR,d,DerivativeLayoutNS::derivative>,Vec2,deriv>
│ │ │ │ -
614 {
│ │ │ │ - │ │ │ │ -
616 template <class Field>
│ │ │ │ -
│ │ │ │ -
617 static void apply(unsigned int r,const Field &a,
│ │ │ │ -
618 const Vec1 &x, Vec2 &y)
│ │ │ │ -
619 {
│ │ │ │ -
620 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ - │ │ │ │ -
622 Vec2,deriv>::apply(rr,a,x[rr],y);
│ │ │ │ -
623 }
│ │ │ │ -
│ │ │ │ -
624 };
│ │ │ │ -
│ │ │ │ -
625 template <class F1,int dimD,
│ │ │ │ -
626 unsigned int d,
│ │ │ │ -
627 class Vec2,
│ │ │ │ -
628 unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
629 struct LFETensorAxpy<Derivatives<F1,dimD,1,d,DerivativeLayoutNS::derivative>,Vec2,deriv>
│ │ │ │ -
630 {
│ │ │ │ - │ │ │ │ -
632 template <class Field>
│ │ │ │ -
│ │ │ │ -
633 static void apply(unsigned int r,const Field &a,
│ │ │ │ -
634 const Vec1 &x, Vec2 &y)
│ │ │ │ -
635 {
│ │ │ │ - │ │ │ │ -
637 Vec2,deriv>::apply(r,a,x[0],y);
│ │ │ │ -
638 }
│ │ │ │ -
│ │ │ │ -
639 };
│ │ │ │ -
│ │ │ │ -
640 template <class F1,int dimD,
│ │ │ │ -
641 unsigned int d,
│ │ │ │ -
642 class Vec2,
│ │ │ │ -
643 unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
644 struct LFETensorAxpy<Derivatives<F1,dimD,1,d,DerivativeLayoutNS::value>,Vec2,deriv>
│ │ │ │ -
645 {
│ │ │ │ - │ │ │ │ -
647 template <class Field>
│ │ │ │ -
│ │ │ │ -
648 static void apply(unsigned int r,const Field &a,
│ │ │ │ -
649 const Vec1 &x, Vec2 &y)
│ │ │ │ -
650 {
│ │ │ │ -
651 typedef LFETensor<F1,dimD,deriv> LFETensorType;
│ │ │ │ -
652 const unsigned int rr = r*LFETensorType::size;
│ │ │ │ -
653 const FieldVector<F1,LFETensorType::size> &xx = x.template block<deriv>();
│ │ │ │ -
654 for (int i=0; i<FieldVector<F1,LFETensorType::size>::dimension; ++i)
│ │ │ │ -
655 y[rr+i] += xx[i]*a;
│ │ │ │ -
656 }
│ │ │ │ -
│ │ │ │ -
657 };
│ │ │ │ -
│ │ │ │ -
658
│ │ │ │ -
659 // ***********************************************
│ │ │ │ -
660 // Assign ****************************************
│ │ │ │ -
661 // ***********************************************
│ │ │ │ -
662 template <class Vec1,class Vec2>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
664 {
│ │ │ │ -
│ │ │ │ -
665 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
666 {
│ │ │ │ -
667 field_cast(vec1,vec2);
│ │ │ │ -
668 }
│ │ │ │ -
│ │ │ │ -
669 };
│ │ │ │ -
│ │ │ │ -
670 template <int dimD,int dimR,unsigned int deriv, DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ -
671 class F1,class F2>
│ │ │ │ -
│ │ │ │ -
672 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,layout>,
│ │ │ │ -
673 Derivatives<F2,dimD,dimR,deriv,layout> >
│ │ │ │ -
674 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
677 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
678 {
│ │ │ │ -
679 field_cast(vec1.block(),vec2.block());
│ │ │ │ -
680 }
│ │ │ │ -
│ │ │ │ -
681 };
│ │ │ │ -
│ │ │ │ -
682 template <int dimD,int dimR,unsigned int deriv,
│ │ │ │ -
683 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
684 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::value>,
│ │ │ │ -
685 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ -
686 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
689 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
690 {
│ │ │ │ -
691 vec2.assign(vec1);
│ │ │ │ -
692 }
│ │ │ │ -
│ │ │ │ -
693 };
│ │ │ │ -
│ │ │ │ -
694 template <int dimD,int dimR,unsigned int deriv,
│ │ │ │ -
695 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
696 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ -
697 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
│ │ │ │ -
698 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
701 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
702 {
│ │ │ │ -
703 vec2.assign(vec1);
│ │ │ │ -
704 }
│ │ │ │ -
│ │ │ │ -
705 };
│ │ │ │ -
│ │ │ │ -
706 template <int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ -
707 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
708 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ -
709 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::value> >
│ │ │ │ -
710 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
713 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
714 {
│ │ │ │ -
715 vec2.assign(r,vec1);
│ │ │ │ -
716 }
│ │ │ │ -
│ │ │ │ -
717 };
│ │ │ │ -
│ │ │ │ -
718 template <int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ -
719 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
720 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ -
721 Derivatives<F2,dimD,dimR,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ -
722 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
725 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
726 {
│ │ │ │ -
727 vec2.assign(r,vec1);
│ │ │ │ -
728 }
│ │ │ │ -
│ │ │ │ -
729 };
│ │ │ │ -
│ │ │ │ -
730 template <int dimD,unsigned int deriv,
│ │ │ │ -
731 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
732 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,
│ │ │ │ -
733 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
│ │ │ │ -
734 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
737 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
738 {
│ │ │ │ -
739 field_cast(vec1.block(),vec2.block());
│ │ │ │ -
740 }
│ │ │ │ -
│ │ │ │ -
741 };
│ │ │ │ -
│ │ │ │ -
742 template <int dimD,unsigned int deriv,
│ │ │ │ -
743 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
744 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ -
745 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ -
746 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
749 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
750 {
│ │ │ │ -
751 field_cast(vec1.block(),vec2.block());
│ │ │ │ -
752 }
│ │ │ │ -
│ │ │ │ -
753 };
│ │ │ │ -
│ │ │ │ -
754 template <int dimD,unsigned int deriv,
│ │ │ │ -
755 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
756 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,
│ │ │ │ -
757 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::value> >
│ │ │ │ -
758 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
761 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
762 {
│ │ │ │ -
763 field_cast(vec1.block(),vec2.block());
│ │ │ │ -
764 }
│ │ │ │ -
│ │ │ │ -
765 };
│ │ │ │ -
│ │ │ │ -
766 template <int dimD,unsigned int deriv,
│ │ │ │ -
767 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
768 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,
│ │ │ │ -
769 Derivatives<F2,dimD,1,deriv,DerivativeLayoutNS::derivative> >
│ │ │ │ -
770 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
│ │ │ │ -
773 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
774 {
│ │ │ │ -
775 field_cast(vec1.block(),vec2.block());
│ │ │ │ -
776 }
│ │ │ │ -
│ │ │ │ -
777 };
│ │ │ │ -
│ │ │ │ -
778 template <int dimD,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout,
│ │ │ │ -
779 class F1, class F2>
│ │ │ │ -
│ │ │ │ -
780 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,layout>,
│ │ │ │ -
781 F2 >
│ │ │ │ -
782 {
│ │ │ │ - │ │ │ │ -
784 typedef F2 Vec2;
│ │ │ │ -
│ │ │ │ -
785 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
786 {
│ │ │ │ -
787 field_cast(vec1.block(),vec2);
│ │ │ │ -
788 }
│ │ │ │ -
│ │ │ │ -
789 };
│ │ │ │ -
│ │ │ │ -
790 template <int dimD,int dimR,
│ │ │ │ -
791 class F1,unsigned int deriv,
│ │ │ │ -
792 class F2>
│ │ │ │ -
│ │ │ │ -
793 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::value>,FieldVector<F2,dimR> >
│ │ │ │ -
794 {
│ │ │ │ - │ │ │ │ -
796 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ -
│ │ │ │ -
797 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
798 {
│ │ │ │ -
799 field_cast(vec1.template block<0>(),vec2);
│ │ │ │ -
800 }
│ │ │ │ -
│ │ │ │ -
801 };
│ │ │ │ -
│ │ │ │ -
802 template <int dimD,int dimR,
│ │ │ │ -
803 class F1,unsigned int deriv,
│ │ │ │ -
804 class F2>
│ │ │ │ -
│ │ │ │ -
805 struct DerivativeAssign<Derivatives<F1,dimD,dimR,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,dimR> >
│ │ │ │ -
806 {
│ │ │ │ - │ │ │ │ -
808 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ -
│ │ │ │ -
809 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
810 {
│ │ │ │ -
811 for (int rr=0; rr<dimR; ++rr)
│ │ │ │ -
812 field_cast(vec1[rr].template tensor<0>()[0].block(),vec2[rr]);
│ │ │ │ -
813 }
│ │ │ │ -
│ │ │ │ -
814 };
│ │ │ │ -
│ │ │ │ -
815 template <int dimD,
│ │ │ │ -
816 class F1,unsigned int deriv,
│ │ │ │ -
817 class F2,int dimR>
│ │ │ │ -
│ │ │ │ -
818 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,FieldVector<F2,dimR> >
│ │ │ │ -
819 {
│ │ │ │ - │ │ │ │ -
821 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ -
│ │ │ │ -
822 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
823 {
│ │ │ │ -
824 field_cast(vec1.template tensor<0>()[0].block(),vec2[r]);
│ │ │ │ -
825 }
│ │ │ │ -
│ │ │ │ -
826 };
│ │ │ │ -
│ │ │ │ -
827 template <int dimD,
│ │ │ │ -
828 class F1,unsigned int deriv,
│ │ │ │ -
829 class F2,int dimR>
│ │ │ │ -
│ │ │ │ -
830 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,dimR> >
│ │ │ │ -
831 {
│ │ │ │ - │ │ │ │ -
833 typedef FieldVector<F2,dimR> Vec2;
│ │ │ │ -
│ │ │ │ -
834 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
835 {
│ │ │ │ -
836 field_cast(vec1[0].template tensor<0>()[0].block(),vec2[r]);
│ │ │ │ -
837 }
│ │ │ │ -
│ │ │ │ -
838 };
│ │ │ │ -
│ │ │ │ -
839 template <int dimD,
│ │ │ │ -
840 class F1,unsigned int deriv,
│ │ │ │ -
841 class F2>
│ │ │ │ -
│ │ │ │ -
842 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::value>,FieldVector<F2,1> >
│ │ │ │ -
843 {
│ │ │ │ - │ │ │ │ -
845 typedef FieldVector<F2,1> Vec2;
│ │ │ │ -
│ │ │ │ -
846 static void apply(unsigned int r,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
847 {
│ │ │ │ -
848 field_cast(vec1.template tensor<0>()[0].block(),vec2);
│ │ │ │ -
849 }
│ │ │ │ -
│ │ │ │ -
850 };
│ │ │ │ -
│ │ │ │ -
851 template <int dimD,
│ │ │ │ -
852 class F1,unsigned int deriv,
│ │ │ │ -
853 class F2>
│ │ │ │ -
│ │ │ │ -
854 struct DerivativeAssign<Derivatives<F1,dimD,1,deriv,DerivativeLayoutNS::derivative>,FieldVector<F2,1> >
│ │ │ │ -
855 {
│ │ │ │ - │ │ │ │ -
857 typedef FieldVector<F2,1> Vec2;
│ │ │ │ -
│ │ │ │ -
858 static void apply(unsigned int /*r*/,const Vec1 &vec1,Vec2 &vec2)
│ │ │ │ -
859 {
│ │ │ │ -
860 field_cast(vec1[0].template tensor<0>()[0].block(),vec2);
│ │ │ │ -
861 }
│ │ │ │ -
│ │ │ │ -
862 };
│ │ │ │ -
│ │ │ │ -
863
│ │ │ │ -
864 // ***********************************************
│ │ │ │ -
865 // IO ********************************************
│ │ │ │ -
866 // ***********************************************
│ │ │ │ -
867 template <class F,int dimD,unsigned int deriv>
│ │ │ │ -
│ │ │ │ -
868 std::ostream &operator<< ( std::ostream &out, const LFETensor< F,dimD,deriv > &tensor )
│ │ │ │ -
869 {
│ │ │ │ -
870 return out << tensor.block();
│ │ │ │ -
871 }
│ │ │ │ -
│ │ │ │ -
872#if 0
│ │ │ │ -
873 template <class F,int dimD,unsigned int deriv>
│ │ │ │ -
874 std::ostream &operator<< ( std::ostream &out, const ScalarDerivatives< F,dimD,deriv > &d )
│ │ │ │ -
875 {
│ │ │ │ -
876 out << static_cast<const ScalarDerivatives< F,dimD,deriv-1 > &>(d);
│ │ │ │ -
877 out << " , " << d.tensor() << std::endl;
│ │ │ │ -
878 return out;
│ │ │ │ -
879 }
│ │ │ │ -
880 template <class F,int dimD>
│ │ │ │ -
881 std::ostream &operator<< ( std::ostream &out, const ScalarDerivatives< F,dimD,0 > &d )
│ │ │ │ -
882 {
│ │ │ │ -
883 out << d.tensor() << std::endl;
│ │ │ │ -
884 return out;
│ │ │ │ -
885 }
│ │ │ │ -
886#endif
│ │ │ │ -
887 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
889 {
│ │ │ │ -
890 out << " ( ";
│ │ │ │ -
891 out << d[0];
│ │ │ │ -
892 for (int r=1; r<dimR; ++r)
│ │ │ │ -
893 {
│ │ │ │ -
894 out << " , " << d[r];
│ │ │ │ -
895 }
│ │ │ │ -
896 out << " ) " << std::endl;
│ │ │ │ -
897 return out;
│ │ │ │ -
898 }
│ │ │ │ -
│ │ │ │ -
899 template <class F,int dimD,int dimR,unsigned int deriv>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
901 {
│ │ │ │ -
902 out << static_cast<const Derivatives< F,dimD,dimR,deriv-1,DerivativeLayoutNS::value > &>(d);
│ │ │ │ -
903 out << " ( ";
│ │ │ │ -
904 out << d[0];
│ │ │ │ -
905 for (int r=1; r<dimR; ++r)
│ │ │ │ -
906 {
│ │ │ │ -
907 out << " , " << d[r];
│ │ │ │ -
908 }
│ │ │ │ -
909 out << " ) " << std::endl;
│ │ │ │ -
910 return out;
│ │ │ │ -
911 }
│ │ │ │ -
│ │ │ │ -
912 template <class F,int dimD,int dimR>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
914 {
│ │ │ │ -
915 out << " ( ";
│ │ │ │ -
916 out << d[0];
│ │ │ │ -
917 for (int r=1; r<dimR; ++r)
│ │ │ │ -
918 {
│ │ │ │ -
919 out << " , " << d[r];
│ │ │ │ -
920 }
│ │ │ │ -
921 out << " ) " << std::endl;
│ │ │ │ -
922 return out;
│ │ │ │ -
923 }
│ │ │ │ -
│ │ │ │ -
924 template <class F,int dimD,int dimR>
│ │ │ │ -
│ │ │ │ -
925 std::ostream &operator<< ( std::ostream &out, const Derivatives< F,dimD,dimR,0,DerivativeLayoutNS::value > &d )
│ │ │ │ -
926 {
│ │ │ │ -
927 out << " ( ";
│ │ │ │ -
928 out << d[0];
│ │ │ │ -
929 for (int r=1; r<dimR; ++r)
│ │ │ │ -
930 {
│ │ │ │ -
931 out << " , " << d[r];
│ │ │ │ -
932 }
│ │ │ │ -
933 out << " ) " << std::endl;
│ │ │ │ -
934 return out;
│ │ │ │ -
935 }
│ │ │ │ -
│ │ │ │ -
936 template <class F,int dimD,int dimR,unsigned int deriv,DerivativeLayoutNS::DerivativeLayout layout>
│ │ │ │ -
│ │ │ │ -
937 std::ostream &operator<< ( std::ostream &out, const std::vector<Derivatives< F,dimD,dimR,deriv,layout > > &y )
│ │ │ │ -
938 {
│ │ │ │ -
939 out << "Number of basis functions: " << y.size() << std::endl;
│ │ │ │ -
940 for (unsigned int i=0; i<y.size(); ++i)
│ │ │ │ -
941 {
│ │ │ │ -
942 out << "Base " << i << " : " << std::endl;
│ │ │ │ -
943 out << y[i];
│ │ │ │ -
944 out << std::endl;
│ │ │ │ -
945 }
│ │ │ │ -
946 return out;
│ │ │ │ -
947 }
│ │ │ │ -
│ │ │ │ -
948}
│ │ │ │ -
949#endif // DUNE_TENSOR_HH
│ │ │ │ - │ │ │ │ +
175 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
176 {
│ │ │ │ +
177 std::vector<CoefficientType> outDummy;
│ │ │ │ + │ │ │ │ +
179 asBase.interpolate(FunctionType(std::cref(f)),outDummy);
│ │ │ │ +
180 out.resize(outDummy.size());
│ │ │ │ +
181 for(typename std::vector<CoefficientType>::size_type i=0; i<outDummy.size(); ++i)
│ │ │ │ +
182 out[i] = outDummy[i];
│ │ │ │ +
183 }
│ │ │ │ +
│ │ │ │ +
184 };
│ │ │ │ +
│ │ │ │ +
185
│ │ │ │ +
186
│ │ │ │ +
187
│ │ │ │ +
188 // -----------------------------------------------------------------
│ │ │ │ +
189 // Coefficients
│ │ │ │ +
190 // -----------------------------------------------------------------
│ │ │ │ +
191
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
198 {
│ │ │ │ +
199 public:
│ │ │ │ +
200
│ │ │ │ + │ │ │ │ +
202
│ │ │ │ +
204 virtual std::size_t size () const = 0;
│ │ │ │ +
205
│ │ │ │ +
207 const virtual LocalKey& localKey (std::size_t i) const = 0;
│ │ │ │ +
208
│ │ │ │ +
209 };
│ │ │ │ +
│ │ │ │ +
210
│ │ │ │ +
211
│ │ │ │ +
212
│ │ │ │ +
213 // -----------------------------------------------------------------
│ │ │ │ +
214 // Finite Element
│ │ │ │ +
215 // -----------------------------------------------------------------
│ │ │ │ +
216
│ │ │ │ +
217
│ │ │ │ +
223 template<class T>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
225 {
│ │ │ │ +
226 using LocalBasisTraits = T;
│ │ │ │ +
227 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
234
│ │ │ │ + │ │ │ │ +
236
│ │ │ │ +
238 virtual const typename Traits::LocalBasisType& localBasis () const = 0;
│ │ │ │ +
239
│ │ │ │ +
241 virtual const typename Traits::LocalCoefficientsType& localCoefficients () const = 0;
│ │ │ │ +
242
│ │ │ │ +
244 virtual const typename Traits::LocalInterpolationType& localInterpolation () const = 0;
│ │ │ │ +
245
│ │ │ │ +
247 virtual unsigned int size () const = 0;
│ │ │ │ +
248
│ │ │ │ +
250 virtual const GeometryType type () const = 0;
│ │ │ │ +
251
│ │ │ │ + │ │ │ │ +
253 };
│ │ │ │ +
│ │ │ │ +
254}
│ │ │ │ +
255#endif
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ -
DerivativeLayout
Definition tensor.hh:176
│ │ │ │ -
@ derivative
Definition tensor.hh:176
│ │ │ │ -
@ value
Definition tensor.hh:176
│ │ │ │ -
Definition tensor.hh:33
│ │ │ │ -
const Block & block() const
Definition tensor.hh:76
│ │ │ │ -
This & operator*=(const field_type &f)
Definition tensor.hh:56
│ │ │ │ -
Dune::FieldVector< F, size > Block
Definition tensor.hh:41
│ │ │ │ -
This & operator=(const FF &f)
Definition tensor.hh:44
│ │ │ │ -
Block block_
Definition tensor.hh:89
│ │ │ │ -
F field_type
Definition tensor.hh:39
│ │ │ │ -
void axpy(const F &a, const This &y)
Definition tensor.hh:80
│ │ │ │ -
Block & block()
Definition tensor.hh:72
│ │ │ │ -
void assign(const LFETensor< Fy, dimD, deriv > &y)
Definition tensor.hh:85
│ │ │ │ -
static const unsigned int size
Definition tensor.hh:40
│ │ │ │ -
const field_type & operator[](const unsigned int i) const
Definition tensor.hh:62
│ │ │ │ -
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:97
│ │ │ │ - │ │ │ │ -
Definition tensor.hh:115
│ │ │ │ -
Block & block()
Definition tensor.hh:162
│ │ │ │ -
F field_type
Definition tensor.hh:119
│ │ │ │ -
Block block_
Definition tensor.hh:170
│ │ │ │ -
void assign(const LFETensor< Fy, dimD, 0 > &y)
Definition tensor.hh:157
│ │ │ │ -
const Block & block() const
Definition tensor.hh:166
│ │ │ │ -
void axpy(const F &a, const This &y)
Definition tensor.hh:152
│ │ │ │ -
Dune::FieldVector< F, size > Block
Definition tensor.hh:121
│ │ │ │ -
Definition tensor.hh:180
│ │ │ │ - │ │ │ │ -
typename FieldTraits< field_type >::real_type real_type
Definition tensor.hh:187
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > This
Definition tensor.hh:195
│ │ │ │ -
This & operator=(const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > &t)
Definition tensor.hh:219
│ │ │ │ - │ │ │ │ -
Derivatives< F, dimD, dimR, deriv-1, DerivativeLayoutNS::value > Base
Definition tensor.hh:196
│ │ │ │ -
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar) const
Definition tensor.hh:339
│ │ │ │ -
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:317
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:243
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:330
│ │ │ │ - │ │ │ │ -
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:312
│ │ │ │ -
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:303
│ │ │ │ -
LFETensor< F, dimD, deriv > ThisLFETensor
Definition tensor.hh:197
│ │ │ │ -
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:263
│ │ │ │ -
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:296
│ │ │ │ -
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std::integral_constant< int, dorder > &dorderVar)
Definition tensor.hh:350
│ │ │ │ -
const Block & block() const
Definition tensor.hh:277
│ │ │ │ -
void axpy(const F &a, const This &y)
Definition tensor.hh:236
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:249
│ │ │ │ -
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:213
│ │ │ │ -
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:268
│ │ │ │ -
This & operator=(const Block &t)
Definition tensor.hh:224
│ │ │ │ -
Dune::FieldVector< F, size > Block
Definition tensor.hh:206
│ │ │ │ -
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:359
│ │ │ │ -
Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar)
Definition tensor.hh:355
│ │ │ │ -
Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor()
Definition tensor.hh:290
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimRy, deriv, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:257
│ │ │ │ -
const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() const
Definition tensor.hh:283
│ │ │ │ -
const Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std::integral_constant< int, deriv > &dorderVar) const
Definition tensor.hh:344
│ │ │ │ -
ThisLFETensor & operator[](int r)
Definition tensor.hh:309
│ │ │ │ - │ │ │ │ -
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:323
│ │ │ │ - │ │ │ │ -
ThisLFETensor & operator[](int r)
Definition tensor.hh:442
│ │ │ │ -
LFETensor< F, dimD, 0 > ThisLFETensor
Definition tensor.hh:366
│ │ │ │ -
Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block()
Definition tensor.hh:465
│ │ │ │ -
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar)
Definition tensor.hh:479
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:407
│ │ │ │ - │ │ │ │ -
Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > This
Definition tensor.hh:365
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:484
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimRy, 0, DerivativeLayoutNS::value > &y, unsigned int r)
Definition tensor.hh:418
│ │ │ │ -
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() const
Definition tensor.hh:449
│ │ │ │ -
Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor()
Definition tensor.hh:453
│ │ │ │ -
This & operator=(const Block &t)
Definition tensor.hh:390
│ │ │ │ - │ │ │ │ -
const ThisLFETensor & operator[](int r) const
Definition tensor.hh:445
│ │ │ │ -
const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std::integral_constant< int, 0 > &dorderVar) const
Definition tensor.hh:474
│ │ │ │ -
Dune::FieldVector< F, size > Block
Definition tensor.hh:375
│ │ │ │ -
const Block & block() const
Definition tensor.hh:437
│ │ │ │ -
const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() const
Definition tensor.hh:458
│ │ │ │ -
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:428
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:412
│ │ │ │ -
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, DerivativeLayoutNS::value > &y)
Definition tensor.hh:423
│ │ │ │ -
This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t)
Definition tensor.hh:384
│ │ │ │ -
void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r)
Definition tensor.hh:490
│ │ │ │ -
Dune::FieldVector< ThisLFETensor, dimR > tensor_
Definition tensor.hh:499
│ │ │ │ -
void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y)
Definition tensor.hh:495
│ │ │ │ -
This & operator=(const FF &f)
Definition tensor.hh:378
│ │ │ │ - │ │ │ │ -
void axpy(const F &a, const This &y)
Definition tensor.hh:402
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, layouty > &y)
Definition tensor.hh:556
│ │ │ │ - │ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value > &y)
Definition tensor.hh:549
│ │ │ │ -
Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > This
Definition tensor.hh:506
│ │ │ │ -
Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::value > ScalarDeriv
Definition tensor.hh:507
│ │ │ │ -
const ScalarDeriv & operator[](int r) const
Definition tensor.hh:573
│ │ │ │ -
void axpy(const FF &a, const This &y)
Definition tensor.hh:537
│ │ │ │ -
This & operator=(const Block &t)
Definition tensor.hh:524
│ │ │ │ -
Dune::FieldVector< F, size > Block
Definition tensor.hh:516
│ │ │ │ -
Dune::FieldVector< ScalarDeriv, dimR > deriv_
Definition tensor.hh:577
│ │ │ │ -
void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::derivative > &y)
Definition tensor.hh:543
│ │ │ │ -
Definition tensor.hh:585
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:587
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:601
│ │ │ │ -
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:599
│ │ │ │ -
Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:615
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:617
│ │ │ │ -
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:631
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:633
│ │ │ │ -
static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
Definition tensor.hh:648
│ │ │ │ -
Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:646
│ │ │ │ -
Definition tensor.hh:664
│ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:665
│ │ │ │ - │ │ │ │ - │ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:677
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2
Definition tensor.hh:712
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2
Definition tensor.hh:724
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:785
│ │ │ │ -
Derivatives< F1, dimD, 1, deriv, layout > Vec1
Definition tensor.hh:783
│ │ │ │ -
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:795
│ │ │ │ - │ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:797
│ │ │ │ -
Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:807
│ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:809
│ │ │ │ - │ │ │ │ -
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:820
│ │ │ │ - │ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:822
│ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:834
│ │ │ │ -
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:832
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1
Definition tensor.hh:844
│ │ │ │ -
static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:846
│ │ │ │ -
Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1
Definition tensor.hh:856
│ │ │ │ -
static void apply(unsigned int, const Vec1 &vec1, Vec2 &vec2)
Definition tensor.hh:858
│ │ │ │ - │ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
virtual base class for a local interpolation
Definition virtualinterface.hh:133
│ │ │ │ +
virtual ~LocalInterpolationVirtualInterface()
Definition virtualinterface.hh:143
│ │ │ │ +
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:137
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
determine coefficients interpolating a given function
Definition virtualinterface.hh:175
│ │ │ │ +
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:140
│ │ │ │ +
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
│ │ │ │ +
void interpolate(const F &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition virtualinterface.hh:163
│ │ │ │ +
virtual base class for a local basis
Definition virtualinterface.hh:40
│ │ │ │ +
virtual unsigned int order() const =0
Polynomial order of the shape functions.
│ │ │ │ +
virtual void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const =0
Evaluate jacobian of all shape functions at given position.
│ │ │ │ +
virtual unsigned int size() const =0
Number of shape functions.
│ │ │ │ +
T Traits
Definition virtualinterface.hh:42
│ │ │ │ +
virtual void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const =0
Evaluate all basis function at given position.
│ │ │ │ +
virtual ~LocalBasisVirtualInterface()
Definition virtualinterface.hh:45
│ │ │ │ +
virtual void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const =0
Evaluate partial derivatives of any order of all shape functions.
│ │ │ │ +
virtual base class for a local interpolation
Definition virtualinterface.hh:102
│ │ │ │ +
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:106
│ │ │ │ +
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:109
│ │ │ │ +
virtual ~LocalInterpolationVirtualInterfaceBase()
Definition virtualinterface.hh:111
│ │ │ │ +
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const =0
determine coefficients interpolating a given function
│ │ │ │ +
virtual base class for local coefficients
Definition virtualinterface.hh:198
│ │ │ │ +
virtual ~LocalCoefficientsVirtualInterface()
Definition virtualinterface.hh:201
│ │ │ │ +
virtual std::size_t size() const =0
number of coefficients
│ │ │ │ +
virtual const LocalKey & localKey(std::size_t i) const =0
get i'th index
│ │ │ │ +
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ +
virtual LocalFiniteElementVirtualInterface< T > * clone() const =0
│ │ │ │ +
virtual const Traits::LocalInterpolationType & localInterpolation() const =0
│ │ │ │ +
virtual unsigned int size() const =0
│ │ │ │ +
virtual const Traits::LocalBasisType & localBasis() const =0
│ │ │ │ +
virtual const GeometryType type() const =0
│ │ │ │ +
LocalFiniteElementTraits< LocalBasisVirtualInterface< LocalBasisTraits >, LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType > > Traits
Definition virtualinterface.hh:233
│ │ │ │ +
virtual ~LocalFiniteElementVirtualInterface()
Definition virtualinterface.hh:235
│ │ │ │ +
virtual const Traits::LocalCoefficientsType & localCoefficients() const =0
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,1635 +1,322 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -tensor.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +virtualinterface.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_TENSOR_HH │ │ │ │ │ -7#define DUNE_TENSOR_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALINTERFACE_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 /*********************************************** │ │ │ │ │ -19 * The classes here are work in progress. │ │ │ │ │ -20 * Basically they provide tensor structures for │ │ │ │ │ -21 * higher order derivatives of vector valued function. │ │ │ │ │ -22 * Two storage structures are provided │ │ │ │ │ -23 * (either based on the components of the vector valued │ │ │ │ │ -24 * functions or on the order of the derivative). │ │ │ │ │ -25 * Conversions are supplied between the two storage │ │ │ │ │ -26 * structures and simple operations, which make the │ │ │ │ │ -27 * code difficult to use and requires rewriting... │ │ │ │ │ -28 ***************************************************/ │ │ │ │ │ -29 │ │ │ │ │ -30 // Structure for scalar tensor of order deriv │ │ │ │ │ -31 template │ │ │ │ │ -_3_2 class _L_F_E_T_e_n_s_o_r │ │ │ │ │ -33 { │ │ │ │ │ -34 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_e_r_i_v_> _T_h_i_s; │ │ │ │ │ -35 typedef _L_F_E_T_e_n_s_o_r _B_a_s_e_D_i_m; │ │ │ │ │ -36 typedef _L_F_E_T_e_n_s_o_r _B_a_s_e_D_e_r_i_v; │ │ │ │ │ -37 │ │ │ │ │ -38 public: │ │ │ │ │ -_3_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ -_4_0 static const unsigned int _s_i_z_e = _B_a_s_e_D_i_m_:_:_s_i_z_e+_B_a_s_e_D_e_r_i_v_:_:_s_i_z_e; │ │ │ │ │ -_4_1 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ -42 │ │ │ │ │ -43 template< class FF > │ │ │ │ │ -_4_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const FF &f ) │ │ │ │ │ -45 { │ │ │ │ │ -46 _b_l_o_c_k() = field_cast< F >( f ); │ │ │ │ │ -47 return *this; │ │ │ │ │ -48 } │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +18 │ │ │ │ │ +19namespace _D_u_n_e │ │ │ │ │ +20{ │ │ │ │ │ +21 │ │ │ │ │ +22 // forward declaration needed by the helper traits │ │ │ │ │ +23 template │ │ │ │ │ +24 class LocalInterpolationVirtualInterface; │ │ │ │ │ +25 │ │ │ │ │ +26 │ │ │ │ │ +27 │ │ │ │ │ +28 // ----------------------------------------------------------------- │ │ │ │ │ +29 // Basis │ │ │ │ │ +30 // ----------------------------------------------------------------- │ │ │ │ │ +31 │ │ │ │ │ +38 template │ │ │ │ │ +_3_9 class _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +40 { │ │ │ │ │ +41 public: │ │ │ │ │ +_4_2 using _T_r_a_i_t_s = T; │ │ │ │ │ +43 │ │ │ │ │ +44 │ │ │ │ │ +_4_5 virtual _~_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ +46 │ │ │ │ │ +_4_8 virtual unsigned int _s_i_z_e () const = 0; │ │ │ │ │ 49 │ │ │ │ │ -_5_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _B_l_o_c_k &b ) │ │ │ │ │ -51 { │ │ │ │ │ -52 _b_l_o_c_k() = b; │ │ │ │ │ -53 return *this; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_6 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ -57 { │ │ │ │ │ -58 _b_l_o_c_k() *= f; │ │ │ │ │ -59 return *this; │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_2 const _f_i_e_l_d___t_y_p_e &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ -63 { │ │ │ │ │ -64 return _b_l_o_c_k()[ i ]; │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -_6_7 _f_i_e_l_d___t_y_p_e &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) │ │ │ │ │ -68 { │ │ │ │ │ -69 return _b_l_o_c_k()[ i ]; │ │ │ │ │ -70 } │ │ │ │ │ +_5_1 virtual unsigned int _o_r_d_e_r () const = 0; │ │ │ │ │ +52 │ │ │ │ │ +_5_8 virtual void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename Traits::DomainType& in, │ │ │ │ │ +59 std::vector& out) const = 0; │ │ │ │ │ +60 │ │ │ │ │ +_6_9 virtual void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename Traits::DomainType& in, / │ │ │ │ │ +/ position │ │ │ │ │ +70 std::vector& out) const = 0; │ │ │ │ │ 71 │ │ │ │ │ -_7_2 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ -73 { │ │ │ │ │ -74 return _b_l_o_c_k__; │ │ │ │ │ -75 } │ │ │ │ │ -_7_6 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ -77 { │ │ │ │ │ -78 return _b_l_o_c_k__; │ │ │ │ │ -79 } │ │ │ │ │ -_8_0 void _a_x_p_y(const F& a, const _T_h_i_s &y) │ │ │ │ │ -81 { │ │ │ │ │ -82 _b_l_o_c_k().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ -83 } │ │ │ │ │ -84 template │ │ │ │ │ -_8_5 void _a_s_s_i_g_n(const _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_D_,_d_e_r_i_v_> &y) │ │ │ │ │ -86 { │ │ │ │ │ -87 _f_i_e_l_d___c_a_s_t(y._b_l_o_c_k(),_b_l_o_c_k()); │ │ │ │ │ -88 } │ │ │ │ │ -_8_9 _B_l_o_c_k _b_l_o_c_k__; │ │ │ │ │ -90 }; │ │ │ │ │ -91 │ │ │ │ │ -92 │ │ │ │ │ -93 template │ │ │ │ │ -_9_4 struct FieldTraits<_L_F_E_T_e_n_s_o_r> │ │ │ │ │ -95 { │ │ │ │ │ -_9_6 using _f_i_e_l_d___t_y_p_e = F; │ │ │ │ │ -_9_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ -98 }; │ │ │ │ │ -99 │ │ │ │ │ -100 // ****************************************** │ │ │ │ │ -101 template │ │ │ │ │ -_1_0_2 struct _L_F_E_T_e_n_s_o_r │ │ │ │ │ -103 { │ │ │ │ │ -_1_0_4 static const int _s_i_z_e = 0; │ │ │ │ │ -105 }; │ │ │ │ │ -106 │ │ │ │ │ -107 template │ │ │ │ │ -_1_0_8 struct _L_F_E_T_e_n_s_o_r │ │ │ │ │ -109 { │ │ │ │ │ -_1_1_0 static const int _s_i_z_e = 1; │ │ │ │ │ -111 }; │ │ │ │ │ +_7_7 virtual void _p_a_r_t_i_a_l(const std::array& │ │ │ │ │ +_o_r_d_e_r, │ │ │ │ │ +78 const typename Traits::DomainType& in, │ │ │ │ │ +79 std::vector& out) const = 0; │ │ │ │ │ +80 }; │ │ │ │ │ +81 │ │ │ │ │ +82 │ │ │ │ │ +83 │ │ │ │ │ +84 // ----------------------------------------------------------------- │ │ │ │ │ +85 // Interpolation │ │ │ │ │ +86 // ----------------------------------------------------------------- │ │ │ │ │ +87 │ │ │ │ │ +100 template │ │ │ │ │ +_1_0_1 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ +102 { │ │ │ │ │ +103 public: │ │ │ │ │ +104 │ │ │ │ │ +_1_0_6 using _F_u_n_c_t_i_o_n_T_y_p_e = std::function; │ │ │ │ │ +107 │ │ │ │ │ +_1_0_9 typedef typename RangeType::field_type _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ +110 │ │ │ │ │ +_1_1_1 virtual _~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e() {} │ │ │ │ │ 112 │ │ │ │ │ -113 template │ │ │ │ │ -_1_1_4 class _L_F_E_T_e_n_s_o_r │ │ │ │ │ -115 { │ │ │ │ │ -116 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_0_> _T_h_i_s; │ │ │ │ │ -117 │ │ │ │ │ -118 public: │ │ │ │ │ -_1_1_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ -_1_2_0 static const int _s_i_z_e = 1; │ │ │ │ │ -_1_2_1 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ +_1_2_0 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ +vector& out) const = 0; │ │ │ │ │ +121 }; │ │ │ │ │ 122 │ │ │ │ │ -123 template< class FF > │ │ │ │ │ -_1_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const FF &f ) │ │ │ │ │ -125 { │ │ │ │ │ -126 _b_l_o_c_k() = field_cast< F >( f ); │ │ │ │ │ -127 return *this; │ │ │ │ │ -128 } │ │ │ │ │ -129 │ │ │ │ │ -_1_3_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _B_l_o_c_k &b ) │ │ │ │ │ -131 { │ │ │ │ │ -132 _b_l_o_c_k() = b; │ │ │ │ │ -133 return *this; │ │ │ │ │ -134 } │ │ │ │ │ +130 template │ │ │ │ │ +_1_3_1 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +132 : public _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ +133 { │ │ │ │ │ +134 public: │ │ │ │ │ 135 │ │ │ │ │ -_1_3_6 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ -137 { │ │ │ │ │ -138 _b_l_o_c_k() *= f; │ │ │ │ │ -139 return *this; │ │ │ │ │ -140 } │ │ │ │ │ +_1_3_7 using _F_u_n_c_t_i_o_n_T_y_p_e = std::function; │ │ │ │ │ +138 │ │ │ │ │ +_1_4_0 typedef typename RangeType::field_type _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ 141 │ │ │ │ │ -_1_4_2 const F &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) const │ │ │ │ │ -143 { │ │ │ │ │ -144 return _b_l_o_c_k()[ i ]; │ │ │ │ │ -145 } │ │ │ │ │ +142 │ │ │ │ │ +_1_4_3 virtual _~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ +144 │ │ │ │ │ +145 // This method is only noted again for to make the documentation complete. │ │ │ │ │ 146 │ │ │ │ │ -_1_4_7 F &_o_p_e_r_a_t_o_r_[_]_ ( const unsigned int i ) │ │ │ │ │ -148 { │ │ │ │ │ -149 return _b_l_o_c_k()[ i ]; │ │ │ │ │ -150 } │ │ │ │ │ -151 │ │ │ │ │ -_1_5_2 void _a_x_p_y(const F& a, const _T_h_i_s &y) │ │ │ │ │ -153 { │ │ │ │ │ -154 _b_l_o_c_k().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ -155 } │ │ │ │ │ -156 template │ │ │ │ │ -_1_5_7 void _a_s_s_i_g_n(const _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_D_,_0_> &y) │ │ │ │ │ -158 { │ │ │ │ │ -159 _f_i_e_l_d___c_a_s_t(y._b_l_o_c_k(),_b_l_o_c_k()); │ │ │ │ │ -160 } │ │ │ │ │ -161 │ │ │ │ │ -_1_6_2 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ -163 { │ │ │ │ │ -164 return _b_l_o_c_k__; │ │ │ │ │ -165 } │ │ │ │ │ -_1_6_6 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ -167 { │ │ │ │ │ -168 return _b_l_o_c_k__; │ │ │ │ │ -169 } │ │ │ │ │ -_1_7_0 _B_l_o_c_k _b_l_o_c_k__; │ │ │ │ │ -171 }; │ │ │ │ │ -172 // *********************************************************** │ │ │ │ │ -173 // Structure for all derivatives up to order deriv │ │ │ │ │ -174 // for vector valued function │ │ │ │ │ -_1_7_5 namespace DerivativeLayoutNS { │ │ │ │ │ -_1_7_6 enum _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t {_v_a_l_u_e,_d_e_r_i_v_a_t_i_v_e}; │ │ │ │ │ -177 } │ │ │ │ │ -178 template │ │ │ │ │ -_1_8_0 struct _D_e_r_i_v_a_t_i_v_e_s; │ │ │ │ │ -181 │ │ │ │ │ -182 template │ │ │ │ │ -_1_8_4 struct FieldTraits<_D_e_r_i_v_a_t_i_v_e_s> │ │ │ │ │ -185 { │ │ │ │ │ -_1_8_6 using _f_i_e_l_d___t_y_p_e = F; │ │ │ │ │ -_1_8_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ -188 }; │ │ │ │ │ -189 │ │ │ │ │ -190 // Implemnetation for valued based layout │ │ │ │ │ -191 template │ │ │ │ │ -_1_9_2 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -193 : public _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -194 { │ │ │ │ │ -_1_9_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _T_h_i_s; │ │ │ │ │ -_1_9_6 typedef _D_e_r_i_v_a_t_i_v_e_s _B_a_s_e; │ │ │ │ │ -_1_9_7 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_e_r_i_v_> _T_h_i_s_L_F_E_T_e_n_s_o_r; │ │ │ │ │ -198 │ │ │ │ │ -_1_9_9 typedef F _F_i_e_l_d; │ │ │ │ │ -_2_0_0 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ -201 │ │ │ │ │ -_2_0_2 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ -_2_0_3 static const unsigned int dimDomain = dimD; │ │ │ │ │ -_2_0_4 static const unsigned int dimRange = dimR; │ │ │ │ │ -_2_0_5 constexpr static int size = Base::size+ThisLFETensor::size*dimR; │ │ │ │ │ -_2_0_6 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ -207 │ │ │ │ │ -_2_0_8 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const F& f) │ │ │ │ │ -209 { │ │ │ │ │ -210 block() = f; │ │ │ │ │ -211 return *this; │ │ │ │ │ -212 } │ │ │ │ │ -_2_1_3 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector &t) │ │ │ │ │ -214 { │ │ │ │ │ -215 tensor_ = t; │ │ │ │ │ -216 return *this; │ │ │ │ │ -217 } │ │ │ │ │ -218 template │ │ │ │ │ -_2_1_9 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector<_L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_d_o_r_d_e_r_>,dimR> &t) │ │ │ │ │ -220 { │ │ │ │ │ -221 tensor() = t; │ │ │ │ │ -222 return *this; │ │ │ │ │ -223 } │ │ │ │ │ -_2_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ +_1_5_4 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ +vector& out) const = 0; │ │ │ │ │ +155 │ │ │ │ │ +161 template::value, int> = 0> │ │ │ │ │ +_1_6_3 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +164 { │ │ │ │ │ +165 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_>& asBase │ │ │ │ │ += *this; │ │ │ │ │ +166 asBase._i_n_t_e_r_p_o_l_a_t_e(_F_u_n_c_t_i_o_n_T_y_p_e(std::cref(f)),out); │ │ │ │ │ +167 } │ │ │ │ │ +168 │ │ │ │ │ +174 template │ │ │ │ │ +_1_7_5 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +176 { │ │ │ │ │ +177 std::vector outDummy; │ │ │ │ │ +178 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_<_D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_>& asBase │ │ │ │ │ += *this; │ │ │ │ │ +179 asBase._i_n_t_e_r_p_o_l_a_t_e(_F_u_n_c_t_i_o_n_T_y_p_e(std::cref(f)),outDummy); │ │ │ │ │ +180 out.resize(outDummy.size()); │ │ │ │ │ +181 for(typename std::vector::size_type i=0; i │ │ │ │ │ +_2_2_4 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ 225 { │ │ │ │ │ -226 block() = t; │ │ │ │ │ -227 return *this; │ │ │ │ │ -228 } │ │ │ │ │ -229 │ │ │ │ │ -_2_3_0 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ -231 { │ │ │ │ │ -232 block() *= f; │ │ │ │ │ -233 return *this; │ │ │ │ │ -234 } │ │ │ │ │ -235 │ │ │ │ │ -_2_3_6 void _a_x_p_y(const F &a, const _T_h_i_s &y) │ │ │ │ │ -237 { │ │ │ │ │ -238 block().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ -239 } │ │ │ │ │ -240 │ │ │ │ │ -241 // assign with same layout (only different Field) │ │ │ │ │ -242 template │ │ │ │ │ -_2_4_3 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ -&y) │ │ │ │ │ -244 { │ │ │ │ │ -245 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ -246 } │ │ │ │ │ -247 // assign with different layout (same dimRange) │ │ │ │ │ -248 template │ │ │ │ │ -_2_4_9 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -250 { │ │ │ │ │ -251 Base::assign(y); │ │ │ │ │ -252 for (int rr=0; rr()[0]; │ │ │ │ │ -254 } │ │ │ │ │ -255 // assign with rth component of function │ │ │ │ │ -256 template │ │ │ │ │ -_2_5_7 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_y_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_> &y,unsigned int r) │ │ │ │ │ -258 { │ │ │ │ │ -259 assign(y.block(),r); │ │ │ │ │ -260 } │ │ │ │ │ -261 // assign with scalar functions to component r │ │ │ │ │ -262 template │ │ │ │ │ -_2_6_3 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ -264 { │ │ │ │ │ -265 assign(r,y.block()); │ │ │ │ │ -266 } │ │ │ │ │ -267 template │ │ │ │ │ -_2_6_8 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -269 { │ │ │ │ │ -270 assign(r,y[0]); │ │ │ │ │ -271 } │ │ │ │ │ -272 │ │ │ │ │ -_2_7_3 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ -274 { │ │ │ │ │ -275 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ -276 } │ │ │ │ │ -_2_7_7 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ -278 { │ │ │ │ │ -279 return reinterpret_cast(*this); │ │ │ │ │ -280 } │ │ │ │ │ -281 │ │ │ │ │ -282 template │ │ │ │ │ -_2_8_3 const Dune::FieldVector,dimR> &_t_e_n_s_o_r() const │ │ │ │ │ -284 { │ │ │ │ │ -285 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -286 const std::integral_constant a = {}; │ │ │ │ │ -287 return tensor(a); │ │ │ │ │ -288 } │ │ │ │ │ -289 template │ │ │ │ │ -_2_9_0 Dune::FieldVector,dimR> &_t_e_n_s_o_r() │ │ │ │ │ -291 { │ │ │ │ │ -292 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -293 return tensor(std::integral_constant()); │ │ │ │ │ -294 } │ │ │ │ │ -295 template │ │ │ │ │ -_2_9_6 const Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ -const │ │ │ │ │ -297 { │ │ │ │ │ -298 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -299 const std::integral_constant a = {}; │ │ │ │ │ -300 return reinterpret_cast::size*dimR>&>(tensor(a)); │ │ │ │ │ -301 } │ │ │ │ │ -302 template │ │ │ │ │ -_3_0_3 Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ -304 { │ │ │ │ │ -305 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -306 const std::integral_constant a = {}; │ │ │ │ │ -307 return reinterpret_cast:: │ │ │ │ │ -size*dimR>&>(tensor(a)); │ │ │ │ │ -308 } │ │ │ │ │ -_3_0_9 _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ -310 return tensor_[r]; │ │ │ │ │ -311 } │ │ │ │ │ -_3_1_2 const _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ -313 return tensor_[r]; │ │ │ │ │ -314 } │ │ │ │ │ -315 protected: │ │ │ │ │ -316 template │ │ │ │ │ -_3_1_7 void _a_s_s_i_g_n(const FieldVector &y,unsigned int r) │ │ │ │ │ -318 { │ │ │ │ │ -319 Base::template assign(reinterpret_cast&>(y),r); │ │ │ │ │ -320 tensor_[0] = reinterpret_cast&>(y │ │ │ │ │ -[Base::size*dimRy+r*ThisLFETensor::size]); │ │ │ │ │ -321 } │ │ │ │ │ -322 template │ │ │ │ │ -_3_2_3 void _a_s_s_i_g_n(unsigned int r,const FieldVector &y) │ │ │ │ │ -324 { │ │ │ │ │ -325 Base::assign(r,reinterpret_cast&> │ │ │ │ │ -(y)); │ │ │ │ │ -326 tensor_[r] = reinterpret_cast&>(y │ │ │ │ │ -[Base::size/dimR]); │ │ │ │ │ -327 } │ │ │ │ │ -328 // assign with different layout (same dimRange) │ │ │ │ │ -329 template │ │ │ │ │ -_3_3_0 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_y_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -331 { │ │ │ │ │ -332 Base::assign(y); │ │ │ │ │ -333 for (int rr=0; rr()[0]; │ │ │ │ │ -335 } │ │ │ │ │ -336 │ │ │ │ │ -337 template │ │ │ │ │ -338 const Dune::FieldVector,dimR> & │ │ │ │ │ -_3_3_9 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ -340 { │ │ │ │ │ -341 return Base::tensor(dorderVar); │ │ │ │ │ -342 } │ │ │ │ │ -343 const Dune::FieldVector,dimR> & │ │ │ │ │ -_3_4_4 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ -345 { │ │ │ │ │ -346 return tensor_; │ │ │ │ │ -347 } │ │ │ │ │ -348 template │ │ │ │ │ -349 Dune::FieldVector,dimR> & │ │ │ │ │ -_3_5_0 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ -351 { │ │ │ │ │ -352 return Base::tensor(dorderVar); │ │ │ │ │ -353 } │ │ │ │ │ -354 Dune::FieldVector,dimR> & │ │ │ │ │ -_3_5_5 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ -356 { │ │ │ │ │ -357 return tensor_; │ │ │ │ │ -358 } │ │ │ │ │ -_3_5_9 Dune::FieldVector _t_e_n_s_o_r__; │ │ │ │ │ -360 }; │ │ │ │ │ -361 │ │ │ │ │ -362 template │ │ │ │ │ -_3_6_3 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -364 { │ │ │ │ │ -_3_6_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _T_h_i_s; │ │ │ │ │ -_3_6_6 typedef _L_F_E_T_e_n_s_o_r_<_F_,_d_i_m_D_,_0_> _T_h_i_s_L_F_E_T_e_n_s_o_r; │ │ │ │ │ -367 │ │ │ │ │ -_3_6_8 typedef F _F_i_e_l_d; │ │ │ │ │ -_3_6_9 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ -370 │ │ │ │ │ -_3_7_1 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ -_3_7_2 static const unsigned int dimDomain = dimD; │ │ │ │ │ -_3_7_3 static const unsigned int dimRange = dimR; │ │ │ │ │ -_3_7_4 constexpr static int size = ThisLFETensor::size*dimR; │ │ │ │ │ -_3_7_5 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ -376 │ │ │ │ │ -377 template │ │ │ │ │ -_3_7_8 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const FF& f) │ │ │ │ │ -379 { │ │ │ │ │ -380 for (int r=0; r(f); │ │ │ │ │ -382 return *this; │ │ │ │ │ -383 } │ │ │ │ │ -_3_8_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const Dune::FieldVector &t) │ │ │ │ │ -385 { │ │ │ │ │ -386 tensor_ = t; │ │ │ │ │ -387 return *this; │ │ │ │ │ -388 } │ │ │ │ │ -389 │ │ │ │ │ -_3_9_0 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ -391 { │ │ │ │ │ -392 block() = t; │ │ │ │ │ -393 return *this; │ │ │ │ │ -394 } │ │ │ │ │ -395 │ │ │ │ │ -_3_9_6 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ -397 { │ │ │ │ │ -398 block() *= f; │ │ │ │ │ -399 return *this; │ │ │ │ │ -400 } │ │ │ │ │ -401 │ │ │ │ │ -_4_0_2 void _a_x_p_y(const F &a, const _T_h_i_s &y) │ │ │ │ │ -403 { │ │ │ │ │ -404 block().axpy(a,y._b_l_o_c_k()); │ │ │ │ │ -405 } │ │ │ │ │ -406 template │ │ │ │ │ -_4_0_7 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ -408 { │ │ │ │ │ -409 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ -410 } │ │ │ │ │ -411 template │ │ │ │ │ -_4_1_2 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -413 { │ │ │ │ │ -414 for (int rr=0; rr()[0]; │ │ │ │ │ -416 } │ │ │ │ │ -417 template │ │ │ │ │ -_4_1_8 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_y_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ -&y,unsigned int r) │ │ │ │ │ -419 { │ │ │ │ │ -420 assign(y.block(),r); │ │ │ │ │ -421 } │ │ │ │ │ -422 template │ │ │ │ │ -_4_2_3 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> &y) │ │ │ │ │ -424 { │ │ │ │ │ -425 tensor_[r].assign(y[0]); │ │ │ │ │ -426 } │ │ │ │ │ -427 template │ │ │ │ │ -_4_2_8 void _a_s_s_i_g_n(unsigned int r,const │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -429 { │ │ │ │ │ -430 tensor_[r].assign(y[0][0]); │ │ │ │ │ -431 } │ │ │ │ │ -432 │ │ │ │ │ -_4_3_3 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ -434 { │ │ │ │ │ -435 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ -436 } │ │ │ │ │ -_4_3_7 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ -438 { │ │ │ │ │ -439 return reinterpret_cast(*this); │ │ │ │ │ -440 } │ │ │ │ │ -441 │ │ │ │ │ -_4_4_2 _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ -443 return tensor_[r]; │ │ │ │ │ -444 } │ │ │ │ │ -_4_4_5 const _T_h_i_s_L_F_E_T_e_n_s_o_r &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ -446 return tensor_[r]; │ │ │ │ │ -447 } │ │ │ │ │ -448 template │ │ │ │ │ -_4_4_9 const Dune::FieldVector,dimR> &_t_e_n_s_o_r() const │ │ │ │ │ -450 { │ │ │ │ │ -451 return tensor_; │ │ │ │ │ -452 } │ │ │ │ │ -_4_5_3 Dune::FieldVector,dimR> &_t_e_n_s_o_r() │ │ │ │ │ -454 { │ │ │ │ │ -455 return tensor_; │ │ │ │ │ -456 } │ │ │ │ │ -457 template │ │ │ │ │ -_4_5_8 const Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ -const │ │ │ │ │ -459 { │ │ │ │ │ -460 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -461 const std::integral_constant a = {}; │ │ │ │ │ -462 return reinterpret_cast::size*dimR>&>(tensor(a)); │ │ │ │ │ -463 } │ │ │ │ │ -464 template │ │ │ │ │ -_4_6_5 Dune::FieldVector::size*dimR> &_b_l_o_c_k() │ │ │ │ │ -466 { │ │ │ │ │ -467 // use integral_constant here to stay compatible with Int2Type │ │ │ │ │ -468 const std::integral_constant a = {}; │ │ │ │ │ -469 return reinterpret_cast:: │ │ │ │ │ -size*dimR>&>(tensor(a)); │ │ │ │ │ -470 } │ │ │ │ │ -471 │ │ │ │ │ -472 protected: │ │ │ │ │ -473 const Dune::FieldVector,dimR> & │ │ │ │ │ -_4_7_4 _t_e_n_s_o_r(const std::integral_constant &dorderVar) const │ │ │ │ │ -475 { │ │ │ │ │ -476 return tensor_; │ │ │ │ │ -477 } │ │ │ │ │ -478 Dune::FieldVector,dimR> & │ │ │ │ │ -_4_7_9 _t_e_n_s_o_r(const std::integral_constant &dorderVar) │ │ │ │ │ -480 { │ │ │ │ │ -481 return tensor_; │ │ │ │ │ -482 } │ │ │ │ │ -483 template │ │ │ │ │ -_4_8_4 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_y_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -485 { │ │ │ │ │ -486 for (int rr=0; rr()[0]; │ │ │ │ │ -488 } │ │ │ │ │ -489 template │ │ │ │ │ -_4_9_0 void _a_s_s_i_g_n(const FieldVector &y,unsigned int r) │ │ │ │ │ -491 { │ │ │ │ │ -492 tensor_[0] = reinterpret_cast&>(y │ │ │ │ │ -[r*ThisLFETensor::size]); │ │ │ │ │ -493 } │ │ │ │ │ -494 template │ │ │ │ │ -_4_9_5 void _a_s_s_i_g_n(unsigned int r,const FieldVector &y) │ │ │ │ │ -496 { │ │ │ │ │ -497 tensor_[r] = y; │ │ │ │ │ -498 } │ │ │ │ │ -_4_9_9 Dune::FieldVector _t_e_n_s_o_r__; │ │ │ │ │ -500 }; │ │ │ │ │ -501 │ │ │ │ │ -502 // Implemnetation for DerivativeLayoutNS::derivative based layout │ │ │ │ │ -503 template │ │ │ │ │ -_5_0_4 struct _D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -505 { │ │ │ │ │ -_5_0_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _T_h_i_s; │ │ │ │ │ -_5_0_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _S_c_a_l_a_r_D_e_r_i_v; │ │ │ │ │ -508 │ │ │ │ │ -_5_0_9 typedef F _F_i_e_l_d; │ │ │ │ │ -_5_1_0 typedef F _f_i_e_l_d___t_y_p_e; │ │ │ │ │ -511 │ │ │ │ │ -_5_1_2 static const _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t layout = │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e; │ │ │ │ │ -_5_1_3 static const unsigned int dimDomain = dimD; │ │ │ │ │ -_5_1_4 static const unsigned int dimRange = dimR; │ │ │ │ │ -_5_1_5 constexpr static int size = ScalarDeriv::size*dimR; │ │ │ │ │ -_5_1_6 typedef Dune::FieldVector _B_l_o_c_k; │ │ │ │ │ -517 │ │ │ │ │ -518 template │ │ │ │ │ -_5_1_9 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const FF& f) │ │ │ │ │ -520 { │ │ │ │ │ -521 block() = field_cast(f); │ │ │ │ │ -522 return *this; │ │ │ │ │ -523 } │ │ │ │ │ -_5_2_4 _T_h_i_s &_o_p_e_r_a_t_o_r_=(const _B_l_o_c_k &t) │ │ │ │ │ -525 { │ │ │ │ │ -526 block() = t; │ │ │ │ │ -527 return *this; │ │ │ │ │ -528 } │ │ │ │ │ -529 │ │ │ │ │ -_5_3_0 _T_h_i_s &operator*= ( const _f_i_e_l_d___t_y_p_e &f ) │ │ │ │ │ -531 { │ │ │ │ │ -532 block() *= f; │ │ │ │ │ -533 return *this; │ │ │ │ │ -534 } │ │ │ │ │ -535 │ │ │ │ │ -536 template │ │ │ │ │ -_5_3_7 void _a_x_p_y(const FF &a, const _T_h_i_s &y) │ │ │ │ │ -538 { │ │ │ │ │ -539 block().axpy(field_cast(a),y._b_l_o_c_k()); │ │ │ │ │ -540 } │ │ │ │ │ -541 // assign with same layout (only different Field) │ │ │ │ │ -542 template │ │ │ │ │ -_5_4_3 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_> &y) │ │ │ │ │ -544 { │ │ │ │ │ -545 _f_i_e_l_d___c_a_s_t(y.block(),block()); │ │ │ │ │ -546 } │ │ │ │ │ -547 // assign with different layout (same dimRange) │ │ │ │ │ -548 template │ │ │ │ │ -_5_4_9 void _a_s_s_i_g_n(const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> │ │ │ │ │ -&y) │ │ │ │ │ -550 { │ │ │ │ │ -551 for (unsigned int rr=0; rr │ │ │ │ │ -_5_5_6 void _a_s_s_i_g_n(unsigned int r,const _D_e_r_i_v_a_t_i_v_e_s_<_F_y_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_y_> &y) │ │ │ │ │ -557 { │ │ │ │ │ -558 deriv_[r].assign(r,y); │ │ │ │ │ -559 } │ │ │ │ │ -560 │ │ │ │ │ -_5_6_1 _B_l_o_c_k &_b_l_o_c_k() │ │ │ │ │ -562 { │ │ │ │ │ -563 return reinterpret_cast<_B_l_o_c_k&>(*this); │ │ │ │ │ -564 } │ │ │ │ │ -_5_6_5 const _B_l_o_c_k &_b_l_o_c_k() const │ │ │ │ │ -566 { │ │ │ │ │ -567 return reinterpret_cast(*this); │ │ │ │ │ -568 } │ │ │ │ │ -569 │ │ │ │ │ -_5_7_0 _S_c_a_l_a_r_D_e_r_i_v &_o_p_e_r_a_t_o_r_[_](int r) { │ │ │ │ │ -571 return deriv_[r]; │ │ │ │ │ -572 } │ │ │ │ │ -_5_7_3 const _S_c_a_l_a_r_D_e_r_i_v &_o_p_e_r_a_t_o_r_[_](int r) const { │ │ │ │ │ -574 return deriv_[r]; │ │ │ │ │ -575 } │ │ │ │ │ -576 protected: │ │ │ │ │ -_5_7_7 Dune::FieldVector _d_e_r_i_v__; │ │ │ │ │ -578 }; │ │ │ │ │ -579 │ │ │ │ │ -580 // ****************************************** │ │ │ │ │ -581 // AXPY ************************************* │ │ │ │ │ -582 // ****************************************** │ │ │ │ │ -583 template │ │ │ │ │ -_5_8_4 struct _L_F_E_T_e_n_s_o_r_A_x_p_y │ │ │ │ │ -585 { │ │ │ │ │ -586 template │ │ │ │ │ -_5_8_7 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ -588 const Vec1 &x, Vec2 &y) │ │ │ │ │ -589 { │ │ │ │ │ -590 y.axpy(a,x); │ │ │ │ │ -591 } │ │ │ │ │ -592 }; │ │ │ │ │ -593 template │ │ │ │ │ -_5_9_7 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ -598 { │ │ │ │ │ -_5_9_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -600 template │ │ │ │ │ -_6_0_1 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ -602 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ -603 { │ │ │ │ │ -604 const FieldVector &xx = x.template block(); │ │ │ │ │ -605 for (int i=0; i │ │ │ │ │ -_6_1_3 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ -614 { │ │ │ │ │ -_6_1_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -616 template │ │ │ │ │ -_6_1_7 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ -618 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ -619 { │ │ │ │ │ -620 for (int rr=0; rr, │ │ │ │ │ -622 Vec2,deriv>_:_:_a_p_p_l_y(rr,a,x[rr],y); │ │ │ │ │ -623 } │ │ │ │ │ -624 }; │ │ │ │ │ -625 template │ │ │ │ │ -_6_2_9 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ -630 { │ │ │ │ │ -_6_3_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -632 template │ │ │ │ │ -_6_3_3 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ -634 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ -635 { │ │ │ │ │ -636 _L_F_E_T_e_n_s_o_r_A_x_p_y_<_D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_>, │ │ │ │ │ -637 Vec2,deriv>_:_:_a_p_p_l_y(r,a,x[0],y); │ │ │ │ │ -638 } │ │ │ │ │ -639 }; │ │ │ │ │ -640 template │ │ │ │ │ -_6_4_4 struct _L_F_E_T_e_n_s_o_r_A_x_p_y<_D_e_r_i_v_a_t_i_v_e_s,Vec2,deriv> │ │ │ │ │ -645 { │ │ │ │ │ -_6_4_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -647 template │ │ │ │ │ -_6_4_8 static void _a_p_p_l_y(unsigned int r,const Field &a, │ │ │ │ │ -649 const _V_e_c_1 &x, Vec2 &y) │ │ │ │ │ -650 { │ │ │ │ │ -651 typedef _L_F_E_T_e_n_s_o_r_<_F_1_,_d_i_m_D_,_d_e_r_i_v_> LFETensorType; │ │ │ │ │ -652 const unsigned int rr = r*LFETensorType::size; │ │ │ │ │ -653 const FieldVector &xx = x.template block(); │ │ │ │ │ -654 for (int i=0; i::dimension; ++i) │ │ │ │ │ -655 y[rr+i] += xx[i]*a; │ │ │ │ │ -656 } │ │ │ │ │ -657 }; │ │ │ │ │ -658 │ │ │ │ │ -659 // *********************************************** │ │ │ │ │ -660 // Assign **************************************** │ │ │ │ │ -661 // *********************************************** │ │ │ │ │ -662 template │ │ │ │ │ -_6_6_3 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n │ │ │ │ │ -664 { │ │ │ │ │ -_6_6_5 static void _a_p_p_l_y(unsigned int r,const Vec1 &vec1,Vec2 &vec2) │ │ │ │ │ -666 { │ │ │ │ │ -667 _f_i_e_l_d___c_a_s_t(vec1,vec2); │ │ │ │ │ -668 } │ │ │ │ │ -669 }; │ │ │ │ │ -670 template │ │ │ │ │ -_6_7_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -673 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -674 { │ │ │ │ │ -_6_7_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ -_6_7_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_2; │ │ │ │ │ -_6_7_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -678 { │ │ │ │ │ -679 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ -680 } │ │ │ │ │ -681 }; │ │ │ │ │ -682 template │ │ │ │ │ -_6_8_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -685 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -686 { │ │ │ │ │ -_6_8_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_6_8_8 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ -_V_e_c_2; │ │ │ │ │ -_6_8_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -690 { │ │ │ │ │ -691 vec2.assign(vec1); │ │ │ │ │ -692 } │ │ │ │ │ -693 }; │ │ │ │ │ -694 template │ │ │ │ │ -_6_9_6 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -697 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -698 { │ │ │ │ │ -_6_9_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ -_V_e_c_1; │ │ │ │ │ -_7_0_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ -_7_0_1 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -702 { │ │ │ │ │ -703 vec2.assign(vec1); │ │ │ │ │ -704 } │ │ │ │ │ -705 }; │ │ │ │ │ -706 template │ │ │ │ │ -_7_0_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -709 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -710 { │ │ │ │ │ -_7_1_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ -_7_1_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ -_7_1_3 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -714 { │ │ │ │ │ -715 vec2.assign(r,vec1); │ │ │ │ │ -716 } │ │ │ │ │ -717 }; │ │ │ │ │ -718 template │ │ │ │ │ -_7_2_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -721 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -722 { │ │ │ │ │ -_7_2_3 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ -_7_2_4 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ -_V_e_c_2; │ │ │ │ │ -_7_2_5 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -726 { │ │ │ │ │ -727 vec2.assign(r,vec1); │ │ │ │ │ -728 } │ │ │ │ │ -729 }; │ │ │ │ │ -730 template │ │ │ │ │ -_7_3_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -733 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -734 { │ │ │ │ │ -_7_3_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_7_3_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ -_7_3_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -738 { │ │ │ │ │ -739 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ -740 } │ │ │ │ │ -741 }; │ │ │ │ │ -742 template │ │ │ │ │ -_7_4_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -745 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -746 { │ │ │ │ │ -_7_4_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -_7_4_8 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_2; │ │ │ │ │ -_7_4_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -750 { │ │ │ │ │ -751 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ -752 } │ │ │ │ │ -753 }; │ │ │ │ │ -754 template │ │ │ │ │ -_7_5_6 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -757 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -758 { │ │ │ │ │ -_7_5_9 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -_7_6_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_2; │ │ │ │ │ -_7_6_1 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -762 { │ │ │ │ │ -763 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ -764 } │ │ │ │ │ -765 }; │ │ │ │ │ -766 template │ │ │ │ │ -_7_6_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -769 _D_e_r_i_v_a_t_i_v_e_s > │ │ │ │ │ -770 { │ │ │ │ │ -_7_7_1 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_7_7_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_2_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_2; │ │ │ │ │ -_7_7_3 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -774 { │ │ │ │ │ -775 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2.block()); │ │ │ │ │ -776 } │ │ │ │ │ -777 }; │ │ │ │ │ -778 template │ │ │ │ │ -_7_8_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s, │ │ │ │ │ -781 F2 > │ │ │ │ │ -782 { │ │ │ │ │ -_7_8_3 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_l_a_y_o_u_t_> _V_e_c_1; │ │ │ │ │ -_7_8_4 typedef F2 _V_e_c_2; │ │ │ │ │ -_7_8_5 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -786 { │ │ │ │ │ -787 _f_i_e_l_d___c_a_s_t(vec1.block(),vec2); │ │ │ │ │ -788 } │ │ │ │ │ -789 }; │ │ │ │ │ -790 template │ │ │ │ │ -_7_9_3 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -794 { │ │ │ │ │ -_7_9_5 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_7_9_6 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_7_9_7 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -798 { │ │ │ │ │ -799 _f_i_e_l_d___c_a_s_t(vec1.template block<0>(),vec2); │ │ │ │ │ -800 } │ │ │ │ │ -801 }; │ │ │ │ │ -802 template │ │ │ │ │ -_8_0_5 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -806 { │ │ │ │ │ -_8_0_7 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> │ │ │ │ │ -_V_e_c_1; │ │ │ │ │ -_8_0_8 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_8_0_9 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -810 { │ │ │ │ │ -811 for (int rr=0; rr()[0].block(),vec2[rr]); │ │ │ │ │ -813 } │ │ │ │ │ -814 }; │ │ │ │ │ -815 template │ │ │ │ │ -_8_1_8 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -819 { │ │ │ │ │ -_8_2_0 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_8_2_1 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_8_2_2 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -823 { │ │ │ │ │ -824 _f_i_e_l_d___c_a_s_t(vec1.template tensor<0>()[0].block(),vec2[r]); │ │ │ │ │ -825 } │ │ │ │ │ -826 }; │ │ │ │ │ -827 template │ │ │ │ │ -_8_3_0 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -831 { │ │ │ │ │ -_8_3_2 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -_8_3_3 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_8_3_4 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -835 { │ │ │ │ │ -836 _f_i_e_l_d___c_a_s_t(vec1[0].template tensor<0>()[0].block(),vec2[r]); │ │ │ │ │ -837 } │ │ │ │ │ -838 }; │ │ │ │ │ -839 template │ │ │ │ │ -_8_4_2 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -843 { │ │ │ │ │ -_8_4_4 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_> _V_e_c_1; │ │ │ │ │ -_8_4_5 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_8_4_6 static void _a_p_p_l_y(unsigned int r,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -847 { │ │ │ │ │ -848 _f_i_e_l_d___c_a_s_t(vec1.template tensor<0>()[0].block(),vec2); │ │ │ │ │ -849 } │ │ │ │ │ -850 }; │ │ │ │ │ -851 template │ │ │ │ │ -_8_5_4 struct _D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n<_D_e_r_i_v_a_t_i_v_e_s,FieldVector > │ │ │ │ │ -855 { │ │ │ │ │ -_8_5_6 typedef _D_e_r_i_v_a_t_i_v_e_s_<_F_1_,_d_i_m_D_,_1_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_> _V_e_c_1; │ │ │ │ │ -_8_5_7 typedef FieldVector _V_e_c_2; │ │ │ │ │ -_8_5_8 static void _a_p_p_l_y(unsigned int /*r*/,const _V_e_c_1 &vec1,_V_e_c_2 &vec2) │ │ │ │ │ -859 { │ │ │ │ │ -860 _f_i_e_l_d___c_a_s_t(vec1[0].template tensor<0>()[0].block(),vec2); │ │ │ │ │ -861 } │ │ │ │ │ -862 }; │ │ │ │ │ -863 │ │ │ │ │ -864 // *********************************************** │ │ │ │ │ -865 // IO ******************************************** │ │ │ │ │ -866 // *********************************************** │ │ │ │ │ -867 template │ │ │ │ │ -_8_6_8 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _L_F_E_T_e_n_s_o_r_<_ _F_,_d_i_m_D_,_d_e_r_i_v │ │ │ │ │ -_> &tensor ) │ │ │ │ │ -869 { │ │ │ │ │ -870 return out << tensor._b_l_o_c_k(); │ │ │ │ │ -871 } │ │ │ │ │ -872#if 0 │ │ │ │ │ -873 template │ │ │ │ │ -874 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const ScalarDerivatives< │ │ │ │ │ -F,dimD,deriv > &d ) │ │ │ │ │ -875 { │ │ │ │ │ -876 out << static_cast &>(d); │ │ │ │ │ -877 out << " , " << d.tensor() << std::endl; │ │ │ │ │ -878 return out; │ │ │ │ │ -879 } │ │ │ │ │ -880 template │ │ │ │ │ -881 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const ScalarDerivatives< │ │ │ │ │ -F,dimD,0 > &d ) │ │ │ │ │ -882 { │ │ │ │ │ -883 out << d.tensor() << std::endl; │ │ │ │ │ -884 return out; │ │ │ │ │ -885 } │ │ │ │ │ -886#endif │ │ │ │ │ -887 template │ │ │ │ │ -_8_8_8 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> &d ) │ │ │ │ │ -889 { │ │ │ │ │ -890 out << " ( "; │ │ │ │ │ -891 out << d[0]; │ │ │ │ │ -892 for (int r=1; r │ │ │ │ │ -_9_0_0 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> &d ) │ │ │ │ │ -901 { │ │ │ │ │ -902 out << static_cast &>(d); │ │ │ │ │ -903 out << " ( "; │ │ │ │ │ -904 out << d[0]; │ │ │ │ │ -905 for (int r=1; r │ │ │ │ │ -_9_1_3 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> &d ) │ │ │ │ │ -914 { │ │ │ │ │ -915 out << " ( "; │ │ │ │ │ -916 out << d[0]; │ │ │ │ │ -917 for (int r=1; r │ │ │ │ │ -_9_2_5 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_,_d_i_m_D_,_d_i_m_R_,_0_,_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> &d ) │ │ │ │ │ -926 { │ │ │ │ │ -927 out << " ( "; │ │ │ │ │ -928 out << d[0]; │ │ │ │ │ -929 for (int r=1; r │ │ │ │ │ -_9_3_7 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &out, const std:: │ │ │ │ │ -vector<_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_d_i_m_D_,_d_i_m_R_,_d_e_r_i_v_,_l_a_y_o_u_t_ _> > &y ) │ │ │ │ │ -938 { │ │ │ │ │ -939 out << "Number of basis functions: " << y.size() << std::endl; │ │ │ │ │ -940 for (unsigned int i=0; i, │ │ │ │ │ +230 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e, │ │ │ │ │ +231 _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e< │ │ │ │ │ +232 typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e, │ │ │ │ │ +_2_3_3 typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e> > _T_r_a_i_t_s; │ │ │ │ │ +234 │ │ │ │ │ +_2_3_5 virtual _~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e() {} │ │ │ │ │ +236 │ │ │ │ │ +_2_3_8 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const = 0; │ │ │ │ │ +239 │ │ │ │ │ +_2_4_1 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () │ │ │ │ │ +const = 0; │ │ │ │ │ +242 │ │ │ │ │ +_2_4_4 virtual const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +() const = 0; │ │ │ │ │ +245 │ │ │ │ │ +_2_4_7 virtual unsigned int _s_i_z_e () const = 0; │ │ │ │ │ +248 │ │ │ │ │ +_2_5_0 virtual const GeometryType _t_y_p_e () const = 0; │ │ │ │ │ +251 │ │ │ │ │ +_2_5_2 virtual _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_T_>* _c_l_o_n_e() const = 0; │ │ │ │ │ +253 }; │ │ │ │ │ +254} │ │ │ │ │ +255#endif │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ -std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat) │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t │ │ │ │ │ -DerivativeLayout │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e │ │ │ │ │ -@ derivative │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ -@ value │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:176 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k │ │ │ │ │ -const Block & block() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ │ -This & operator*=(const field_type &f) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, size > Block │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const FF &f) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k__ │ │ │ │ │ -Block block_ │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_a_x_p_y │ │ │ │ │ -void axpy(const F &a, const This &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_b_l_o_c_k │ │ │ │ │ -Block & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const LFETensor< Fy, dimD, deriv > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_s_i_z_e │ │ │ │ │ -static const unsigned int size │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -const field_type & operator[](const unsigned int i) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ -typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:97 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _d_e_r_i_v_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:96 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _> │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k │ │ │ │ │ -Block & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:162 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k__ │ │ │ │ │ -Block block_ │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:170 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const LFETensor< Fy, dimD, 0 > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:157 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_b_l_o_c_k │ │ │ │ │ -const Block & block() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:166 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_a_x_p_y │ │ │ │ │ -void axpy(const F &a, const This &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:152 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_<_ _F_,_ _d_i_m_D_,_ _0_ _>_:_:_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, size > Block │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:121 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:180 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:186 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ -typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:194 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:199 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s │ │ │ │ │ -Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > This │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:195 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > │ │ │ │ │ -&t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:219 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_: │ │ │ │ │ -_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:200 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_a_s_e │ │ │ │ │ -Derivatives< F, dimD, dimR, deriv-1, DerivativeLayoutNS::value > Base │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:196 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const │ │ │ │ │ -std::integral_constant< int, dorder > &dorderVar) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:339 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:317 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value │ │ │ │ │ -> &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:243 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS:: │ │ │ │ │ -derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:330 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const F &f) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:208 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r │ │ │ │ │ -_[_] │ │ │ │ │ -const ThisLFETensor & operator[](int r) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:312 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:303 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_: │ │ │ │ │ -_T_h_i_s_L_F_E_T_e_n_s_o_r │ │ │ │ │ -LFETensor< F, dimD, deriv > ThisLFETensor │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:197 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, │ │ │ │ │ -DerivativeLayoutNS::value > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:263 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block │ │ │ │ │ -() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:296 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor(const std:: │ │ │ │ │ -integral_constant< int, dorder > &dorderVar) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:350 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -const Block & block() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:277 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_x_p_y │ │ │ │ │ -void axpy(const F &a, const This &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:236 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS:: │ │ │ │ │ -derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:249 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:213 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, │ │ │ │ │ -DerivativeLayoutNS::derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:268 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Block &t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:224 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, size > Block │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:206 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r__ │ │ │ │ │ -Dune::FieldVector< ThisLFETensor, dimR > tensor_ │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:359 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const std:: │ │ │ │ │ -integral_constant< int, deriv > &dorderVar) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:355 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:290 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimRy, deriv, DerivativeLayoutNS:: │ │ │ │ │ -value > &y, unsigned int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:257 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -const Dune::FieldVector< LFETensor< F, dimD, dorder >, dimR > & tensor() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:283 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -const Dune::FieldVector< LFETensor< F, dimD, deriv >, dimR > & tensor(const │ │ │ │ │ -std::integral_constant< int, deriv > &dorderVar) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:344 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r │ │ │ │ │ -_[_] │ │ │ │ │ -ThisLFETensor & operator[](int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:309 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -Block & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:273 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:323 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _> │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:364 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -ThisLFETensor & operator[](int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:442 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s_L_F_E_T_e_n_s_o_r │ │ │ │ │ -LFETensor< F, dimD, 0 > ThisLFETensor │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:366 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:465 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std:: │ │ │ │ │ -integral_constant< int, 0 > &dorderVar) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:479 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS::value > │ │ │ │ │ -&y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:407 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:368 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_T_h_i_s │ │ │ │ │ -Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > This │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:365 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, dy, DerivativeLayoutNS:: │ │ │ │ │ -derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:484 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimRy, 0, DerivativeLayoutNS::value > │ │ │ │ │ -&y, unsigned int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:418 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:449 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:453 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Block &t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:390 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:369 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -const ThisLFETensor & operator[](int r) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:445 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r │ │ │ │ │ -const Dune::FieldVector< LFETensor< F, dimD, 0 >, dimR > & tensor(const std:: │ │ │ │ │ -integral_constant< int, 0 > &dorderVar) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:474 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, size > Block │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:375 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -const Block & block() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:437 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -const Dune::FieldVector< F, LFETensor< F, dimD, dorder >::size *dimR > & block │ │ │ │ │ -() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:458 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, │ │ │ │ │ -DerivativeLayoutNS::derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:428 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, 0, DerivativeLayoutNS:: │ │ │ │ │ -derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:412 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const Derivatives< Fy, dimD, 1, 0, │ │ │ │ │ -DerivativeLayoutNS::value > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:423 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Dune::FieldVector< ThisLFETensor, dimR > &t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:384 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(const FieldVector< Fy, size *dimRy > &y, unsigned int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:490 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_t_e_n_s_o_r__ │ │ │ │ │ -Dune::FieldVector< ThisLFETensor, dimR > tensor_ │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:499 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const FieldVector< Fy, size/dimR > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:495 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const FF &f) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:378 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_b_l_o_c_k │ │ │ │ │ -Block & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:433 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _0_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_:_:_a_x_p_y │ │ │ │ │ -void axpy(const F &a, const This &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:402 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:505 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const FF &f) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:519 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_b_l_o_c_k │ │ │ │ │ -Block & block() │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:561 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:509 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_b_l_o_c_k │ │ │ │ │ -const Block & block() const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:565 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_f_i_e_l_d___t_y_p_e │ │ │ │ │ -F field_type │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:510 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_a_s_s_i_g_n │ │ │ │ │ -void assign(unsigned int r, const Derivatives< Fy, dimD, 1, deriv, layouty > │ │ │ │ │ -&y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:556 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -ScalarDeriv & operator[](int r) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:570 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS::value │ │ │ │ │ -> &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:549 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_:_T_h_i_s │ │ │ │ │ -Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > This │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:506 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_S_c_a_l_a_r_D_e_r_i_v │ │ │ │ │ -Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::value > ScalarDeriv │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:507 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_o_p_e_r_a_t_o_r_[_] │ │ │ │ │ -const ScalarDeriv & operator[](int r) const │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:573 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_:_a_x_p_y │ │ │ │ │ -void axpy(const FF &a, const This &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:537 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const Block &t) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:524 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_B_l_o_c_k │ │ │ │ │ -Dune::FieldVector< F, size > Block │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:516 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_d_e_r_i_v__ │ │ │ │ │ -Dune::FieldVector< ScalarDeriv, dimR > deriv_ │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:577 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_s_<_ _F_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_:_: │ │ │ │ │ -_a_s_s_i_g_n │ │ │ │ │ -void assign(const Derivatives< Fy, dimD, dimR, deriv, DerivativeLayoutNS:: │ │ │ │ │ -derivative > &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:543 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:585 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:587 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ -_>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:601 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e │ │ │ │ │ -_>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:599 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:615 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:617 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:631 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:633 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_, │ │ │ │ │ -_V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Field &a, const Vec1 &x, Vec2 &y) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:648 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r_A_x_p_y_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_, │ │ │ │ │ -_V_e_c_2_,_ _d_e_r_i_v_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:646 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:664 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:665 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, deriv, layout > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:675 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, dimR, deriv, layout > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:676 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:677 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:687 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:689 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:688 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:700 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:699 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:701 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:711 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:713 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:712 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:723 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:725 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_< │ │ │ │ │ -_F_2_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:724 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:735 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:736 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:737 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ -_>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:747 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ -_>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:749 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _> │ │ │ │ │ -_>_:_:_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:748 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ -_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:760 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ -_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:761 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_ _>_:_: │ │ │ │ │ -_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:759 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ -_V_e_c_2 │ │ │ │ │ -Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:772 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ -_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:773 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_2_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_ _>_:_: │ │ │ │ │ -_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:771 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_V_e_c_2 │ │ │ │ │ -F2 Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:784 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:785 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _l_a_y_o_u_t_ _>_,_ _F_2_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, layout > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:783 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:795 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, dimR > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:796 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:797 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:807 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:809 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _d_i_m_R_,_ _d_e_r_i_v_, │ │ │ │ │ -_D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_:_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, dimR > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:808 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:820 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, dimR > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:821 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:822 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:834 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:832 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _d_i_m_R_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, dimR > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:833 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, 1 > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:845 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:844 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_v_a_l_u_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int r, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:846 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_1 │ │ │ │ │ -Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative > Vec1 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:856 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static void apply(unsigned int, const Vec1 &vec1, Vec2 &vec2) │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:858 │ │ │ │ │ -_D_u_n_e_:_:_D_e_r_i_v_a_t_i_v_e_A_s_s_i_g_n_<_ _D_e_r_i_v_a_t_i_v_e_s_<_ _F_1_,_ _d_i_m_D_,_ _1_,_ _d_e_r_i_v_,_ _D_e_r_i_v_a_t_i_v_e_L_a_y_o_u_t_N_S_:_: │ │ │ │ │ -_d_e_r_i_v_a_t_i_v_e_ _>_,_ _F_i_e_l_d_V_e_c_t_o_r_<_ _F_2_,_ _1_ _>_ _>_:_:_V_e_c_2 │ │ │ │ │ -FieldVector< F2, 1 > Vec2 │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:857 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +R RangeType │ │ │ │ │ +range type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for a local interpolation │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual ~LocalInterpolationVirtualInterface() │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:143 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ +std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ +type of function to interpolate │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:137 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:175 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ +RangeType::field_type CoefficientType │ │ │ │ │ +type of the coefficient vector in the interpolate method │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:140 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ +&out) const =0 │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< CoefficientType > &out) const │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for a local basis │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_o_r_d_e_r │ │ │ │ │ +virtual unsigned int order() const =0 │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +virtual void evaluateJacobian(const typename Traits::DomainType &in, std:: │ │ │ │ │ +vector< typename Traits::JacobianType > &out) const =0 │ │ │ │ │ +Evaluate jacobian of all shape functions at given position. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ +virtual unsigned int size() const =0 │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +T Traits │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +virtual void evaluateFunction(const typename Traits::DomainType &in, std:: │ │ │ │ │ +vector< typename Traits::RangeType > &out) const =0 │ │ │ │ │ +Evaluate all basis function at given position. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual ~LocalBasisVirtualInterface() │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_p_a_r_t_i_a_l │ │ │ │ │ +virtual void partial(const std::array< unsigned int, Traits::dimDomain > │ │ │ │ │ +&order, const typename Traits::DomainType &in, std::vector< typename Traits:: │ │ │ │ │ +RangeType > &out) const =0 │ │ │ │ │ +Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ +virtual base class for a local interpolation │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:102 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ +std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ +type of function to interpolate │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:106 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ +RangeType::field_type CoefficientType │ │ │ │ │ +type of the coefficient vector in the interpolate method │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:109 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_: │ │ │ │ │ +_~_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e │ │ │ │ │ +virtual ~LocalInterpolationVirtualInterfaceBase() │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_B_a_s_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ +&out) const =0 │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local coefficients │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:198 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual ~LocalCoefficientsVirtualInterface() │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:201 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ +virtual std::size_t size() const =0 │ │ │ │ │ +number of coefficients │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +virtual const LocalKey & localKey(std::size_t i) const =0 │ │ │ │ │ +get i'th index │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local finite elements with functions │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_c_l_o_n_e │ │ │ │ │ +virtual LocalFiniteElementVirtualInterface< T > * clone() const =0 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +virtual const Traits::LocalInterpolationType & localInterpolation() const =0 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ +virtual unsigned int size() const =0 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +virtual const Traits::LocalBasisType & localBasis() const =0 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_t_y_p_e │ │ │ │ │ +virtual const GeometryType type() const =0 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< LocalBasisVirtualInterface< LocalBasisTraits >, │ │ │ │ │ +LocalCoefficientsVirtualInterface, LocalInterpolationVirtualInterface< typename │ │ │ │ │ +LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType > > Traits │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:233 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual ~LocalFiniteElementVirtualInterface() │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:235 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +virtual const Traits::LocalCoefficientsType & localCoefficients() const =0 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: polynomialbasis.hh File Reference │ │ │ │ +dune-localfunctions: localtoglobaladaptors.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,44 +65,51 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
polynomialbasis.hh File Reference
│ │ │ │ +
localtoglobaladaptors.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/utility/coeffmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/utility/monomialbasis.hh>
│ │ │ │ -#include <dune/localfunctions/utility/multiindex.hh>
│ │ │ │ -#include <dune/localfunctions/utility/basisevaluator.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PolynomialBasis< Eval, CM, D, R >
struct  Dune::LocalToGlobalBasisAdaptorTraits< LocalBasisTraits, dimDomainGlobal_ >
 Traits class for local-to-global basis adaptors. More...
 
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DVector >
class  Dune::ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry >
 Convert a simple scalar local basis into a global basis. More...
 
struct  Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DomainVector >
class  Dune::LocalToGlobalInterpolationAdaptor< LocalInterpolation, Traits_ >
 Convert a local interpolation into a global interpolation. More...
 
class  Dune::PolynomialBasisWithMatrix< Eval, CM, D, R >
struct  Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >
 Convert a simple scalar local finite element into a global finite element. More...
 
struct  Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >::Traits
 
class  Dune::ScalarLocalToGlobalFiniteElementAdaptorFactory< LocalFiniteElement, Geometry >
 Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,33 +1,44 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -polynomialbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +localtoglobaladaptors.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_c_o_e_f_f_m_a_t_r_i_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_<_ _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_, │ │ │ │ │ + _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l___ _> │ │ │ │ │ +  Traits class for local-to-global basis adaptors. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_V_e_c_t_o_r_ _> │ │ │ │ │ + class   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_ _L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ +  Convert a simple scalar local basis into a global basis. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _>_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ - _> │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_<_ _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _T_r_a_i_t_s___ _> │ │ │ │ │ +  Convert a local interpolation into a global interpolation. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ - class   _D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_,_ _C_M_,_ _D_,_ _R_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_ _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_, │ │ │ │ │ + _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ +  Convert a simple scalar local finite element into a global finite │ │ │ │ │ + element. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_<_ _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_, │ │ │ │ │ + _G_e_o_m_e_t_r_y_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_< │ │ │ │ │ + _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _G_e_o_m_e_t_r_y_ _> │ │ │ │ │ +  Factory for _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r objects. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00503_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: polynomialbasis.hh Source File │ │ │ │ +dune-localfunctions: localtoglobaladaptors.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,481 +70,270 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
polynomialbasis.hh
│ │ │ │ +
localtoglobaladaptors.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_POLYNOMIALBASIS_HH
│ │ │ │ -
6#define DUNE_POLYNOMIALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/fmatrix.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13#include <dune/common/fvector.hh>
│ │ │ │ +
14#include <dune/common/typetraits.hh>
│ │ │ │ +
15
│ │ │ │ +
16#include <dune/geometry/type.hh>
│ │ │ │ +
17
│ │ │ │ +
18namespace Dune {
│ │ │ │
19
│ │ │ │ -
20namespace Dune
│ │ │ │ -
21{
│ │ │ │ -
22
│ │ │ │ -
23 // PolynomialBasis
│ │ │ │ -
24 // ---------------
│ │ │ │ -
25
│ │ │ │ -
63 template< class Eval, class CM, class D=double, class R=double >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
65 {
│ │ │ │ - │ │ │ │ -
67 typedef Eval Evaluator;
│ │ │ │ -
68
│ │ │ │ -
69 public:
│ │ │ │ - │ │ │ │ -
71
│ │ │ │ -
72 typedef typename CoefficientMatrix::Field StorageField;
│ │ │ │ -
73
│ │ │ │ -
74 static const unsigned int dimension = Evaluator::dimension;
│ │ │ │ -
75 static const unsigned int dimRange = Evaluator::dimRange*CoefficientMatrix::blockSize;
│ │ │ │ - │ │ │ │ -
77 R,dimRange,FieldVector<R,dimRange>,
│ │ │ │ -
78 FieldMatrix<R,dimRange,dimension> > Traits;
│ │ │ │ -
79 typedef typename Evaluator::Basis Basis;
│ │ │ │ -
80 typedef typename Evaluator::DomainVector DomainVector;
│ │ │ │ -
81 template <class Fy>
│ │ │ │ -
82 using HessianFyType = FieldVector<FieldMatrix<Fy,dimension,dimension>,dimRange>;
│ │ │ │ - │ │ │ │ -
84
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
86 const CoefficientMatrix &coeffMatrix,
│ │ │ │ -
87 unsigned int size)
│ │ │ │ -
88 : basis_(basis),
│ │ │ │ -
89 coeffMatrix_(&coeffMatrix),
│ │ │ │ -
90 eval_(basis),
│ │ │ │ - │ │ │ │ -
92 size_(size)
│ │ │ │ -
93 {
│ │ │ │ -
94 // assert(coeffMatrix_);
│ │ │ │ -
95 // assert(size_ <= coeffMatrix.size()); // !!!
│ │ │ │ -
96 }
│ │ │ │ -
│ │ │ │ -
97
│ │ │ │ -
│ │ │ │ -
98 const Basis &basis () const
│ │ │ │ -
99 {
│ │ │ │ -
100 return basis_;
│ │ │ │ -
101 }
│ │ │ │ -
│ │ │ │ -
102
│ │ │ │ -
│ │ │ │ -
103 const CoefficientMatrix &matrix () const
│ │ │ │ -
104 {
│ │ │ │ -
105 return *coeffMatrix_;
│ │ │ │ -
106 }
│ │ │ │ -
│ │ │ │ -
107
│ │ │ │ -
│ │ │ │ -
108 unsigned int order () const
│ │ │ │ -
109 {
│ │ │ │ -
110 return order_;
│ │ │ │ -
111 }
│ │ │ │ -
│ │ │ │ -
112
│ │ │ │ -
│ │ │ │ -
113 unsigned int size () const
│ │ │ │ -
114 {
│ │ │ │ -
115 return size_;
│ │ │ │ -
116 }
│ │ │ │ +
21
│ │ │ │ +
29 template<class LocalBasisTraits, std::size_t dimDomainGlobal_>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
32 static const std::size_t dimDomainLocal = LocalBasisTraits::dimDomain;
│ │ │ │ +
33 static const std::size_t dimDomainGlobal = dimDomainGlobal_;
│ │ │ │ + │ │ │ │ +
35 typedef FieldVector<DomainField, dimDomainGlobal> DomainGlobal;
│ │ │ │ +
36
│ │ │ │ + │ │ │ │ +
38 static const std::size_t dimRange = LocalBasisTraits::dimRange;
│ │ │ │ + │ │ │ │ +
40
│ │ │ │ +
41 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal> Jacobian;
│ │ │ │ +
42 };
│ │ │ │ +
│ │ │ │ +
43
│ │ │ │ +
45
│ │ │ │ +
64 template<class LocalBasis, class Geometry>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
66 static_assert(LocalBasis::Traits::dimRange == 1,
│ │ │ │ +
67 "ScalarLocalToGlobalBasisAdaptor can only wrap a "
│ │ │ │ +
68 "scalar local basis.");
│ │ │ │ +
69 static_assert((std::is_same<typename LocalBasis::Traits::DomainFieldType,
│ │ │ │ +
70 typename Geometry::ctype>::value),
│ │ │ │ +
71 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use "
│ │ │ │ +
72 "the same ctype as Geometry");
│ │ │ │ +
73 static_assert
│ │ │ │ +
74 ( static_cast<std::size_t>(LocalBasis::Traits::dimDomain) ==
│ │ │ │ +
75 static_cast<std::size_t>(Geometry::mydimension),
│ │ │ │ +
76 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must "
│ │ │ │ +
77 "match local dimension of Geometry");
│ │ │ │ +
78
│ │ │ │ +
79 const LocalBasis& localBasis;
│ │ │ │ +
80 Geometry geometry;
│ │ │ │ +
81
│ │ │ │ +
82 public:
│ │ │ │ +
83 typedef LocalToGlobalBasisAdaptorTraits<typename LocalBasis::Traits,
│ │ │ │ +
84 Geometry::coorddimension> Traits;
│ │ │ │ +
85
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
96 ScalarLocalToGlobalBasisAdaptor(const LocalBasis& localBasis_,
│ │ │ │ +
97 const Geometry& geometry_) :
│ │ │ │ +
98 localBasis(localBasis_), geometry(geometry_)
│ │ │ │ +
99 { }
│ │ │ │ +
│ │ │ │ +
100
│ │ │ │ +
101 std::size_t size() const { return localBasis.size(); }
│ │ │ │ +
103
│ │ │ │ +
│ │ │ │ +
110 std::size_t order() const {
│ │ │ │ +
111 if(geometry.affine())
│ │ │ │ +
112 // affine linear
│ │ │ │ +
113 return localBasis.order();
│ │ │ │ +
114 else
│ │ │ │ +
115 // assume at most order dim
│ │ │ │ +
116 return localBasis.order() + Traits::dimDomainGlobal - 1;
│ │ │ │ +
117 }
│ │ │ │
│ │ │ │ -
117
│ │ │ │ +
118
│ │ │ │
│ │ │ │ -
119 void evaluateFunction (const typename Traits::DomainType& x,
│ │ │ │ -
120 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
119 void evaluateFunction(const typename Traits::DomainLocal& in,
│ │ │ │ +
120 std::vector<typename Traits::Range>& out) const
│ │ │ │
121 {
│ │ │ │ -
122 out.resize(size());
│ │ │ │ -
123 evaluate(x,out);
│ │ │ │ -
124 }
│ │ │ │ -
│ │ │ │ -
125
│ │ │ │ -
│ │ │ │ -
127 void evaluateJacobian (const typename Traits::DomainType& x, // position
│ │ │ │ -
128 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
129 {
│ │ │ │ -
130 out.resize(size());
│ │ │ │ -
131 jacobian(x,out);
│ │ │ │ -
132 }
│ │ │ │ -
│ │ │ │ -
133
│ │ │ │ -
│ │ │ │ -
135 void evaluateHessian (const typename Traits::DomainType& x, // position
│ │ │ │ -
136 std::vector<HessianType>& out) const // return value
│ │ │ │ -
137 {
│ │ │ │ -
138 out.resize(size());
│ │ │ │ -
139 hessian(x,out);
│ │ │ │ -
140 }
│ │ │ │ -
│ │ │ │ -
141
│ │ │ │ -
│ │ │ │ -
143 void partial (const std::array<unsigned int, dimension>& order,
│ │ │ │ -
144 const typename Traits::DomainType& in, // position
│ │ │ │ -
145 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
146 {
│ │ │ │ -
147 out.resize(size());
│ │ │ │ -
148 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
149 if (totalOrder == 0) {
│ │ │ │ -
150 evaluateFunction(in, out);
│ │ │ │ -
151 }
│ │ │ │ -
152 else if (totalOrder == 1) {
│ │ │ │ -
153 std::vector<typename Traits::JacobianType> jacs(out.size());
│ │ │ │ -
154 unsigned int k;
│ │ │ │ -
155 for (unsigned int i=0;i<order.size();++i)
│ │ │ │ -
156 if (order[i]==1) k=i;
│ │ │ │ -
157 evaluateJacobian(in, jacs);
│ │ │ │ -
158 for (unsigned int i=0;i<out.size();++i)
│ │ │ │ -
159 for (unsigned int r=0;r<Traits::RangeType::dimension;++r)
│ │ │ │ -
160 out[i][r] = jacs[i][r][k];
│ │ │ │ -
161 }
│ │ │ │ -
162 else if (totalOrder == 2) {
│ │ │ │ -
163 std::vector<HessianType> hesss(out.size());
│ │ │ │ -
164 int k=-1,l=-1;
│ │ │ │ -
165 for (unsigned int i=0;i<order.size();++i) {
│ │ │ │ -
166 if (order[i] >= 1 && k == -1)
│ │ │ │ -
167 k = i;
│ │ │ │ -
168 else if (order[i]==1) l=i;
│ │ │ │ -
169 }
│ │ │ │ -
170 if (l==-1) l=k;
│ │ │ │ -
171 evaluateHessian(in, hesss);
│ │ │ │ -
172 for (unsigned int i=0;i<out.size();++i)
│ │ │ │ -
173 for (unsigned int r=0;r<Traits::RangeType::dimension;++r)
│ │ │ │ -
174 out[i][r] = hesss[i][r][k][l];
│ │ │ │ -
175 }
│ │ │ │ -
176 else {
│ │ │ │ -
177 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
178 }
│ │ │ │ -
179 }
│ │ │ │ -
│ │ │ │ -
180
│ │ │ │ -
181 template< unsigned int deriv, class F >
│ │ │ │ -
│ │ │ │ -
182 void evaluate ( const DomainVector &x, F *values ) const
│ │ │ │ -
183 {
│ │ │ │ -
184 coeffMatrix_->mult( eval_.template evaluate<deriv>( x ), size(), values);
│ │ │ │ -
185 }
│ │ │ │ -
│ │ │ │ -
186 template< unsigned int deriv, class DVector, class F >
│ │ │ │ -
│ │ │ │ -
187 void evaluate ( const DVector &x, F *values ) const
│ │ │ │ -
188 {
│ │ │ │ -
189 assert( DVector::dimension == dimension);
│ │ │ │ -
190 DomainVector bx;
│ │ │ │ -
191 for( int d = 0; d < dimension; ++d )
│ │ │ │ -
192 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
193 evaluate<deriv>( bx, values );
│ │ │ │ -
194 }
│ │ │ │ -
│ │ │ │ -
195
│ │ │ │ -
196 template <bool dummy,class DVector>
│ │ │ │ -
│ │ │ │ -
197 struct Convert
│ │ │ │ -
198 {
│ │ │ │ -
│ │ │ │ -
199 static DomainVector apply( const DVector &x )
│ │ │ │ -
200 {
│ │ │ │ -
201 assert( DVector::dimension == dimension);
│ │ │ │ -
202 DomainVector bx;
│ │ │ │ -
203 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ -
204 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
205 return bx;
│ │ │ │ -
206 }
│ │ │ │ -
│ │ │ │ -
207 };
│ │ │ │ -
│ │ │ │ -
208 template <bool dummy>
│ │ │ │ -
│ │ │ │ -
209 struct Convert<dummy,DomainVector>
│ │ │ │ -
210 {
│ │ │ │ -
│ │ │ │ -
211 static const DomainVector &apply( const DomainVector &x )
│ │ │ │ -
212 {
│ │ │ │ -
213 return x;
│ │ │ │ -
214 }
│ │ │ │ +
122 localBasis.evaluateFunction(in, out);
│ │ │ │ +
123 }
│ │ │ │
│ │ │ │ -
215 };
│ │ │ │ -
│ │ │ │ -
216 template< unsigned int deriv, class DVector, class RVector >
│ │ │ │ +
124
│ │ │ │ +
│ │ │ │ +
125 void evaluateJacobian(const typename Traits::DomainLocal& in,
│ │ │ │ +
126 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ +
127 {
│ │ │ │ +
128 std::vector<typename LocalBasis::Traits::JacobianType>
│ │ │ │ +
129 localJacobian(size());
│ │ │ │ +
130 localBasis.evaluateJacobian(in, localJacobian);
│ │ │ │ +
131
│ │ │ │ +
132 const typename Geometry::JacobianInverseTransposed &geoJacobian =
│ │ │ │ +
133 geometry.jacobianInverseTransposed(in);
│ │ │ │ +
134
│ │ │ │ +
135 out.resize(size());
│ │ │ │ +
136 for(std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
137 geoJacobian.mv(localJacobian[i][0], out[i][0]);
│ │ │ │ +
138 }
│ │ │ │ +
│ │ │ │ +
139 };
│ │ │ │ +
│ │ │ │ +
140
│ │ │ │ +
142
│ │ │ │ +
148 template<class LocalInterpolation, class Traits_>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
150 const LocalInterpolation& localInterpolation;
│ │ │ │ +
151
│ │ │ │ +
152 public:
│ │ │ │ +
153 typedef Traits_ Traits;
│ │ │ │ +
154
│ │ │ │ +
156
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
165 ( const LocalInterpolation& localInterpolation_) :
│ │ │ │ +
166 localInterpolation(localInterpolation_)
│ │ │ │ +
167 { }
│ │ │ │ +
│ │ │ │ +
168
│ │ │ │ +
169 template<class Function, class Coeff>
│ │ │ │ +
│ │ │ │ +
170 void interpolate(const Function& function, std::vector<Coeff>& out) const
│ │ │ │ +
171 { localInterpolation.interpolate(function, out); }
│ │ │ │ +
│ │ │ │ +
172 };
│ │ │ │ +
│ │ │ │ +
173
│ │ │ │ +
176
│ │ │ │ +
186 template<class LocalFiniteElement, class Geometry>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
│ │ │ │ +
191 struct Traits {
│ │ │ │ +
192 typedef ScalarLocalToGlobalBasisAdaptor<typename LocalFiniteElement::
│ │ │ │ +
193 Traits::LocalBasisType, Geometry> Basis;
│ │ │ │ +
194 typedef LocalToGlobalInterpolationAdaptor<typename LocalFiniteElement::
│ │ │ │ +
195 Traits::LocalInterpolationType, typename Basis::Traits>
│ │ │ │ + │ │ │ │ +
197 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType
│ │ │ │ + │ │ │ │ +
199 };
│ │ │ │ +
│ │ │ │ +
200
│ │ │ │ +
201 private:
│ │ │ │ +
202 const LocalFiniteElement &localFE;
│ │ │ │ +
203 typename Traits::Basis basis_;
│ │ │ │ +
204 typename Traits::Interpolation interpolation_;
│ │ │ │ +
205
│ │ │ │ +
206 public:
│ │ │ │ +
208
│ │ │ │
│ │ │ │ -
217 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ -
218 {
│ │ │ │ -
219 assert(values.size()>=size());
│ │ │ │ - │ │ │ │ -
221 coeffMatrix_->mult( eval_.template evaluate<deriv>( bx ), values );
│ │ │ │ -
222 }
│ │ │ │ + │ │ │ │ +
218 ( const LocalFiniteElement& localFE_, const Geometry &geometry) :
│ │ │ │ +
219 localFE(localFE_),
│ │ │ │ +
220 basis_(localFE.localBasis(), geometry),
│ │ │ │ +
221 interpolation_(localFE.localInterpolation())
│ │ │ │ +
222 { }
│ │ │ │
│ │ │ │
223
│ │ │ │ -
224 template <class Fy>
│ │ │ │ +
224 const typename Traits::Basis& basis() const { return basis_; }
│ │ │ │
│ │ │ │ -
225 void evaluate ( const DomainVector &x, std::vector<FieldVector<Fy,dimRange> > &values ) const
│ │ │ │ -
226 {
│ │ │ │ -
227 evaluate<0>(x,values);
│ │ │ │ -
228 }
│ │ │ │ -
│ │ │ │ -
229 template< class DVector, class RVector >
│ │ │ │ -
│ │ │ │ -
230 void evaluate ( const DVector &x, RVector &values ) const
│ │ │ │ -
231 {
│ │ │ │ -
232 assert( DVector::dimension == dimension);
│ │ │ │ -
233 DomainVector bx;
│ │ │ │ -
234 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ -
235 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
236 evaluate<0>( bx, values );
│ │ │ │ -
237 }
│ │ │ │ -
│ │ │ │ -
238
│ │ │ │ -
239 template< unsigned int deriv, class Vector >
│ │ │ │ -
│ │ │ │ -
240 void evaluateSingle ( const DomainVector &x, Vector &values ) const
│ │ │ │ -
241 {
│ │ │ │ -
242 assert(values.size()>=size());
│ │ │ │ -
243 coeffMatrix_->template mult<deriv>( eval_.template evaluate<deriv>( x ), values );
│ │ │ │ -
244 }
│ │ │ │ -
│ │ │ │ -
245 template< unsigned int deriv, class Fy >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
247 std::vector< FieldVector<FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size>,dimRange> > &values) const
│ │ │ │ -
248 {
│ │ │ │ -
249 evaluateSingle<deriv>(x,reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange> >&>(values));
│ │ │ │ -
250 }
│ │ │ │ -
│ │ │ │ -
251 template< unsigned int deriv, class Fy >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
253 std::vector< FieldVector<LFETensor<Fy,dimension,deriv>,dimRange> > &values) const
│ │ │ │ -
254 {
│ │ │ │ -
255 evaluateSingle<deriv>(x,reinterpret_cast<std::vector< FieldVector<Fy,LFETensor<Fy,dimension,deriv>::size*dimRange> >&>(values));
│ │ │ │ -
256 }
│ │ │ │ -
│ │ │ │ -
257
│ │ │ │ -
258 template <class Fy>
│ │ │ │ -
│ │ │ │ -
259 void jacobian ( const DomainVector &x,
│ │ │ │ -
260 std::vector<FieldMatrix<Fy,dimRange,dimension> > &values ) const
│ │ │ │ -
261 {
│ │ │ │ -
262 assert(values.size()>=size());
│ │ │ │ -
263 evaluateSingle<1>(x,reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension> >&>(values));
│ │ │ │ -
264 }
│ │ │ │ -
│ │ │ │ -
265 template< class DVector, class RVector >
│ │ │ │ -
│ │ │ │ -
266 void jacobian ( const DVector &x, RVector &values ) const
│ │ │ │ -
267 {
│ │ │ │ -
268 assert( DVector::dimension == dimension);
│ │ │ │ -
269 DomainVector bx;
│ │ │ │ -
270 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ -
271 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
272 jacobian( bx, values );
│ │ │ │ -
273 }
│ │ │ │ -
│ │ │ │ -
274 template <class Fy>
│ │ │ │ -
│ │ │ │ -
275 void hessian ( const DomainVector &x,
│ │ │ │ -
276 std::vector<HessianFyType<Fy>> &values ) const
│ │ │ │ -
277 {
│ │ │ │ -
278 assert(values.size()>=size());
│ │ │ │ -
279 // only upper part of hessians matrix is computed - so we have
│ │ │ │ -
280 // y[0] = FV< FV<Fy,d*(d+1)/2>, dimRange>
│ │ │ │ -
281 const unsigned int hsize = LFETensor<Fy,dimension,2>::size;
│ │ │ │ -
282 std::vector< FieldVector< FieldVector<Fy,hsize>, dimRange> > y( size() );
│ │ │ │ -
283 evaluateSingle<2>(x, y);
│ │ │ │ -
284 unsigned int q = 0;
│ │ │ │ -
285 for (unsigned int i = 0; i < size(); ++i)
│ │ │ │ -
286 for (unsigned int r = 0; r < dimRange; ++r)
│ │ │ │ -
287 {
│ │ │ │ -
288 q = 0;
│ │ │ │ -
289 // tensor-based things follow unintuitive index scheme
│ │ │ │ -
290 // e.g. for dim = 3, the k-l index of y is 00,01,11,02,12,22, i.e. partial derivatives
│ │ │ │ -
291 // are ordered: xx,xy,yy,xz,yz,zz
│ │ │ │ -
292
│ │ │ │ -
293 // Fill values 'directionwise'
│ │ │ │ -
294 for (unsigned int k = 0; k < dimension; ++k)
│ │ │ │ -
295 for (unsigned int l = 0; l <= k; ++l)
│ │ │ │ -
296 {
│ │ │ │ -
297
│ │ │ │ -
298 values[i][r][k][l] = y[i][r][q];
│ │ │ │ -
299 values[i][r][l][k] = y[i][r][q];
│ │ │ │ -
300 assert(q < hsize);
│ │ │ │ -
301 ++q;
│ │ │ │ -
302 }
│ │ │ │ -
303 }
│ │ │ │ -
304 // evaluateSingle<2>(x,reinterpret_cast<std::vector<FieldVector<Fy,dimRange*dimension*dimension> >&>(values));
│ │ │ │ -
305 }
│ │ │ │ -
│ │ │ │ -
306 template< class DVector, class HVector >
│ │ │ │ -
│ │ │ │ -
307 void hessian ( const DVector &x, HVector &values ) const
│ │ │ │ -
308 {
│ │ │ │ -
309 assert( DVector::dimension == dimension);
│ │ │ │ -
310 DomainVector bx;
│ │ │ │ -
311 for( unsigned int d = 0; d < dimension; ++d )
│ │ │ │ -
312 field_cast( x[ d ], bx[ d ] );
│ │ │ │ -
313 hessian( bx, values );
│ │ │ │ -
314 }
│ │ │ │ -
│ │ │ │ -
315
│ │ │ │ -
316 template <class Fy>
│ │ │ │ -
│ │ │ │ -
317 void integrate ( std::vector<Fy> &values ) const
│ │ │ │ -
318 {
│ │ │ │ -
319 assert(values.size()>=size());
│ │ │ │ -
320 coeffMatrix_->mult( eval_.template integrate(), values );
│ │ │ │ -
321 }
│ │ │ │ -
│ │ │ │ -
322
│ │ │ │ -
323 protected:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
325 : basis_(other.basis_),
│ │ │ │ - │ │ │ │ -
327 eval_(basis_),
│ │ │ │ - │ │ │ │ -
329 size_(other.size_)
│ │ │ │ -
330 {}
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
332 const Basis &basis_;
│ │ │ │ - │ │ │ │ -
334 mutable Evaluator eval_;
│ │ │ │ -
335 unsigned int order_,size_;
│ │ │ │ -
336 };
│ │ │ │ -
│ │ │ │ -
337
│ │ │ │ -
344 template< class Eval, class CM = SparseCoeffMatrix<typename Eval::Field,Eval::dimRange>,
│ │ │ │ -
345 class D=double, class R=double>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
347 : public PolynomialBasis< Eval, CM, D, R >
│ │ │ │ -
348 {
│ │ │ │ -
349 public:
│ │ │ │ - │ │ │ │ -
351
│ │ │ │ -
352 private:
│ │ │ │ -
353 typedef Eval Evaluator;
│ │ │ │ -
354
│ │ │ │ - │ │ │ │ - │ │ │ │ -
357
│ │ │ │ -
358 public:
│ │ │ │ -
359 typedef typename Base::Basis Basis;
│ │ │ │ -
360
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
362 : Base(basis,coeffMatrix_,0)
│ │ │ │ -
363 {}
│ │ │ │ -
│ │ │ │ -
364
│ │ │ │ -
365 template <class Matrix>
│ │ │ │ -
│ │ │ │ -
366 void fill(const Matrix& matrix)
│ │ │ │ -
367 {
│ │ │ │ -
368 coeffMatrix_.fill(matrix);
│ │ │ │ -
369 this->size_ = coeffMatrix_.size();
│ │ │ │ -
370 }
│ │ │ │ -
│ │ │ │ -
371 template <class Matrix>
│ │ │ │ -
│ │ │ │ -
372 void fill(const Matrix& matrix,int size)
│ │ │ │ -
373 {
│ │ │ │ -
374 coeffMatrix_.fill(matrix);
│ │ │ │ -
375 assert(size<=coeffMatrix_.size());
│ │ │ │ -
376 this->size_ = size;
│ │ │ │ -
377 }
│ │ │ │ -
│ │ │ │ -
378
│ │ │ │ -
379 private:
│ │ │ │ - │ │ │ │ - │ │ │ │ -
382 CoefficientMatrix coeffMatrix_;
│ │ │ │ -
383 };
│ │ │ │ -
│ │ │ │ -
384}
│ │ │ │ -
385#endif // DUNE_POLYNOMIALBASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
225 const typename Traits::Interpolation& interpolation() const
│ │ │ │ +
226 { return interpolation_; }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
227 const typename Traits::Coefficients& coefficients() const
│ │ │ │ +
228 { return localFE.localCoefficients(); }
│ │ │ │ +
│ │ │ │ +
229 GeometryType type() const { return localFE.type(); }
│ │ │ │ +
230 };
│ │ │ │ +
│ │ │ │ +
231
│ │ │ │ +
233
│ │ │ │ +
243 template<class LocalFiniteElement, class Geometry>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
245 const LocalFiniteElement& localFE;
│ │ │ │ +
246
│ │ │ │ +
247 public:
│ │ │ │ +
248 typedef ScalarLocalToGlobalFiniteElementAdaptor<LocalFiniteElement,
│ │ │ │ +
249 Geometry> FiniteElement;
│ │ │ │ +
250
│ │ │ │ +
252
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
261 (const LocalFiniteElement &localFE_) : localFE(localFE_) {}
│ │ │ │ +
│ │ │ │ +
262
│ │ │ │ +
264
│ │ │ │ +
│ │ │ │ +
274 const FiniteElement make(const Geometry& geometry) {
│ │ │ │ +
275 return FiniteElement(localFE, geometry);
│ │ │ │ +
276 }
│ │ │ │ +
│ │ │ │ +
277 };
│ │ │ │ +
│ │ │ │ +
278
│ │ │ │ +
279} // namespace Dune
│ │ │ │ +
280
│ │ │ │ +
281#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition polynomialbasis.hh:65
│ │ │ │ -
void evaluate(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:230
│ │ │ │ -
void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > &values) const
Definition polynomialbasis.hh:225
│ │ │ │ -
PolynomialBasis(const PolynomialBasis &other)
Definition polynomialbasis.hh:324
│ │ │ │ -
void evaluate(const DVector &x, F *values) const
Definition polynomialbasis.hh:187
│ │ │ │ -
void evaluateHessian(const typename Traits::DomainType &x, std::vector< HessianType > &out) const
Evaluate Jacobian of all shape functions.
Definition polynomialbasis.hh:135
│ │ │ │ -
CoefficientMatrix::Field StorageField
Definition polynomialbasis.hh:72
│ │ │ │ -
static const unsigned int dimRange
Definition polynomialbasis.hh:75
│ │ │ │ -
void jacobian(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:266
│ │ │ │ -
Evaluator::DomainVector DomainVector
Definition polynomialbasis.hh:80
│ │ │ │ -
Evaluator::Basis Basis
Definition polynomialbasis.hh:79
│ │ │ │ -
void evaluateSingle(const DomainVector &x, Vector &values) const
Definition polynomialbasis.hh:240
│ │ │ │ -
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< Fy, dimension, deriv >, dimRange > > &values) const
Definition polynomialbasis.hh:252
│ │ │ │ -
void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, dimension > > &values) const
Definition polynomialbasis.hh:259
│ │ │ │ -
const CoefficientMatrix & matrix() const
Definition polynomialbasis.hh:103
│ │ │ │ -
const Basis & basis_
Definition polynomialbasis.hh:332
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &x, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition polynomialbasis.hh:119
│ │ │ │ -
static const unsigned int dimension
Definition polynomialbasis.hh:74
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &x, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition polynomialbasis.hh:127
│ │ │ │ -
PolynomialBasis & operator=(const PolynomialBasis &)
│ │ │ │ -
const CoefficientMatrix * coeffMatrix_
Definition polynomialbasis.hh:333
│ │ │ │ -
void integrate(std::vector< Fy > &values) const
Definition polynomialbasis.hh:317
│ │ │ │ -
unsigned int size() const
Definition polynomialbasis.hh:113
│ │ │ │ -
void evaluate(const DomainVector &x, F *values) const
Definition polynomialbasis.hh:182
│ │ │ │ -
void hessian(const DVector &x, HVector &values) const
Definition polynomialbasis.hh:307
│ │ │ │ -
CM CoefficientMatrix
Definition polynomialbasis.hh:70
│ │ │ │ -
HessianFyType< R > HessianType
Definition polynomialbasis.hh:83
│ │ │ │ -
LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits
Definition polynomialbasis.hh:78
│ │ │ │ -
unsigned int order_
Definition polynomialbasis.hh:335
│ │ │ │ -
void hessian(const DomainVector &x, std::vector< HessianFyType< Fy > > &values) const
Definition polynomialbasis.hh:275
│ │ │ │ -
void evaluate(const DVector &x, RVector &values) const
Definition polynomialbasis.hh:217
│ │ │ │ -
PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, unsigned int size)
Definition polynomialbasis.hh:85
│ │ │ │ -
FieldVector< FieldMatrix< Fy, dimension, dimension >, dimRange > HessianFyType
Definition polynomialbasis.hh:82
│ │ │ │ -
unsigned int order() const
Definition polynomialbasis.hh:108
│ │ │ │ -
void evaluateSingle(const DomainVector &x, std::vector< FieldVector< FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > &values) const
Definition polynomialbasis.hh:246
│ │ │ │ -
const Basis & basis() const
Definition polynomialbasis.hh:98
│ │ │ │ -
void partial(const std::array< unsigned int, dimension > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition polynomialbasis.hh:143
│ │ │ │ -
unsigned int size_
Definition polynomialbasis.hh:335
│ │ │ │ -
Evaluator eval_
Definition polynomialbasis.hh:334
│ │ │ │ -
Definition polynomialbasis.hh:198
│ │ │ │ -
static DomainVector apply(const DVector &x)
Definition polynomialbasis.hh:199
│ │ │ │ -
static const DomainVector & apply(const DomainVector &x)
Definition polynomialbasis.hh:211
│ │ │ │ -
Definition polynomialbasis.hh:348
│ │ │ │ -
PolynomialBasisWithMatrix(const Basis &basis)
Definition polynomialbasis.hh:361
│ │ │ │ -
CM CoefficientMatrix
Definition polynomialbasis.hh:350
│ │ │ │ -
void fill(const Matrix &matrix, int size)
Definition polynomialbasis.hh:372
│ │ │ │ -
Base::Basis Basis
Definition polynomialbasis.hh:359
│ │ │ │ -
void fill(const Matrix &matrix)
Definition polynomialbasis.hh:366
│ │ │ │ -
Definition tensor.hh:33
│ │ │ │ - │ │ │ │ +
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ +
static constexpr int dimRange
dimension of the range
Definition common/localbasis.hh:49
│ │ │ │ +
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ +
static constexpr int dimDomain
dimension of the domain
Definition common/localbasis.hh:40
│ │ │ │ +
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
Traits class for local-to-global basis adaptors.
Definition localtoglobaladaptors.hh:30
│ │ │ │ +
LocalBasisTraits::RangeFieldType RangeField
Definition localtoglobaladaptors.hh:37
│ │ │ │ +
LocalBasisTraits::DomainFieldType DomainField
Definition localtoglobaladaptors.hh:31
│ │ │ │ +
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition localtoglobaladaptors.hh:41
│ │ │ │ +
static const std::size_t dimDomainLocal
Definition localtoglobaladaptors.hh:32
│ │ │ │ +
LocalBasisTraits::RangeType Range
Definition localtoglobaladaptors.hh:39
│ │ │ │ +
static const std::size_t dimDomainGlobal
Definition localtoglobaladaptors.hh:33
│ │ │ │ +
static const std::size_t dimRange
Definition localtoglobaladaptors.hh:38
│ │ │ │ +
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition localtoglobaladaptors.hh:35
│ │ │ │ +
LocalBasisTraits::DomainType DomainLocal
Definition localtoglobaladaptors.hh:34
│ │ │ │ +
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition localtoglobaladaptors.hh:125
│ │ │ │ +
std::size_t order() const
return maximum polynomial order of the base function
Definition localtoglobaladaptors.hh:110
│ │ │ │ +
LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry::coorddimension > Traits
Definition localtoglobaladaptors.hh:84
│ │ │ │ +
ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry &geometry_)
construct a ScalarLocalToGlobalBasisAdaptor
Definition localtoglobaladaptors.hh:96
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Definition localtoglobaladaptors.hh:119
│ │ │ │ +
std::size_t size() const
Definition localtoglobaladaptors.hh:101
│ │ │ │ +
Convert a local interpolation into a global interpolation.
Definition localtoglobaladaptors.hh:149
│ │ │ │ +
LocalToGlobalInterpolationAdaptor(const LocalInterpolation &localInterpolation_)
construct a LocalToGlobalInterpolationAdaptor
Definition localtoglobaladaptors.hh:165
│ │ │ │ +
void interpolate(const Function &function, std::vector< Coeff > &out) const
Definition localtoglobaladaptors.hh:170
│ │ │ │ +
Traits_ Traits
Definition localtoglobaladaptors.hh:153
│ │ │ │ +
Convert a simple scalar local finite element into a global finite element.
Definition localtoglobaladaptors.hh:187
│ │ │ │ +
GeometryType type() const
Definition localtoglobaladaptors.hh:229
│ │ │ │ +
const Traits::Coefficients & coefficients() const
Definition localtoglobaladaptors.hh:227
│ │ │ │ +
const Traits::Interpolation & interpolation() const
Definition localtoglobaladaptors.hh:225
│ │ │ │ +
const Traits::Basis & basis() const
Definition localtoglobaladaptors.hh:224
│ │ │ │ +
ScalarLocalToGlobalFiniteElementAdaptor(const LocalFiniteElement &localFE_, const Geometry &geometry)
construct a ScalarLocalToGlobalFiniteElementAdaptor
Definition localtoglobaladaptors.hh:218
│ │ │ │ +
Definition localtoglobaladaptors.hh:191
│ │ │ │ +
LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits::LocalInterpolationType, typename Basis::Traits > Interpolation
Definition localtoglobaladaptors.hh:196
│ │ │ │ +
LocalFiniteElement::Traits::LocalCoefficientsType Coefficients
Definition localtoglobaladaptors.hh:198
│ │ │ │ +
ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits::LocalBasisType, Geometry > Basis
Definition localtoglobaladaptors.hh:193
│ │ │ │ +
Factory for ScalarLocalToGlobalFiniteElementAdaptor objects.
Definition localtoglobaladaptors.hh:244
│ │ │ │ +
const FiniteElement make(const Geometry &geometry)
construct ScalarLocalToGlobalFiniteElementAdaptor
Definition localtoglobaladaptors.hh:274
│ │ │ │ +
ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > FiniteElement
Definition localtoglobaladaptors.hh:249
│ │ │ │ +
ScalarLocalToGlobalFiniteElementAdaptorFactory(const LocalFiniteElement &localFE_)
construct a ScalarLocalToGlobalFiniteElementAdaptorFactory
Definition localtoglobaladaptors.hh:261
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,538 +1,333 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -polynomialbasis.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +localtoglobaladaptors.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ -6#define DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_c_o_e_f_f_m_a_t_r_i_x_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_m_u_l_t_i_i_n_d_e_x_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h> │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18namespace _D_u_n_e { │ │ │ │ │ 19 │ │ │ │ │ -20namespace _D_u_n_e │ │ │ │ │ -21{ │ │ │ │ │ -22 │ │ │ │ │ -23 // PolynomialBasis │ │ │ │ │ -24 // --------------- │ │ │ │ │ -25 │ │ │ │ │ -63 template< class Eval, class CM, class D=double, class R=double > │ │ │ │ │ -_6_4 class _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -65 { │ │ │ │ │ -66 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_ _E_v_a_l_,_ _C_M_ _> _T_h_i_s; │ │ │ │ │ -67 typedef Eval Evaluator; │ │ │ │ │ -68 │ │ │ │ │ -69 public: │ │ │ │ │ -_7_0 typedef CM _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ -71 │ │ │ │ │ -_7_2 typedef typename CoefficientMatrix::Field _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -73 │ │ │ │ │ -_7_4 static const unsigned int _d_i_m_e_n_s_i_o_n = Evaluator::dimension; │ │ │ │ │ -_7_5 static const unsigned int _d_i_m_R_a_n_g_e = Evaluator::dimRange*CoefficientMatrix:: │ │ │ │ │ -blockSize; │ │ │ │ │ -76 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_e_n_s_i_o_n_,_F_i_e_l_d_V_e_c_t_o_r_<_D_,_d_i_m_e_n_s_i_o_n_>, │ │ │ │ │ -77 R,_d_i_m_R_a_n_g_e,FieldVector, │ │ │ │ │ -_7_8 FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -_7_9 typedef typename Evaluator::Basis _B_a_s_i_s; │ │ │ │ │ -_8_0 typedef typename Evaluator::DomainVector _D_o_m_a_i_n_V_e_c_t_o_r; │ │ │ │ │ -81 template │ │ │ │ │ -_8_2 using _H_e_s_s_i_a_n_F_y_T_y_p_e = │ │ │ │ │ -FieldVector,_d_i_m_R_a_n_g_e>; │ │ │ │ │ -_8_3 using _H_e_s_s_i_a_n_T_y_p_e = _H_e_s_s_i_a_n_F_y_T_y_p_e_<_R_>; │ │ │ │ │ -84 │ │ │ │ │ -_8_5 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s (const _B_a_s_i_s &_b_a_s_i_s, │ │ │ │ │ -86 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x &coeffMatrix, │ │ │ │ │ -87 unsigned int _s_i_z_e) │ │ │ │ │ -88 : _b_a_s_i_s__(_b_a_s_i_s), │ │ │ │ │ -89 _c_o_e_f_f_M_a_t_r_i_x__(&coeffMatrix), │ │ │ │ │ -90 _e_v_a_l__(_b_a_s_i_s), │ │ │ │ │ -91 _o_r_d_e_r__(_b_a_s_i_s._o_r_d_e_r()), │ │ │ │ │ -92 _s_i_z_e__(_s_i_z_e) │ │ │ │ │ -93 { │ │ │ │ │ -94 // assert(coeffMatrix_); │ │ │ │ │ -95 // assert(size_ <= coeffMatrix.size()); // !!! │ │ │ │ │ -96 } │ │ │ │ │ -97 │ │ │ │ │ -_9_8 const _B_a_s_i_s &_b_a_s_i_s () const │ │ │ │ │ -99 { │ │ │ │ │ -100 return _b_a_s_i_s__; │ │ │ │ │ -101 } │ │ │ │ │ -102 │ │ │ │ │ -_1_0_3 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x &_m_a_t_r_i_x () const │ │ │ │ │ -104 { │ │ │ │ │ -105 return *_c_o_e_f_f_M_a_t_r_i_x__; │ │ │ │ │ -106 } │ │ │ │ │ -107 │ │ │ │ │ -_1_0_8 unsigned int _o_r_d_e_r () const │ │ │ │ │ -109 { │ │ │ │ │ -110 return _o_r_d_e_r__; │ │ │ │ │ -111 } │ │ │ │ │ -112 │ │ │ │ │ -_1_1_3 unsigned int _s_i_z_e () const │ │ │ │ │ -114 { │ │ │ │ │ -115 return _s_i_z_e__; │ │ │ │ │ -116 } │ │ │ │ │ -117 │ │ │ │ │ -_1_1_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, │ │ │ │ │ -120 std::vector& out) const │ │ │ │ │ +21 │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 struct _L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s { │ │ │ │ │ +_3_1 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ +_3_2 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n; │ │ │ │ │ +_3_3 static const std::size_t _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l = dimDomainGlobal_; │ │ │ │ │ +_3_4 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +_3_5 typedef FieldVector _D_o_m_a_i_n_G_l_o_b_a_l; │ │ │ │ │ +36 │ │ │ │ │ +_3_7 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ +_3_8 static const std::size_t _d_i_m_R_a_n_g_e = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e; │ │ │ │ │ +_3_9 typedef typename _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e _R_a_n_g_e; │ │ │ │ │ +40 │ │ │ │ │ +_4_1 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ +42 }; │ │ │ │ │ +43 │ │ │ │ │ +45 │ │ │ │ │ +64 template │ │ │ │ │ +_6_5 class _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r { │ │ │ │ │ +66 static_assert(LocalBasis::Traits::dimRange == 1, │ │ │ │ │ +67 "ScalarLocalToGlobalBasisAdaptor can only wrap a " │ │ │ │ │ +68 "scalar local basis."); │ │ │ │ │ +69 static_assert((std::is_same::value), │ │ │ │ │ +71 "ScalarLocalToGlobalBasisAdaptor: LocalBasis must use " │ │ │ │ │ +72 "the same ctype as Geometry"); │ │ │ │ │ +73 static_assert │ │ │ │ │ +74 ( static_cast(LocalBasis::Traits::dimDomain) == │ │ │ │ │ +75 static_cast(Geometry::mydimension), │ │ │ │ │ +76 "ScalarLocalToGlobalBasisAdaptor: LocalBasis domain dimension must " │ │ │ │ │ +77 "match local dimension of Geometry"); │ │ │ │ │ +78 │ │ │ │ │ +79 const LocalBasis& localBasis; │ │ │ │ │ +80 Geometry geometry; │ │ │ │ │ +81 │ │ │ │ │ +82 public: │ │ │ │ │ +83 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ +85 │ │ │ │ │ +87 │ │ │ │ │ +_9_6 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r(const LocalBasis& localBasis_, │ │ │ │ │ +97 const Geometry& geometry_) : │ │ │ │ │ +98 localBasis(localBasis_), geometry(geometry_) │ │ │ │ │ +99 { } │ │ │ │ │ +100 │ │ │ │ │ +_1_0_1 std::size_t _s_i_z_e() const { return localBasis.size(); } │ │ │ │ │ +103 │ │ │ │ │ +_1_1_0 std::size_t _o_r_d_e_r() const { │ │ │ │ │ +111 if(geometry.affine()) │ │ │ │ │ +112 // affine linear │ │ │ │ │ +113 return localBasis.order(); │ │ │ │ │ +114 else │ │ │ │ │ +115 // assume at most order dim │ │ │ │ │ +116 return localBasis.order() + _T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l - 1; │ │ │ │ │ +117 } │ │ │ │ │ +118 │ │ │ │ │ +_1_1_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, │ │ │ │ │ +120 std::vector& out) const │ │ │ │ │ 121 { │ │ │ │ │ -122 out.resize(_s_i_z_e()); │ │ │ │ │ -123 _e_v_a_l_u_a_t_e(x,out); │ │ │ │ │ -124 } │ │ │ │ │ -125 │ │ │ │ │ -_1_2_7 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, // position │ │ │ │ │ -128 std::vector& out) const // return value │ │ │ │ │ -129 { │ │ │ │ │ -130 out.resize(_s_i_z_e()); │ │ │ │ │ -131 _j_a_c_o_b_i_a_n(x,out); │ │ │ │ │ -132 } │ │ │ │ │ -133 │ │ │ │ │ -_1_3_5 void _e_v_a_l_u_a_t_e_H_e_s_s_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& x, // position │ │ │ │ │ -136 std::vector& out) const // return value │ │ │ │ │ -137 { │ │ │ │ │ -138 out.resize(_s_i_z_e()); │ │ │ │ │ -139 _h_e_s_s_i_a_n(x,out); │ │ │ │ │ -140 } │ │ │ │ │ -141 │ │ │ │ │ -_1_4_3 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -144 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -145 std::vector& out) const // return value │ │ │ │ │ -146 { │ │ │ │ │ -147 out.resize(_s_i_z_e()); │ │ │ │ │ -148 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -149 if (totalOrder == 0) { │ │ │ │ │ -150 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -151 } │ │ │ │ │ -152 else if (totalOrder == 1) { │ │ │ │ │ -153 std::vector jacs(out.size()); │ │ │ │ │ -154 unsigned int k; │ │ │ │ │ -155 for (unsigned int i=0;i<_o_r_d_e_r.size();++i) │ │ │ │ │ -156 if (_o_r_d_e_r[i]==1) k=i; │ │ │ │ │ -157 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(in, jacs); │ │ │ │ │ -158 for (unsigned int i=0;i hesss(out.size()); │ │ │ │ │ -164 int k=-1,l=-1; │ │ │ │ │ -165 for (unsigned int i=0;i<_o_r_d_e_r.size();++i) { │ │ │ │ │ -166 if (_o_r_d_e_r[i] >= 1 && k == -1) │ │ │ │ │ -167 k = i; │ │ │ │ │ -168 else if (_o_r_d_e_r[i]==1) l=i; │ │ │ │ │ -169 } │ │ │ │ │ -170 if (l==-1) l=k; │ │ │ │ │ -171 _e_v_a_l_u_a_t_e_H_e_s_s_i_a_n(in, hesss); │ │ │ │ │ -172 for (unsigned int i=0;i │ │ │ │ │ -_1_8_2 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, F *values ) const │ │ │ │ │ -183 { │ │ │ │ │ -184 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template evaluate( x ), _s_i_z_e(), values); │ │ │ │ │ -185 } │ │ │ │ │ -186 template< unsigned int deriv, class DVector, class F > │ │ │ │ │ -_1_8_7 void _e_v_a_l_u_a_t_e ( const DVector &x, F *values ) const │ │ │ │ │ -188 { │ │ │ │ │ -189 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -190 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -191 for( int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -192 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -193 evaluate( bx, values ); │ │ │ │ │ -194 } │ │ │ │ │ -195 │ │ │ │ │ -196 template │ │ │ │ │ -_1_9_7 struct _C_o_n_v_e_r_t │ │ │ │ │ -198 { │ │ │ │ │ -_1_9_9 static _D_o_m_a_i_n_V_e_c_t_o_r _a_p_p_l_y( const DVector &x ) │ │ │ │ │ -200 { │ │ │ │ │ -201 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -202 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -203 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -204 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -205 return bx; │ │ │ │ │ -206 } │ │ │ │ │ -207 }; │ │ │ │ │ -208 template │ │ │ │ │ -_2_0_9 struct _C_o_n_v_e_r_t │ │ │ │ │ -210 { │ │ │ │ │ -_2_1_1 static const _D_o_m_a_i_n_V_e_c_t_o_r &_a_p_p_l_y( const _D_o_m_a_i_n_V_e_c_t_o_r &x ) │ │ │ │ │ -212 { │ │ │ │ │ -213 return x; │ │ │ │ │ -214 } │ │ │ │ │ -215 }; │ │ │ │ │ -216 template< unsigned int deriv, class DVector, class RVector > │ │ │ │ │ -_2_1_7 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ -218 { │ │ │ │ │ -219 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ -220 const _D_o_m_a_i_n_V_e_c_t_o_r &bx = _C_o_n_v_e_r_t_<_t_r_u_e_,_D_V_e_c_t_o_r_>_:_:_a_p_p_l_y(x); │ │ │ │ │ -221 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template evaluate( bx ), values ); │ │ │ │ │ -222 } │ │ │ │ │ +122 localBasis.evaluateFunction(in, out); │ │ │ │ │ +123 } │ │ │ │ │ +124 │ │ │ │ │ +_1_2_5 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, │ │ │ │ │ +126 std::vector& out) const │ │ │ │ │ +127 { │ │ │ │ │ +128 std::vector │ │ │ │ │ +129 localJacobian(_s_i_z_e()); │ │ │ │ │ +130 localBasis.evaluateJacobian(in, localJacobian); │ │ │ │ │ +131 │ │ │ │ │ +132 const typename Geometry::JacobianInverseTransposed &geoJacobian = │ │ │ │ │ +133 geometry.jacobianInverseTransposed(in); │ │ │ │ │ +134 │ │ │ │ │ +135 out.resize(_s_i_z_e()); │ │ │ │ │ +136 for(std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +137 geoJacobian.mv(localJacobian[i][0], out[i][0]); │ │ │ │ │ +138 } │ │ │ │ │ +139 }; │ │ │ │ │ +140 │ │ │ │ │ +142 │ │ │ │ │ +148 template │ │ │ │ │ +_1_4_9 class _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r { │ │ │ │ │ +150 const LocalInterpolation& localInterpolation; │ │ │ │ │ +151 │ │ │ │ │ +152 public: │ │ │ │ │ +_1_5_3 typedef Traits_ _T_r_a_i_t_s; │ │ │ │ │ +154 │ │ │ │ │ +156 │ │ │ │ │ +_1_6_4 _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +165 ( const LocalInterpolation& localInterpolation_) : │ │ │ │ │ +166 localInterpolation(localInterpolation_) │ │ │ │ │ +167 { } │ │ │ │ │ +168 │ │ │ │ │ +169 template │ │ │ │ │ +_1_7_0 void _i_n_t_e_r_p_o_l_a_t_e(const Function& function, std::vector& out) const │ │ │ │ │ +171 { localInterpolation.interpolate(function, out); } │ │ │ │ │ +172 }; │ │ │ │ │ +173 │ │ │ │ │ +176 │ │ │ │ │ +186 template │ │ │ │ │ +_1_8_7 struct _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r { │ │ │ │ │ +_1_9_1 struct _T_r_a_i_t_s { │ │ │ │ │ +192 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r _B_a_s_i_s; │ │ │ │ │ +194 typedef _L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +_1_9_6 _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +197 typedef typename LocalFiniteElement::Traits::LocalCoefficientsType │ │ │ │ │ +_1_9_8 _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +199 }; │ │ │ │ │ +200 │ │ │ │ │ +201 private: │ │ │ │ │ +202 const LocalFiniteElement &localFE; │ │ │ │ │ +203 typename _T_r_a_i_t_s_:_:_B_a_s_i_s basis_; │ │ │ │ │ +204 typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n interpolation_; │ │ │ │ │ +205 │ │ │ │ │ +206 public: │ │ │ │ │ +208 │ │ │ │ │ +_2_1_7 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ +218 ( const LocalFiniteElement& localFE_, const Geometry &geometry) : │ │ │ │ │ +219 localFE(localFE_), │ │ │ │ │ +220 basis_(localFE.localBasis(), geometry), │ │ │ │ │ +221 interpolation_(localFE.localInterpolation()) │ │ │ │ │ +222 { } │ │ │ │ │ 223 │ │ │ │ │ -224 template │ │ │ │ │ -_2_2_5 void _e_v_a_l_u_a_t_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, std::vector │ │ │ │ │ -> &values ) const │ │ │ │ │ -226 { │ │ │ │ │ -227 evaluate<0>(x,values); │ │ │ │ │ -228 } │ │ │ │ │ -229 template< class DVector, class RVector > │ │ │ │ │ -_2_3_0 void _e_v_a_l_u_a_t_e ( const DVector &x, RVector &values ) const │ │ │ │ │ -231 { │ │ │ │ │ -232 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -233 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -234 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -235 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -236 evaluate<0>( bx, values ); │ │ │ │ │ -237 } │ │ │ │ │ -238 │ │ │ │ │ -239 template< unsigned int deriv, class Vector > │ │ │ │ │ -_2_4_0 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, Vector &values ) const │ │ │ │ │ -241 { │ │ │ │ │ -242 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ -243 _c_o_e_f_f_M_a_t_r_i_x__->template mult( _e_v_a_l__.template evaluate( x ), │ │ │ │ │ -values ); │ │ │ │ │ -244 } │ │ │ │ │ -245 template< unsigned int deriv, class Fy > │ │ │ │ │ -_2_4_6 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -247 std::vector< FieldVector_:_: │ │ │ │ │ -_s_i_z_e>,_d_i_m_R_a_n_g_e> > &values) const │ │ │ │ │ -248 { │ │ │ │ │ -249 evaluateSingle(x,reinterpret_cast::size*_d_i_m_R_a_n_g_e> >&>(values)); │ │ │ │ │ -250 } │ │ │ │ │ -251 template< unsigned int deriv, class Fy > │ │ │ │ │ -_2_5_2 void _e_v_a_l_u_a_t_e_S_i_n_g_l_e ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -253 std::vector< FieldVector<_L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_e_n_s_i_o_n_,_d_e_r_i_v_>,_d_i_m_R_a_n_g_e> > &values) │ │ │ │ │ -const │ │ │ │ │ -254 { │ │ │ │ │ -255 evaluateSingle(x,reinterpret_cast::size*_d_i_m_R_a_n_g_e> >&>(values)); │ │ │ │ │ -256 } │ │ │ │ │ -257 │ │ │ │ │ -258 template │ │ │ │ │ -_2_5_9 void _j_a_c_o_b_i_a_n ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -260 std::vector > &values ) const │ │ │ │ │ -261 { │ │ │ │ │ -262 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ -263 evaluateSingle<1>(x,reinterpret_cast >&>(values)); │ │ │ │ │ -264 } │ │ │ │ │ -265 template< class DVector, class RVector > │ │ │ │ │ -_2_6_6 void _j_a_c_o_b_i_a_n ( const DVector &x, RVector &values ) const │ │ │ │ │ -267 { │ │ │ │ │ -268 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -269 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -270 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -271 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -272 _j_a_c_o_b_i_a_n( bx, values ); │ │ │ │ │ -273 } │ │ │ │ │ -274 template │ │ │ │ │ -_2_7_5 void _h_e_s_s_i_a_n ( const _D_o_m_a_i_n_V_e_c_t_o_r &x, │ │ │ │ │ -276 std::vector<_H_e_s_s_i_a_n_F_y_T_y_p_e_<_F_y_>> &values ) const │ │ │ │ │ -277 { │ │ │ │ │ -278 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ -279 // only upper part of hessians matrix is computed - so we have │ │ │ │ │ -280 // y[0] = FV< FV, dimRange> │ │ │ │ │ -281 const unsigned int hsize = _L_F_E_T_e_n_s_o_r_<_F_y_,_d_i_m_e_n_s_i_o_n_,_2_>_:_:_s_i_z_e; │ │ │ │ │ -282 std::vector< FieldVector< FieldVector, _d_i_m_R_a_n_g_e> > y( _s_i_z_e() ); │ │ │ │ │ -283 evaluateSingle<2>(x, y); │ │ │ │ │ -284 unsigned int q = 0; │ │ │ │ │ -285 for (unsigned int i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ -286 for (unsigned int r = 0; r < _d_i_m_R_a_n_g_e; ++r) │ │ │ │ │ -287 { │ │ │ │ │ -288 q = 0; │ │ │ │ │ -289 // tensor-based things follow unintuitive index scheme │ │ │ │ │ -290 // e.g. for dim = 3, the k-l index of y is 00,01,11,02,12,22, i.e. partial │ │ │ │ │ -derivatives │ │ │ │ │ -291 // are ordered: xx,xy,yy,xz,yz,zz │ │ │ │ │ -292 │ │ │ │ │ -293 // Fill values 'directionwise' │ │ │ │ │ -294 for (unsigned int k = 0; k < _d_i_m_e_n_s_i_o_n; ++k) │ │ │ │ │ -295 for (unsigned int l = 0; l <= k; ++l) │ │ │ │ │ -296 { │ │ │ │ │ -297 │ │ │ │ │ -298 values[i][r][k][l] = y[i][r][q]; │ │ │ │ │ -299 values[i][r][l][k] = y[i][r][q]; │ │ │ │ │ -300 assert(q < hsize); │ │ │ │ │ -301 ++q; │ │ │ │ │ -302 } │ │ │ │ │ -303 } │ │ │ │ │ -304 // evaluateSingle<2>(x,reinterpret_cast >&>(values)); │ │ │ │ │ -305 } │ │ │ │ │ -306 template< class DVector, class HVector > │ │ │ │ │ -_3_0_7 void _h_e_s_s_i_a_n ( const DVector &x, HVector &values ) const │ │ │ │ │ -308 { │ │ │ │ │ -309 assert( DVector::dimension == _d_i_m_e_n_s_i_o_n); │ │ │ │ │ -310 _D_o_m_a_i_n_V_e_c_t_o_r bx; │ │ │ │ │ -311 for( unsigned int d = 0; d < _d_i_m_e_n_s_i_o_n; ++d ) │ │ │ │ │ -312 _f_i_e_l_d___c_a_s_t( x[ d ], bx[ d ] ); │ │ │ │ │ -313 _h_e_s_s_i_a_n( bx, values ); │ │ │ │ │ -314 } │ │ │ │ │ -315 │ │ │ │ │ -316 template │ │ │ │ │ -_3_1_7 void _i_n_t_e_g_r_a_t_e ( std::vector &values ) const │ │ │ │ │ -318 { │ │ │ │ │ -319 assert(values.size()>=_s_i_z_e()); │ │ │ │ │ -320 _c_o_e_f_f_M_a_t_r_i_x__->mult( _e_v_a_l__.template _i_n_t_e_g_r_a_t_e(), values ); │ │ │ │ │ -321 } │ │ │ │ │ -322 │ │ │ │ │ -323 protected: │ │ │ │ │ -_3_2_4 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s &other) │ │ │ │ │ -325 : _b_a_s_i_s__(other._b_a_s_i_s__), │ │ │ │ │ -326 _c_o_e_f_f_M_a_t_r_i_x__(other._c_o_e_f_f_M_a_t_r_i_x__), │ │ │ │ │ -327 _e_v_a_l__(_b_a_s_i_s__), │ │ │ │ │ -328 _o_r_d_e_r__(_b_a_s_i_s__._o_r_d_e_r()), │ │ │ │ │ -329 _s_i_z_e__(other._s_i_z_e__) │ │ │ │ │ -330 {} │ │ │ │ │ -_3_3_1 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s &_o_p_e_r_a_t_o_r_=(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s&); │ │ │ │ │ -_3_3_2 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ -_3_3_3 const _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x* _c_o_e_f_f_M_a_t_r_i_x__; │ │ │ │ │ -_3_3_4 mutable Evaluator _e_v_a_l__; │ │ │ │ │ -_3_3_5 unsigned int _o_r_d_e_r__,_s_i_z_e__; │ │ │ │ │ -336 }; │ │ │ │ │ -337 │ │ │ │ │ -344 template< class Eval, class CM = SparseCoeffMatrix, │ │ │ │ │ -345 class D=double, class R=double> │ │ │ │ │ -_3_4_6 class _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -347 : public _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s< Eval, CM, D, R > │ │ │ │ │ -348 { │ │ │ │ │ -349 public: │ │ │ │ │ -_3_5_0 typedef CM _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x; │ │ │ │ │ -351 │ │ │ │ │ -352 private: │ │ │ │ │ -353 typedef Eval Evaluator; │ │ │ │ │ -354 │ │ │ │ │ -355 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_u_a_t_o_r_,_ _C_M_ _> _T_h_i_s; │ │ │ │ │ -356 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_<_E_v_a_l_u_a_t_o_r_,_ _C_M_,_ _D_,_ _R_> _B_a_s_e; │ │ │ │ │ -357 │ │ │ │ │ -358 public: │ │ │ │ │ -_3_5_9 typedef typename _B_a_s_e_:_:_B_a_s_i_s _B_a_s_i_s; │ │ │ │ │ -360 │ │ │ │ │ -_3_6_1 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x (const _B_a_s_i_s &_b_a_s_i_s) │ │ │ │ │ -362 : _B_a_s_e(_b_a_s_i_s,coeffMatrix_,0) │ │ │ │ │ -363 {} │ │ │ │ │ -364 │ │ │ │ │ -365 template │ │ │ │ │ -_3_6_6 void _f_i_l_l(const Matrix& _m_a_t_r_i_x) │ │ │ │ │ -367 { │ │ │ │ │ -368 coeffMatrix_.fill(_m_a_t_r_i_x); │ │ │ │ │ -369 this->_s_i_z_e__ = coeffMatrix_.size(); │ │ │ │ │ -370 } │ │ │ │ │ -371 template │ │ │ │ │ -_3_7_2 void _f_i_l_l(const Matrix& _m_a_t_r_i_x,int _s_i_z_e) │ │ │ │ │ -373 { │ │ │ │ │ -374 coeffMatrix_.fill(_m_a_t_r_i_x); │ │ │ │ │ -375 assert(_s_i_z_e<=coeffMatrix_.size()); │ │ │ │ │ -376 this->_s_i_z_e__ = _s_i_z_e; │ │ │ │ │ -377 } │ │ │ │ │ -378 │ │ │ │ │ -379 private: │ │ │ │ │ -380 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &); │ │ │ │ │ -381 _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &operator=(const _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x &); │ │ │ │ │ -382 _C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x coeffMatrix_; │ │ │ │ │ -383 }; │ │ │ │ │ -384} │ │ │ │ │ -385#endif // DUNE_POLYNOMIALBASIS_HH │ │ │ │ │ -_c_o_e_f_f_m_a_t_r_i_x_._h_h │ │ │ │ │ -_b_a_s_i_s_e_v_a_l_u_a_t_o_r_._h_h │ │ │ │ │ -_m_o_n_o_m_i_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_m_u_l_t_i_i_n_d_e_x_._h_h │ │ │ │ │ +_2_2_4 const typename _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const { return basis_; } │ │ │ │ │ +_2_2_5 const typename _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +226 { return interpolation_; } │ │ │ │ │ +_2_2_7 const typename _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +228 { return localFE.localCoefficients(); } │ │ │ │ │ +_2_2_9 GeometryType _t_y_p_e() const { return localFE.type(); } │ │ │ │ │ +230 }; │ │ │ │ │ +231 │ │ │ │ │ +233 │ │ │ │ │ +243 template │ │ │ │ │ +_2_4_4 class _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y { │ │ │ │ │ +245 const LocalFiniteElement& localFE; │ │ │ │ │ +246 │ │ │ │ │ +247 public: │ │ │ │ │ +248 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +250 │ │ │ │ │ +252 │ │ │ │ │ +_2_6_0 _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ +261 (const LocalFiniteElement &localFE_) : localFE(localFE_) {} │ │ │ │ │ +262 │ │ │ │ │ +264 │ │ │ │ │ +_2_7_4 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry& geometry) { │ │ │ │ │ +275 return _F_i_n_i_t_e_E_l_e_m_e_n_t(localFE, geometry); │ │ │ │ │ +276 } │ │ │ │ │ +277 }; │ │ │ │ │ +278 │ │ │ │ │ +279} // namespace Dune │ │ │ │ │ +280 │ │ │ │ │ +281#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALTOGLOBALADAPTORS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:230 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, std::vector< FieldVector< Fy, dimRange > > │ │ │ │ │ -&values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:225 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -PolynomialBasis(const PolynomialBasis &other) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:324 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, F *values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:187 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_H_e_s_s_i_a_n │ │ │ │ │ -void evaluateHessian(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ -HessianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:135 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -CoefficientMatrix::Field StorageField │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:72 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const unsigned int dimRange │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_j_a_c_o_b_i_a_n │ │ │ │ │ -void jacobian(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:266 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_D_o_m_a_i_n_V_e_c_t_o_r │ │ │ │ │ -Evaluator::DomainVector DomainVector │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:80 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_B_a_s_i_s │ │ │ │ │ -Evaluator::Basis Basis │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ -void evaluateSingle(const DomainVector &x, Vector &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:240 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ -void evaluateSingle(const DomainVector &x, std::vector< FieldVector< LFETensor< │ │ │ │ │ -Fy, dimension, deriv >, dimRange > > &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:252 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_j_a_c_o_b_i_a_n │ │ │ │ │ -void jacobian(const DomainVector &x, std::vector< FieldMatrix< Fy, dimRange, │ │ │ │ │ -dimension > > &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:259 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_m_a_t_r_i_x │ │ │ │ │ -const CoefficientMatrix & matrix() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:103 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_b_a_s_i_s__ │ │ │ │ │ -const Basis & basis_ │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:332 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &x, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -PolynomialBasis & operator=(const PolynomialBasis &) │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_c_o_e_f_f_M_a_t_r_i_x__ │ │ │ │ │ -const CoefficientMatrix * coeffMatrix_ │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:333 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_i_n_t_e_g_r_a_t_e │ │ │ │ │ -void integrate(std::vector< Fy > &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:317 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:113 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DomainVector &x, F *values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:182 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_h_e_s_s_i_a_n │ │ │ │ │ -void hessian(const DVector &x, HVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:307 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ -CM CoefficientMatrix │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_H_e_s_s_i_a_n_T_y_p_e │ │ │ │ │ -HessianFyType< R > HessianType │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:83 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, dimension, FieldVector< D, dimension >, R, dimRange, │ │ │ │ │ -FieldVector< R, dimRange >, FieldMatrix< R, dimRange, dimension > > Traits │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r__ │ │ │ │ │ -unsigned int order_ │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:335 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_h_e_s_s_i_a_n │ │ │ │ │ -void hessian(const DomainVector &x, std::vector< HessianFyType< Fy > > &values) │ │ │ │ │ -const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:275 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e │ │ │ │ │ -void evaluate(const DVector &x, RVector &values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:217 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -PolynomialBasis(const Basis &basis, const CoefficientMatrix &coeffMatrix, │ │ │ │ │ -unsigned int size) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:85 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_H_e_s_s_i_a_n_F_y_T_y_p_e │ │ │ │ │ -FieldVector< FieldMatrix< Fy, dimension, dimension >, dimRange > HessianFyType │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:82 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:108 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_S_i_n_g_l_e │ │ │ │ │ -void evaluateSingle(const DomainVector &x, std::vector< FieldVector< │ │ │ │ │ -FieldVector< Fy, LFETensor< Fy, dimension, deriv >::size >, dimRange > > │ │ │ │ │ -&values) const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:246 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_b_a_s_i_s │ │ │ │ │ -const Basis & basis() const │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:98 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dimension > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:143 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_s_i_z_e__ │ │ │ │ │ -unsigned int size_ │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:335 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_e_v_a_l__ │ │ │ │ │ -Evaluator eval_ │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:334 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:198 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t_:_:_a_p_p_l_y │ │ │ │ │ -static DomainVector apply(const DVector &x) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:199 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_:_:_C_o_n_v_e_r_t_<_ _d_u_m_m_y_,_ _D_o_m_a_i_n_V_e_c_t_o_r_ _>_:_:_a_p_p_l_y │ │ │ │ │ -static const DomainVector & apply(const DomainVector &x) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:211 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -PolynomialBasisWithMatrix(const Basis &basis) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:361 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_C_o_e_f_f_i_c_i_e_n_t_M_a_t_r_i_x │ │ │ │ │ -CM CoefficientMatrix │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:350 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ -void fill(const Matrix &matrix, int size) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:372 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_B_a_s_i_s │ │ │ │ │ -Base::Basis Basis │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:359 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ -void fill(const Matrix &matrix) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:366 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_T_e_n_s_o_r │ │ │ │ │ -DDeeffiinniittiioonn tensor.hh:33 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ +RF RangeFieldType │ │ │ │ │ +Export type for range field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static constexpr int dimRange │ │ │ │ │ +dimension of the range │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ +DF DomainFieldType │ │ │ │ │ +Export type for domain field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ +static constexpr int dimDomain │ │ │ │ │ +dimension of the domain │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +R RangeType │ │ │ │ │ +range type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s │ │ │ │ │ +Traits class for local-to-global basis adaptors. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ +LocalBasisTraits::RangeFieldType RangeField │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ +LocalBasisTraits::DomainFieldType DomainField │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ +FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +static const std::size_t dimDomainLocal │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ +LocalBasisTraits::RangeType Range │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ +static const std::size_t dimDomainGlobal │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const std::size_t dimRange │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ +FieldVector< DomainField, dimDomainGlobal > DomainGlobal │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +LocalBasisTraits::DomainType DomainLocal │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local basis into a global basis. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ +typename Traits::Jacobian > &out) const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:125 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +return maximum polynomial order of the base function │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalToGlobalBasisAdaptorTraits< typename LocalBasis::Traits, Geometry:: │ │ │ │ │ +coorddimension > Traits │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ +ScalarLocalToGlobalBasisAdaptor(const LocalBasis &localBasis_, const Geometry │ │ │ │ │ +&geometry_) │ │ │ │ │ +construct a ScalarLocalToGlobalBasisAdaptor │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ +typename Traits::Range > &out) const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:119 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:101 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +Convert a local interpolation into a global interpolation. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r │ │ │ │ │ +LocalToGlobalInterpolationAdaptor(const LocalInterpolation │ │ │ │ │ +&localInterpolation_) │ │ │ │ │ +construct a LocalToGlobalInterpolationAdaptor │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:165 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const Function &function, std::vector< Coeff > &out) const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:170 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_T_o_G_l_o_b_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ +Traits_ Traits │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:153 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local finite element into a global finite element. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:229 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::Coefficients & coefficients() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:227 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::Interpolation & interpolation() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_b_a_s_i_s │ │ │ │ │ +const Traits::Basis & basis() const │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:224 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_: │ │ │ │ │ +_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r │ │ │ │ │ +ScalarLocalToGlobalFiniteElementAdaptor(const LocalFiniteElement &localFE_, │ │ │ │ │ +const Geometry &geometry) │ │ │ │ │ +construct a ScalarLocalToGlobalFiniteElementAdaptor │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:218 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:191 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +LocalToGlobalInterpolationAdaptor< typename LocalFiniteElement::Traits:: │ │ │ │ │ +LocalInterpolationType, typename Basis::Traits > Interpolation │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:196 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +LocalFiniteElement::Traits::LocalCoefficientsType Coefficients │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:198 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +ScalarLocalToGlobalBasisAdaptor< typename LocalFiniteElement::Traits:: │ │ │ │ │ +LocalBasisType, Geometry > Basis │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:193 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ +Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:244 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &geometry) │ │ │ │ │ +construct ScalarLocalToGlobalFiniteElementAdaptor │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:274 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > │ │ │ │ │ +FiniteElement │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:249 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y_:_: │ │ │ │ │ +_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_A_d_a_p_t_o_r_F_a_c_t_o_r_y │ │ │ │ │ +ScalarLocalToGlobalFiniteElementAdaptorFactory(const LocalFiniteElement │ │ │ │ │ +&localFE_) │ │ │ │ │ +construct a ScalarLocalToGlobalFiniteElementAdaptorFactory │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:261 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: multiindex.hh File Reference │ │ │ │ +dune-localfunctions: interfaceswitch.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,78 +65,46 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
multiindex.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
interfaceswitch.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ -#include <ostream>
│ │ │ │ -#include <dune/common/ftraits.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <memory>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/common/shared_ptr.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MultiIndex< dim, Field >
struct  Dune::FiniteElementInterfaceSwitch< FiniteElement, Dummy >
 Switch for uniform treatment of finite element with either the local or the global interface. More...
 
struct  Dune::FieldTraits< MultiIndex< dim, Field > >
 
struct  Dune::Unity< MultiIndex< dim, F > >
 
struct  Dune::Zero< MultiIndex< dim, F > >
struct  Dune::BasisInterfaceSwitch< Basis, Dummy >
 Switch for uniform treatment of local and global basis classes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<int dim, class Field >
std::ostream & Dune::operator<< (std::ostream &, const MultiIndex< dim, Field > &)
 
template<int dim, class Field , class F >
MultiIndex< dim, Field > Dune::operator* (const F &f, const MultiIndex< dim, Field > &m)
 
template<int dim, class Field , class F >
MultiIndex< dim, Field > Dune::operator/ (const F &f, const MultiIndex< dim, Field > &m)
 
template<int d, class F >
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< MultiIndex< d, F > > &y)
 
template<int d, class F , int dimR>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Dune::FieldVector< MultiIndex< d, F >, dimR > > &y)
 
template<int d, class F , int dimR1, int dimR2>
std::ostream & Dune::operator<< (std::ostream &out, const std::vector< Dune::FieldMatrix< MultiIndex< d, F >, dimR1, dimR2 > > &y)
 
template<int d, class F >
std::ostream & Dune::operator<< (std::ostream &out, const MultiIndex< d, F > &val)
 
template<int dim, class Field >
bool Dune::operator< (const Zero< MultiIndex< dim, Field > > &, const MultiIndex< dim, Field > &)
 
template<int dim, class Field >
bool Dune::operator< (const MultiIndex< dim, Field > &f, const Zero< MultiIndex< dim, Field > > &)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,68 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -multiindex.hh File Reference │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +interfaceswitch.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_U_n_i_t_y_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_Z_e_r_o_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_<_ _F_i_n_i_t_e_E_l_e_m_e_n_t_,_ _D_u_m_m_y_ _> │ │ │ │ │ +  Switch for uniform treatment of finite element with either the local │ │ │ │ │ + or the global interface. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_<_ _B_a_s_i_s_,_ _D_u_m_m_y_ _> │ │ │ │ │ +  Switch for uniform treatment of local and global basis classes. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ - std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &, const _M_u_l_t_i_I_n_d_e_x< │ │ │ │ │ - dim, Field > &) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -_M_u_l_t_i_I_n_d_e_x< dim, Field >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_* (const F &f, const _M_u_l_t_i_I_n_d_e_x< dim, │ │ │ │ │ - Field > &m) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ -_M_u_l_t_i_I_n_d_e_x< dim, Field >  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ (const F &f, const _M_u_l_t_i_I_n_d_e_x< dim, │ │ │ │ │ - Field > &m) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ - vector< _M_u_l_t_i_I_n_d_e_x< d, F > > &y) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ - vector< Dune::FieldVector< _M_u_l_t_i_I_n_d_e_x< d, F >, dimR > │ │ │ │ │ - > &y) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const std:: │ │ │ │ │ - vector< Dune::FieldMatrix< _M_u_l_t_i_I_n_d_e_x< d, F >, dimR1, │ │ │ │ │ - dimR2 > > &y) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const │ │ │ │ │ - _M_u_l_t_i_I_n_d_e_x< d, F > &val) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim, Field > │ │ │ │ │ - > &, const _M_u_l_t_i_I_n_d_e_x< dim, Field > &) │ │ │ │ │ -  │ │ │ │ │ -template │ │ │ │ │ - bool  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_< (const _M_u_l_t_i_I_n_d_e_x< dim, Field > &f, │ │ │ │ │ - const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim, Field > > &) │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00506_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: multiindex.hh Source File │ │ │ │ +dune-localfunctions: interfaceswitch.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,657 +70,198 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
multiindex.hh
│ │ │ │ +
interfaceswitch.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_MULTIINDEX_HH
│ │ │ │ -
6#define DUNE_MULTIINDEX_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9#include <ostream>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/common/ftraits.hh>
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13
│ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18 /****************************************************************
│ │ │ │ -
19 * Provide a Field class which can be used in evaluation methods
│ │ │ │ -
20 * to produce MultiIndex presentation of polynomials.
│ │ │ │ -
21 ****************************************************************/
│ │ │ │ -
22 // Internal Forward Declarations
│ │ │ │ -
23 // -----------------------------
│ │ │ │ -
24
│ │ │ │ -
25 template< int dim, class Field >
│ │ │ │ -
26 class MultiIndex;
│ │ │ │ -
27
│ │ │ │ -
28 template< int dim, class Field >
│ │ │ │ -
29 std::ostream &operator<< ( std::ostream &, const MultiIndex< dim,Field > & );
│ │ │ │ -
30
│ │ │ │ -
31
│ │ │ │ -
32
│ │ │ │ -
33 // MultiIndex
│ │ │ │ -
34 // ----------
│ │ │ │ -
35
│ │ │ │ -
36 template< int dim,class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {
│ │ │ │ - │ │ │ │ -
40
│ │ │ │ -
41 friend std::ostream &operator<<<> ( std::ostream &, const This & );
│ │ │ │ -
42
│ │ │ │ -
43 public:
│ │ │ │ -
44 static const int dimension = dim;
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
47 : vecZ_( 0 ),
│ │ │ │ -
48 vecOMZ_( 0 ),
│ │ │ │ -
49 factor_( 1. ),
│ │ │ │ -
50 next_( 0 )
│ │ │ │ -
51 {}
│ │ │ │ -
│ │ │ │ -
52 template <class F>
│ │ │ │ -
│ │ │ │ -
53 explicit MultiIndex (const F &f)
│ │ │ │ -
54 : vecZ_( 0 ),
│ │ │ │ -
55 vecOMZ_( 0 ),
│ │ │ │ -
56 factor_( field_cast<Field>(f) ),
│ │ │ │ -
57 next_( 0 )
│ │ │ │ -
58 {}
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
60 MultiIndex ( int, const This &other )
│ │ │ │ -
61 : vecZ_( other.vecOMZ_ ),
│ │ │ │ -
62 vecOMZ_( other.vecZ_ ),
│ │ │ │ -
63 factor_( other.factor_ )
│ │ │ │ -
64 {
│ │ │ │ -
65 assert(!other.next_);
│ │ │ │ -
66 if (other.next_)
│ │ │ │ -
67 {
│ │ │ │ -
68 next_ = new This( *(other.next_) );
│ │ │ │ -
69 }
│ │ │ │ -
70 else
│ │ │ │ -
71 next_ = 0;
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
│ │ │ │ -
74 MultiIndex ( const This &other )
│ │ │ │ -
75 : vecZ_( other.vecZ_ ),
│ │ │ │ -
76 vecOMZ_( other.vecOMZ_ ),
│ │ │ │ -
77 factor_( other.factor_ )
│ │ │ │ -
78 {
│ │ │ │ -
79 if (other.next_)
│ │ │ │ -
80 {
│ │ │ │ -
81 next_ = new This( *(other.next_) );
│ │ │ │ -
82 }
│ │ │ │ -
83 else
│ │ │ │ -
84 next_ = 0;
│ │ │ │ -
85 }
│ │ │ │ -
│ │ │ │ -
86
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
88 {
│ │ │ │ -
89 remove();
│ │ │ │ -
90 }
│ │ │ │ -
│ │ │ │ -
91
│ │ │ │ -
│ │ │ │ -
92 int z(int i) const
│ │ │ │ -
93 {
│ │ │ │ -
94 return vecZ_[i];
│ │ │ │ -
95 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
96 int omz(int i) const
│ │ │ │ -
97 {
│ │ │ │ -
98 return vecOMZ_[i];
│ │ │ │ -
99 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
100 const Field &factor() const
│ │ │ │ -
101 {
│ │ │ │ -
102 return factor_;
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
│ │ │ │ -
105 This &operator= ( const This &other )
│ │ │ │ -
106 {
│ │ │ │ -
107 remove();
│ │ │ │ -
108 vecZ_ = other.vecZ_;
│ │ │ │ -
109 vecOMZ_ = other.vecOMZ_;
│ │ │ │ -
110 factor_ = other.factor_;
│ │ │ │ -
111 if (other.next_)
│ │ │ │ -
112 next_ = new This(*(other.next_));
│ │ │ │ -
113 return *this;
│ │ │ │ -
114 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
116 {
│ │ │ │ -
117 remove();
│ │ │ │ -
118 vecZ_ = 0;
│ │ │ │ -
119 vecOMZ_ = 0;
│ │ │ │ -
120 factor_ = 0.;
│ │ │ │ -
121 return *this;
│ │ │ │ -
122 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
124 {
│ │ │ │ -
125 remove();
│ │ │ │ -
126 vecZ_ = 0;
│ │ │ │ -
127 vecOMZ_ = 0;
│ │ │ │ -
128 factor_ = 1.;
│ │ │ │ -
129 return *this;
│ │ │ │ -
130 }
│ │ │ │ -
│ │ │ │ -
131 template <class F>
│ │ │ │ -
│ │ │ │ -
132 This &operator= ( const F &f )
│ │ │ │ -
133 {
│ │ │ │ -
134 remove();
│ │ │ │ -
135 vecZ_ = 0;
│ │ │ │ -
136 vecOMZ_ = 0;
│ │ │ │ -
137 factor_ = field_cast<Field>(f);
│ │ │ │ -
138 return *this;
│ │ │ │ -
139 }
│ │ │ │ -
│ │ │ │ -
140
│ │ │ │ -
│ │ │ │ -
141 bool operator== (const This &other) const
│ │ │ │ -
142 {
│ │ │ │ -
143 assert(!next_ && !other.next_);
│ │ │ │ -
144 return (vecZ_==other.vecZ_ && vecOMZ_==other.vecOMZ_ && factor_==other.factor_);
│ │ │ │ -
145 }
│ │ │ │ -
│ │ │ │ -
146
│ │ │ │ -
147 template <class F>
│ │ │ │ -
│ │ │ │ -
148 This &operator*= ( const F &f )
│ │ │ │ -
149 {
│ │ │ │ -
150 factor_ *= field_cast<Field>(f);
│ │ │ │ -
151 if (next_)
│ │ │ │ -
152 (*next_) *= f;
│ │ │ │ -
153 return *this;
│ │ │ │ -
154 }
│ │ │ │ -
│ │ │ │ -
155 template <class F>
│ │ │ │ -
│ │ │ │ -
156 This &operator/= ( const F &f )
│ │ │ │ -
157 {
│ │ │ │ -
158 factor_ /= field_cast<Field>(f);
│ │ │ │ -
159 if (next_)
│ │ │ │ -
160 (*next_) /= f;
│ │ │ │ -
161 return *this;
│ │ │ │ -
162 }
│ │ │ │ -
│ │ │ │ -
163
│ │ │ │ -
│ │ │ │ -
164 This &operator*= ( const This &other )
│ │ │ │ -
165 {
│ │ │ │ -
166 assert(!other.next_);
│ │ │ │ -
167 vecZ_ += other.vecZ_;
│ │ │ │ -
168 vecOMZ_ += other.vecOMZ_;
│ │ │ │ -
169 factor_ *= other.factor_;
│ │ │ │ -
170 if (next_)
│ │ │ │ -
171 (*next_) *= other;
│ │ │ │ -
172 return *this;
│ │ │ │ -
173 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
174 This &operator/= ( const This &other )
│ │ │ │ -
175 {
│ │ │ │ -
176 assert(!other.next_);
│ │ │ │ -
177 vecZ_ -= other.vecZ_;
│ │ │ │ -
178 vecOMZ_ -= other.vecOMZ_;
│ │ │ │ -
179 factor_ /= other.factor_;
│ │ │ │ -
180 if (next_)
│ │ │ │ -
181 (*next_) /= other;
│ │ │ │ -
182 return *this;
│ │ │ │ -
183 }
│ │ │ │ -
│ │ │ │ -
184
│ │ │ │ -
│ │ │ │ -
185 This &operator+= ( const This &other )
│ │ │ │ -
186 {
│ │ │ │ -
187 assert(!other.next_);
│ │ │ │ -
188 if (std::abs(other.factor_)<1e-10)
│ │ │ │ -
189 return *this;
│ │ │ │ -
190 if (std::abs(factor_)<1e-10)
│ │ │ │ -
191 {
│ │ │ │ -
192 *this = other;
│ │ │ │ -
193 return *this;
│ │ │ │ -
194 }
│ │ │ │ -
195 if (!sameMultiIndex(other))
│ │ │ │ -
196 {
│ │ │ │ -
197 if (next_)
│ │ │ │ -
198 (*next_)+=other;
│ │ │ │ -
199 else
│ │ │ │ -
200 {
│ │ │ │ -
201 next_ = new This(other);
│ │ │ │ -
202 }
│ │ │ │ -
203 }
│ │ │ │ -
204 else
│ │ │ │ -
205 factor_ += other.factor_;
│ │ │ │ -
206 return *this;
│ │ │ │ -
207 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
208 This &operator-= ( const This &other )
│ │ │ │ -
209 {
│ │ │ │ -
210 assert(!other.next_);
│ │ │ │ -
211 if (!sameMultiIndex(other))
│ │ │ │ -
212 {
│ │ │ │ -
213 if (next_)
│ │ │ │ -
214 next_-=other;
│ │ │ │ -
215 else
│ │ │ │ -
216 {
│ │ │ │ -
217 next_ = new This(other);
│ │ │ │ -
218 }
│ │ │ │ -
219 }
│ │ │ │ -
220 else
│ │ │ │ -
221 factor_ -= other.factor_;
│ │ │ │ -
222 return *this;
│ │ │ │ -
223 }
│ │ │ │ -
│ │ │ │ -
224
│ │ │ │ -
225 template <class F>
│ │ │ │ -
│ │ │ │ -
226 This operator* ( const F &f ) const
│ │ │ │ -
227 {
│ │ │ │ -
228 This z = *this;
│ │ │ │ -
229 return (z *= f);
│ │ │ │ -
230 }
│ │ │ │ -
│ │ │ │ -
231 template <class F>
│ │ │ │ -
│ │ │ │ -
232 This operator/ ( const F &f ) const
│ │ │ │ -
233 {
│ │ │ │ -
234 This z = *this;
│ │ │ │ -
235 return (z /= f);
│ │ │ │ -
236 }
│ │ │ │ -
│ │ │ │ -
237
│ │ │ │ -
│ │ │ │ -
238 This operator* ( const This &other ) const
│ │ │ │ -
239 {
│ │ │ │ -
240 This z = *this;
│ │ │ │ -
241 return (z *= other);
│ │ │ │ -
242 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
243 This operator/ ( const This &other ) const
│ │ │ │ -
244 {
│ │ │ │ -
245 This z = *this;
│ │ │ │ -
246 return (z /= other);
│ │ │ │ -
247 }
│ │ │ │ -
│ │ │ │ -
248
│ │ │ │ -
│ │ │ │ -
249 This operator+ ( const This &other ) const
│ │ │ │ -
250 {
│ │ │ │ -
251 This z = *this;
│ │ │ │ -
252 return (z += other);
│ │ │ │ -
253 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
254 This operator- ( const This &other ) const
│ │ │ │ -
255 {
│ │ │ │ -
256 This z = *this;
│ │ │ │ -
257 return (z -= other);
│ │ │ │ -
258 }
│ │ │ │ -
│ │ │ │ -
259
│ │ │ │ -
│ │ │ │ -
260 void set ( int d, int power = 1 )
│ │ │ │ -
261 {
│ │ │ │ -
262 vecZ_[ d ] = power;
│ │ │ │ -
263 }
│ │ │ │ -
│ │ │ │ -
264
│ │ │ │ -
│ │ │ │ -
265 int absZ () const
│ │ │ │ -
266 {
│ │ │ │ -
267 int ret = 0;
│ │ │ │ -
268 for( int i = 0; i < dimension; ++i )
│ │ │ │ -
269 ret += std::abs( vecZ_[ i ] );
│ │ │ │ -
270 return ret;
│ │ │ │ -
271 }
│ │ │ │ -
│ │ │ │ -
272
│ │ │ │ -
│ │ │ │ -
273 int absOMZ() const
│ │ │ │ -
274 {
│ │ │ │ -
275 int ret = 0;
│ │ │ │ -
276 for( int i = 0; i < dimension; ++i )
│ │ │ │ -
277 ret += std::abs( vecOMZ_[ i ] );
│ │ │ │ -
278 return ret;
│ │ │ │ -
279 }
│ │ │ │ -
│ │ │ │ -
280
│ │ │ │ -
│ │ │ │ -
281 bool sameMultiIndex(const This &ind)
│ │ │ │ -
282 {
│ │ │ │ -
283 for( int i = 0; i < dimension; ++i )
│ │ │ │ -
284 {
│ │ │ │ -
285 if ( vecZ_[i] != ind.vecZ_[i] ||
│ │ │ │ -
286 vecOMZ_[i] != vecOMZ_[i] )
│ │ │ │ -
287 return false;
│ │ │ │ -
288 }
│ │ │ │ -
289 return true;
│ │ │ │ -
290 }
│ │ │ │ -
│ │ │ │ -
291
│ │ │ │ -
292 private:
│ │ │ │ -
293 void remove()
│ │ │ │ -
294 {
│ │ │ │ -
295 if (next_)
│ │ │ │ -
296 {
│ │ │ │ -
297 next_->remove();
│ │ │ │ -
298 delete next_;
│ │ │ │ -
299 next_ = 0;
│ │ │ │ -
300 }
│ │ │ │ -
301 }
│ │ │ │ -
302
│ │ │ │ -
303 typedef Dune::FieldVector< int, dimension > Vector;
│ │ │ │ -
304
│ │ │ │ -
305 Vector vecZ_;
│ │ │ │ -
306 Vector vecOMZ_;
│ │ │ │ -
307 Field factor_;
│ │ │ │ -
308
│ │ │ │ -
309 This *next_;
│ │ │ │ -
310 };
│ │ │ │ -
│ │ │ │ -
311
│ │ │ │ -
312
│ │ │ │ -
313 template< int dim,class Field >
│ │ │ │ -
│ │ │ │ -
314 struct FieldTraits<MultiIndex<dim,Field>>
│ │ │ │ -
315 {
│ │ │ │ -
316 using field_type = Field;
│ │ │ │ -
317 using real_type = typename FieldTraits<field_type>::real_type;
│ │ │ │ -
318 };
│ │ │ │ -
│ │ │ │ -
319
│ │ │ │ -
320 template <int dim, class Field, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
322 const MultiIndex<dim,Field> &m)
│ │ │ │ -
323 {
│ │ │ │ - │ │ │ │ -
325 return (z *= f);
│ │ │ │ -
326 }
│ │ │ │ -
│ │ │ │ -
327 template <int dim, class Field, class F>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
329 const MultiIndex<dim,Field> &m)
│ │ │ │ -
330 {
│ │ │ │ - │ │ │ │ -
332 return (z /= f);
│ │ │ │ -
333 }
│ │ │ │ -
│ │ │ │ -
334
│ │ │ │ -
335 template <int d, class F>
│ │ │ │ -
│ │ │ │ -
336 std::ostream &operator<<(std::ostream& out,const std::vector<MultiIndex<d,F> >& y) {
│ │ │ │ -
337 for (unsigned int r=0; r<y.size(); ++r) {
│ │ │ │ -
338 out << "f_{" << r << "}(" << char('a');
│ │ │ │ -
339 for (int i=1; i<d; ++i)
│ │ │ │ -
340 out << "," << char('a'+i);
│ │ │ │ -
341 out << ")=";
│ │ │ │ -
342 out << y[r] << std::endl;
│ │ │ │ -
343 }
│ │ │ │ -
344 return out;
│ │ │ │ -
345 }
│ │ │ │ -
│ │ │ │ -
346 template <int d,class F,int dimR>
│ │ │ │ -
│ │ │ │ -
347 std::ostream &operator<<(std::ostream& out,
│ │ │ │ -
348 const std::vector<Dune::FieldVector<MultiIndex<d,F>,dimR> >& y) {
│ │ │ │ -
349 out << "\\begin{eqnarray*}" << std::endl;
│ │ │ │ -
350 for (unsigned int k=0; k<y.size(); ++k) {
│ │ │ │ -
351 out << "f_{" << k << "}(" << char('a');
│ │ │ │ -
352 for (int i=1; i<d; ++i)
│ │ │ │ -
353 out << "," << char('a'+i);
│ │ │ │ -
354 out << ") &=& ( ";
│ │ │ │ -
355 out << y[k][0] ;
│ │ │ │ -
356 for (unsigned int r=1; r<dimR; ++r) {
│ │ │ │ -
357 out << " , " << y[k][r] ;
│ │ │ │ -
358 }
│ │ │ │ -
359 out << " ) \\\\" << std::endl;
│ │ │ │ -
360 }
│ │ │ │ -
361 out << "\\end{eqnarray*}" << std::endl;
│ │ │ │ -
362 return out;
│ │ │ │ -
363 }
│ │ │ │ -
│ │ │ │ -
364 template <int d,class F,int dimR1,int dimR2>
│ │ │ │ -
│ │ │ │ -
365 std::ostream &operator<<(std::ostream& out,
│ │ │ │ -
366 const std::vector<Dune::FieldMatrix<MultiIndex<d,F>,dimR1,dimR2> >& y) {
│ │ │ │ -
367 out << "\\begin{eqnarray*}" << std::endl;
│ │ │ │ -
368 for (unsigned int k=0; k<y.size(); ++k) {
│ │ │ │ -
369 for (int q=0; q<dimR2; q++) {
│ │ │ │ -
370 out << "d_{" << char('a'+q) << "}f_{" << k << "}(" << char('a');
│ │ │ │ -
371 for (int i=1; i<d; ++i)
│ │ │ │ -
372 out << "," << char('a'+i);
│ │ │ │ -
373 out << ") &=& ( ";
│ │ │ │ -
374 out << y[k][0][q] ;
│ │ │ │ -
375 for (unsigned int r=1; r<dimR1; ++r) {
│ │ │ │ -
376 out << " , " << y[k][r][q] ;
│ │ │ │ -
377 }
│ │ │ │ -
378 out << " ) \\\\" << std::endl;
│ │ │ │ -
379 }
│ │ │ │ -
380 }
│ │ │ │ -
381 out << "\\end{eqnarray*}" << std::endl;
│ │ │ │ -
382 return out;
│ │ │ │ -
383 }
│ │ │ │ -
│ │ │ │ -
384 template <int d, class F>
│ │ │ │ -
│ │ │ │ -
385 std::ostream &operator<<(std::ostream& out,const MultiIndex<d,F>& val)
│ │ │ │ -
386 {
│ │ │ │ -
387 bool first = true;
│ │ │ │ -
388 const MultiIndex<d,F> *m = &val;
│ │ │ │ -
389 do {
│ │ │ │ -
390 if (m->absZ()==0 && std::abs(m->factor())<1e-10)
│ │ │ │ -
391 {
│ │ │ │ -
392 if (!m->next_ || !first)
│ │ │ │ -
393 {
│ │ │ │ -
394 out << "0";
│ │ │ │ -
395 break;
│ │ │ │ -
396 }
│ │ │ │ -
397 else {
│ │ │ │ -
398 m = m->next_;
│ │ │ │ -
399 continue;
│ │ │ │ -
400 }
│ │ │ │ -
401 }
│ │ │ │ -
402 if (m->factor()>0 && !first)
│ │ │ │ -
403 out << " + ";
│ │ │ │ -
404 else if (m->factor()<0)
│ │ │ │ -
405 if (!first)
│ │ │ │ -
406 out << " - ";
│ │ │ │ -
407 else
│ │ │ │ -
408 out << "- ";
│ │ │ │ -
409 else
│ │ │ │ -
410 out << " ";
│ │ │ │ -
411 first = false;
│ │ │ │ -
412 F f = std::abs(m->factor());
│ │ │ │ -
413 if (m->absZ()==0)
│ │ │ │ -
414 out << f;
│ │ │ │ -
415 else {
│ │ │ │ -
416 if ( std::abs(f)<1e-10)
│ │ │ │ -
417 out << 0;
│ │ │ │ -
418 else
│ │ │ │ -
419 {
│ │ │ │ -
420 F f_1(f);
│ │ │ │ -
421 f_1 -= 1.; // better Unity<F>();
│ │ │ │ -
422 if ( std::abs(f_1)>1e-10)
│ │ │ │ -
423 out << f;
│ │ │ │ -
424 int absVal = 0;
│ │ │ │ -
425 for (int i=0; i<d; ++i) {
│ │ │ │ -
426 if (m->vecZ_[i]==0)
│ │ │ │ -
427 continue;
│ │ │ │ -
428 else if (m->vecZ_[i]==1)
│ │ │ │ -
429 out << char('a'+i);
│ │ │ │ -
430 else if (m->vecZ_[i]>0)
│ │ │ │ -
431 out << char('a'+i) << "^" << m->vecZ_[i] << "";
│ │ │ │ -
432 else if (m->vecZ_[i]<0)
│ │ │ │ -
433 out << char('a'+i) << "^" << m->vecZ_[i] << "";
│ │ │ │ -
434 absVal += m->vecZ_[i];
│ │ │ │ -
435 if (absVal<m->absZ()) out << "";
│ │ │ │ -
436 }
│ │ │ │ -
437 }
│ │ │ │ -
438 }
│ │ │ │ -
439 /*
│ │ │ │ -
440 if (mi.absOMZ()>0) {
│ │ │ │ -
441 for (int i=0;i<=mi.absZ();++i) {
│ │ │ │ -
442 if (mi.vecOMZ_[i]==0)
│ │ │ │ -
443 continue;
│ │ │ │ -
444 else if (mi.vecOMZ_[i]==1)
│ │ │ │ -
445 out << (1-char('a'+i));
│ │ │ │ -
446 else if (mi.vecOMZ_[i]>0)
│ │ │ │ -
447 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i];
│ │ │ │ -
448 else if (mi.vecOMZ_[i]<0)
│ │ │ │ -
449 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i];
│ │ │ │ -
450 if (i==mi.absZ()+1) out << "*";
│ │ │ │ -
451 }
│ │ │ │ -
452 }
│ │ │ │ -
453 */
│ │ │ │ -
454 m = m->next_;
│ │ │ │ -
455 } while (m);
│ │ │ │ -
456 return out;
│ │ │ │ -
457 }
│ │ │ │ -
│ │ │ │ -
458
│ │ │ │ -
459 template< int dim, class F>
│ │ │ │ -
│ │ │ │ -
460 struct Unity< MultiIndex< dim, F > >
│ │ │ │ -
461 {
│ │ │ │ - │ │ │ │ -
463
│ │ │ │ -
│ │ │ │ -
464 operator Field () const
│ │ │ │ -
465 {
│ │ │ │ -
466 return Field();
│ │ │ │ -
467 }
│ │ │ │ -
│ │ │ │ -
468
│ │ │ │ -
│ │ │ │ -
469 Field operator- ( const Field &other ) const
│ │ │ │ -
470 {
│ │ │ │ -
471 return Field( 1, other );
│ │ │ │ -
472 }
│ │ │ │ -
│ │ │ │ -
473
│ │ │ │ -
│ │ │ │ -
474 Field operator/ ( const Field &other ) const
│ │ │ │ -
475 {
│ │ │ │ -
476 return Field() / other;
│ │ │ │ -
477 }
│ │ │ │ -
│ │ │ │ -
478 };
│ │ │ │ -
│ │ │ │ -
479
│ │ │ │ -
480
│ │ │ │ -
481
│ │ │ │ -
482 template< int dim, class F >
│ │ │ │ -
│ │ │ │ -
483 struct Zero< MultiIndex< dim,F > >
│ │ │ │ -
484 {
│ │ │ │ - │ │ │ │ -
486
│ │ │ │ -
487 // zero does not actually exist
│ │ │ │ -
│ │ │ │ -
488 operator Field ()
│ │ │ │ -
489 {
│ │ │ │ -
490 return Field(0);
│ │ │ │ -
491 }
│ │ │ │ -
│ │ │ │ -
492 };
│ │ │ │ -
│ │ │ │ -
493
│ │ │ │ -
494 template< int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
496 {
│ │ │ │ -
497 return true;
│ │ │ │ -
498 }
│ │ │ │ -
│ │ │ │ -
499
│ │ │ │ -
500 template< int dim, class Field >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
502 {
│ │ │ │ -
503 return true;
│ │ │ │ -
504 }
│ │ │ │ -
│ │ │ │ -
505
│ │ │ │ -
506}
│ │ │ │ -
507
│ │ │ │ -
508#endif // #ifndef DUNE_MULTIINDEX_HH
│ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <memory>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14#include <dune/common/typetraits.hh>
│ │ │ │ +
15#include <dune/common/shared_ptr.hh>
│ │ │ │ +
16
│ │ │ │ +
17namespace Dune {
│ │ │ │ +
18
│ │ │ │ +
21
│ │ │ │ +
29 template<class FiniteElement, class Dummy = void>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
32 typedef typename FiniteElement::Traits::Basis Basis;
│ │ │ │ +
34 typedef typename FiniteElement::Traits::Interpolation Interpolation;
│ │ │ │ +
36 typedef typename FiniteElement::Traits::Coefficients Coefficients;
│ │ │ │ +
37
│ │ │ │ +
│ │ │ │ +
39 static const Basis &basis(const FiniteElement& fe)
│ │ │ │ +
40 { return fe.basis(); }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
42 static const Interpolation &interpolation(const FiniteElement& fe)
│ │ │ │ +
43 { return fe.interpolation(); }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
45 static const Coefficients &coefficients(const FiniteElement& fe)
│ │ │ │ +
46 { return fe.coefficients(); }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
49
│ │ │ │ +
78 typedef std::shared_ptr<const FiniteElement> Store;
│ │ │ │ +
80
│ │ │ │ +
│ │ │ │ +
85 static void setStore(Store& store, const FiniteElement& fe)
│ │ │ │ +
86 { store = std::make_shared<const FiniteElement>(fe); }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
88 static void setStore(Store& store, FiniteElement&& fe)
│ │ │ │ +
89 { store = std::make_shared<const FiniteElement>(std::move(fe)); }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
91 static void setStore(Store& store, const Store& fe)
│ │ │ │ +
92 { store = fe; }
│ │ │ │ +
│ │ │ │ +
93 };
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
95#ifndef DOXYGEN
│ │ │ │ +
98 template<class FiniteElement>
│ │ │ │ +
99 struct FiniteElementInterfaceSwitch<
│ │ │ │ +
100 FiniteElement,
│ │ │ │ +
101 typename std::enable_if<AlwaysTrue<typename FiniteElement::Traits::
│ │ │ │ +
102 LocalBasisType>::value>::type
│ │ │ │ +
103 >
│ │ │ │ +
104 {
│ │ │ │ +
106 typedef typename FiniteElement::Traits::LocalBasisType Basis;
│ │ │ │ +
108 typedef typename FiniteElement::Traits::LocalInterpolationType
│ │ │ │ + │ │ │ │ +
111 typedef typename FiniteElement::Traits::LocalCoefficientsType Coefficients;
│ │ │ │ +
112
│ │ │ │ +
114 static const Basis &basis(const FiniteElement& fe)
│ │ │ │ +
115 { return fe.localBasis(); }
│ │ │ │ +
117 static const Interpolation &interpolation(const FiniteElement& fe)
│ │ │ │ +
118 { return fe.localInterpolation(); }
│ │ │ │ +
120 static const Coefficients &coefficients(const FiniteElement& fe)
│ │ │ │ +
121 { return fe.localCoefficients(); }
│ │ │ │ +
122
│ │ │ │ +
124 typedef std::shared_ptr<const FiniteElement> Store;
│ │ │ │ +
126 static void setStore(Store& store, const FiniteElement& fe)
│ │ │ │ +
127 { store = stackobject_to_shared_ptr<const FiniteElement>(fe); }
│ │ │ │ +
129 static void setStore(Store& store, FiniteElement&& fe)
│ │ │ │ +
130 { store = std::make_shared<const FiniteElement>(std::move(fe)); }
│ │ │ │ +
132 static void setStore(Store& store, const Store& fe)
│ │ │ │ +
133 { store = fe; }
│ │ │ │ +
134 };
│ │ │ │ +
135#endif // !DOXYGEN
│ │ │ │ +
136
│ │ │ │ +
138
│ │ │ │ +
153 template<class Basis, class Dummy = void>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
156 typedef typename Basis::Traits::DomainField DomainField;
│ │ │ │ +
158 static const std::size_t dimDomainLocal = Basis::Traits::dimDomainLocal;
│ │ │ │ +
160 typedef typename Basis::Traits::DomainLocal DomainLocal;
│ │ │ │ +
161
│ │ │ │ +
163 typedef typename Basis::Traits::RangeField RangeField;
│ │ │ │ +
165 static const std::size_t dimRange = Basis::Traits::dimRange;
│ │ │ │ +
167 typedef typename Basis::Traits::Range Range;
│ │ │ │ +
168
│ │ │ │ +
170
│ │ │ │ +
180 template<typename Geometry>
│ │ │ │ +
│ │ │ │ +
181 static void gradient(const Basis& basis, const Geometry& geometry,
│ │ │ │ +
182 const DomainLocal& xl,
│ │ │ │ +
183 std::vector<FieldMatrix<RangeField, 1,
│ │ │ │ +
184 Geometry::coorddimension> >& grad)
│ │ │ │ +
185 {
│ │ │ │ +
186 grad.resize(basis.size());
│ │ │ │ +
187 basis.evaluateJacobian(xl, grad);
│ │ │ │ +
188 }
│ │ │ │ +
│ │ │ │ +
189 };
│ │ │ │ +
│ │ │ │ +
190
│ │ │ │ +
191#ifndef DOXYGEN
│ │ │ │ +
193 template<class Basis>
│ │ │ │ +
194 struct BasisInterfaceSwitch<Basis,
│ │ │ │ +
195 typename std::enable_if<
│ │ │ │ +
196 AlwaysTrue<
│ │ │ │ +
197 std::integral_constant<
│ │ │ │ +
198 std::size_t,
│ │ │ │ +
199 Basis::Traits::dimDomain
│ │ │ │ +
200 >
│ │ │ │ +
201 >::value
│ │ │ │ +
202 >::type
│ │ │ │ +
203 >
│ │ │ │ +
204 {
│ │ │ │ +
206 typedef typename Basis::Traits::DomainFieldType DomainField;
│ │ │ │ +
208 static const std::size_t dimDomainLocal = Basis::Traits::dimDomain;
│ │ │ │ +
210 typedef typename Basis::Traits::DomainType DomainLocal;
│ │ │ │ +
211
│ │ │ │ +
213 typedef typename Basis::Traits::RangeFieldType RangeField;
│ │ │ │ +
215 static const std::size_t dimRange = Basis::Traits::dimRange;
│ │ │ │ +
217 typedef typename Basis::Traits::RangeType Range;
│ │ │ │ +
218
│ │ │ │ +
220 template<typename Geometry>
│ │ │ │ +
221 static void gradient(const Basis& basis, const Geometry& geometry,
│ │ │ │ +
222 const DomainLocal& xl,
│ │ │ │ +
223 std::vector<FieldMatrix<RangeField, 1,
│ │ │ │ +
224 Geometry::coorddimension> >& grad)
│ │ │ │ +
225 {
│ │ │ │ +
226 std::vector<typename Basis::Traits::JacobianType> lgrad(basis.size());
│ │ │ │ +
227 basis.evaluateJacobian(xl, lgrad);
│ │ │ │ +
228
│ │ │ │ +
229 const typename Geometry::JacobianInverseTransposed& jac =
│ │ │ │ +
230 geometry.jacobianInverseTransposed(xl);
│ │ │ │ +
231
│ │ │ │ +
232 grad.resize(basis.size());
│ │ │ │ +
233 for(std::size_t i = 0; i < basis.size(); ++i)
│ │ │ │ +
234 jac.mv(lgrad[i][0], grad[i][0]);
│ │ │ │ +
235 }
│ │ │ │ +
236 };
│ │ │ │ +
237#endif // !DOXYGEN
│ │ │ │ +
238
│ │ │ │ +
239} // namespace Dune
│ │ │ │ +
240
│ │ │ │ +
241#endif // DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Field operator-(const Unity< Field > &u, const Field &f)
Definition field.hh:44
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
bool operator<(const Zero< Field > &, const Field &f)
Definition field.hh:119
│ │ │ │ -
Field operator/(const Unity< Field > &u, const Field &f)
Definition field.hh:56
│ │ │ │ -
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ -
Field operator*(const Unity< Field > &u, const Field &f)
Definition field.hh:50
│ │ │ │ -
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
Definition multiindex.hh:38
│ │ │ │ -
This operator+(const This &other) const
Definition multiindex.hh:249
│ │ │ │ -
int absOMZ() const
Definition multiindex.hh:273
│ │ │ │ -
~MultiIndex()
Definition multiindex.hh:87
│ │ │ │ -
This & operator-=(const This &other)
Definition multiindex.hh:208
│ │ │ │ -
MultiIndex(int, const This &other)
Definition multiindex.hh:60
│ │ │ │ -
static const int dimension
Definition multiindex.hh:44
│ │ │ │ -
int absZ() const
Definition multiindex.hh:265
│ │ │ │ -
int omz(int i) const
Definition multiindex.hh:96
│ │ │ │ -
This & operator+=(const This &other)
Definition multiindex.hh:185
│ │ │ │ -
bool operator==(const This &other) const
Definition multiindex.hh:141
│ │ │ │ -
bool sameMultiIndex(const This &ind)
Definition multiindex.hh:281
│ │ │ │ -
This & operator=(const This &other)
Definition multiindex.hh:105
│ │ │ │ -
MultiIndex(const This &other)
Definition multiindex.hh:74
│ │ │ │ -
This & operator*=(const F &f)
Definition multiindex.hh:148
│ │ │ │ -
const Field & factor() const
Definition multiindex.hh:100
│ │ │ │ -
This operator/(const F &f) const
Definition multiindex.hh:232
│ │ │ │ -
MultiIndex(const F &f)
Definition multiindex.hh:53
│ │ │ │ -
This & operator/=(const F &f)
Definition multiindex.hh:156
│ │ │ │ -
This operator*(const F &f) const
Definition multiindex.hh:226
│ │ │ │ -
void set(int d, int power=1)
Definition multiindex.hh:260
│ │ │ │ -
This operator-(const This &other) const
Definition multiindex.hh:254
│ │ │ │ -
int z(int i) const
Definition multiindex.hh:92
│ │ │ │ -
MultiIndex()
Definition multiindex.hh:46
│ │ │ │ -
Field field_type
Definition multiindex.hh:316
│ │ │ │ -
typename FieldTraits< field_type >::real_type real_type
Definition multiindex.hh:317
│ │ │ │ -
MultiIndex< dim, F > Field
Definition multiindex.hh:462
│ │ │ │ -
MultiIndex< dim, F > Field
Definition multiindex.hh:485
│ │ │ │ +
Switch for uniform treatment of finite element with either the local or the global interface.
Definition interfaceswitch.hh:30
│ │ │ │ +
static const Coefficients & coefficients(const FiniteElement &fe)
access coefficients
Definition interfaceswitch.hh:45
│ │ │ │ +
static void setStore(Store &store, FiniteElement &&fe)
Store a finite element in the store.
Definition interfaceswitch.hh:88
│ │ │ │ +
FiniteElement::Traits::Coefficients Coefficients
export the type of the coefficients
Definition interfaceswitch.hh:36
│ │ │ │ +
static void setStore(Store &store, const Store &fe)
Store a finite element in the store.
Definition interfaceswitch.hh:91
│ │ │ │ +
static void setStore(Store &store, const FiniteElement &fe)
Store a finite element in the store.
Definition interfaceswitch.hh:85
│ │ │ │ +
FiniteElement::Traits::Interpolation Interpolation
export the type of the interpolation
Definition interfaceswitch.hh:34
│ │ │ │ +
std::shared_ptr< const FiniteElement > Store
Type for storing finite elements.
Definition interfaceswitch.hh:78
│ │ │ │ +
static const Basis & basis(const FiniteElement &fe)
access basis
Definition interfaceswitch.hh:39
│ │ │ │ +
FiniteElement::Traits::Basis Basis
export the type of the basis
Definition interfaceswitch.hh:32
│ │ │ │ +
static const Interpolation & interpolation(const FiniteElement &fe)
access interpolation
Definition interfaceswitch.hh:42
│ │ │ │ +
Switch for uniform treatment of local and global basis classes.
Definition interfaceswitch.hh:154
│ │ │ │ +
static const std::size_t dimRange
export dimension of the values
Definition interfaceswitch.hh:165
│ │ │ │ +
static const std::size_t dimDomainLocal
export dimension of local coordinates
Definition interfaceswitch.hh:158
│ │ │ │ +
Basis::Traits::RangeField RangeField
export field type of the values
Definition interfaceswitch.hh:163
│ │ │ │ +
Basis::Traits::Range Range
export vector type of the values
Definition interfaceswitch.hh:167
│ │ │ │ +
static void gradient(const Basis &basis, const Geometry &geometry, const DomainLocal &xl, std::vector< FieldMatrix< RangeField, 1, Geometry::coorddimension > > &grad)
Compute global gradient for scalar valued bases.
Definition interfaceswitch.hh:181
│ │ │ │ +
Basis::Traits::DomainLocal DomainLocal
export vector type of the local coordinates
Definition interfaceswitch.hh:160
│ │ │ │ +
Basis::Traits::DomainField DomainField
export field types of the coordinates
Definition interfaceswitch.hh:156
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,636 +1,230 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -multiindex.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +interfaceswitch.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_MULTIINDEX_HH │ │ │ │ │ -6#define DUNE_MULTIINDEX_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 /**************************************************************** │ │ │ │ │ -19 * Provide a Field class which can be used in evaluation methods │ │ │ │ │ -20 * to produce MultiIndex presentation of polynomials. │ │ │ │ │ -21 ****************************************************************/ │ │ │ │ │ -22 // Internal Forward Declarations │ │ │ │ │ -23 // ----------------------------- │ │ │ │ │ -24 │ │ │ │ │ -25 template< int dim, class Field > │ │ │ │ │ -26 class MultiIndex; │ │ │ │ │ -27 │ │ │ │ │ -28 template< int dim, class Field > │ │ │ │ │ -_2_9 std::ostream &_o_p_e_r_a_t_o_r_<_<_ ( std::ostream &, const _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_i_e_l_d_ _> & │ │ │ │ │ -); │ │ │ │ │ -30 │ │ │ │ │ -31 │ │ │ │ │ -32 │ │ │ │ │ -33 // MultiIndex │ │ │ │ │ -34 // ---------- │ │ │ │ │ -35 │ │ │ │ │ -36 template< int dim,class Field > │ │ │ │ │ -_3_7 class _M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -38 { │ │ │ │ │ -39 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> _T_h_i_s; │ │ │ │ │ -40 │ │ │ │ │ -_4_1 friend std::ostream &operator<<<> ( std::ostream &, const _T_h_i_s & ); │ │ │ │ │ -42 │ │ │ │ │ -43 public: │ │ │ │ │ -_4_4 static const int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -45 │ │ │ │ │ -_4_6 _M_u_l_t_i_I_n_d_e_x () │ │ │ │ │ -47 : vecZ_( 0 ), │ │ │ │ │ -48 vecOMZ_( 0 ), │ │ │ │ │ -49 factor_( 1. ), │ │ │ │ │ -50 next_( 0 ) │ │ │ │ │ -51 {} │ │ │ │ │ -52 template │ │ │ │ │ -_5_3 explicit _M_u_l_t_i_I_n_d_e_x (const F &f) │ │ │ │ │ -54 : vecZ_( 0 ), │ │ │ │ │ -55 vecOMZ_( 0 ), │ │ │ │ │ -56 factor_( _f_i_e_l_d___c_a_s_t(f) ), │ │ │ │ │ -57 next_( 0 ) │ │ │ │ │ -58 {} │ │ │ │ │ -59 │ │ │ │ │ -_6_0 _M_u_l_t_i_I_n_d_e_x ( int, const _T_h_i_s &other ) │ │ │ │ │ -61 : vecZ_( other.vecOMZ_ ), │ │ │ │ │ -62 vecOMZ_( other.vecZ_ ), │ │ │ │ │ -63 factor_( other.factor_ ) │ │ │ │ │ -64 { │ │ │ │ │ -65 assert(!other.next_); │ │ │ │ │ -66 if (other.next_) │ │ │ │ │ -67 { │ │ │ │ │ -68 next_ = new _T_h_i_s( *(other.next_) ); │ │ │ │ │ -69 } │ │ │ │ │ -70 else │ │ │ │ │ -71 next_ = 0; │ │ │ │ │ -72 } │ │ │ │ │ -73 │ │ │ │ │ -_7_4 _M_u_l_t_i_I_n_d_e_x ( const _T_h_i_s &other ) │ │ │ │ │ -75 : vecZ_( other.vecZ_ ), │ │ │ │ │ -76 vecOMZ_( other.vecOMZ_ ), │ │ │ │ │ -77 factor_( other.factor_ ) │ │ │ │ │ -78 { │ │ │ │ │ -79 if (other.next_) │ │ │ │ │ -80 { │ │ │ │ │ -81 next_ = new _T_h_i_s( *(other.next_) ); │ │ │ │ │ -82 } │ │ │ │ │ -83 else │ │ │ │ │ -84 next_ = 0; │ │ │ │ │ -85 } │ │ │ │ │ -86 │ │ │ │ │ -_8_7 _~_M_u_l_t_i_I_n_d_e_x() │ │ │ │ │ -88 { │ │ │ │ │ -89 remove(); │ │ │ │ │ -90 } │ │ │ │ │ -91 │ │ │ │ │ -_9_2 int _z(int i) const │ │ │ │ │ -93 { │ │ │ │ │ -94 return vecZ_[i]; │ │ │ │ │ -95 } │ │ │ │ │ -_9_6 int _o_m_z(int i) const │ │ │ │ │ -97 { │ │ │ │ │ -98 return vecOMZ_[i]; │ │ │ │ │ -99 } │ │ │ │ │ -_1_0_0 const Field &_f_a_c_t_o_r() const │ │ │ │ │ -101 { │ │ │ │ │ -102 return factor_; │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -_1_0_5 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _T_h_i_s &other ) │ │ │ │ │ -106 { │ │ │ │ │ -107 remove(); │ │ │ │ │ -108 vecZ_ = other.vecZ_; │ │ │ │ │ -109 vecOMZ_ = other.vecOMZ_; │ │ │ │ │ -110 factor_ = other.factor_; │ │ │ │ │ -111 if (other.next_) │ │ │ │ │ -112 next_ = new _T_h_i_s(*(other.next_)); │ │ │ │ │ -113 return *this; │ │ │ │ │ -114 } │ │ │ │ │ -_1_1_5 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _Z_e_r_o_<_T_h_i_s_> &f ) │ │ │ │ │ -116 { │ │ │ │ │ -117 remove(); │ │ │ │ │ -118 vecZ_ = 0; │ │ │ │ │ -119 vecOMZ_ = 0; │ │ │ │ │ -120 factor_ = 0.; │ │ │ │ │ -121 return *this; │ │ │ │ │ -122 } │ │ │ │ │ -_1_2_3 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const _U_n_i_t_y_<_T_h_i_s_> &f ) │ │ │ │ │ -124 { │ │ │ │ │ -125 remove(); │ │ │ │ │ -126 vecZ_ = 0; │ │ │ │ │ -127 vecOMZ_ = 0; │ │ │ │ │ -128 factor_ = 1.; │ │ │ │ │ -129 return *this; │ │ │ │ │ -130 } │ │ │ │ │ -131 template │ │ │ │ │ -_1_3_2 _T_h_i_s &_o_p_e_r_a_t_o_r_=_ ( const F &f ) │ │ │ │ │ -133 { │ │ │ │ │ -134 remove(); │ │ │ │ │ -135 vecZ_ = 0; │ │ │ │ │ -136 vecOMZ_ = 0; │ │ │ │ │ -137 factor_ = field_cast(f); │ │ │ │ │ -138 return *this; │ │ │ │ │ -139 } │ │ │ │ │ -140 │ │ │ │ │ -_1_4_1 bool _o_p_e_r_a_t_o_r_=_=_ (const _T_h_i_s &other) const │ │ │ │ │ -142 { │ │ │ │ │ -143 assert(!next_ && !other.next_); │ │ │ │ │ -144 return (vecZ_==other.vecZ_ && vecOMZ_==other.vecOMZ_ && │ │ │ │ │ -factor_==other.factor_); │ │ │ │ │ -145 } │ │ │ │ │ -146 │ │ │ │ │ -147 template │ │ │ │ │ -_1_4_8 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const F &f ) │ │ │ │ │ -149 { │ │ │ │ │ -150 factor_ *= field_cast(f); │ │ │ │ │ -151 if (next_) │ │ │ │ │ -152 (*next_) *= f; │ │ │ │ │ -153 return *this; │ │ │ │ │ -154 } │ │ │ │ │ -155 template │ │ │ │ │ -_1_5_6 _T_h_i_s &_o_p_e_r_a_t_o_r_/_=_ ( const F &f ) │ │ │ │ │ -157 { │ │ │ │ │ -158 factor_ /= field_cast(f); │ │ │ │ │ -159 if (next_) │ │ │ │ │ -160 (*next_) /= f; │ │ │ │ │ -161 return *this; │ │ │ │ │ -162 } │ │ │ │ │ -163 │ │ │ │ │ -_1_6_4 _T_h_i_s &_o_p_e_r_a_t_o_r_*_=_ ( const _T_h_i_s &other ) │ │ │ │ │ -165 { │ │ │ │ │ -166 assert(!other.next_); │ │ │ │ │ -167 vecZ_ += other.vecZ_; │ │ │ │ │ -168 vecOMZ_ += other.vecOMZ_; │ │ │ │ │ -169 factor_ *= other.factor_; │ │ │ │ │ -170 if (next_) │ │ │ │ │ -171 (*next_) *= other; │ │ │ │ │ -172 return *this; │ │ │ │ │ -173 } │ │ │ │ │ -_1_7_4 _T_h_i_s &_o_p_e_r_a_t_o_r_/_=_ ( const _T_h_i_s &other ) │ │ │ │ │ -175 { │ │ │ │ │ -176 assert(!other.next_); │ │ │ │ │ -177 vecZ_ -= other.vecZ_; │ │ │ │ │ -178 vecOMZ_ -= other.vecOMZ_; │ │ │ │ │ -179 factor_ /= other.factor_; │ │ │ │ │ -180 if (next_) │ │ │ │ │ -181 (*next_) /= other; │ │ │ │ │ -182 return *this; │ │ │ │ │ -183 } │ │ │ │ │ -184 │ │ │ │ │ -_1_8_5 _T_h_i_s &_o_p_e_r_a_t_o_r_+_=_ ( const _T_h_i_s &other ) │ │ │ │ │ -186 { │ │ │ │ │ -187 assert(!other.next_); │ │ │ │ │ -188 if (std::abs(other.factor_)<1e-10) │ │ │ │ │ -189 return *this; │ │ │ │ │ -190 if (std::abs(factor_)<1e-10) │ │ │ │ │ -191 { │ │ │ │ │ -192 *this = other; │ │ │ │ │ -193 return *this; │ │ │ │ │ -194 } │ │ │ │ │ -195 if (!_s_a_m_e_M_u_l_t_i_I_n_d_e_x(other)) │ │ │ │ │ -196 { │ │ │ │ │ -197 if (next_) │ │ │ │ │ -198 (*next_)+=other; │ │ │ │ │ -199 else │ │ │ │ │ -200 { │ │ │ │ │ -201 next_ = new _T_h_i_s(other); │ │ │ │ │ -202 } │ │ │ │ │ -203 } │ │ │ │ │ -204 else │ │ │ │ │ -205 factor_ += other.factor_; │ │ │ │ │ -206 return *this; │ │ │ │ │ -207 } │ │ │ │ │ -_2_0_8 _T_h_i_s &_o_p_e_r_a_t_o_r_-_=_ ( const _T_h_i_s &other ) │ │ │ │ │ -209 { │ │ │ │ │ -210 assert(!other.next_); │ │ │ │ │ -211 if (!_s_a_m_e_M_u_l_t_i_I_n_d_e_x(other)) │ │ │ │ │ -212 { │ │ │ │ │ -213 if (next_) │ │ │ │ │ -214 next_-=other; │ │ │ │ │ -215 else │ │ │ │ │ -216 { │ │ │ │ │ -217 next_ = new _T_h_i_s(other); │ │ │ │ │ -218 } │ │ │ │ │ -219 } │ │ │ │ │ -220 else │ │ │ │ │ -221 factor_ -= other.factor_; │ │ │ │ │ -222 return *this; │ │ │ │ │ -223 } │ │ │ │ │ -224 │ │ │ │ │ -225 template │ │ │ │ │ -_2_2_6 _T_h_i_s _o_p_e_r_a_t_o_r_*_ ( const F &f ) const │ │ │ │ │ -227 { │ │ │ │ │ -228 _T_h_i_s _z = *this; │ │ │ │ │ -229 return (_z *= f); │ │ │ │ │ -230 } │ │ │ │ │ -231 template │ │ │ │ │ -_2_3_2 _T_h_i_s _o_p_e_r_a_t_o_r_/_ ( const F &f ) const │ │ │ │ │ -233 { │ │ │ │ │ -234 _T_h_i_s _z = *this; │ │ │ │ │ -235 return (_z /= f); │ │ │ │ │ -236 } │ │ │ │ │ -237 │ │ │ │ │ -_2_3_8 _T_h_i_s _o_p_e_r_a_t_o_r_*_ ( const _T_h_i_s &other ) const │ │ │ │ │ -239 { │ │ │ │ │ -240 _T_h_i_s _z = *this; │ │ │ │ │ -241 return (_z *= other); │ │ │ │ │ -242 } │ │ │ │ │ -_2_4_3 _T_h_i_s _o_p_e_r_a_t_o_r_/_ ( const _T_h_i_s &other ) const │ │ │ │ │ -244 { │ │ │ │ │ -245 _T_h_i_s _z = *this; │ │ │ │ │ -246 return (_z /= other); │ │ │ │ │ -247 } │ │ │ │ │ -248 │ │ │ │ │ -_2_4_9 _T_h_i_s _o_p_e_r_a_t_o_r_+_ ( const _T_h_i_s &other ) const │ │ │ │ │ -250 { │ │ │ │ │ -251 _T_h_i_s _z = *this; │ │ │ │ │ -252 return (_z += other); │ │ │ │ │ -253 } │ │ │ │ │ -_2_5_4 _T_h_i_s _o_p_e_r_a_t_o_r_-_ ( const _T_h_i_s &other ) const │ │ │ │ │ -255 { │ │ │ │ │ -256 _T_h_i_s _z = *this; │ │ │ │ │ -257 return (_z -= other); │ │ │ │ │ -258 } │ │ │ │ │ -259 │ │ │ │ │ -_2_6_0 void _s_e_t ( int d, int power = 1 ) │ │ │ │ │ -261 { │ │ │ │ │ -262 vecZ_[ d ] = power; │ │ │ │ │ -263 } │ │ │ │ │ -264 │ │ │ │ │ -_2_6_5 int _a_b_s_Z () const │ │ │ │ │ -266 { │ │ │ │ │ -267 int ret = 0; │ │ │ │ │ -268 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ -269 ret += std::abs( vecZ_[ i ] ); │ │ │ │ │ -270 return ret; │ │ │ │ │ -271 } │ │ │ │ │ -272 │ │ │ │ │ -_2_7_3 int _a_b_s_O_M_Z() const │ │ │ │ │ -274 { │ │ │ │ │ -275 int ret = 0; │ │ │ │ │ -276 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ -277 ret += std::abs( vecOMZ_[ i ] ); │ │ │ │ │ -278 return ret; │ │ │ │ │ -279 } │ │ │ │ │ -280 │ │ │ │ │ -_2_8_1 bool _s_a_m_e_M_u_l_t_i_I_n_d_e_x(const _T_h_i_s &ind) │ │ │ │ │ -282 { │ │ │ │ │ -283 for( int i = 0; i < _d_i_m_e_n_s_i_o_n; ++i ) │ │ │ │ │ -284 { │ │ │ │ │ -285 if ( vecZ_[i] != ind.vecZ_[i] || │ │ │ │ │ -286 vecOMZ_[i] != vecOMZ_[i] ) │ │ │ │ │ -287 return false; │ │ │ │ │ -288 } │ │ │ │ │ -289 return true; │ │ │ │ │ -290 } │ │ │ │ │ -291 │ │ │ │ │ -292 private: │ │ │ │ │ -293 void remove() │ │ │ │ │ -294 { │ │ │ │ │ -295 if (next_) │ │ │ │ │ -296 { │ │ │ │ │ -297 next_->remove(); │ │ │ │ │ -298 delete next_; │ │ │ │ │ -299 next_ = 0; │ │ │ │ │ -300 } │ │ │ │ │ -301 } │ │ │ │ │ -302 │ │ │ │ │ -303 typedef Dune::FieldVector< int, dimension > Vector; │ │ │ │ │ -304 │ │ │ │ │ -305 Vector vecZ_; │ │ │ │ │ -306 Vector vecOMZ_; │ │ │ │ │ -307 Field factor_; │ │ │ │ │ -308 │ │ │ │ │ -309 This *next_; │ │ │ │ │ -310 }; │ │ │ │ │ -311 │ │ │ │ │ -312 │ │ │ │ │ -313 template< int dim,class Field > │ │ │ │ │ -_3_1_4 struct FieldTraits<_M_u_l_t_i_I_n_d_e_x> │ │ │ │ │ -315 { │ │ │ │ │ -_3_1_6 using _f_i_e_l_d___t_y_p_e = Field; │ │ │ │ │ -_3_1_7 using _r_e_a_l___t_y_p_e = typename FieldTraits::real_type; │ │ │ │ │ -318 }; │ │ │ │ │ -319 │ │ │ │ │ -320 template │ │ │ │ │ -_3_2_1 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _o_p_e_r_a_t_o_r_*_ ( const F &f, │ │ │ │ │ -322 const _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> &m) │ │ │ │ │ -323 { │ │ │ │ │ -324 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> z = m; │ │ │ │ │ -325 return (z *= f); │ │ │ │ │ -326 } │ │ │ │ │ -327 template │ │ │ │ │ -_3_2_8 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> _o_p_e_r_a_t_o_r_/_ ( const F &f, │ │ │ │ │ -329 const _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> &m) │ │ │ │ │ -330 { │ │ │ │ │ -331 _M_u_l_t_i_I_n_d_e_x_<_d_i_m_,_F_i_e_l_d_> z = m; │ │ │ │ │ -332 return (z /= f); │ │ │ │ │ -333 } │ │ │ │ │ -334 │ │ │ │ │ -335 template │ │ │ │ │ -_3_3_6 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out,const std:: │ │ │ │ │ -vector<_M_u_l_t_i_I_n_d_e_x_<_d_,_F_> >& y) { │ │ │ │ │ -337 for (unsigned int r=0; r │ │ │ │ │ -_3_6_5 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out, │ │ │ │ │ -366 const std::vector,dimR1,dimR2> >& y) { │ │ │ │ │ -367 out << "\\begin{eqnarray*}" << std::endl; │ │ │ │ │ -368 for (unsigned int k=0; k │ │ │ │ │ -_3_8_5 std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream& out,const _M_u_l_t_i_I_n_d_e_x_<_d_,_F_>& val) │ │ │ │ │ -386 { │ │ │ │ │ -387 bool first = true; │ │ │ │ │ -388 const _M_u_l_t_i_I_n_d_e_x_<_d_,_F_> *m = &val; │ │ │ │ │ -389 do { │ │ │ │ │ -390 if (m->_a_b_s_Z()==0 && std::abs(m->_f_a_c_t_o_r())<1e-10) │ │ │ │ │ -391 { │ │ │ │ │ -392 if (!m->next_ || !first) │ │ │ │ │ -393 { │ │ │ │ │ -394 out << "0"; │ │ │ │ │ -395 break; │ │ │ │ │ -396 } │ │ │ │ │ -397 else { │ │ │ │ │ -398 m = m->next_; │ │ │ │ │ -399 continue; │ │ │ │ │ -400 } │ │ │ │ │ -401 } │ │ │ │ │ -402 if (m->_f_a_c_t_o_r()>0 && !first) │ │ │ │ │ -403 out << " + "; │ │ │ │ │ -404 else if (m->_f_a_c_t_o_r()<0) │ │ │ │ │ -405 if (!first) │ │ │ │ │ -406 out << " - "; │ │ │ │ │ -407 else │ │ │ │ │ -408 out << "- "; │ │ │ │ │ -409 else │ │ │ │ │ -410 out << " "; │ │ │ │ │ -411 first = false; │ │ │ │ │ -412 F f = std::abs(m->_f_a_c_t_o_r()); │ │ │ │ │ -413 if (m->_a_b_s_Z()==0) │ │ │ │ │ -414 out << f; │ │ │ │ │ -415 else { │ │ │ │ │ -416 if ( std::abs(f)<1e-10) │ │ │ │ │ -417 out << 0; │ │ │ │ │ -418 else │ │ │ │ │ -419 { │ │ │ │ │ -420 F f_1(f); │ │ │ │ │ -421 f_1 -= 1.; // better Unity(); │ │ │ │ │ -422 if ( std::abs(f_1)>1e-10) │ │ │ │ │ -423 out << f; │ │ │ │ │ -424 int absVal = 0; │ │ │ │ │ -425 for (int i=0; ivecZ_[i]==0) │ │ │ │ │ -427 continue; │ │ │ │ │ -428 else if (m->vecZ_[i]==1) │ │ │ │ │ -429 out << char('a'+i); │ │ │ │ │ -430 else if (m->vecZ_[i]>0) │ │ │ │ │ -431 out << char('a'+i) << "^" << m->vecZ_[i] << ""; │ │ │ │ │ -432 else if (m->vecZ_[i]<0) │ │ │ │ │ -433 out << char('a'+i) << "^" << m->vecZ_[i] << ""; │ │ │ │ │ -434 absVal += m->vecZ_[i]; │ │ │ │ │ -435 if (absValabsZ()) out << ""; │ │ │ │ │ -436 } │ │ │ │ │ -437 } │ │ │ │ │ -438 } │ │ │ │ │ -439 /* │ │ │ │ │ -440 if (mi.absOMZ()>0) { │ │ │ │ │ -441 for (int i=0;i<=mi.absZ();++i) { │ │ │ │ │ -442 if (mi.vecOMZ_[i]==0) │ │ │ │ │ -443 continue; │ │ │ │ │ -444 else if (mi.vecOMZ_[i]==1) │ │ │ │ │ -445 out << (1-char('a'+i)); │ │ │ │ │ -446 else if (mi.vecOMZ_[i]>0) │ │ │ │ │ -447 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i]; │ │ │ │ │ -448 else if (mi.vecOMZ_[i]<0) │ │ │ │ │ -449 out << (1-char('a'+i)) << "^" << mi.vecOMZ_[i]; │ │ │ │ │ -450 if (i==mi.absZ()+1) out << "*"; │ │ │ │ │ -451 } │ │ │ │ │ -452 } │ │ │ │ │ -453 */ │ │ │ │ │ -454 m = m->next_; │ │ │ │ │ -455 } while (m); │ │ │ │ │ -456 return out; │ │ │ │ │ -457 } │ │ │ │ │ -458 │ │ │ │ │ -459 template< int dim, class F> │ │ │ │ │ -_4_6_0 struct _U_n_i_t_y< _M_u_l_t_i_I_n_d_e_x< dim, F > > │ │ │ │ │ -461 { │ │ │ │ │ -_4_6_2 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _> _F_i_e_l_d; │ │ │ │ │ -463 │ │ │ │ │ -_4_6_4 operator _F_i_e_l_d () const │ │ │ │ │ -465 { │ │ │ │ │ -466 return _F_i_e_l_d(); │ │ │ │ │ -467 } │ │ │ │ │ -468 │ │ │ │ │ -_4_6_9 _F_i_e_l_d _o_p_e_r_a_t_o_r_-_ ( const _F_i_e_l_d &other ) const │ │ │ │ │ -470 { │ │ │ │ │ -471 return _F_i_e_l_d( 1, other ); │ │ │ │ │ -472 } │ │ │ │ │ -473 │ │ │ │ │ -_4_7_4 _F_i_e_l_d _o_p_e_r_a_t_o_r_/_ ( const _F_i_e_l_d &other ) const │ │ │ │ │ -475 { │ │ │ │ │ -476 return _F_i_e_l_d() / other; │ │ │ │ │ -477 } │ │ │ │ │ -478 }; │ │ │ │ │ -479 │ │ │ │ │ -480 │ │ │ │ │ -481 │ │ │ │ │ -482 template< int dim, class F > │ │ │ │ │ -_4_8_3 struct _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x< dim,F > > │ │ │ │ │ -484 { │ │ │ │ │ -_4_8_5 typedef _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_ _> _F_i_e_l_d; │ │ │ │ │ -486 │ │ │ │ │ -487 // zero does not actually exist │ │ │ │ │ -_4_8_8 operator _F_i_e_l_d () │ │ │ │ │ -489 { │ │ │ │ │ -490 return _F_i_e_l_d(0); │ │ │ │ │ -491 } │ │ │ │ │ -492 }; │ │ │ │ │ -493 │ │ │ │ │ -494 template< int dim, class Field > │ │ │ │ │ -_4_9_5 bool _o_p_e_r_a_t_o_r_<_ ( const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_F_i_e_l_d_ _> > &, const _M_u_l_t_i_I_n_d_e_x_< │ │ │ │ │ -_d_i_m_,_F_i_e_l_d_ _> & ) │ │ │ │ │ -496 { │ │ │ │ │ -497 return true; │ │ │ │ │ -498 } │ │ │ │ │ -499 │ │ │ │ │ -500 template< int dim, class Field > │ │ │ │ │ -_5_0_1 bool _o_p_e_r_a_t_o_r_<_ ( const _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _> &f, const _Z_e_r_o< _M_u_l_t_i_I_n_d_e_x_< │ │ │ │ │ -_d_i_m_,_F_i_e_l_d_ _> > & ) │ │ │ │ │ -502 { │ │ │ │ │ -503 return true; │ │ │ │ │ -504 } │ │ │ │ │ -505 │ │ │ │ │ -506} │ │ │ │ │ -507 │ │ │ │ │ -508#endif // #ifndef DUNE_MULTIINDEX_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17namespace _D_u_n_e { │ │ │ │ │ +18 │ │ │ │ │ +21 │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 struct _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h { │ │ │ │ │ +_3_2 typedef typename FiniteElement::Traits::Basis _B_a_s_i_s; │ │ │ │ │ +_3_4 typedef typename FiniteElement::Traits::Interpolation _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +_3_6 typedef typename FiniteElement::Traits::Coefficients _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +37 │ │ │ │ │ +_3_9 static const _B_a_s_i_s &_b_a_s_i_s(const FiniteElement& fe) │ │ │ │ │ +40 { return fe.basis(); } │ │ │ │ │ +_4_2 static const _I_n_t_e_r_p_o_l_a_t_i_o_n &_i_n_t_e_r_p_o_l_a_t_i_o_n(const FiniteElement& fe) │ │ │ │ │ +43 { return fe.interpolation(); } │ │ │ │ │ +_4_5 static const _C_o_e_f_f_i_c_i_e_n_t_s &_c_o_e_f_f_i_c_i_e_n_t_s(const FiniteElement& fe) │ │ │ │ │ +46 { return fe.coefficients(); } │ │ │ │ │ +47 │ │ │ │ │ +49 │ │ │ │ │ +_7_8 typedef std::shared_ptr _S_t_o_r_e; │ │ │ │ │ +80 │ │ │ │ │ +_8_5 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const FiniteElement& fe) │ │ │ │ │ +86 { store = std::make_shared(fe); } │ │ │ │ │ +_8_8 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, FiniteElement&& fe) │ │ │ │ │ +89 { store = std::make_shared(std::move(fe)); } │ │ │ │ │ +_9_1 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const _S_t_o_r_e& fe) │ │ │ │ │ +92 { store = fe; } │ │ │ │ │ +93 }; │ │ │ │ │ +94 │ │ │ │ │ +95#ifndef DOXYGEN │ │ │ │ │ +98 template │ │ │ │ │ +99 struct FiniteElementInterfaceSwitch< │ │ │ │ │ +100 FiniteElement, │ │ │ │ │ +101 typename std::enable_if::value>::type │ │ │ │ │ +103 > │ │ │ │ │ +104 { │ │ │ │ │ +106 typedef typename FiniteElement::Traits::LocalBasisType _B_a_s_i_s; │ │ │ │ │ +108 typedef typename FiniteElement::Traits::LocalInterpolationType │ │ │ │ │ +109 _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +111 typedef typename FiniteElement::Traits::LocalCoefficientsType _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ +112 │ │ │ │ │ +114 static const _B_a_s_i_s &_b_a_s_i_s(const FiniteElement& fe) │ │ │ │ │ +115 { return fe.localBasis(); } │ │ │ │ │ +117 static const _I_n_t_e_r_p_o_l_a_t_i_o_n &_i_n_t_e_r_p_o_l_a_t_i_o_n(const FiniteElement& fe) │ │ │ │ │ +118 { return fe.localInterpolation(); } │ │ │ │ │ +120 static const _C_o_e_f_f_i_c_i_e_n_t_s &_c_o_e_f_f_i_c_i_e_n_t_s(const FiniteElement& fe) │ │ │ │ │ +121 { return fe.localCoefficients(); } │ │ │ │ │ +122 │ │ │ │ │ +124 typedef std::shared_ptr _S_t_o_r_e; │ │ │ │ │ +126 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const FiniteElement& fe) │ │ │ │ │ +127 { store = stackobject_to_shared_ptr(fe); } │ │ │ │ │ +129 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, FiniteElement&& fe) │ │ │ │ │ +130 { store = std::make_shared(std::move(fe)); } │ │ │ │ │ +132 static void _s_e_t_S_t_o_r_e(_S_t_o_r_e& store, const _S_t_o_r_e& fe) │ │ │ │ │ +133 { store = fe; } │ │ │ │ │ +134 }; │ │ │ │ │ +135#endif // !DOXYGEN │ │ │ │ │ +136 │ │ │ │ │ +138 │ │ │ │ │ +153 template │ │ │ │ │ +_1_5_4 struct _B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h { │ │ │ │ │ +_1_5_6 typedef typename Basis::Traits::DomainField _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ +_1_5_8 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Basis::Traits::dimDomainLocal; │ │ │ │ │ +_1_6_0 typedef typename Basis::Traits::DomainLocal _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +161 │ │ │ │ │ +_1_6_3 typedef typename Basis::Traits::RangeField _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ +_1_6_5 static const std::size_t _d_i_m_R_a_n_g_e = Basis::Traits::dimRange; │ │ │ │ │ +_1_6_7 typedef typename Basis::Traits::Range _R_a_n_g_e; │ │ │ │ │ +168 │ │ │ │ │ +170 │ │ │ │ │ +180 template │ │ │ │ │ +_1_8_1 static void _g_r_a_d_i_e_n_t(const Basis& basis, const Geometry& geometry, │ │ │ │ │ +182 const _D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ +183 std::vector >& grad) │ │ │ │ │ +185 { │ │ │ │ │ +186 grad.resize(basis.size()); │ │ │ │ │ +187 basis.evaluateJacobian(xl, grad); │ │ │ │ │ +188 } │ │ │ │ │ +189 }; │ │ │ │ │ +190 │ │ │ │ │ +191#ifndef DOXYGEN │ │ │ │ │ +193 template │ │ │ │ │ +194 struct BasisInterfaceSwitch │ │ │ │ │ +201 >::value │ │ │ │ │ +202 >::type │ │ │ │ │ +203 > │ │ │ │ │ +204 { │ │ │ │ │ +206 typedef typename Basis::Traits::DomainFieldType _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ +208 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Basis::Traits::dimDomain; │ │ │ │ │ +210 typedef typename Basis::Traits::DomainType _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +211 │ │ │ │ │ +213 typedef typename Basis::Traits::RangeFieldType _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ +215 static const std::size_t _d_i_m_R_a_n_g_e = Basis::Traits::dimRange; │ │ │ │ │ +217 typedef typename Basis::Traits::RangeType _R_a_n_g_e; │ │ │ │ │ +218 │ │ │ │ │ +220 template │ │ │ │ │ +221 static void _g_r_a_d_i_e_n_t(const Basis& basis, const Geometry& geometry, │ │ │ │ │ +222 const _D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ +223 std::vector >& grad) │ │ │ │ │ +225 { │ │ │ │ │ +226 std::vector lgrad(basis.size()); │ │ │ │ │ +227 basis.evaluateJacobian(xl, lgrad); │ │ │ │ │ +228 │ │ │ │ │ +229 const typename Geometry::JacobianInverseTransposed& jac = │ │ │ │ │ +230 geometry.jacobianInverseTransposed(xl); │ │ │ │ │ +231 │ │ │ │ │ +232 grad.resize(basis.size()); │ │ │ │ │ +233 for(std::size_t i = 0; i < basis.size(); ++i) │ │ │ │ │ +234 jac.mv(lgrad[i][0], grad[i][0]); │ │ │ │ │ +235 } │ │ │ │ │ +236 }; │ │ │ │ │ +237#endif // !DOXYGEN │ │ │ │ │ +238 │ │ │ │ │ +239} // namespace Dune │ │ │ │ │ +240 │ │ │ │ │ +241#endif // DUNE_LOCALFUNCTIONS_COMMON_INTERFACESWITCH_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ -Field operator-(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ -bool operator<(const Zero< Field > &, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ -Field operator/(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ -std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat) │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ -Field operator*(const Unity< Field > &u, const Field &f) │ │ │ │ │ -DDeeffiinniittiioonn field.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ -A class representing the unit of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_+ │ │ │ │ │ -This operator+(const This &other) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:249 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_a_b_s_O_M_Z │ │ │ │ │ -int absOMZ() const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:273 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_~_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -~MultiIndex() │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_-_= │ │ │ │ │ -This & operator-=(const This &other) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:208 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -MultiIndex(int, const This &other) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const int dimension │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_a_b_s_Z │ │ │ │ │ -int absZ() const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:265 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_m_z │ │ │ │ │ -int omz(int i) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:96 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_+_= │ │ │ │ │ -This & operator+=(const This &other) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:185 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_=_= │ │ │ │ │ -bool operator==(const This &other) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:141 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_s_a_m_e_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -bool sameMultiIndex(const This &ind) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:281 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ -This & operator=(const This &other) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -MultiIndex(const This &other) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_*_= │ │ │ │ │ -This & operator*=(const F &f) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:148 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_f_a_c_t_o_r │ │ │ │ │ -const Field & factor() const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:100 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_/ │ │ │ │ │ -This operator/(const F &f) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:232 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -MultiIndex(const F &f) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_/_= │ │ │ │ │ -This & operator/=(const F &f) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:156 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_* │ │ │ │ │ -This operator*(const F &f) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:226 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_s_e_t │ │ │ │ │ -void set(int d, int power=1) │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:260 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_o_p_e_r_a_t_o_r_- │ │ │ │ │ -This operator-(const This &other) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:254 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_z │ │ │ │ │ -int z(int i) const │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:92 │ │ │ │ │ -_D_u_n_e_:_:_M_u_l_t_i_I_n_d_e_x_:_:_M_u_l_t_i_I_n_d_e_x │ │ │ │ │ -MultiIndex() │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _>_:_:_f_i_e_l_d___t_y_p_e │ │ │ │ │ -Field field_type │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:316 │ │ │ │ │ -_D_u_n_e_:_:_F_i_e_l_d_T_r_a_i_t_s_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_i_e_l_d_ _>_ _>_:_:_r_e_a_l___t_y_p_e │ │ │ │ │ -typename FieldTraits< field_type >::real_type real_type │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:317 │ │ │ │ │ -_D_u_n_e_:_:_U_n_i_t_y_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _>_:_:_F_i_e_l_d │ │ │ │ │ -MultiIndex< dim, F > Field │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:462 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o_<_ _M_u_l_t_i_I_n_d_e_x_<_ _d_i_m_,_ _F_ _>_ _>_:_:_F_i_e_l_d │ │ │ │ │ -MultiIndex< dim, F > Field │ │ │ │ │ -DDeeffiinniittiioonn multiindex.hh:485 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h │ │ │ │ │ +Switch for uniform treatment of finite element with either the local or the │ │ │ │ │ +global interface. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +static const Coefficients & coefficients(const FiniteElement &fe) │ │ │ │ │ +access coefficients │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ +static void setStore(Store &store, FiniteElement &&fe) │ │ │ │ │ +Store a finite element in the store. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +FiniteElement::Traits::Coefficients Coefficients │ │ │ │ │ +export the type of the coefficients │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ +static void setStore(Store &store, const Store &fe) │ │ │ │ │ +Store a finite element in the store. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:91 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_s_e_t_S_t_o_r_e │ │ │ │ │ +static void setStore(Store &store, const FiniteElement &fe) │ │ │ │ │ +Store a finite element in the store. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:85 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +FiniteElement::Traits::Interpolation Interpolation │ │ │ │ │ +export the type of the interpolation │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_S_t_o_r_e │ │ │ │ │ +std::shared_ptr< const FiniteElement > Store │ │ │ │ │ +Type for storing finite elements. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_b_a_s_i_s │ │ │ │ │ +static const Basis & basis(const FiniteElement &fe) │ │ │ │ │ +access basis │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_B_a_s_i_s │ │ │ │ │ +FiniteElement::Traits::Basis Basis │ │ │ │ │ +export the type of the basis │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +static const Interpolation & interpolation(const FiniteElement &fe) │ │ │ │ │ +access interpolation │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h │ │ │ │ │ +Switch for uniform treatment of local and global basis classes. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:154 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const std::size_t dimRange │ │ │ │ │ +export dimension of the values │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:165 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +static const std::size_t dimDomainLocal │ │ │ │ │ +export dimension of local coordinates │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:158 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ +Basis::Traits::RangeField RangeField │ │ │ │ │ +export field type of the values │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_R_a_n_g_e │ │ │ │ │ +Basis::Traits::Range Range │ │ │ │ │ +export vector type of the values │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:167 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_g_r_a_d_i_e_n_t │ │ │ │ │ +static void gradient(const Basis &basis, const Geometry &geometry, const │ │ │ │ │ +DomainLocal &xl, std::vector< FieldMatrix< RangeField, 1, Geometry:: │ │ │ │ │ +coorddimension > > &grad) │ │ │ │ │ +Compute global gradient for scalar valued bases. │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:181 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +Basis::Traits::DomainLocal DomainLocal │ │ │ │ │ +export vector type of the local coordinates │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:160 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_S_w_i_t_c_h_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ +Basis::Traits::DomainField DomainField │ │ │ │ │ +export field types of the coordinates │ │ │ │ │ +DDeeffiinniittiioonn interfaceswitch.hh:156 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: defaultbasisfactory.hh File Reference │ │ │ │ +dune-localfunctions: interface.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,37 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
defaultbasisfactory.hh File Reference
│ │ │ │ +
interface.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <fstream>
│ │ │ │ -#include <dune/common/exceptions.hh>
│ │ │ │ -#include <dune/localfunctions/utility/basismatrix.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::Identity
class  Dune::FiniteElementInterface
 Interface for global-valued finite elements. More...
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >
struct  Dune::FiniteElementInterface::Traits
 types of component objects More...
 
struct  Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >::EvaluationBasisFactory< dd, FF >
class  Dune::FiniteElementFactoryInterface< Geometry, VertexOrder >
 Factory interface for global-valued finite elements. More...
 
class  Dune::BasisInterface
 Interface for global-valued shape functions. More...
 
struct  Dune::BasisInterface::Traits
 types of domain and range More...
 
struct  Dune::InterpolationInterface
 Interface for global-valued interpolation. More...
 
struct  Dune::CoefficientsInterface
 Interface for global-valued coefficients. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,27 +1,42 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -defaultbasisfactory.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_m_a_t_r_i_x_._h_h> │ │ │ │ │ +interface.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_I_d_e_n_t_i_t_y │ │ │ │ │ + class   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  Interface for global-valued finite elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_<_ _P_r_e_B_F_a_c_t_o_r_y_,_ _I_n_t_e_r_p_o_l_F_a_c_t_o_r_y_,_ _d_i_m_,_ _d_i_m_R_, │ │ │ │ │ - _S_F_,_ _C_F_,_ _P_r_e_B_a_s_i_s_K_e_y_E_x_t_r_a_c_t_o_r_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +  types of component objects _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_<_ _P_r_e_B_F_a_c_t_o_r_y_,_ _I_n_t_e_r_p_o_l_F_a_c_t_o_r_y_,_ _d_i_m_,_ _d_i_m_R_, │ │ │ │ │ - _S_F_,_ _C_F_,_ _P_r_e_B_a_s_i_s_K_e_y_E_x_t_r_a_c_t_o_r_ _>_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_ _d_d_,_ _F_F_ _> │ │ │ │ │ + class   _D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_<_ _G_e_o_m_e_t_r_y_,_ _V_e_r_t_e_x_O_r_d_e_r_ _> │ │ │ │ │ +  Factory interface for global-valued finite elements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  Interface for global-valued shape functions. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +  types of domain and range _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  Interface for global-valued interpolation. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +  Interface for global-valued coefficients. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00509_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: defaultbasisfactory.hh Source File │ │ │ │ +dune-localfunctions: interface.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,151 +70,215 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
defaultbasisfactory.hh
│ │ │ │ +
interface.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ -
6#define DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <fstream>
│ │ │ │ -
9#include <dune/common/exceptions.hh>
│ │ │ │ -
10
│ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ +
8
│ │ │ │ +
9#ifndef HEADERCHECK
│ │ │ │ +
10#error This header exists for documentation purposes only and should never be included directly.
│ │ │ │ +
11#endif
│ │ │ │
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
│ │ │ │ -
15 struct Identity
│ │ │ │ -
16 {
│ │ │ │ -
17 template <class T>
│ │ │ │ -
│ │ │ │ -
18 static T apply( const T &t )
│ │ │ │ -
19 {
│ │ │ │ -
20 return t;
│ │ │ │ -
21 }
│ │ │ │ -
│ │ │ │ -
22 };
│ │ │ │ -
│ │ │ │ -
23 /************************************************
│ │ │ │ -
24 * Class for providing a factory for basis
│ │ │ │ -
25 * functions over the set of reference elements.
│ │ │ │ -
26 * Is based on the TopologyFactory but additionally
│ │ │ │ -
27 * provides rebindes of the field type.
│ │ │ │ -
28 * The user provides factories for the pre basis and the
│ │ │ │ -
29 * interpolations. The default construction process of
│ │ │ │ -
30 * the basis is performed in this class.
│ │ │ │ -
31 ************************************************/
│ │ │ │ -
32 template< class PreBFactory,
│ │ │ │ -
33 class InterpolFactory,
│ │ │ │ -
34 unsigned int dim, unsigned int dimR,
│ │ │ │ -
35 class SF, class CF,
│ │ │ │ -
36 class PreBasisKeyExtractor = Identity >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
38 {
│ │ │ │ -
39 static const unsigned int dimension = dim;
│ │ │ │ -
40 static const unsigned int dimRange = dimR;
│ │ │ │ -
41 typedef SF StorageField;
│ │ │ │ -
42 typedef CF ComputeField;
│ │ │ │ -
43 typedef PreBFactory PreBasisFactory;
│ │ │ │ -
44 typedef typename PreBasisFactory::Object PreBasis;
│ │ │ │ -
45 typedef InterpolFactory InterpolationFactory;
│ │ │ │ -
46 typedef typename InterpolationFactory::Object Interpolation;
│ │ │ │ -
47 typedef typename PreBasisFactory::template EvaluationBasisFactory<dim,SF>::Type MonomialBasisFactory;
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
13#include <array>
│ │ │ │ +
14#include <cstddef>
│ │ │ │ +
15#include <vector>
│ │ │ │ +
16
│ │ │ │ +
17
│ │ │ │ +
18#include <dune/geometry/type.hh>
│ │ │ │ +
19
│ │ │ │ + │ │ │ │ +
21
│ │ │ │ +
22namespace Dune {
│ │ │ │ +
23
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 struct ImplementationDefined;
│ │ │ │ +
28
│ │ │ │ +
29 public:
│ │ │ │ +
31
│ │ │ │ +
│ │ │ │ +
34 struct Traits
│ │ │ │ +
35 {
│ │ │ │ +
37
│ │ │ │ +
42 typedef ImplementationDefined Basis;
│ │ │ │ +
44
│ │ │ │ +
49 typedef ImplementationDefined Coefficients;
│ │ │ │
51
│ │ │ │ -
52 typedef const Basis Object;
│ │ │ │ -
53 typedef typename InterpolationFactory::Key Key;
│ │ │ │ -
54 template <unsigned int dd, class FF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ -
57 typedef typename PreBasisFactory::template EvaluationBasisFactory<dd,FF>::Type
│ │ │ │ - │ │ │ │ -
59 };
│ │ │ │ +
56 typedef ImplementationDefined Interpolation;
│ │ │ │ +
57 };
│ │ │ │
│ │ │ │ +
58
│ │ │ │
60
│ │ │ │ -
61 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
62 static Object *create ( const Key &key )
│ │ │ │ -
63 {
│ │ │ │ -
64 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor::apply(key);
│ │ │ │ -
65 const PreBasis *preBasis = PreBasisFactory::template create<geometryId>( preBasisKey );
│ │ │ │ -
66 const Interpolation *interpol = InterpolationFactory::template create<geometryId>( key );
│ │ │ │ -
67 BasisMatrix< PreBasis, Interpolation, ComputeField > matrix( *preBasis, *interpol );
│ │ │ │ -
68
│ │ │ │ -
69 const MonomialBasis *monomialBasis = MonomialBasisFactory::template create< geometryId >( preBasis->order() );
│ │ │ │ + │ │ │ │ + │ │ │ │
70
│ │ │ │ -
71 Basis *basis = new Basis( *monomialBasis );
│ │ │ │
72
│ │ │ │ -
73 basis->fill( matrix );
│ │ │ │ -
74
│ │ │ │ -
75 InterpolationFactory::release(interpol);
│ │ │ │ -
76 PreBasisFactory::release(preBasis);
│ │ │ │ -
77
│ │ │ │ -
78 return basis;
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
81 static void release( Object *object)
│ │ │ │ -
82 {
│ │ │ │ -
83 const MonomialBasis *monomialBasis = &(object->basis());
│ │ │ │ -
84 delete object;
│ │ │ │ -
85 MonomialBasisFactory::release( monomialBasis );
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87 };
│ │ │ │ -
│ │ │ │ -
88}
│ │ │ │ -
89
│ │ │ │ -
90#endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH
│ │ │ │ - │ │ │ │ +
76 const Traits::Basis& basis() const;
│ │ │ │ +
78
│ │ │ │ + │ │ │ │ +
84
│ │ │ │ + │ │ │ │ +
90 GeometryType type() const;
│ │ │ │ +
91 };
│ │ │ │ +
│ │ │ │ +
92
│ │ │ │ +
94
│ │ │ │ +
114 template<class Geometry, class VertexOrder>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
116 {
│ │ │ │ +
117 struct ImplementationDefined;
│ │ │ │ +
118
│ │ │ │ +
119 public:
│ │ │ │ +
121
│ │ │ │ +
126 typedef ImplementationDefined FiniteElement;
│ │ │ │ +
127
│ │ │ │ +
129
│ │ │ │ + │ │ │ │ +
133
│ │ │ │ +
154
│ │ │ │ +
156 const FiniteElement make(const Geometry&, const VertexOrder&, ...);
│ │ │ │ +
158 const FiniteElement make(const Geometry&, ...);
│ │ │ │ +
160 const FiniteElement make(const VertexOrder&, ...);
│ │ │ │ +
162
│ │ │ │ +
166 const FiniteElement make(const GeometryType&, ...);
│ │ │ │ +
168 const FiniteElement make(...);
│ │ │ │ +
169
│ │ │ │ +
171
│ │ │ │ +
172 };
│ │ │ │ +
│ │ │ │ +
173
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
176 {
│ │ │ │ +
177 struct ImplementationDefined;
│ │ │ │ +
178 constexpr static int implementationDefined = 42;
│ │ │ │ +
179
│ │ │ │ +
180 public:
│ │ │ │ +
182
│ │ │ │ +
│ │ │ │ +
187 struct Traits
│ │ │ │ +
188 {
│ │ │ │ +
191
│ │ │ │ +
193 typedef ImplementationDefined DomainFieldType;
│ │ │ │ +
194
│ │ │ │ +
196 constexpr static int dimDomain = implementationDefined;
│ │ │ │ +
197
│ │ │ │ +
199 typedef ImplementationDefined DomainType;
│ │ │ │ +
200
│ │ │ │ +
202
│ │ │ │ +
205
│ │ │ │ +
207 typedef ImplementationDefined RangeFieldType;
│ │ │ │ +
208
│ │ │ │ +
210 constexpr static int dimRange = implementationDefined;
│ │ │ │ +
211
│ │ │ │ +
213 typedef ImplementationDefined RangeType;
│ │ │ │ +
214
│ │ │ │ +
216
│ │ │ │ +
218
│ │ │ │ +
222 typedef ImplementationDefined Jacobian;
│ │ │ │ +
223 };
│ │ │ │ +
│ │ │ │ +
224
│ │ │ │ +
226 std::size_t size () const;
│ │ │ │ +
228 std::size_t order () const;
│ │ │ │ +
229
│ │ │ │ + │ │ │ │ +
232 std::vector<Traits::RangeType>& out) const;
│ │ │ │ +
233
│ │ │ │ + │ │ │ │ +
236 std::vector<Traits::Jacobian>& out) const;
│ │ │ │ +
237
│ │ │ │ +
243 void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ +
244 const typename Traits::DomainType& in,
│ │ │ │ +
245 std::vector<typename Traits::RangeType>& out) const;
│ │ │ │ +
246 };
│ │ │ │ +
│ │ │ │ +
247
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
250 {
│ │ │ │ +
252
│ │ │ │ + │ │ │ │ +
256
│ │ │ │ +
258
│ │ │ │ +
267 template<typename F, typename C>
│ │ │ │ +
268 void interpolate (const F& f, std::vector<C>& out) const;
│ │ │ │ +
269 };
│ │ │ │ +
│ │ │ │ +
270
│ │ │ │ +
272
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
278 {
│ │ │ │ +
280 std::size_t size() const;
│ │ │ │ +
281
│ │ │ │ +
283 const LocalKey& localKey(std::size_t i) const;
│ │ │ │ +
284 };
│ │ │ │ +
│ │ │ │ +
285}
│ │ │ │ +
286#endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition basisevaluator.hh:131
│ │ │ │ -
Definition basismatrix.hh:27
│ │ │ │ -
Definition defaultbasisfactory.hh:16
│ │ │ │ -
static T apply(const T &t)
Definition defaultbasisfactory.hh:18
│ │ │ │ -
Definition defaultbasisfactory.hh:38
│ │ │ │ -
InterpolationFactory::Object Interpolation
Definition defaultbasisfactory.hh:46
│ │ │ │ -
static const unsigned int dimRange
Definition defaultbasisfactory.hh:40
│ │ │ │ -
static void release(Object *object)
release the object returned by the create methods
Definition defaultbasisfactory.hh:81
│ │ │ │ -
CF ComputeField
Definition defaultbasisfactory.hh:42
│ │ │ │ -
PreBFactory PreBasisFactory
Definition defaultbasisfactory.hh:43
│ │ │ │ -
InterpolationFactory::Key Key
Definition defaultbasisfactory.hh:53
│ │ │ │ -
static const unsigned int dimension
Definition defaultbasisfactory.hh:39
│ │ │ │ -
static Object * create(const Key &key)
Definition defaultbasisfactory.hh:62
│ │ │ │ -
SF StorageField
Definition defaultbasisfactory.hh:41
│ │ │ │ -
MonomialBasisFactory::Object MonomialBasis
Definition defaultbasisfactory.hh:48
│ │ │ │ -
PreBasisFactory::Object PreBasis
Definition defaultbasisfactory.hh:44
│ │ │ │ -
const Basis Object
Definition defaultbasisfactory.hh:52
│ │ │ │ -
StandardEvaluator< MonomialBasis > Evaluator
Definition defaultbasisfactory.hh:49
│ │ │ │ -
InterpolFactory InterpolationFactory
Definition defaultbasisfactory.hh:45
│ │ │ │ -
PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type MonomialBasisFactory
Definition defaultbasisfactory.hh:47
│ │ │ │ -
PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis
Definition defaultbasisfactory.hh:50
│ │ │ │ -
Definition defaultbasisfactory.hh:56
│ │ │ │ -
PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type
Definition defaultbasisfactory.hh:58
│ │ │ │ -
Definition monomialbasis.hh:612
│ │ │ │ -
static void release(Object *object)
Definition monomialbasis.hh:769
│ │ │ │ -
Definition polynomialbasis.hh:348
│ │ │ │ -
void fill(const Matrix &matrix)
Definition polynomialbasis.hh:366
│ │ │ │ +
Interface for global-valued finite elements.
Definition interface.hh:26
│ │ │ │ +
GeometryType type() const
Extract geometry type of this finite element.
│ │ │ │ +
const Traits::Basis & basis() const
Extract basis of this finite element.
│ │ │ │ +
const Traits::Coefficients & coefficients() const
Extract coefficients of this finite element.
│ │ │ │ +
const Traits::Interpolation & interpolation() const
Extract interpolation of this finite element.
│ │ │ │ +
FiniteElementInterface(const FiniteElementInterface &)
Finite elements are CopyConstructible.
│ │ │ │ +
FiniteElementInterface(...)
Construct a finite element.
│ │ │ │ +
types of component objects
Definition interface.hh:35
│ │ │ │ +
ImplementationDefined Basis
type of the Basis
Definition interface.hh:42
│ │ │ │ +
ImplementationDefined Coefficients
type of the Coefficients
Definition interface.hh:49
│ │ │ │ +
ImplementationDefined Interpolation
type of the Interpolation
Definition interface.hh:56
│ │ │ │ +
Factory interface for global-valued finite elements.
Definition interface.hh:116
│ │ │ │ +
const FiniteElement make(const VertexOrder &,...)
create a finite element from a vertex ordering
│ │ │ │ +
const FiniteElement make(...)
create a finite element
│ │ │ │ +
const FiniteElement make(const GeometryType &,...)
create a finite element from a geometry type
│ │ │ │ +
FiniteElementFactoryInterface(...)
Construct a finite element factory.
│ │ │ │ +
ImplementationDefined FiniteElement
Type of the finite element.
Definition interface.hh:126
│ │ │ │ +
const FiniteElement make(const Geometry &, const VertexOrder &,...)
create a finite element from a geometry and a vertex ordering
│ │ │ │ +
const FiniteElement make(const Geometry &,...)
create a finite element from a geometry
│ │ │ │ +
Interface for global-valued shape functions.
Definition interface.hh:176
│ │ │ │ +
void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
│ │ │ │ +
void evaluateFunction(const Traits::DomainType &in, std::vector< Traits::RangeType > &out) const
Evaluate all shape functions at given position.
│ │ │ │ +
std::size_t order() const
Polynomial order of the shape functions for quadrature.
│ │ │ │ +
void evaluateJacobian(const Traits::DomainType &in, std::vector< Traits::Jacobian > &out) const
Evaluate Jacobian of all shape functions at given position.
│ │ │ │ +
std::size_t size() const
Number of shape functions.
│ │ │ │ +
types of domain and range
Definition interface.hh:188
│ │ │ │ +
static constexpr int dimRange
dimension of the range
Definition interface.hh:210
│ │ │ │ +
ImplementationDefined Jacobian
Jacobian properties.
Definition interface.hh:222
│ │ │ │ +
ImplementationDefined DomainType
Type used for coordinate vectors in the domain.
Definition interface.hh:199
│ │ │ │ +
ImplementationDefined RangeFieldType
Field type of the range.
Definition interface.hh:207
│ │ │ │ +
ImplementationDefined DomainFieldType
Field type of the domain.
Definition interface.hh:193
│ │ │ │ +
ImplementationDefined RangeType
Type used for range values.
Definition interface.hh:213
│ │ │ │ +
static constexpr int dimDomain
dimension of the domain
Definition interface.hh:196
│ │ │ │ +
Interface for global-valued interpolation.
Definition interface.hh:250
│ │ │ │ +
BasisInterface::Traits Traits
Export basis traits.
Definition interface.hh:255
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
│ │ │ │ +
Interface for global-valued coefficients.
Definition interface.hh:278
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
│ │ │ │ +
std::size_t size() const
number of coefficients
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,188 +1,290 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -defaultbasisfactory.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +interface.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ -6#define DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_b_a_s_i_s_m_a_t_r_i_x_._h_h> │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ +8 │ │ │ │ │ +9#ifndef HEADERCHECK │ │ │ │ │ +10#error This header exists for documentation purposes only and should never be │ │ │ │ │ +included directly. │ │ │ │ │ +11#endif │ │ │ │ │ 12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -_1_5 struct _I_d_e_n_t_i_t_y │ │ │ │ │ -16 { │ │ │ │ │ -17 template │ │ │ │ │ -_1_8 static T _a_p_p_l_y( const T &t ) │ │ │ │ │ -19 { │ │ │ │ │ -20 return t; │ │ │ │ │ -21 } │ │ │ │ │ -22 }; │ │ │ │ │ -23 /************************************************ │ │ │ │ │ -24 * Class for providing a factory for basis │ │ │ │ │ -25 * functions over the set of reference elements. │ │ │ │ │ -26 * Is based on the TopologyFactory but additionally │ │ │ │ │ -27 * provides rebindes of the field type. │ │ │ │ │ -28 * The user provides factories for the pre basis and the │ │ │ │ │ -29 * interpolations. The default construction process of │ │ │ │ │ -30 * the basis is performed in this class. │ │ │ │ │ -31 ************************************************/ │ │ │ │ │ -32 template< class PreBFactory, │ │ │ │ │ -33 class InterpolFactory, │ │ │ │ │ -34 unsigned int dim, unsigned int dimR, │ │ │ │ │ -35 class SF, class CF, │ │ │ │ │ -36 class PreBasisKeyExtractor = Identity > │ │ │ │ │ -_3_7 struct _D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -38 { │ │ │ │ │ -_3_9 static const unsigned int _d_i_m_e_n_s_i_o_n = dim; │ │ │ │ │ -_4_0 static const unsigned int _d_i_m_R_a_n_g_e = dimR; │ │ │ │ │ -_4_1 typedef SF _S_t_o_r_a_g_e_F_i_e_l_d; │ │ │ │ │ -_4_2 typedef CF _C_o_m_p_u_t_e_F_i_e_l_d; │ │ │ │ │ -_4_3 typedef PreBFactory _P_r_e_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_4_4 typedef typename PreBasisFactory::Object _P_r_e_B_a_s_i_s; │ │ │ │ │ -_4_5 typedef InterpolFactory _I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ -_4_6 typedef typename InterpolationFactory::Object _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_4_7 typedef typename PreBasisFactory::template _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_d_i_m_,_S_F_>_:_: │ │ │ │ │ -_T_y_p_e _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y; │ │ │ │ │ -_4_8 typedef typename _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _M_o_n_o_m_i_a_l_B_a_s_i_s; │ │ │ │ │ -_4_9 typedef _S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r_<_ _M_o_n_o_m_i_a_l_B_a_s_i_s_ _> _E_v_a_l_u_a_t_o_r; │ │ │ │ │ -_5_0 typedef _P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_<_ _E_v_a_l_u_a_t_o_r_,_ _S_p_a_r_s_e_C_o_e_f_f_M_a_t_r_i_x_<_ _S_F_, │ │ │ │ │ -_d_i_m_R_a_n_g_e_ _> > _B_a_s_i_s; │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16 │ │ │ │ │ +17 │ │ │ │ │ +18#include │ │ │ │ │ +19 │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +21 │ │ │ │ │ +22namespace _D_u_n_e { │ │ │ │ │ +23 │ │ │ │ │ +_2_5 class _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ +26 { │ │ │ │ │ +27 struct ImplementationDefined; │ │ │ │ │ +28 │ │ │ │ │ +29 public: │ │ │ │ │ +31 │ │ │ │ │ +_3_4 struct _T_r_a_i_t_s │ │ │ │ │ +35 { │ │ │ │ │ +37 │ │ │ │ │ +_4_2 typedef ImplementationDefined _B_a_s_i_s; │ │ │ │ │ +44 │ │ │ │ │ +_4_9 typedef ImplementationDefined _C_o_e_f_f_i_c_i_e_n_t_s; │ │ │ │ │ 51 │ │ │ │ │ -_5_2 typedef const _B_a_s_i_s _O_b_j_e_c_t; │ │ │ │ │ -_5_3 typedef typename InterpolationFactory::Key _K_e_y; │ │ │ │ │ -54 template │ │ │ │ │ -_5_5 struct _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -56 { │ │ │ │ │ -57 typedef typename PreBasisFactory::template _E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_<_d_d_,_F_F_>_:_: │ │ │ │ │ -_T_y_p_e │ │ │ │ │ -_5_8 _T_y_p_e; │ │ │ │ │ -59 }; │ │ │ │ │ +_5_6 typedef ImplementationDefined _I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +57 }; │ │ │ │ │ +58 │ │ │ │ │ 60 │ │ │ │ │ -61 template< GeometryType::Id geometryId > │ │ │ │ │ -_6_2 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ -63 { │ │ │ │ │ -64 const typename PreBasisFactory::Key preBasisKey = PreBasisKeyExtractor:: │ │ │ │ │ -apply(key); │ │ │ │ │ -65 const _P_r_e_B_a_s_i_s *preBasis = PreBasisFactory::template create │ │ │ │ │ -( preBasisKey ); │ │ │ │ │ -66 const _I_n_t_e_r_p_o_l_a_t_i_o_n *interpol = InterpolationFactory::template │ │ │ │ │ -create( key ); │ │ │ │ │ -67 _B_a_s_i_s_M_a_t_r_i_x_<_ _P_r_e_B_a_s_i_s_,_ _I_n_t_e_r_p_o_l_a_t_i_o_n_,_ _C_o_m_p_u_t_e_F_i_e_l_d_ _> matrix( *preBasis, │ │ │ │ │ -*interpol ); │ │ │ │ │ -68 │ │ │ │ │ -69 const _M_o_n_o_m_i_a_l_B_a_s_i_s *monomialBasis = MonomialBasisFactory::template create< │ │ │ │ │ -geometryId >( preBasis->order() ); │ │ │ │ │ +_6_7 _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e(...); │ │ │ │ │ +_6_9 _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e(const _F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e&); │ │ │ │ │ 70 │ │ │ │ │ -71 _B_a_s_i_s *basis = new _B_a_s_i_s( *monomialBasis ); │ │ │ │ │ 72 │ │ │ │ │ -73 basis->_f_i_l_l( matrix ); │ │ │ │ │ -74 │ │ │ │ │ -75 InterpolationFactory::release(interpol); │ │ │ │ │ -76 PreBasisFactory::release(preBasis); │ │ │ │ │ -77 │ │ │ │ │ -78 return basis; │ │ │ │ │ -79 } │ │ │ │ │ -_8_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object) │ │ │ │ │ -82 { │ │ │ │ │ -83 const _M_o_n_o_m_i_a_l_B_a_s_i_s *monomialBasis = &(object->basis()); │ │ │ │ │ -84 delete object; │ │ │ │ │ -85 _M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( monomialBasis ); │ │ │ │ │ -86 } │ │ │ │ │ -87 }; │ │ │ │ │ -88} │ │ │ │ │ -89 │ │ │ │ │ -90#endif // #ifndef DUNE_DEFAULTBASISFACTORY_HH │ │ │ │ │ -_b_a_s_i_s_m_a_t_r_i_x_._h_h │ │ │ │ │ +_7_6 const _T_r_a_i_t_s_:_:_B_a_s_i_s& _b_a_s_i_s() const; │ │ │ │ │ +78 │ │ │ │ │ +_8_2 const _T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s& _c_o_e_f_f_i_c_i_e_n_t_s() const; │ │ │ │ │ +84 │ │ │ │ │ +_8_8 const _T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n& _i_n_t_e_r_p_o_l_a_t_i_o_n() const; │ │ │ │ │ +_9_0 GeometryType _t_y_p_e() const; │ │ │ │ │ +91 }; │ │ │ │ │ +92 │ │ │ │ │ +94 │ │ │ │ │ +114 template │ │ │ │ │ +_1_1_5 class _F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ +116 { │ │ │ │ │ +117 struct ImplementationDefined; │ │ │ │ │ +118 │ │ │ │ │ +119 public: │ │ │ │ │ +121 │ │ │ │ │ +_1_2_6 typedef ImplementationDefined _F_i_n_i_t_e_E_l_e_m_e_n_t; │ │ │ │ │ +127 │ │ │ │ │ +129 │ │ │ │ │ +_1_3_2 _F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e(...); │ │ │ │ │ +133 │ │ │ │ │ +154 │ │ │ │ │ +_1_5_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry&, const VertexOrder&, ...); │ │ │ │ │ +_1_5_8 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const Geometry&, ...); │ │ │ │ │ +_1_6_0 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const VertexOrder&, ...); │ │ │ │ │ +162 │ │ │ │ │ +_1_6_6 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(const GeometryType&, ...); │ │ │ │ │ +_1_6_8 const _F_i_n_i_t_e_E_l_e_m_e_n_t _m_a_k_e(...); │ │ │ │ │ +169 │ │ │ │ │ +171 │ │ │ │ │ +172 }; │ │ │ │ │ +173 │ │ │ │ │ +_1_7_5 class _B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +176 { │ │ │ │ │ +177 struct ImplementationDefined; │ │ │ │ │ +178 constexpr static int implementationDefined = 42; │ │ │ │ │ +179 │ │ │ │ │ +180 public: │ │ │ │ │ +182 │ │ │ │ │ +_1_8_7 struct _T_r_a_i_t_s │ │ │ │ │ +188 { │ │ │ │ │ +191 │ │ │ │ │ +_1_9_3 typedef ImplementationDefined _D_o_m_a_i_n_F_i_e_l_d_T_y_p_e; │ │ │ │ │ +194 │ │ │ │ │ +_1_9_6 constexpr static int _d_i_m_D_o_m_a_i_n = implementationDefined; │ │ │ │ │ +197 │ │ │ │ │ +_1_9_9 typedef ImplementationDefined _D_o_m_a_i_n_T_y_p_e; │ │ │ │ │ +200 │ │ │ │ │ +202 │ │ │ │ │ +205 │ │ │ │ │ +_2_0_7 typedef ImplementationDefined _R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ +208 │ │ │ │ │ +_2_1_0 constexpr static int _d_i_m_R_a_n_g_e = implementationDefined; │ │ │ │ │ +211 │ │ │ │ │ +_2_1_3 typedef ImplementationDefined _R_a_n_g_e_T_y_p_e; │ │ │ │ │ +214 │ │ │ │ │ +216 │ │ │ │ │ +218 │ │ │ │ │ +_2_2_2 typedef ImplementationDefined _J_a_c_o_b_i_a_n; │ │ │ │ │ +223 }; │ │ │ │ │ +224 │ │ │ │ │ +_2_2_6 std::size_t _s_i_z_e () const; │ │ │ │ │ +_2_2_8 std::size_t _o_r_d_e_r () const; │ │ │ │ │ +229 │ │ │ │ │ +_2_3_1 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +232 std::vector& out) const; │ │ │ │ │ +233 │ │ │ │ │ +_2_3_5 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +236 std::vector& out) const; │ │ │ │ │ +237 │ │ │ │ │ +_2_4_3 void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ +244 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +245 std::vector& out) const; │ │ │ │ │ +246 }; │ │ │ │ │ +247 │ │ │ │ │ +_2_4_9 struct _I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ +250 { │ │ │ │ │ +252 │ │ │ │ │ +_2_5_5 typedef _B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ +256 │ │ │ │ │ +258 │ │ │ │ │ +267 template │ │ │ │ │ +_2_6_8 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const; │ │ │ │ │ +269 }; │ │ │ │ │ +270 │ │ │ │ │ +272 │ │ │ │ │ +_2_7_7 struct _C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +278 { │ │ │ │ │ +_2_8_0 std::size_t _s_i_z_e() const; │ │ │ │ │ +281 │ │ │ │ │ +_2_8_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const; │ │ │ │ │ +284 }; │ │ │ │ │ +285} │ │ │ │ │ +286#endif // DUNE_LOCALFUNCTIONS_INTERFACE_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_S_t_a_n_d_a_r_d_E_v_a_l_u_a_t_o_r │ │ │ │ │ -DDeeffiinniittiioonn basisevaluator.hh:131 │ │ │ │ │ -_D_u_n_e_:_:_B_a_s_i_s_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn basismatrix.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_I_d_e_n_t_i_t_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_I_d_e_n_t_i_t_y_:_:_a_p_p_l_y │ │ │ │ │ -static T apply(const T &t) │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -InterpolationFactory::Object Interpolation │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const unsigned int dimRange │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -release the object returned by the create methods │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:81 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_C_o_m_p_u_t_e_F_i_e_l_d │ │ │ │ │ -CF ComputeField │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_P_r_e_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -PreBFactory PreBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -InterpolationFactory::Key Key │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:39 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_S_t_o_r_a_g_e_F_i_e_l_d │ │ │ │ │ -SF StorageField │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -MonomialBasisFactory::Object MonomialBasis │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_P_r_e_B_a_s_i_s │ │ │ │ │ -PreBasisFactory::Object PreBasis │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const Basis Object │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_o_r │ │ │ │ │ -StandardEvaluator< MonomialBasis > Evaluator │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -InterpolFactory InterpolationFactory │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -PreBasisFactory::template EvaluationBasisFactory< dim, SF >::Type │ │ │ │ │ -MonomialBasisFactory │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ -PolynomialBasisWithMatrix< Evaluator, SparseCoeffMatrix< SF, dimRange > > Basis │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_D_e_f_a_u_l_t_B_a_s_i_s_F_a_c_t_o_r_y_:_:_E_v_a_l_u_a_t_i_o_n_B_a_s_i_s_F_a_c_t_o_r_y_:_:_T_y_p_e │ │ │ │ │ -PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type │ │ │ │ │ -DDeeffiinniittiioonn defaultbasisfactory.hh:58 │ │ │ │ │ -_D_u_n_e_:_:_V_i_r_t_u_a_l_M_o_n_o_m_i_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:612 │ │ │ │ │ -_D_u_n_e_:_:_M_o_n_o_m_i_a_l_B_a_s_i_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn monomialbasis.hh:769 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:348 │ │ │ │ │ -_D_u_n_e_:_:_P_o_l_y_n_o_m_i_a_l_B_a_s_i_s_W_i_t_h_M_a_t_r_i_x_:_:_f_i_l_l │ │ │ │ │ -void fill(const Matrix &matrix) │ │ │ │ │ -DDeeffiinniittiioonn polynomialbasis.hh:366 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ +Interface for global-valued finite elements. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +Extract geometry type of this finite element. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_b_a_s_i_s │ │ │ │ │ +const Traits::Basis & basis() const │ │ │ │ │ +Extract basis of this finite element. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_c_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::Coefficients & coefficients() const │ │ │ │ │ +Extract coefficients of this finite element. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::Interpolation & interpolation() const │ │ │ │ │ +Extract interpolation of this finite element. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ +FiniteElementInterface(const FiniteElementInterface &) │ │ │ │ │ +Finite elements are CopyConstructible. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e │ │ │ │ │ +FiniteElementInterface(...) │ │ │ │ │ +Construct a finite element. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +types of component objects │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_B_a_s_i_s │ │ │ │ │ +ImplementationDefined Basis │ │ │ │ │ +type of the Basis │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +ImplementationDefined Coefficients │ │ │ │ │ +type of the Coefficients │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +ImplementationDefined Interpolation │ │ │ │ │ +type of the Interpolation │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ +Factory interface for global-valued finite elements. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:116 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const VertexOrder &,...) │ │ │ │ │ +create a finite element from a vertex ordering │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(...) │ │ │ │ │ +create a finite element │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const GeometryType &,...) │ │ │ │ │ +create a finite element from a geometry type │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e │ │ │ │ │ +FiniteElementFactoryInterface(...) │ │ │ │ │ +Construct a finite element factory. │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +ImplementationDefined FiniteElement │ │ │ │ │ +Type of the finite element. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:126 │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &, const VertexOrder &,...) │ │ │ │ │ +create a finite element from a geometry and a vertex ordering │ │ │ │ │ +_D_u_n_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_F_a_c_t_o_r_y_I_n_t_e_r_f_a_c_e_:_:_m_a_k_e │ │ │ │ │ +const FiniteElement make(const Geometry &,...) │ │ │ │ │ +create a finite element from a geometry │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +Interface for global-valued shape functions. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:176 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, Traits::dimDomain > &order, const │ │ │ │ │ +typename Traits::DomainType &in, std::vector< typename Traits::RangeType > │ │ │ │ │ +&out) const │ │ │ │ │ +Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const Traits::DomainType &in, std::vector< Traits:: │ │ │ │ │ +RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions at given position. │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +Polynomial order of the shape functions for quadrature. │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const Traits::DomainType &in, std::vector< Traits:: │ │ │ │ │ +Jacobian > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions at given position. │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +types of domain and range │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:188 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static constexpr int dimRange │ │ │ │ │ +dimension of the range │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:210 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ +ImplementationDefined Jacobian │ │ │ │ │ +Jacobian properties. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:222 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +ImplementationDefined DomainType │ │ │ │ │ +Type used for coordinate vectors in the domain. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:199 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ +ImplementationDefined RangeFieldType │ │ │ │ │ +Field type of the range. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:207 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ +ImplementationDefined DomainFieldType │ │ │ │ │ +Field type of the domain. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:193 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +ImplementationDefined RangeType │ │ │ │ │ +Type used for range values. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:213 │ │ │ │ │ +_D_u_n_e_:_:_B_a_s_i_s_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ +static constexpr int dimDomain │ │ │ │ │ +dimension of the domain │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:196 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e │ │ │ │ │ +Interface for global-valued interpolation. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:250 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s │ │ │ │ │ +BasisInterface::Traits Traits │ │ │ │ │ +Export basis traits. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:255 │ │ │ │ │ +_D_u_n_e_:_:_I_n_t_e_r_p_o_l_a_t_i_o_n_I_n_t_e_r_f_a_c_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Determine coefficients interpolating a given function. │ │ │ │ │ +_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e │ │ │ │ │ +Interface for global-valued coefficients. │ │ │ │ │ +DDeeffiinniittiioonn interface.hh:278 │ │ │ │ │ +_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +_D_u_n_e_:_:_C_o_e_f_f_i_c_i_e_n_t_s_I_n_t_e_r_f_a_c_e_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: l2interpolation.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementvariantcache.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,42 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
l2interpolation.hh File Reference
│ │ │ │ +
localfiniteelementvariantcache.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/common/concept.hh>
│ │ │ │ -#include <dune/common/dynmatrix.hh>
│ │ │ │ -#include <dune/geometry/quadraturerules.hh>
│ │ │ │ -#include <dune/localfunctions/utility/field.hh>
│ │ │ │ +
#include <vector>
│ │ │ │ +#include <tuple>
│ │ │ │ +#include <utility>
│ │ │ │ +#include <type_traits>
│ │ │ │ +#include <dune/common/std/type_traits.hh>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/common/typelist.hh>
│ │ │ │ +#include <dune/common/hybridutilities.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/geometry/typeindex.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementvariant.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalL2InterpolationBase< B, Q >
 
struct  Dune::LocalL2Interpolation< B, Q, true >
 
struct  Dune::LocalL2Interpolation< B, Q, false >
 
struct  Dune::LocalL2InterpolationFactory< BasisFactory, onb >
 A factory class for the local l2 interpolations taking a basis factory. More...
class  Dune::LocalFiniteElementVariantCache< Base >
 A cache storing a compile time selection of local finite element implementations. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,31 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -l2interpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ +localfiniteelementvariantcache.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_ _B_,_ _Q_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _t_r_u_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _B_a_s_i_s_F_a_c_t_o_r_y_,_ _o_n_b_ _> │ │ │ │ │ -  A factory class for the local l2 interpolations taking a basis │ │ │ │ │ - factory. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_<_ _B_a_s_e_ _> │ │ │ │ │ +  A cache storing a compile time selection of local finite element │ │ │ │ │ + implementations. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00512_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: l2interpolation.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementvariantcache.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,242 +70,143 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
l2interpolation.hh
│ │ │ │ +
localfiniteelementvariantcache.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_L2INTERPOLATION_HH
│ │ │ │ -
6#define DUNE_L2INTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/common/concept.hh>
│ │ │ │ -
9#include <dune/common/dynmatrix.hh>
│ │ │ │ -
10
│ │ │ │ -
11#include <dune/geometry/quadraturerules.hh>
│ │ │ │ +
8#include <vector>
│ │ │ │ +
9#include <tuple>
│ │ │ │ +
10#include <utility>
│ │ │ │ +
11#include <type_traits>
│ │ │ │
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
32 template< class B, class Q, bool onb >
│ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
35 template< class B, class Q >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {
│ │ │ │ - │ │ │ │ -
39
│ │ │ │ -
40 public:
│ │ │ │ -
41 typedef B Basis;
│ │ │ │ -
42 typedef Q Quadrature;
│ │ │ │ +
13#include <dune/common/std/type_traits.hh>
│ │ │ │ +
14#include <dune/common/exceptions.hh>
│ │ │ │ +
15#include <dune/common/typelist.hh>
│ │ │ │ +
16#include <dune/common/hybridutilities.hh>
│ │ │ │ +
17
│ │ │ │ +
18#include <dune/geometry/type.hh>
│ │ │ │ +
19#include <dune/geometry/typeindex.hh>
│ │ │ │ +
20
│ │ │ │ + │ │ │ │ +
22
│ │ │ │ +
23
│ │ │ │ +
24namespace Dune {
│ │ │ │ +
25
│ │ │ │ +
26namespace Impl {
│ │ │ │ +
27
│ │ │ │ +
28 // This class provides the index method of LocalGeometryTypeIndex
│ │ │ │ +
29 // but throws a Dune::RangeError if the dimension does not match.
│ │ │ │ +
30 // This can be helpful to catch errors in a LocalFiniteElementVariantCache
│ │ │ │ +
31 // instance based on dimension specific GeometryType indices.
│ │ │ │ +
32 template<std::size_t dim>
│ │ │ │ +
33 struct FixedDimLocalGeometryTypeIndex {
│ │ │ │ +
34 inline static std::size_t index(const GeometryType &gt)
│ │ │ │ +
35 {
│ │ │ │ +
36 if (gt.dim() != dim)
│ │ │ │ +
37 DUNE_THROW(Dune::RangeError, "Asking for dim=" << dim << " specific index of GeometryType with dimension " << gt.dim());
│ │ │ │ +
38 return LocalGeometryTypeIndex::index(gt);
│ │ │ │ +
39 }
│ │ │ │ +
40 };
│ │ │ │ +
41
│ │ │ │ +
42} // end namespace Impl
│ │ │ │
43
│ │ │ │ -
44 static const unsigned int dimension = Basis::dimension;
│ │ │ │ -
45
│ │ │ │ -
47 template< class Function, class DofField>
│ │ │ │ -
│ │ │ │ -
48 void interpolate ( const Function &function, std::vector< DofField > &coefficients ) const
│ │ │ │ -
49 {
│ │ │ │ -
50 typedef FieldVector< DofField, Basis::dimRange > RangeVector;
│ │ │ │ -
51
│ │ │ │ -
52 const unsigned int size = basis().size();
│ │ │ │ -
53 static std::vector< RangeVector > basisValues( size );
│ │ │ │ -
54
│ │ │ │ -
55 coefficients.resize( size );
│ │ │ │ -
56 basisValues.resize( size );
│ │ │ │ -
57 for( unsigned int i = 0; i < size; ++i )
│ │ │ │ -
58 coefficients[ i ] = Zero< DofField >();
│ │ │ │ -
59
│ │ │ │ -
60 for (auto&& qp : quadrature())
│ │ │ │ -
61 {
│ │ │ │ -
62 basis().evaluate( qp.position(), basisValues );
│ │ │ │ -
63 auto val = function( qp.position() );
│ │ │ │ -
64 RangeVector factor = field_cast< DofField >( val );
│ │ │ │ -
65 factor *= field_cast< DofField >( qp.weight() );
│ │ │ │ -
66 for( unsigned int i = 0; i < size; ++i )
│ │ │ │ -
67 coefficients[ i ] += factor * basisValues[ i ];
│ │ │ │ -
68 }
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
│ │ │ │ -
71 const Basis &basis () const
│ │ │ │ -
72 {
│ │ │ │ -
73 return basis_;
│ │ │ │ -
74 }
│ │ │ │ -
│ │ │ │ -
75
│ │ │ │ -
│ │ │ │ -
76 const Quadrature &quadrature () const
│ │ │ │ -
77 {
│ │ │ │ -
78 return quadrature_;
│ │ │ │ -
79 }
│ │ │ │ -
│ │ │ │ -
80
│ │ │ │ -
81 protected:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
83 : basis_( basis ),
│ │ │ │ - │ │ │ │ -
85 {}
│ │ │ │ -
│ │ │ │ -
86
│ │ │ │ -
87 const Basis &basis_;
│ │ │ │ - │ │ │ │ -
89 };
│ │ │ │ -
│ │ │ │ -
90
│ │ │ │ -
91 template< class B, class Q >
│ │ │ │ -
│ │ │ │ -
92 struct LocalL2Interpolation<B,Q,true>
│ │ │ │ -
93 : public LocalL2InterpolationBase<B,Q>
│ │ │ │ -
94 {
│ │ │ │ - │ │ │ │ -
96 template< class BasisFactory, bool onb >
│ │ │ │ - │ │ │ │ -
98 using typename Base::Basis;
│ │ │ │ -
99 using typename Base::Quadrature;
│ │ │ │ -
100 private:
│ │ │ │ -
101 LocalL2Interpolation ( const typename Base::Basis &basis, const typename Base::Quadrature &quadrature )
│ │ │ │ -
102 : Base(basis,quadrature)
│ │ │ │ -
103 {}
│ │ │ │ -
104 };
│ │ │ │ -
│ │ │ │ -
105 template< class B, class Q >
│ │ │ │ -
│ │ │ │ -
106 struct LocalL2Interpolation<B,Q,false>
│ │ │ │ -
107 : public LocalL2InterpolationBase<B,Q>
│ │ │ │ -
108 {
│ │ │ │ - │ │ │ │ -
110 template< class BasisFactory, bool onb >
│ │ │ │ - │ │ │ │ -
112 using typename Base::Basis;
│ │ │ │ -
113 using typename Base::Quadrature;
│ │ │ │ -
114 template< class Function, class DofField >
│ │ │ │ -
│ │ │ │ -
115 void interpolate ( const Function &function, std::vector< DofField > &coefficients ) const
│ │ │ │ -
116 {
│ │ │ │ -
117 const unsigned size = Base::basis().size();
│ │ │ │ -
118 Base::interpolate(function,val_);
│ │ │ │ -
119 coefficients.resize( size );
│ │ │ │ -
120 for (unsigned int i=0; i<size; ++i)
│ │ │ │ -
121 {
│ │ │ │ -
122 coefficients[i] = 0;
│ │ │ │ -
123 for (unsigned int j=0; j<size; ++j)
│ │ │ │ -
124 {
│ │ │ │ -
125 coefficients[i] += field_cast<DofField>(massMatrix_[i][j]*val_[j]);
│ │ │ │ -
126 }
│ │ │ │ -
127 }
│ │ │ │ -
128 }
│ │ │ │ -
│ │ │ │ -
129 private:
│ │ │ │ -
130 LocalL2Interpolation ( const typename Base::Basis &basis, const typename Base::Quadrature &quadrature )
│ │ │ │ -
131 : Base(basis,quadrature),
│ │ │ │ -
132 val_(basis.size()),
│ │ │ │ -
133 massMatrix_(basis.size(),basis.size(),Field(0))
│ │ │ │ -
134 {
│ │ │ │ -
135 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector;
│ │ │ │ -
136 typedef typename Base::Quadrature::iterator Iterator;
│ │ │ │ -
137 const unsigned size = basis.size();
│ │ │ │ -
138 std::vector< RangeVector > basisValues( size );
│ │ │ │ -
139
│ │ │ │ -
140 const Iterator end = Base::quadrature().end();
│ │ │ │ -
141 for( Iterator it = Base::quadrature().begin(); it != end; ++it )
│ │ │ │ -
142 {
│ │ │ │ -
143 Base::basis().evaluate( it->position(), basisValues );
│ │ │ │ -
144 for (unsigned int i=0; i<size; ++i)
│ │ │ │ -
145 for (unsigned int j=0; j<size; ++j)
│ │ │ │ -
146 massMatrix_[i][j] += (basisValues[i]*basisValues[j])*it->weight();
│ │ │ │ -
147 }
│ │ │ │ -
148 massMatrix_.invert();
│ │ │ │ -
149 }
│ │ │ │ -
150 typedef typename Base::Basis::StorageField Field;
│ │ │ │ -
151 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector;
│ │ │ │ -
152 typedef DynamicMatrix<Field> MassMatrix;
│ │ │ │ -
153 mutable std::vector<Field> val_;
│ │ │ │ -
154 MassMatrix massMatrix_;
│ │ │ │ -
155 };
│ │ │ │ -
│ │ │ │ -
156
│ │ │ │ -
161 template< class BasisFactory, bool onb >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
163 {
│ │ │ │ -
164 static const unsigned int dimension = BasisFactory::dimension;
│ │ │ │ -
165 typedef typename BasisFactory::Key Key;
│ │ │ │ -
166 typedef typename BasisFactory::Object Basis;
│ │ │ │ -
167 typedef double Field;
│ │ │ │ -
168 typedef QuadratureRule<Field,dimension> Quadrature;
│ │ │ │ -
169 typedef QuadratureRules<Field,dimension> QuadratureProvider;
│ │ │ │ - │ │ │ │ - │ │ │ │ -
172
│ │ │ │ -
173 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
174 static Object *create ( const Key &key )
│ │ │ │ -
175 {
│ │ │ │ -
176 constexpr Dune::GeometryType geometry = geometryId;
│ │ │ │ -
177 const Basis *basis = BasisFactory::template create< geometry >( key );
│ │ │ │ -
178 const Quadrature & quadrature = QuadratureProvider::rule(geometry, 2*basis->order()+1);
│ │ │ │ -
179 return new Object( *basis, quadrature );
│ │ │ │ -
180 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
181 static void release ( Object *object )
│ │ │ │ -
182 {
│ │ │ │ -
183 const Basis &basis = object->basis();
│ │ │ │ -
184 BasisFactory::release( &basis );
│ │ │ │ -
185 delete object;
│ │ │ │ -
186 }
│ │ │ │ -
│ │ │ │ -
187 };
│ │ │ │ -
│ │ │ │ -
188
│ │ │ │ -
189}
│ │ │ │ -
190
│ │ │ │ -
191#endif // #ifndef DUNE_L2INTERPOLATION_HH
│ │ │ │ - │ │ │ │ +
66template<class Base>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
68{
│ │ │ │ +
69
│ │ │ │ +
70 template<class LFEImplTuple>
│ │ │ │ +
71 struct GenerateLFEVariant;
│ │ │ │ +
72
│ │ │ │ +
73 template<class Index, class... LFEImpl>
│ │ │ │ +
74 struct GenerateLFEVariant<std::tuple<std::pair<Index, LFEImpl>...>>
│ │ │ │ +
75 {
│ │ │ │ +
76 using type = UniqueTypes_t<LocalFiniteElementVariant, decltype(std::declval<LFEImpl>()())...>;
│ │ │ │ +
77 };
│ │ │ │ +
78
│ │ │ │ +
79 using Base::getImplementations;
│ │ │ │ +
80 using Base::index;
│ │ │ │ +
81 using Implementations = decltype(std::declval<Base>().getImplementations());
│ │ │ │ +
82
│ │ │ │ +
83public:
│ │ │ │ +
84
│ │ │ │ +
92 using FiniteElementType = typename GenerateLFEVariant<Implementations>::type;
│ │ │ │ +
93
│ │ │ │ +
98 template<class... Args>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
100 Base(std::forward<Args>(args)...)
│ │ │ │ +
101 {
│ │ │ │ +
102 Dune::Hybrid::forEach(getImplementations(), [&,this](auto feImpl) {
│ │ │ │ +
103 auto implIndex = feImpl.first;
│ │ │ │ +
104 if (cache_.size() < implIndex+1)
│ │ │ │ +
105 cache_.resize(implIndex+1);
│ │ │ │ +
106 cache_[implIndex] = feImpl.second();
│ │ │ │ +
107 });
│ │ │ │ +
108 }
│ │ │ │ +
│ │ │ │ +
109
│ │ │ │ + │ │ │ │ +
112
│ │ │ │ + │ │ │ │ +
115
│ │ │ │ + │ │ │ │ +
118
│ │ │ │ + │ │ │ │ +
121
│ │ │ │ +
126 template<class... Key>
│ │ │ │ +
│ │ │ │ +
127 const auto& get(const Key&... key) const
│ │ │ │ +
128 {
│ │ │ │ +
129 auto implIndex = index(key...);
│ │ │ │ +
130 if (implIndex >= cache_.size())
│ │ │ │ +
131 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the requested type.");
│ │ │ │ +
132 if (not(cache_[implIndex]))
│ │ │ │ +
133 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the requested type.");
│ │ │ │ +
134 return cache_[implIndex];
│ │ │ │ +
135 }
│ │ │ │ +
│ │ │ │ +
136
│ │ │ │ +
137private:
│ │ │ │ +
138 std::vector<FiniteElementType> cache_;
│ │ │ │ +
139};
│ │ │ │ +
│ │ │ │ +
140
│ │ │ │ +
141
│ │ │ │ +
142
│ │ │ │ +
143} // namespace Dune
│ │ │ │ +
144
│ │ │ │ +
145
│ │ │ │ +
146
│ │ │ │ +
147
│ │ │ │ +
148#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
A local L2 interpolation taking a test basis and a quadrature rule.
Definition l2interpolation.hh:33
│ │ │ │ -
Definition l2interpolation.hh:37
│ │ │ │ -
LocalL2InterpolationBase(const Basis &basis, const Quadrature &quadrature)
Definition l2interpolation.hh:82
│ │ │ │ -
const Basis & basis() const
Definition l2interpolation.hh:71
│ │ │ │ -
const Quadrature & quadrature_
Definition l2interpolation.hh:88
│ │ │ │ -
void interpolate(const Function &function, std::vector< DofField > &coefficients) const
Interpolate a function that implements Range operator()(Domain)
Definition l2interpolation.hh:48
│ │ │ │ -
const Basis & basis_
Definition l2interpolation.hh:87
│ │ │ │ -
static const unsigned int dimension
Definition l2interpolation.hh:44
│ │ │ │ -
const Quadrature & quadrature() const
Definition l2interpolation.hh:76
│ │ │ │ -
Q Quadrature
Definition l2interpolation.hh:42
│ │ │ │ -
B Basis
Definition l2interpolation.hh:41
│ │ │ │ -
LocalL2InterpolationBase< B, Q > Base
Definition l2interpolation.hh:95
│ │ │ │ -
void interpolate(const Function &function, std::vector< DofField > &coefficients) const
Definition l2interpolation.hh:115
│ │ │ │ -
LocalL2InterpolationBase< B, Q > Base
Definition l2interpolation.hh:109
│ │ │ │ -
A factory class for the local l2 interpolations taking a basis factory.
Definition l2interpolation.hh:163
│ │ │ │ -
static const unsigned int dimension
Definition l2interpolation.hh:164
│ │ │ │ -
static void release(Object *object)
Definition l2interpolation.hh:181
│ │ │ │ -
BasisFactory::Object Basis
Definition l2interpolation.hh:166
│ │ │ │ -
double Field
Definition l2interpolation.hh:167
│ │ │ │ -
QuadratureRules< Field, dimension > QuadratureProvider
Definition l2interpolation.hh:169
│ │ │ │ -
QuadratureRule< Field, dimension > Quadrature
Definition l2interpolation.hh:168
│ │ │ │ -
static Object * create(const Key &key)
Definition l2interpolation.hh:174
│ │ │ │ -
BasisFactory::Key Key
Definition l2interpolation.hh:165
│ │ │ │ -
const LocalInterpolation Object
Definition l2interpolation.hh:171
│ │ │ │ -
LocalL2Interpolation< Basis, Quadrature, onb > LocalInterpolation
Definition l2interpolation.hh:170
│ │ │ │ +
A cache storing a compile time selection of local finite element implementations.
Definition localfiniteelementvariantcache.hh:68
│ │ │ │ +
LocalFiniteElementVariantCache & operator=(const LocalFiniteElementVariantCache &other)=default
Copy assignment.
│ │ │ │ +
LocalFiniteElementVariantCache(Args &&... args)
Default constructor.
Definition localfiniteelementvariantcache.hh:99
│ │ │ │ +
LocalFiniteElementVariantCache(LocalFiniteElementVariantCache &&other)=default
Move constructor.
│ │ │ │ +
const auto & get(const Key &... key) const
Get the LocalFiniteElement for the given key data.
Definition localfiniteelementvariantcache.hh:127
│ │ │ │ +
LocalFiniteElementVariantCache(const LocalFiniteElementVariantCache &other)=default
Copy constructor.
│ │ │ │ +
typename GenerateLFEVariant< Implementations >::type FiniteElementType
Type of exported LocalFiniteElement's.
Definition localfiniteelementvariantcache.hh:92
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,272 +1,158 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -l2interpolation.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +localfiniteelementvariantcache.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_L2INTERPOLATION_HH │ │ │ │ │ -6#define DUNE_L2INTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANTCACHE_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_u_t_i_l_i_t_y_/_f_i_e_l_d_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -32 template< class B, class Q, bool onb > │ │ │ │ │ -_3_3 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -34 │ │ │ │ │ -35 template< class B, class Q > │ │ │ │ │ -_3_6 class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ -37 { │ │ │ │ │ -38 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_ _B_,_ _Q_ _> _T_h_i_s; │ │ │ │ │ -39 │ │ │ │ │ -40 public: │ │ │ │ │ -_4_1 typedef B _B_a_s_i_s; │ │ │ │ │ -_4_2 typedef Q _Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include │ │ │ │ │ +19#include │ │ │ │ │ +20 │ │ │ │ │ +21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h> │ │ │ │ │ +22 │ │ │ │ │ +23 │ │ │ │ │ +24namespace _D_u_n_e { │ │ │ │ │ +25 │ │ │ │ │ +26namespace Impl { │ │ │ │ │ +27 │ │ │ │ │ +28 // This class provides the index method of LocalGeometryTypeIndex │ │ │ │ │ +29 // but throws a Dune::RangeError if the dimension does not match. │ │ │ │ │ +30 // This can be helpful to catch errors in a LocalFiniteElementVariantCache │ │ │ │ │ +31 // instance based on dimension specific GeometryType indices. │ │ │ │ │ +32 template │ │ │ │ │ +33 struct FixedDimLocalGeometryTypeIndex { │ │ │ │ │ +34 inline static std::size_t index(const GeometryType >) │ │ │ │ │ +35 { │ │ │ │ │ +36 if (gt.dim() != dim) │ │ │ │ │ +37 DUNE_THROW(Dune::RangeError, "Asking for dim=" << dim << " specific index of │ │ │ │ │ +GeometryType with dimension " << gt.dim()); │ │ │ │ │ +38 return LocalGeometryTypeIndex::index(gt); │ │ │ │ │ +39 } │ │ │ │ │ +40 }; │ │ │ │ │ +41 │ │ │ │ │ +42} // end namespace Impl │ │ │ │ │ 43 │ │ │ │ │ -_4_4 static const unsigned int _d_i_m_e_n_s_i_o_n = Basis::dimension; │ │ │ │ │ -45 │ │ │ │ │ -47 template< class Function, class DofField> │ │ │ │ │ -_4_8 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, std::vector< DofField > │ │ │ │ │ -&coefficients ) const │ │ │ │ │ -49 { │ │ │ │ │ -50 typedef FieldVector< DofField, Basis::dimRange > RangeVector; │ │ │ │ │ -51 │ │ │ │ │ -52 const unsigned int size = _b_a_s_i_s().size(); │ │ │ │ │ -53 static std::vector< RangeVector > basisValues( size ); │ │ │ │ │ -54 │ │ │ │ │ -55 coefficients.resize( size ); │ │ │ │ │ -56 basisValues.resize( size ); │ │ │ │ │ -57 for( unsigned int i = 0; i < size; ++i ) │ │ │ │ │ -58 coefficients[ i ] = _Z_e_r_o_<_ _D_o_f_F_i_e_l_d_ _>(); │ │ │ │ │ -59 │ │ │ │ │ -60 for (auto&& qp : _q_u_a_d_r_a_t_u_r_e()) │ │ │ │ │ -61 { │ │ │ │ │ -62 _b_a_s_i_s().evaluate( qp.position(), basisValues ); │ │ │ │ │ -63 auto val = function( qp.position() ); │ │ │ │ │ -64 RangeVector factor = field_cast< DofField >( val ); │ │ │ │ │ -65 factor *= field_cast< DofField >( qp.weight() ); │ │ │ │ │ -66 for( unsigned int i = 0; i < size; ++i ) │ │ │ │ │ -67 coefficients[ i ] += factor * basisValues[ i ]; │ │ │ │ │ -68 } │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -_7_1 const _B_a_s_i_s &_b_a_s_i_s () const │ │ │ │ │ -72 { │ │ │ │ │ -73 return _b_a_s_i_s__; │ │ │ │ │ -74 } │ │ │ │ │ -75 │ │ │ │ │ -_7_6 const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e () const │ │ │ │ │ -77 { │ │ │ │ │ -78 return _q_u_a_d_r_a_t_u_r_e__; │ │ │ │ │ -79 } │ │ │ │ │ -80 │ │ │ │ │ -81 protected: │ │ │ │ │ -_8_2 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e ( const _B_a_s_i_s &_b_a_s_i_s, const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e │ │ │ │ │ -) │ │ │ │ │ -83 : _b_a_s_i_s__( _b_a_s_i_s ), │ │ │ │ │ -84 _q_u_a_d_r_a_t_u_r_e__( _q_u_a_d_r_a_t_u_r_e ) │ │ │ │ │ -85 {} │ │ │ │ │ -86 │ │ │ │ │ -_8_7 const _B_a_s_i_s &_b_a_s_i_s__; │ │ │ │ │ -_8_8 const _Q_u_a_d_r_a_t_u_r_e &_q_u_a_d_r_a_t_u_r_e__; │ │ │ │ │ -89 }; │ │ │ │ │ -90 │ │ │ │ │ -91 template< class B, class Q > │ │ │ │ │ -_9_2 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -93 : public _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ -94 { │ │ │ │ │ -_9_5 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_B_,_Q_> _B_a_s_e; │ │ │ │ │ -96 template< class BasisFactory, bool onb > │ │ │ │ │ -_9_7 friend class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ -98 using typename _B_a_s_e_:_:_B_a_s_i_s; │ │ │ │ │ -99 using typename _B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ -100 private: │ │ │ │ │ -101 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n ( const typename _B_a_s_e_:_:_B_a_s_i_s &basis, const typename │ │ │ │ │ -_B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e &quadrature ) │ │ │ │ │ -102 : _B_a_s_e(basis,quadrature) │ │ │ │ │ -103 {} │ │ │ │ │ -104 }; │ │ │ │ │ -105 template< class B, class Q > │ │ │ │ │ -_1_0_6 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -107 : public _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ -108 { │ │ │ │ │ -_1_0_9 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_<_B_,_Q_> _B_a_s_e; │ │ │ │ │ -110 template< class BasisFactory, bool onb > │ │ │ │ │ -_1_1_1 friend class _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ -112 using typename _B_a_s_e_:_:_B_a_s_i_s; │ │ │ │ │ -113 using typename _B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ -114 template< class Function, class DofField > │ │ │ │ │ -_1_1_5 void _i_n_t_e_r_p_o_l_a_t_e ( const Function &function, std::vector< DofField > │ │ │ │ │ -&coefficients ) const │ │ │ │ │ -116 { │ │ │ │ │ -117 const unsigned size = Base::basis().size(); │ │ │ │ │ -118 Base::interpolate(function,val_); │ │ │ │ │ -119 coefficients.resize( size ); │ │ │ │ │ -120 for (unsigned int i=0; i(massMatrix_[i][j]*val_[j]); │ │ │ │ │ -126 } │ │ │ │ │ -127 } │ │ │ │ │ -128 } │ │ │ │ │ -129 private: │ │ │ │ │ -130 _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n ( const typename Base::Basis &basis, const typename │ │ │ │ │ -Base::Quadrature &quadrature ) │ │ │ │ │ -131 : Base(basis,quadrature), │ │ │ │ │ -132 val_(basis.size()), │ │ │ │ │ -133 massMatrix_(basis.size(),basis.size(),Field(0)) │ │ │ │ │ -134 { │ │ │ │ │ -135 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector; │ │ │ │ │ -136 typedef typename Base::Quadrature::iterator Iterator; │ │ │ │ │ -137 const unsigned size = basis.size(); │ │ │ │ │ -138 std::vector< RangeVector > basisValues( size ); │ │ │ │ │ -139 │ │ │ │ │ -140 const Iterator end = Base::quadrature().end(); │ │ │ │ │ -141 for( Iterator it = Base::quadrature().begin(); it != end; ++it ) │ │ │ │ │ -142 { │ │ │ │ │ -143 Base::basis().evaluate( it->position(), basisValues ); │ │ │ │ │ -144 for (unsigned int i=0; iweight(); │ │ │ │ │ -147 } │ │ │ │ │ -148 massMatrix_.invert(); │ │ │ │ │ -149 } │ │ │ │ │ -150 typedef typename Base::Basis::StorageField Field; │ │ │ │ │ -151 typedef FieldVector< Field, Base::Basis::dimRange > RangeVector; │ │ │ │ │ -152 typedef DynamicMatrix MassMatrix; │ │ │ │ │ -153 mutable std::vector val_; │ │ │ │ │ -154 MassMatrix massMatrix_; │ │ │ │ │ -155 }; │ │ │ │ │ -156 │ │ │ │ │ -161 template< class BasisFactory, bool onb > │ │ │ │ │ -_1_6_2 struct _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -163 { │ │ │ │ │ -_1_6_4 static const unsigned int _d_i_m_e_n_s_i_o_n = BasisFactory::dimension; │ │ │ │ │ -_1_6_5 typedef typename BasisFactory::Key _K_e_y; │ │ │ │ │ -_1_6_6 typedef typename BasisFactory::Object _B_a_s_i_s; │ │ │ │ │ -_1_6_7 typedef double _F_i_e_l_d; │ │ │ │ │ -_1_6_8 typedef QuadratureRule _Q_u_a_d_r_a_t_u_r_e; │ │ │ │ │ -_1_6_9 typedef QuadratureRules _Q_u_a_d_r_a_t_u_r_e_P_r_o_v_i_d_e_r; │ │ │ │ │ -_1_7_0 typedef _L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_a_s_i_s_,_ _Q_u_a_d_r_a_t_u_r_e_,_ _o_n_b_ _> _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -_1_7_1 typedef const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n _O_b_j_e_c_t; │ │ │ │ │ -172 │ │ │ │ │ -173 template< GeometryType::Id geometryId > │ │ │ │ │ -_1_7_4 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ -175 { │ │ │ │ │ -176 constexpr Dune::GeometryType geometry = geometryId; │ │ │ │ │ -177 const _B_a_s_i_s *basis = BasisFactory::template create< geometry >( key ); │ │ │ │ │ -178 const _Q_u_a_d_r_a_t_u_r_e & quadrature = QuadratureProvider::rule(geometry, 2*basis- │ │ │ │ │ ->order()+1); │ │ │ │ │ -179 return new _O_b_j_e_c_t( *basis, quadrature ); │ │ │ │ │ -180 } │ │ │ │ │ -_1_8_1 static void _r_e_l_e_a_s_e ( _O_b_j_e_c_t *object ) │ │ │ │ │ -182 { │ │ │ │ │ -183 const _B_a_s_i_s &basis = object->basis(); │ │ │ │ │ -184 BasisFactory::release( &basis ); │ │ │ │ │ -185 delete object; │ │ │ │ │ -186 } │ │ │ │ │ -187 }; │ │ │ │ │ -188 │ │ │ │ │ -189} │ │ │ │ │ -190 │ │ │ │ │ -191#endif // #ifndef DUNE_L2INTERPOLATION_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ +66template │ │ │ │ │ +_6_7class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e : Base │ │ │ │ │ +68{ │ │ │ │ │ +69 │ │ │ │ │ +70 template │ │ │ │ │ +71 struct GenerateLFEVariant; │ │ │ │ │ +72 │ │ │ │ │ +73 template │ │ │ │ │ +74 struct GenerateLFEVariant...>> │ │ │ │ │ +75 { │ │ │ │ │ +76 using type = UniqueTypes_t()())...>; │ │ │ │ │ +77 }; │ │ │ │ │ +78 │ │ │ │ │ +79 using Base::getImplementations; │ │ │ │ │ +80 using Base::index; │ │ │ │ │ +81 using Implementations = decltype(std::declval().getImplementations()); │ │ │ │ │ +82 │ │ │ │ │ +83public: │ │ │ │ │ +84 │ │ │ │ │ +_9_2 using _F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e = typename GenerateLFEVariant:: │ │ │ │ │ +type; │ │ │ │ │ +93 │ │ │ │ │ +98 template │ │ │ │ │ +_9_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(Args&&... args) : │ │ │ │ │ +100 Base(std::forward(args)...) │ │ │ │ │ +101 { │ │ │ │ │ +102 Dune::Hybrid::forEach(getImplementations(), [&,this](auto feImpl) { │ │ │ │ │ +103 auto implIndex = feImpl.first; │ │ │ │ │ +104 if (cache_.size() < implIndex+1) │ │ │ │ │ +105 cache_.resize(implIndex+1); │ │ │ │ │ +106 cache_[implIndex] = feImpl.second(); │ │ │ │ │ +107 }); │ │ │ │ │ +108 } │ │ │ │ │ +109 │ │ │ │ │ +_1_1_1 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& other) │ │ │ │ │ += default; │ │ │ │ │ +112 │ │ │ │ │ +_1_1_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e&& other) = │ │ │ │ │ +default; │ │ │ │ │ +115 │ │ │ │ │ +_1_1_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& _o_p_e_r_a_t_o_r_=_ (const │ │ │ │ │ +_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& other) = default; │ │ │ │ │ +118 │ │ │ │ │ +_1_2_0 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e& _o_p_e_r_a_t_o_r_=_ (_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e&& │ │ │ │ │ +other) = default; │ │ │ │ │ +121 │ │ │ │ │ +126 template │ │ │ │ │ +_1_2_7 const auto& _g_e_t(const Key&... key) const │ │ │ │ │ +128 { │ │ │ │ │ +129 auto implIndex = index(key...); │ │ │ │ │ +130 if (implIndex >= cache_.size()) │ │ │ │ │ +131 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the │ │ │ │ │ +requested type."); │ │ │ │ │ +132 if (not(cache_[implIndex])) │ │ │ │ │ +133 DUNE_THROW(Dune::RangeError,"There is no LocalFiniteElement of the │ │ │ │ │ +requested type."); │ │ │ │ │ +134 return cache_[implIndex]; │ │ │ │ │ +135 } │ │ │ │ │ +136 │ │ │ │ │ +137private: │ │ │ │ │ +138 std::vector cache_; │ │ │ │ │ +139}; │ │ │ │ │ +140 │ │ │ │ │ +141 │ │ │ │ │ +142 │ │ │ │ │ +143} // namespace Dune │ │ │ │ │ +144 │ │ │ │ │ +145 │ │ │ │ │ +146 │ │ │ │ │ +147 │ │ │ │ │ +148#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_v_a_r_i_a_n_t_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -A local L2 interpolation taking a test basis and a quadrature rule. │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e │ │ │ │ │ -LocalL2InterpolationBase(const Basis &basis, const Quadrature &quadrature) │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:82 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_b_a_s_i_s │ │ │ │ │ -const Basis & basis() const │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:71 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_q_u_a_d_r_a_t_u_r_e__ │ │ │ │ │ -const Quadrature & quadrature_ │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const Function &function, std::vector< DofField > │ │ │ │ │ -&coefficients) const │ │ │ │ │ -Interpolate a function that implements Range operator()(Domain) │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_b_a_s_i_s__ │ │ │ │ │ -const Basis & basis_ │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:87 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_q_u_a_d_r_a_t_u_r_e │ │ │ │ │ -const Quadrature & quadrature() const │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_Q_u_a_d_r_a_t_u_r_e │ │ │ │ │ -Q Quadrature │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_B_a_s_e_:_:_B_a_s_i_s │ │ │ │ │ -B Basis │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _t_r_u_e_ _>_:_:_B_a_s_e │ │ │ │ │ -LocalL2InterpolationBase< B, Q > Base │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:95 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _>_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const Function &function, std::vector< DofField > │ │ │ │ │ -&coefficients) const │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:115 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_,_ _Q_,_ _f_a_l_s_e_ _>_:_:_B_a_s_e │ │ │ │ │ -LocalL2InterpolationBase< B, Q > Base │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:109 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -A factory class for the local l2 interpolations taking a basis factory. │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:163 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:164 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:181 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_B_a_s_i_s │ │ │ │ │ -BasisFactory::Object Basis │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:166 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_F_i_e_l_d │ │ │ │ │ -double Field │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:167 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_Q_u_a_d_r_a_t_u_r_e_P_r_o_v_i_d_e_r │ │ │ │ │ -QuadratureRules< Field, dimension > QuadratureProvider │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:169 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_Q_u_a_d_r_a_t_u_r_e │ │ │ │ │ -QuadratureRule< Field, dimension > Quadrature │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:168 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:174 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -BasisFactory::Key Key │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:165 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const LocalInterpolation Object │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:171 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_2_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -LocalL2Interpolation< Basis, Quadrature, onb > LocalInterpolation │ │ │ │ │ -DDeeffiinniittiioonn l2interpolation.hh:170 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +A cache storing a compile time selection of local finite element │ │ │ │ │ +implementations. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:68 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +LocalFiniteElementVariantCache & operator=(const LocalFiniteElementVariantCache │ │ │ │ │ +&other)=default │ │ │ │ │ +Copy assignment. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +LocalFiniteElementVariantCache(Args &&... args) │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:99 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +LocalFiniteElementVariantCache(LocalFiniteElementVariantCache &&other)=default │ │ │ │ │ +Move constructor. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_g_e_t │ │ │ │ │ +const auto & get(const Key &... key) const │ │ │ │ │ +Get the LocalFiniteElement for the given key data. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e │ │ │ │ │ +LocalFiniteElementVariantCache(const LocalFiniteElementVariantCache │ │ │ │ │ +&other)=default │ │ │ │ │ +Copy constructor. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_C_a_c_h_e_:_:_F_i_n_i_t_e_E_l_e_m_e_n_t_T_y_p_e │ │ │ │ │ +typename GenerateLFEVariant< Implementations >::type FiniteElementType │ │ │ │ │ +Type of exported LocalFiniteElement's. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariantcache.hh:92 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lfematrix.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementvariant.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,47 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ -Namespaces | │ │ │ │ -Functions
│ │ │ │ -
lfematrix.hh File Reference
│ │ │ │ +Namespaces
│ │ │ │ +
localfiniteelementvariant.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <cassert>
│ │ │ │ -#include <vector>
│ │ │ │ -#include "field.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <type_traits>
│ │ │ │ +#include <variant>
│ │ │ │ +#include <dune/common/typeutilities.hh>
│ │ │ │ +#include <dune/common/std/type_traits.hh>
│ │ │ │ +#include <dune/common/overloadset.hh>
│ │ │ │ +#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LFEMatrix< F >
class  Dune::LocalFiniteElementVariant< Implementations >
 Type erasure class for wrapping LocalFiniteElement classes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Functions

template<class Field >
std::ostream & Dune::operator<< (std::ostream &out, const LFEMatrix< Field > &mat)
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,29 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s | _F_u_n_c_t_i_o_n_s │ │ │ │ │ -lfematrix.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include "_f_i_e_l_d_._h_h" │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +localfiniteelementvariant.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_<_ _F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_<_ _I_m_p_l_e_m_e_n_t_a_t_i_o_n_s_ _> │ │ │ │ │ +  Type erasure class for wrapping LocalFiniteElement classes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -FFuunnccttiioonnss │ │ │ │ │ -template │ │ │ │ │ -std::ostream &  _D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< (std::ostream &out, const _L_F_E_M_a_t_r_i_x< Field > │ │ │ │ │ - &mat) │ │ │ │ │ -  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00515_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: lfematrix.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementvariant.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,228 +70,387 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lfematrix.hh
│ │ │ │ +
localfiniteelementvariant.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │
7
│ │ │ │ -
8#include <cassert>
│ │ │ │ -
9#include <vector>
│ │ │ │ -
10
│ │ │ │ -
11#include "field.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <type_traits>
│ │ │ │ +
10#include <variant>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/typeutilities.hh>
│ │ │ │ +
13#include <dune/common/std/type_traits.hh>
│ │ │ │ +
14#include <dune/common/overloadset.hh>
│ │ │ │
15
│ │ │ │ -
16 template< class F >
│ │ │ │ -
│ │ │ │ -
17 class [[deprecated("The usage of LFEMatrix is discouraged. Use DynamicMatrix instead")]] LFEMatrix
│ │ │ │ -
18 {
│ │ │ │ -
19 typedef std::vector< F > Row;
│ │ │ │ -
20 typedef std::vector<Row> RealMatrix;
│ │ │ │ +
16#include <dune/geometry/type.hh>
│ │ │ │ +
17
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
21
│ │ │ │ -
22 public:
│ │ │ │ -
23 typedef F Field;
│ │ │ │ +
22
│ │ │ │ +
23namespace Dune {
│ │ │ │
24
│ │ │ │ -
│ │ │ │ -
25 operator const RealMatrix & () const
│ │ │ │ -
26 {
│ │ │ │ -
27 return matrix_;
│ │ │ │ -
28 }
│ │ │ │ -
│ │ │ │ -
29
│ │ │ │ -
│ │ │ │ -
30 operator RealMatrix & ()
│ │ │ │ -
31 {
│ │ │ │ -
32 return matrix_;
│ │ │ │ -
33 }
│ │ │ │ -
│ │ │ │ -
34
│ │ │ │ -
35 template <class Vector>
│ │ │ │ -
│ │ │ │ -
36 void row( const unsigned int row, Vector &vec ) const
│ │ │ │ -
37 {
│ │ │ │ -
38 assert(row<rows());
│ │ │ │ -
39 for (int i=0; i<cols(); ++i)
│ │ │ │ -
40 field_cast(matrix_[row][i], vec[i]);
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ +
25namespace Impl {
│ │ │ │ +
26
│ │ │ │ +
27 // Helper for visiting a variant containing monostate.
│ │ │ │ +
28 // Since a generic lambda will in most cases not compile
│ │ │ │ +
29 // for monostate, we add special empty overloads for monostate.
│ │ │ │ +
30 // Hence visitIf will simply do nothing in the case of a
│ │ │ │ +
31 // monostate value.
│ │ │ │ +
32 template<class Visitor, class Variant>
│ │ │ │ +
33 void visitIf(Visitor&& visitor, Variant&& variant)
│ │ │ │ +
34 {
│ │ │ │ +
35 auto visitorWithFallback = overload([&](std::monostate&) {}, [&](const std::monostate&) {}, visitor);
│ │ │ │ +
36 std::visit(visitorWithFallback, variant);
│ │ │ │ +
37 }
│ │ │ │ +
38
│ │ │ │ +
39 template<class... Implementations>
│ │ │ │ +
40 class LocalBasisVariant
│ │ │ │ +
41 {
│ │ │ │
42
│ │ │ │ -
│ │ │ │ -
43 const Field &operator() ( const unsigned int row, const unsigned int col ) const
│ │ │ │ -
44 {
│ │ │ │ -
45 assert(row<rows());
│ │ │ │ -
46 assert(col<cols());
│ │ │ │ -
47 return matrix_[ row ][ col ];
│ │ │ │ -
48 }
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
│ │ │ │ -
50 Field &operator() ( const unsigned int row, const unsigned int col )
│ │ │ │ -
51 {
│ │ │ │ -
52 assert(row<rows());
│ │ │ │ -
53 assert(col<cols());
│ │ │ │ -
54 return matrix_[ row ][ col ];
│ │ │ │ -
55 }
│ │ │ │ -
│ │ │ │ -
56
│ │ │ │ -
│ │ │ │ -
57 unsigned int rows () const
│ │ │ │ -
58 {
│ │ │ │ -
59 return rows_;
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
62 unsigned int cols () const
│ │ │ │ -
63 {
│ │ │ │ -
64 return cols_;
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
│ │ │ │ -
67 const Field *rowPtr ( const unsigned int row ) const
│ │ │ │ -
68 {
│ │ │ │ -
69 assert(row<rows());
│ │ │ │ -
70 return &(matrix_[row][0]);
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
│ │ │ │ -
73 Field *rowPtr ( const unsigned int row )
│ │ │ │ -
74 {
│ │ │ │ -
75 assert(row<rows());
│ │ │ │ -
76 return &(matrix_[row][0]);
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
│ │ │ │ -
79 void resize ( const unsigned int rows, const unsigned int cols )
│ │ │ │ -
80 {
│ │ │ │ -
81 matrix_.resize(rows);
│ │ │ │ -
82 for (unsigned int i=0; i<rows; ++i)
│ │ │ │ -
83 matrix_[i].resize(cols);
│ │ │ │ -
84 rows_ = rows;
│ │ │ │ -
85 cols_ = cols;
│ │ │ │ -
86 }
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
│ │ │ │ -
88 bool invert ()
│ │ │ │ -
89 {
│ │ │ │ -
90 using std::abs;
│ │ │ │ -
91 assert( rows() == cols() );
│ │ │ │ -
92 std::vector<unsigned int> p(rows());
│ │ │ │ -
93 for (unsigned int j=0; j<rows(); ++j)
│ │ │ │ -
94 p[j] = j;
│ │ │ │ -
95 for (unsigned int j=0; j<rows(); ++j)
│ │ │ │ -
96 {
│ │ │ │ -
97 // pivot search
│ │ │ │ -
98 unsigned int r = j;
│ │ │ │ -
99 Field max = abs( (*this)(j,j) );
│ │ │ │ -
100 for (unsigned int i=j+1; i<rows(); ++i)
│ │ │ │ -
101 {
│ │ │ │ -
102 if ( abs( (*this)(i,j) ) > max )
│ │ │ │ -
103 {
│ │ │ │ -
104 max = abs( (*this)(i,j) );
│ │ │ │ -
105 r = i;
│ │ │ │ -
106 }
│ │ │ │ -
107 }
│ │ │ │ -
108 if (max == Zero<Field>())
│ │ │ │ -
109 return false;
│ │ │ │ -
110 // row swap
│ │ │ │ -
111 if (r > j)
│ │ │ │ -
112 {
│ │ │ │ -
113 for (unsigned int k=0; k<cols(); ++k)
│ │ │ │ -
114 std::swap( (*this)(j,k), (*this)(r,k) );
│ │ │ │ -
115 std::swap( p[j], p[r] );
│ │ │ │ -
116 }
│ │ │ │ -
117 // transformation
│ │ │ │ -
118 Field hr = Unity<Field>()/(*this)(j,j);
│ │ │ │ -
119 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ -
120 (*this)(i,j) *= hr;
│ │ │ │ -
121 (*this)(j,j) = hr;
│ │ │ │ -
122 for (unsigned int k=0; k<cols(); ++k)
│ │ │ │ -
123 {
│ │ │ │ -
124 if (k==j) continue;
│ │ │ │ -
125 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ -
126 {
│ │ │ │ -
127 if (i==j) continue;
│ │ │ │ -
128 (*this)(i,k) -= (*this)(i,j)*(*this)(j,k);
│ │ │ │ -
129 }
│ │ │ │ -
130 (*this)(j,k) *= -hr;
│ │ │ │ -
131 }
│ │ │ │ -
132 }
│ │ │ │ -
133 // column exchange
│ │ │ │ -
134 Row hv(rows());
│ │ │ │ -
135 for (unsigned int i=0; i<rows(); ++i)
│ │ │ │ -
136 {
│ │ │ │ -
137 for (unsigned int k=0; k<rows(); ++k)
│ │ │ │ -
138 hv[ p[k] ] = (*this)(i,k);
│ │ │ │ -
139 for (unsigned int k=0; k<rows(); ++k)
│ │ │ │ -
140 (*this)(i,k) = hv[k];
│ │ │ │ -
141 }
│ │ │ │ -
142 return true;
│ │ │ │ -
143 }
│ │ │ │ -
│ │ │ │ +
43 template<class I0, class... II>
│ │ │ │ +
44 struct FirstType
│ │ │ │ +
45 { using type = I0; };
│ │ │ │ +
46
│ │ │ │ +
47 using FirstImpTraits = typename FirstType<Implementations...>::type::Traits;
│ │ │ │ +
48
│ │ │ │ +
49 public:
│ │ │ │ +
50
│ │ │ │ +
51 // We do not simply copy Implementation::LocalBasisTraits because this
│ │ │ │ +
52 // may be implementation specific. To stay clean, we simply put all its
│ │ │ │ +
53 // data into the default LocalBasisTraits.
│ │ │ │ +
54 using Traits = typename Dune::LocalBasisTraits<
│ │ │ │ +
55 typename FirstImpTraits::DomainFieldType,
│ │ │ │ +
56 FirstImpTraits::dimDomain,
│ │ │ │ +
57 typename FirstImpTraits::DomainType,
│ │ │ │ +
58 typename FirstImpTraits::RangeFieldType,
│ │ │ │ +
59 FirstImpTraits::dimRange,
│ │ │ │ +
60 typename FirstImpTraits::RangeType,
│ │ │ │ +
61 typename FirstImpTraits::JacobianType>;
│ │ │ │ +
62
│ │ │ │ +
63 template<class Implementation>
│ │ │ │ +
64 LocalBasisVariant(const Implementation& impl) :
│ │ │ │ +
65 impl_(&impl),
│ │ │ │ +
66 size_(impl.size()),
│ │ │ │ +
67 order_(impl.order())
│ │ │ │ +
68 {}
│ │ │ │ +
69
│ │ │ │ +
70 LocalBasisVariant() = default;
│ │ │ │ +
71 LocalBasisVariant(const LocalBasisVariant& other) = default;
│ │ │ │ +
72 LocalBasisVariant(LocalBasisVariant&& other) = default;
│ │ │ │ +
73 LocalBasisVariant& operator=(const LocalBasisVariant& other) = default;
│ │ │ │ +
74 LocalBasisVariant& operator=(LocalBasisVariant&& other) = default;
│ │ │ │ +
75
│ │ │ │ +
79 unsigned int size() const
│ │ │ │ +
80 {
│ │ │ │ +
81 return size_;
│ │ │ │ +
82 }
│ │ │ │ +
83
│ │ │ │ +
87 unsigned int order() const
│ │ │ │ +
88 {
│ │ │ │ +
89 return order_;
│ │ │ │ +
90 }
│ │ │ │ +
91
│ │ │ │ +
95 inline void evaluateFunction(
│ │ │ │ +
96 const typename Traits::DomainType& x,
│ │ │ │ +
97 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
98 {
│ │ │ │ +
99 Impl::visitIf([&](const auto* impl) { impl->evaluateFunction(x, out); }, impl_);
│ │ │ │ +
100 }
│ │ │ │ +
101
│ │ │ │ +
105 inline void evaluateJacobian(
│ │ │ │ +
106 const typename Traits::DomainType& x,
│ │ │ │ +
107 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
108 {
│ │ │ │ +
109 Impl::visitIf([&](const auto* impl) { impl->evaluateJacobian(x, out); }, impl_);
│ │ │ │ +
110 }
│ │ │ │ +
111
│ │ │ │ +
119 void partial(
│ │ │ │ +
120 const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ +
121 const typename Traits::DomainType& x,
│ │ │ │ +
122 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
123 {
│ │ │ │ +
124 Impl::visitIf([&](const auto* impl) { impl->partial(order, x, out); }, impl_);
│ │ │ │ +
125 }
│ │ │ │ +
126
│ │ │ │ +
127 private:
│ │ │ │ +
128 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ +
129 std::size_t size_;
│ │ │ │ +
130 std::size_t order_;
│ │ │ │ +
131 };
│ │ │ │ +
132
│ │ │ │ +
133
│ │ │ │ +
134 template<class... Implementations>
│ │ │ │ +
135 class LocalCoefficientsVariant
│ │ │ │ +
136 {
│ │ │ │ +
137 public:
│ │ │ │ +
138
│ │ │ │ +
139 template<class Implementation>
│ │ │ │ +
140 LocalCoefficientsVariant(const Implementation& impl) :
│ │ │ │ +
141 impl_(&impl),
│ │ │ │ +
142 size_(impl.size())
│ │ │ │ +
143 {}
│ │ │ │
144
│ │ │ │ -
145 private:
│ │ │ │ -
146 RealMatrix matrix_;
│ │ │ │ -
147 unsigned int cols_,rows_;
│ │ │ │ -
148 };
│ │ │ │ -
│ │ │ │ -
149
│ │ │ │ -
150 template< class Field >
│ │ │ │ -
│ │ │ │ -
151 inline std::ostream &operator<<(std::ostream &out, const LFEMatrix<Field> &mat)
│ │ │ │ -
152 {
│ │ │ │ -
153 for (unsigned int r=0; r<mat.rows(); ++r)
│ │ │ │ -
154 {
│ │ │ │ -
155 out << field_cast<double>(mat(r,0));
│ │ │ │ -
156 for (unsigned int c=1; c<mat.cols(); ++c)
│ │ │ │ -
157 {
│ │ │ │ -
158 out << " , " << field_cast<double>(mat(r,c));
│ │ │ │ -
159 }
│ │ │ │ -
160 out << std::endl;
│ │ │ │ -
161 }
│ │ │ │ -
162 return out;
│ │ │ │ -
163 }
│ │ │ │ -
│ │ │ │ -
164}
│ │ │ │ -
165
│ │ │ │ -
166#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH
│ │ │ │ - │ │ │ │ +
145 LocalCoefficientsVariant() = default;
│ │ │ │ +
146 LocalCoefficientsVariant(const LocalCoefficientsVariant& other) = default;
│ │ │ │ +
147 LocalCoefficientsVariant(LocalCoefficientsVariant&& other) = default;
│ │ │ │ +
148 LocalCoefficientsVariant& operator=(const LocalCoefficientsVariant& other) = default;
│ │ │ │ +
149 LocalCoefficientsVariant& operator=(LocalCoefficientsVariant&& other) = default;
│ │ │ │ +
150
│ │ │ │ +
154 unsigned int size() const
│ │ │ │ +
155 {
│ │ │ │ +
156 return size_;
│ │ │ │ +
157 }
│ │ │ │ +
158
│ │ │ │ +
159 const Dune::LocalKey& localKey (std::size_t i) const
│ │ │ │ +
160 {
│ │ │ │ +
161 // We can't use visitIf since we have to return something
│ │ │ │ +
162 // even for a monostate value. Since the return type is
│ │ │ │ +
163 // an l-value reference, we use a default constructed
│ │ │ │ +
164 // dummy LocalKey value.
│ │ │ │ +
165 static const Dune::LocalKey dummyLocalKey;
│ │ │ │ +
166 return std::visit(overload(
│ │ │ │ +
167 [&](const std::monostate&) -> decltype(auto) { return (dummyLocalKey);},
│ │ │ │ +
168 [&](const auto* impl) -> decltype(auto) { return impl->localKey(i); }), impl_);
│ │ │ │ +
169 }
│ │ │ │ +
170
│ │ │ │ +
171 private:
│ │ │ │ +
172 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ +
173 std::size_t size_;
│ │ │ │ +
174 };
│ │ │ │ +
175
│ │ │ │ +
176
│ │ │ │ +
177 template<class... Implementations>
│ │ │ │ +
178 class LocalInterpolationVariant
│ │ │ │ +
179 {
│ │ │ │ +
180 public:
│ │ │ │ +
181
│ │ │ │ +
182 template<class Implementation>
│ │ │ │ +
183 LocalInterpolationVariant(const Implementation& impl) :
│ │ │ │ +
184 impl_(&impl)
│ │ │ │ +
185 {}
│ │ │ │ +
186
│ │ │ │ +
187 LocalInterpolationVariant() = default;
│ │ │ │ +
188 LocalInterpolationVariant(const LocalInterpolationVariant& other) = default;
│ │ │ │ +
189 LocalInterpolationVariant(LocalInterpolationVariant&& other) = default;
│ │ │ │ +
190 LocalInterpolationVariant& operator=(const LocalInterpolationVariant& other) = default;
│ │ │ │ +
191 LocalInterpolationVariant& operator=(LocalInterpolationVariant&& other) = default;
│ │ │ │ +
192
│ │ │ │ +
193 template<typename F, typename C>
│ │ │ │ +
194 void interpolate (const F& ff, std::vector<C>& out) const
│ │ │ │ +
195 {
│ │ │ │ +
196 Impl::visitIf([&](const auto* impl) { impl->interpolate(ff, out); }, impl_);
│ │ │ │ +
197 }
│ │ │ │ +
198
│ │ │ │ +
199 private:
│ │ │ │ +
200 std::variant<std::monostate, const Implementations*...> impl_;
│ │ │ │ +
201 };
│ │ │ │ +
202
│ │ │ │ +
203} // namespace Impl
│ │ │ │ +
204
│ │ │ │ +
205
│ │ │ │ +
234 template<class... Implementations>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
236 {
│ │ │ │ +
237
│ │ │ │ +
238 // In each LocalFooVariant we store a std::variant<std::monostate, const FooImpl*...>, i.e. a std::variant
│ │ │ │ +
239 // with the pointer to the Foo implementation unless LocalFiniteElementVariant stores a monostate. In this
│ │ │ │ +
240 // case each LocalFooVariant also stores a monostate (and not a monostate*).
│ │ │ │ +
241 using LocalBasis = Impl::LocalBasisVariant<typename Implementations::Traits::LocalBasisType...>;
│ │ │ │ +
242 using LocalCoefficients = Impl::LocalCoefficientsVariant<typename Implementations::Traits::LocalCoefficientsType...>;
│ │ │ │ +
243 using LocalInterpolation = Impl::LocalInterpolationVariant<typename Implementations::Traits::LocalInterpolationType...>;
│ │ │ │ +
244
│ │ │ │ +
245 // Update members after changing impl_
│ │ │ │ +
246 void updateMembers()
│ │ │ │ +
247 {
│ │ │ │ +
248 std::visit(overload(
│ │ │ │ +
249 [&](std::monostate&) {
│ │ │ │ +
250 localBasis_ = LocalBasis();
│ │ │ │ +
251 localCoefficients_ = LocalCoefficients();
│ │ │ │ +
252 localInterpolation_ = LocalInterpolation();
│ │ │ │ +
253 size_ = 0;
│ │ │ │ +
254 geometryType_ = GeometryType{};
│ │ │ │ +
255 }, [&](auto&& impl) {
│ │ │ │ +
256 localBasis_ = LocalBasis(impl.localBasis());
│ │ │ │ +
257 localCoefficients_ = LocalCoefficients(impl.localCoefficients());
│ │ │ │ +
258 localInterpolation_ = LocalInterpolation(impl.localInterpolation());
│ │ │ │ +
259 size_ = impl.size();
│ │ │ │ +
260 geometryType_ = impl.type();
│ │ │ │ +
261 }), impl_);
│ │ │ │ +
262 }
│ │ │ │ +
263
│ │ │ │ +
264 public:
│ │ │ │ +
265
│ │ │ │ + │ │ │ │ +
270
│ │ │ │ + │ │ │ │ +
275
│ │ │ │ +
│ │ │ │ +
279 LocalFiniteElementVariant(const std::monostate& monostate)
│ │ │ │ +
280 {}
│ │ │ │ +
│ │ │ │ +
281
│ │ │ │ +
288 template<class Implementation,
│ │ │ │ +
289 std::enable_if_t<std::disjunction<std::is_same<std::decay_t<Implementation>, Implementations>...>::value, int> = 0>
│ │ │ │ +
│ │ │ │ +
290 LocalFiniteElementVariant(Implementation&& impl) :
│ │ │ │ +
291 impl_(std::forward<Implementation>(impl))
│ │ │ │ +
292 {
│ │ │ │ +
293 updateMembers();
│ │ │ │ +
294 }
│ │ │ │ +
│ │ │ │ +
295
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
300 impl_(other.impl_)
│ │ │ │ +
301 {
│ │ │ │ +
302 updateMembers();
│ │ │ │ +
303 }
│ │ │ │ +
│ │ │ │ +
304
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
309 impl_(std::move(other.impl_))
│ │ │ │ +
310 {
│ │ │ │ +
311 updateMembers();
│ │ │ │ +
312 }
│ │ │ │ +
│ │ │ │ +
313
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
318 {
│ │ │ │ +
319 impl_ = other.impl_;
│ │ │ │ +
320 updateMembers();
│ │ │ │ +
321 return *this;
│ │ │ │ +
322 }
│ │ │ │ +
│ │ │ │ +
323
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
328 {
│ │ │ │ +
329 impl_ = std::move(other.impl_);
│ │ │ │ +
330 updateMembers();
│ │ │ │ +
331 return *this;
│ │ │ │ +
332 }
│ │ │ │ +
│ │ │ │ +
333
│ │ │ │ +
337 template<class Implementation,
│ │ │ │ +
338 std::enable_if_t<std::disjunction<std::is_same<std::decay_t<Implementation>, Implementations>...>::value, int> = 0>
│ │ │ │ +
│ │ │ │ +
339 LocalFiniteElementVariant& operator=(Implementation&& impl)
│ │ │ │ +
340 {
│ │ │ │ +
341 impl_ = std::forward<Implementation>(impl);
│ │ │ │ +
342 updateMembers();
│ │ │ │ +
343 return *this;
│ │ │ │ +
344 }
│ │ │ │ +
│ │ │ │ +
345
│ │ │ │ +
346
│ │ │ │ +
│ │ │ │ +
350 const typename Traits::LocalBasisType& localBasis() const
│ │ │ │ +
351 {
│ │ │ │ +
352 return localBasis_;
│ │ │ │ +
353 }
│ │ │ │ +
│ │ │ │ +
354
│ │ │ │ +
│ │ │ │ +
358 const typename Traits::LocalCoefficientsType& localCoefficients() const
│ │ │ │ +
359 {
│ │ │ │ +
360 return localCoefficients_;
│ │ │ │ +
361 }
│ │ │ │ +
│ │ │ │ +
362
│ │ │ │ +
│ │ │ │ +
366 const typename Traits::LocalInterpolationType& localInterpolation() const
│ │ │ │ +
367 {
│ │ │ │ +
368 return localInterpolation_;
│ │ │ │ +
369 }
│ │ │ │ +
│ │ │ │ +
370
│ │ │ │ +
│ │ │ │ +
374 unsigned int size() const
│ │ │ │ +
375 {
│ │ │ │ +
376 return size_;
│ │ │ │ +
377 }
│ │ │ │ +
│ │ │ │ +
378
│ │ │ │ +
│ │ │ │ +
382 constexpr GeometryType type() const
│ │ │ │ +
383 {
│ │ │ │ +
384 return geometryType_;
│ │ │ │ +
385 }
│ │ │ │ +
│ │ │ │ +
386
│ │ │ │ +
│ │ │ │ +
398 const auto& variant() const
│ │ │ │ +
399 {
│ │ │ │ +
400 return impl_;
│ │ │ │ +
401 }
│ │ │ │ +
│ │ │ │ +
402
│ │ │ │ +
│ │ │ │ +
408 operator bool () const
│ │ │ │ +
409 {
│ │ │ │ +
410 return not(std::holds_alternative<std::monostate>(variant()));
│ │ │ │ +
411 }
│ │ │ │ +
│ │ │ │ +
412
│ │ │ │ +
413 private:
│ │ │ │ +
414 std::variant<std::monostate, Implementations...> impl_;
│ │ │ │ +
415 std::size_t size_;
│ │ │ │ +
416 GeometryType geometryType_;
│ │ │ │ +
417 LocalBasis localBasis_;
│ │ │ │ +
418 LocalCoefficients localCoefficients_;
│ │ │ │ +
419 LocalInterpolation localInterpolation_;
│ │ │ │ +
420 };
│ │ │ │ +
│ │ │ │ +
421
│ │ │ │ +
422} // end namespace Dune
│ │ │ │ +
423
│ │ │ │ +
424#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat)
Definition lfematrix.hh:151
│ │ │ │ -
A class representing the unit of a given Field.
Definition field.hh:30
│ │ │ │ -
A class representing the zero of a given Field.
Definition field.hh:79
│ │ │ │ -
Definition lfematrix.hh:18
│ │ │ │ -
Field * rowPtr(const unsigned int row)
Definition lfematrix.hh:73
│ │ │ │ -
unsigned int cols() const
Definition lfematrix.hh:62
│ │ │ │ -
const Field * rowPtr(const unsigned int row) const
Definition lfematrix.hh:67
│ │ │ │ -
void resize(const unsigned int rows, const unsigned int cols)
Definition lfematrix.hh:79
│ │ │ │ -
void row(const unsigned int row, Vector &vec) const
Definition lfematrix.hh:36
│ │ │ │ -
unsigned int rows() const
Definition lfematrix.hh:57
│ │ │ │ -
bool invert()
Definition lfematrix.hh:88
│ │ │ │ -
F Field
Definition lfematrix.hh:23
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
Type erasure class for wrapping LocalFiniteElement classes.
Definition localfiniteelementvariant.hh:236
│ │ │ │ +
typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation > Traits
Export LocalFiniteElementTraits.
Definition localfiniteelementvariant.hh:269
│ │ │ │ +
const auto & variant() const
Provide access to underlying std::variant.
Definition localfiniteelementvariant.hh:398
│ │ │ │ +
unsigned int size() const
Number of shape functions.
Definition localfiniteelementvariant.hh:374
│ │ │ │ +
constexpr GeometryType type() const
Number of shape functions.
Definition localfiniteelementvariant.hh:382
│ │ │ │ +
LocalFiniteElementVariant(LocalFiniteElementVariant &&other)
Move constructor.
Definition localfiniteelementvariant.hh:308
│ │ │ │ +
LocalFiniteElementVariant & operator=(Implementation &&impl)
Assignment from implementation.
Definition localfiniteelementvariant.hh:339
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Provide access to LocalBasis implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:350
│ │ │ │ +
LocalFiniteElementVariant & operator=(const LocalFiniteElementVariant &other)
Copy assignment.
Definition localfiniteelementvariant.hh:317
│ │ │ │ +
LocalFiniteElementVariant(const std::monostate &monostate)
Construct empty LocalFiniteElementVariant.
Definition localfiniteelementvariant.hh:279
│ │ │ │ +
LocalFiniteElementVariant(const LocalFiniteElementVariant &other)
Copy constructor.
Definition localfiniteelementvariant.hh:299
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Provide access to LocalCoefficients implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:358
│ │ │ │ +
LocalFiniteElementVariant(Implementation &&impl)
Construct LocalFiniteElementVariant.
Definition localfiniteelementvariant.hh:290
│ │ │ │ +
LocalFiniteElementVariant & operator=(LocalFiniteElementVariant &&other)
Move assignment.
Definition localfiniteelementvariant.hh:327
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Provide access to LocalInterpolation implementation of this LocalFiniteElement.
Definition localfiniteelementvariant.hh:366
│ │ │ │ +
LocalFiniteElementVariant()=default
Construct empty LocalFiniteElementVariant.
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,223 +1,423 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _u_t_i_l_i_t_y │ │ │ │ │ -lfematrix.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +localfiniteelementvariant.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10 │ │ │ │ │ -11#include "_f_i_e_l_d_._h_h" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ 15 │ │ │ │ │ -16 template< class F > │ │ │ │ │ -_1_7 class [[deprecated("The usage of LFEMatrix is discouraged. Use DynamicMatrix │ │ │ │ │ -instead")]] _L_F_E_M_a_t_r_i_x │ │ │ │ │ -18 { │ │ │ │ │ -19 typedef std::vector< F > Row; │ │ │ │ │ -20 typedef std::vector RealMatrix; │ │ │ │ │ +16#include │ │ │ │ │ +17 │ │ │ │ │ +18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ 21 │ │ │ │ │ -22 public: │ │ │ │ │ -_2_3 typedef F _F_i_e_l_d; │ │ │ │ │ +22 │ │ │ │ │ +23namespace _D_u_n_e { │ │ │ │ │ 24 │ │ │ │ │ -_2_5 operator const RealMatrix & () const │ │ │ │ │ -26 { │ │ │ │ │ -27 return matrix_; │ │ │ │ │ -28 } │ │ │ │ │ -29 │ │ │ │ │ -_3_0 operator RealMatrix & () │ │ │ │ │ -31 { │ │ │ │ │ -32 return matrix_; │ │ │ │ │ -33 } │ │ │ │ │ -34 │ │ │ │ │ -35 template │ │ │ │ │ -_3_6 void _r_o_w( const unsigned int row, Vector &vec ) const │ │ │ │ │ -37 { │ │ │ │ │ -38 assert(row │ │ │ │ │ +33 void visitIf(Visitor&& visitor, Variant&& variant) │ │ │ │ │ +34 { │ │ │ │ │ +35 auto visitorWithFallback = overload([&](std::monostate&) {}, [&](const std:: │ │ │ │ │ +monostate&) {}, visitor); │ │ │ │ │ +36 std::visit(visitorWithFallback, variant); │ │ │ │ │ +37 } │ │ │ │ │ +38 │ │ │ │ │ +39 template │ │ │ │ │ +40 class LocalBasisVariant │ │ │ │ │ +41 { │ │ │ │ │ 42 │ │ │ │ │ -_4_3 const _F_i_e_l_d &operator() ( const unsigned int row, const unsigned int col ) │ │ │ │ │ -const │ │ │ │ │ -44 { │ │ │ │ │ -45 assert(row │ │ │ │ │ +44 struct FirstType │ │ │ │ │ +45 { using type = I0; }; │ │ │ │ │ +46 │ │ │ │ │ +47 using FirstImpTraits = typename FirstType::type::Traits; │ │ │ │ │ +48 │ │ │ │ │ +49 public: │ │ │ │ │ +50 │ │ │ │ │ +51 // We do not simply copy Implementation::LocalBasisTraits because this │ │ │ │ │ +52 // may be implementation specific. To stay clean, we simply put all its │ │ │ │ │ +53 // data into the default LocalBasisTraits. │ │ │ │ │ +54 using Traits = typename _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s< │ │ │ │ │ +55 typename FirstImpTraits::DomainFieldType, │ │ │ │ │ +56 FirstImpTraits::dimDomain, │ │ │ │ │ +57 typename FirstImpTraits::DomainType, │ │ │ │ │ +58 typename FirstImpTraits::RangeFieldType, │ │ │ │ │ +59 FirstImpTraits::dimRange, │ │ │ │ │ +60 typename FirstImpTraits::RangeType, │ │ │ │ │ +61 typename FirstImpTraits::JacobianType>; │ │ │ │ │ +62 │ │ │ │ │ +63 template │ │ │ │ │ +64 LocalBasisVariant(const Implementation& impl) : │ │ │ │ │ +65 impl_(&impl), │ │ │ │ │ +66 size_(impl.size()), │ │ │ │ │ +67 order_(impl.order()) │ │ │ │ │ +68 {} │ │ │ │ │ +69 │ │ │ │ │ +70 LocalBasisVariant() = default; │ │ │ │ │ +71 LocalBasisVariant(const LocalBasisVariant& other) = default; │ │ │ │ │ +72 LocalBasisVariant(LocalBasisVariant&& other) = default; │ │ │ │ │ +73 LocalBasisVariant& operator=(const LocalBasisVariant& other) = default; │ │ │ │ │ +74 LocalBasisVariant& operator=(LocalBasisVariant&& other) = default; │ │ │ │ │ +75 │ │ │ │ │ +79 unsigned int size() const │ │ │ │ │ 80 { │ │ │ │ │ -81 matrix_.resize(rows); │ │ │ │ │ -82 for (unsigned int i=0; i p(rows()); │ │ │ │ │ -93 for (unsigned int j=0; j max ) │ │ │ │ │ -103 { │ │ │ │ │ -104 max = abs( (*this)(i,j) ); │ │ │ │ │ -105 r = i; │ │ │ │ │ -106 } │ │ │ │ │ -107 } │ │ │ │ │ -108 if (max == _Z_e_r_o_<_F_i_e_l_d_>()) │ │ │ │ │ -109 return false; │ │ │ │ │ -110 // row swap │ │ │ │ │ -111 if (r > j) │ │ │ │ │ -112 { │ │ │ │ │ -113 for (unsigned int k=0; k()/(*this)(j,j); │ │ │ │ │ -119 for (unsigned int i=0; i& out) const │ │ │ │ │ +98 { │ │ │ │ │ +99 Impl::visitIf([&](const auto* impl) { impl->evaluateFunction(x, out); }, │ │ │ │ │ +impl_); │ │ │ │ │ +100 } │ │ │ │ │ +101 │ │ │ │ │ +105 inline void evaluateJacobian( │ │ │ │ │ +106 const typename Traits::DomainType& x, │ │ │ │ │ +107 std::vector& out) const │ │ │ │ │ +108 { │ │ │ │ │ +109 Impl::visitIf([&](const auto* impl) { impl->evaluateJacobian(x, out); }, │ │ │ │ │ +impl_); │ │ │ │ │ +110 } │ │ │ │ │ +111 │ │ │ │ │ +119 void partial( │ │ │ │ │ +120 const std::array& order, │ │ │ │ │ +121 const typename Traits::DomainType& x, │ │ │ │ │ +122 std::vector& out) const │ │ │ │ │ 123 { │ │ │ │ │ -124 if (k==j) continue; │ │ │ │ │ -125 for (unsigned int i=0; ipartial(order, x, out); }, │ │ │ │ │ +impl_); │ │ │ │ │ +125 } │ │ │ │ │ +126 │ │ │ │ │ +127 private: │ │ │ │ │ +128 std::variant impl_; │ │ │ │ │ +129 std::size_t size_; │ │ │ │ │ +130 std::size_t order_; │ │ │ │ │ +131 }; │ │ │ │ │ +132 │ │ │ │ │ +133 │ │ │ │ │ +134 template │ │ │ │ │ +135 class LocalCoefficientsVariant │ │ │ │ │ 136 { │ │ │ │ │ -137 for (unsigned int k=0; k │ │ │ │ │ +140 LocalCoefficientsVariant(const Implementation& impl) : │ │ │ │ │ +141 impl_(&impl), │ │ │ │ │ +142 size_(impl.size()) │ │ │ │ │ +143 {} │ │ │ │ │ 144 │ │ │ │ │ -145 private: │ │ │ │ │ -146 RealMatrix matrix_; │ │ │ │ │ -147 unsigned int cols_,rows_; │ │ │ │ │ -148 }; │ │ │ │ │ -149 │ │ │ │ │ -150 template< class Field > │ │ │ │ │ -_1_5_1 inline std::ostream &_o_p_e_r_a_t_o_r_<_<(std::ostream &out, const _L_F_E_M_a_t_r_i_x_<_F_i_e_l_d_> │ │ │ │ │ -&mat) │ │ │ │ │ -152 { │ │ │ │ │ -153 for (unsigned int r=0; r(mat(r,0)); │ │ │ │ │ -156 for (unsigned int c=1; c(mat(r,c)); │ │ │ │ │ -159 } │ │ │ │ │ -160 out << std::endl; │ │ │ │ │ -161 } │ │ │ │ │ -162 return out; │ │ │ │ │ -163 } │ │ │ │ │ -164} │ │ │ │ │ -165 │ │ │ │ │ -166#endif // #ifndef DUNE_LOCALFUNCTIONS_UTILITY_LFEMATRIX_HH │ │ │ │ │ -_f_i_e_l_d_._h_h │ │ │ │ │ +145 LocalCoefficientsVariant() = default; │ │ │ │ │ +146 LocalCoefficientsVariant(const LocalCoefficientsVariant& other) = default; │ │ │ │ │ +147 LocalCoefficientsVariant(LocalCoefficientsVariant&& other) = default; │ │ │ │ │ +148 LocalCoefficientsVariant& operator=(const LocalCoefficientsVariant& other) │ │ │ │ │ += default; │ │ │ │ │ +149 LocalCoefficientsVariant& operator=(LocalCoefficientsVariant&& other) = │ │ │ │ │ +default; │ │ │ │ │ +150 │ │ │ │ │ +154 unsigned int size() const │ │ │ │ │ +155 { │ │ │ │ │ +156 return size_; │ │ │ │ │ +157 } │ │ │ │ │ +158 │ │ │ │ │ +159 const _D_u_n_e_:_:_L_o_c_a_l_K_e_y& localKey (std::size_t i) const │ │ │ │ │ +160 { │ │ │ │ │ +161 // We can't use visitIf since we have to return something │ │ │ │ │ +162 // even for a monostate value. Since the return type is │ │ │ │ │ +163 // an l-value reference, we use a default constructed │ │ │ │ │ +164 // dummy LocalKey value. │ │ │ │ │ +165 static const _D_u_n_e_:_:_L_o_c_a_l_K_e_y dummyLocalKey; │ │ │ │ │ +166 return std::visit(overload( │ │ │ │ │ +167 [&](const std::monostate&) -> decltype(auto) { return (dummyLocalKey);}, │ │ │ │ │ +168 [&](const auto* impl) -> decltype(auto) { return impl->localKey(i); }), │ │ │ │ │ +impl_); │ │ │ │ │ +169 } │ │ │ │ │ +170 │ │ │ │ │ +171 private: │ │ │ │ │ +172 std::variant impl_; │ │ │ │ │ +173 std::size_t size_; │ │ │ │ │ +174 }; │ │ │ │ │ +175 │ │ │ │ │ +176 │ │ │ │ │ +177 template │ │ │ │ │ +178 class LocalInterpolationVariant │ │ │ │ │ +179 { │ │ │ │ │ +180 public: │ │ │ │ │ +181 │ │ │ │ │ +182 template │ │ │ │ │ +183 LocalInterpolationVariant(const Implementation& impl) : │ │ │ │ │ +184 impl_(&impl) │ │ │ │ │ +185 {} │ │ │ │ │ +186 │ │ │ │ │ +187 LocalInterpolationVariant() = default; │ │ │ │ │ +188 LocalInterpolationVariant(const LocalInterpolationVariant& other) = │ │ │ │ │ +default; │ │ │ │ │ +189 LocalInterpolationVariant(LocalInterpolationVariant&& other) = default; │ │ │ │ │ +190 LocalInterpolationVariant& operator=(const LocalInterpolationVariant& │ │ │ │ │ +other) = default; │ │ │ │ │ +191 LocalInterpolationVariant& operator=(LocalInterpolationVariant&& other) = │ │ │ │ │ +default; │ │ │ │ │ +192 │ │ │ │ │ +193 template │ │ │ │ │ +194 void interpolate (const F& ff, std::vector& out) const │ │ │ │ │ +195 { │ │ │ │ │ +196 Impl::visitIf([&](const auto* impl) { impl->interpolate(ff, out); }, │ │ │ │ │ +impl_); │ │ │ │ │ +197 } │ │ │ │ │ +198 │ │ │ │ │ +199 private: │ │ │ │ │ +200 std::variant impl_; │ │ │ │ │ +201 }; │ │ │ │ │ +202 │ │ │ │ │ +203} // namespace Impl │ │ │ │ │ +204 │ │ │ │ │ +205 │ │ │ │ │ +234 template │ │ │ │ │ +_2_3_5 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +236 { │ │ │ │ │ +237 │ │ │ │ │ +238 // In each LocalFooVariant we store a std::variant, i.e. a std::variant │ │ │ │ │ +239 // with the pointer to the Foo implementation unless │ │ │ │ │ +LocalFiniteElementVariant stores a monostate. In this │ │ │ │ │ +240 // case each LocalFooVariant also stores a monostate (and not a │ │ │ │ │ +monostate*). │ │ │ │ │ +241 using LocalBasis = Impl::LocalBasisVariant; │ │ │ │ │ +242 using LocalCoefficients = Impl::LocalCoefficientsVariant; │ │ │ │ │ +243 using LocalInterpolation = Impl::LocalInterpolationVariant; │ │ │ │ │ +244 │ │ │ │ │ +245 // Update members after changing impl_ │ │ │ │ │ +246 void updateMembers() │ │ │ │ │ +247 { │ │ │ │ │ +248 std::visit(overload( │ │ │ │ │ +249 [&](std::monostate&) { │ │ │ │ │ +250 localBasis_ = LocalBasis(); │ │ │ │ │ +251 localCoefficients_ = LocalCoefficients(); │ │ │ │ │ +252 localInterpolation_ = LocalInterpolation(); │ │ │ │ │ +253 size_ = 0; │ │ │ │ │ +254 geometryType_ = GeometryType{}; │ │ │ │ │ +255 }, [&](auto&& impl) { │ │ │ │ │ +256 localBasis_ = LocalBasis(impl.localBasis()); │ │ │ │ │ +257 localCoefficients_ = LocalCoefficients(impl.localCoefficients()); │ │ │ │ │ +258 localInterpolation_ = LocalInterpolation(impl.localInterpolation()); │ │ │ │ │ +259 size_ = impl.size(); │ │ │ │ │ +260 geometryType_ = impl.type(); │ │ │ │ │ +261 }), impl_); │ │ │ │ │ +262 } │ │ │ │ │ +263 │ │ │ │ │ +264 public: │ │ │ │ │ +265 │ │ │ │ │ +_2_6_9 using _T_r_a_i_t_s = typename _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_, │ │ │ │ │ +_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_,_ _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_>; │ │ │ │ │ +270 │ │ │ │ │ +_2_7_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t() = default; │ │ │ │ │ +275 │ │ │ │ │ +_2_7_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(const std::monostate& monostate) │ │ │ │ │ +280 {} │ │ │ │ │ +281 │ │ │ │ │ +288 template, Implementations>...>::value, int> = 0> │ │ │ │ │ +_2_9_0 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(Implementation&& impl) : │ │ │ │ │ +291 impl_(std::forward(impl)) │ │ │ │ │ +292 { │ │ │ │ │ +293 updateMembers(); │ │ │ │ │ +294 } │ │ │ │ │ +295 │ │ │ │ │ +_2_9_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& other) : │ │ │ │ │ +300 impl_(other.impl_) │ │ │ │ │ +301 { │ │ │ │ │ +302 updateMembers(); │ │ │ │ │ +303 } │ │ │ │ │ +304 │ │ │ │ │ +_3_0_8 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t&& other) : │ │ │ │ │ +309 impl_(std::move(other.impl_)) │ │ │ │ │ +310 { │ │ │ │ │ +311 updateMembers(); │ │ │ │ │ +312 } │ │ │ │ │ +313 │ │ │ │ │ +_3_1_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& │ │ │ │ │ +other) │ │ │ │ │ +318 { │ │ │ │ │ +319 impl_ = other.impl_; │ │ │ │ │ +320 updateMembers(); │ │ │ │ │ +321 return *this; │ │ │ │ │ +322 } │ │ │ │ │ +323 │ │ │ │ │ +_3_2_7 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t&& other) │ │ │ │ │ +328 { │ │ │ │ │ +329 impl_ = std::move(other.impl_); │ │ │ │ │ +330 updateMembers(); │ │ │ │ │ +331 return *this; │ │ │ │ │ +332 } │ │ │ │ │ +333 │ │ │ │ │ +337 template, Implementations>...>::value, int> = 0> │ │ │ │ │ +_3_3_9 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t& _o_p_e_r_a_t_o_r_=(Implementation&& impl) │ │ │ │ │ +340 { │ │ │ │ │ +341 impl_ = std::forward(impl); │ │ │ │ │ +342 updateMembers(); │ │ │ │ │ +343 return *this; │ │ │ │ │ +344 } │ │ │ │ │ +345 │ │ │ │ │ +346 │ │ │ │ │ +_3_5_0 const typename Traits::LocalBasisType& _l_o_c_a_l_B_a_s_i_s() const │ │ │ │ │ +351 { │ │ │ │ │ +352 return localBasis_; │ │ │ │ │ +353 } │ │ │ │ │ +354 │ │ │ │ │ +_3_5_8 const typename Traits::LocalCoefficientsType& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s() const │ │ │ │ │ +359 { │ │ │ │ │ +360 return localCoefficients_; │ │ │ │ │ +361 } │ │ │ │ │ +362 │ │ │ │ │ +_3_6_6 const typename Traits::LocalInterpolationType& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() const │ │ │ │ │ +367 { │ │ │ │ │ +368 return localInterpolation_; │ │ │ │ │ +369 } │ │ │ │ │ +370 │ │ │ │ │ +_3_7_4 unsigned int _s_i_z_e() const │ │ │ │ │ +375 { │ │ │ │ │ +376 return size_; │ │ │ │ │ +377 } │ │ │ │ │ +378 │ │ │ │ │ +_3_8_2 constexpr GeometryType _t_y_p_e() const │ │ │ │ │ +383 { │ │ │ │ │ +384 return geometryType_; │ │ │ │ │ +385 } │ │ │ │ │ +386 │ │ │ │ │ +_3_9_8 const auto& _v_a_r_i_a_n_t() const │ │ │ │ │ +399 { │ │ │ │ │ +400 return impl_; │ │ │ │ │ +401 } │ │ │ │ │ +402 │ │ │ │ │ +_4_0_8 operator bool () const │ │ │ │ │ +409 { │ │ │ │ │ +410 return not(std::holds_alternative(_v_a_r_i_a_n_t())); │ │ │ │ │ +411 } │ │ │ │ │ +412 │ │ │ │ │ +413 private: │ │ │ │ │ +414 std::variant impl_; │ │ │ │ │ +415 std::size_t size_; │ │ │ │ │ +416 GeometryType geometryType_; │ │ │ │ │ +417 LocalBasis localBasis_; │ │ │ │ │ +418 LocalCoefficients localCoefficients_; │ │ │ │ │ +419 LocalInterpolation localInterpolation_; │ │ │ │ │ +420 }; │ │ │ │ │ +421 │ │ │ │ │ +422} // end namespace Dune │ │ │ │ │ +423 │ │ │ │ │ +424#endif // DUNE_LOCALFUNCTIONS_COMMON_LOCALFINITEELEMENTVARIANT_HH │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ -std::ostream & operator<<(std::ostream &out, const LFEMatrix< Field > &mat) │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:151 │ │ │ │ │ -_D_u_n_e_:_:_U_n_i_t_y │ │ │ │ │ -A class representing the unit of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_Z_e_r_o │ │ │ │ │ -A class representing the zero of a given Field. │ │ │ │ │ -DDeeffiinniittiioonn field.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_P_t_r │ │ │ │ │ -Field * rowPtr(const unsigned int row) │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_c_o_l_s │ │ │ │ │ -unsigned int cols() const │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_P_t_r │ │ │ │ │ -const Field * rowPtr(const unsigned int row) const │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:67 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_e_s_i_z_e │ │ │ │ │ -void resize(const unsigned int rows, const unsigned int cols) │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w │ │ │ │ │ -void row(const unsigned int row, Vector &vec) const │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_r_o_w_s │ │ │ │ │ -unsigned int rows() const │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_i_n_v_e_r_t │ │ │ │ │ -bool invert() │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:88 │ │ │ │ │ -_D_u_n_e_:_:_L_F_E_M_a_t_r_i_x_:_:_F_i_e_l_d │ │ │ │ │ -F Field │ │ │ │ │ -DDeeffiinniittiioonn lfematrix.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +Type erasure class for wrapping LocalFiniteElement classes. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:236 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +typename Dune::LocalFiniteElementTraits< LocalBasis, LocalCoefficients, │ │ │ │ │ +LocalInterpolation > Traits │ │ │ │ │ +Export LocalFiniteElementTraits. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:269 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_v_a_r_i_a_n_t │ │ │ │ │ +const auto & variant() const │ │ │ │ │ +Provide access to underlying std::variant. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:398 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:374 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_t_y_p_e │ │ │ │ │ +constexpr GeometryType type() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:382 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +LocalFiniteElementVariant(LocalFiniteElementVariant &&other) │ │ │ │ │ +Move constructor. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:308 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +LocalFiniteElementVariant & operator=(Implementation &&impl) │ │ │ │ │ +Assignment from implementation. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:339 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +Provide access to LocalBasis implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:350 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +LocalFiniteElementVariant & operator=(const LocalFiniteElementVariant &other) │ │ │ │ │ +Copy assignment. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:317 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +LocalFiniteElementVariant(const std::monostate &monostate) │ │ │ │ │ +Construct empty LocalFiniteElementVariant. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:279 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +LocalFiniteElementVariant(const LocalFiniteElementVariant &other) │ │ │ │ │ +Copy constructor. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:299 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Provide access to LocalCoefficients implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:358 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +LocalFiniteElementVariant(Implementation &&impl) │ │ │ │ │ +Construct LocalFiniteElementVariant. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:290 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_o_p_e_r_a_t_o_r_= │ │ │ │ │ +LocalFiniteElementVariant & operator=(LocalFiniteElementVariant &&other) │ │ │ │ │ +Move assignment. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:327 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Provide access to LocalInterpolation implementation of this LocalFiniteElement. │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementvariant.hh:366 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_a_r_i_a_n_t │ │ │ │ │ +LocalFiniteElementVariant()=default │ │ │ │ │ +Construct empty LocalFiniteElementVariant. │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas.hh File Reference │ │ │ │ +dune-localfunctions: localfiniteelementtraits.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas.hh File Reference
│ │ │ │ +
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
localfiniteelementtraits.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

struct  Dune::LocalFiniteElementTraits< LB, LC, LI >
 traits helper struct More...
 
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Namespaces

namespace  Dune
 
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,19 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -raviartthomas.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h> │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +localfiniteelementtraits.hh File Reference │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_ _L_B_,_ _L_C_,_ _L_I_ _> │ │ │ │ │ +  traits helper struct _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +NNaammeessppaacceess │ │ │ │ │ +namespace   _D_u_n_e │ │ │ │ │ +  │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00518_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: raviartthomas.hh Source File │ │ │ │ +dune-localfunctions: localfiniteelementtraits.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,59 +70,50 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
raviartthomas.hh
│ │ │ │ +
localfiniteelementtraits.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │ +
6#define DUNE_LOCALFINITEELEMENTTRAITS_HH
│ │ │ │
7
│ │ │ │ -
8// Raviart-Thomas implementations with run-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ -
11
│ │ │ │ -
12// Raviart-Thomas implementations with compile-time order
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
24
│ │ │ │ -
25#endif // #ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Convenience header that includes all available Raviart-Thomas local finite elements for cubes.
│ │ │ │ -
Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension.
│ │ │ │ +
8namespace Dune {
│ │ │ │ +
9
│ │ │ │ +
11 template<class LB, class LC, class LI>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
13 {
│ │ │ │ +
16 typedef LB LocalBasisType;
│ │ │ │ +
17
│ │ │ │ + │ │ │ │ +
21
│ │ │ │ + │ │ │ │ +
25 };
│ │ │ │ +
│ │ │ │ +
26
│ │ │ │ +
27}
│ │ │ │ +
28
│ │ │ │ +
29#endif
│ │ │ │ +
Definition bdfmcube.hh:18
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,53 +1,48 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -raviartthomas.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +localfiniteelementtraits.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ +6#define DUNE_LOCALFINITEELEMENTTRAITS_HH │ │ │ │ │ 7 │ │ │ │ │ -8// Raviart-Thomas implementations with run-time order │ │ │ │ │ -9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h> │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -11 │ │ │ │ │ -12// Raviart-Thomas implementations with compile-time order │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h> │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h> │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h> │ │ │ │ │ -18#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h> │ │ │ │ │ -19#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h> │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h> │ │ │ │ │ -21#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h> │ │ │ │ │ -22#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h> │ │ │ │ │ -23#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_/_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h> │ │ │ │ │ -24 │ │ │ │ │ -25#endif // #ifndef DUNE_RAVIARTTHOMASFINITEELEMENT_HH │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_3_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_y_r_a_m_i_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_p_r_i_s_m_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_2_c_u_b_e_2_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_1_c_u_b_e_3_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_3_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_0_c_u_b_e_3_d_._h_h │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_c_u_b_e_._h_h │ │ │ │ │ -Convenience header that includes all available Raviart-Thomas local finite │ │ │ │ │ -elements for cubes. │ │ │ │ │ -_r_a_v_i_a_r_t_t_h_o_m_a_s_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -Raviart-Thomas local finite elements of arbitrary order for simplices of │ │ │ │ │ -arbitrary dimension. │ │ │ │ │ +8namespace _D_u_n_e { │ │ │ │ │ +9 │ │ │ │ │ +11 template │ │ │ │ │ +_1_2 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +13 { │ │ │ │ │ +_1_6 typedef LB _L_o_c_a_l_B_a_s_i_s_T_y_p_e; │ │ │ │ │ +17 │ │ │ │ │ +_2_0 typedef LC _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e; │ │ │ │ │ +21 │ │ │ │ │ +_2_4 typedef LI _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e; │ │ │ │ │ +25 }; │ │ │ │ │ +26 │ │ │ │ │ +27} │ │ │ │ │ +28 │ │ │ │ │ +29#endif │ │ │ │ │ +_D_u_n_e │ │ │ │ │ +DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: localkey.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalsimplexp2localinterpolation.hh File Reference
│ │ │ │ +
localkey.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <ostream>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalSimplexP2LocalInterpolation< LB >
class  Dune::LocalKey
 Describe position of one degree of freedom. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalsimplexp2localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +localkey.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +  Describe position of one degree of freedom. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00521_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: localkey.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,130 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalsimplexp2localinterpolation.hh
│ │ │ │ +
localkey.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_LOCALKEY_HH
│ │ │ │ +
6#define DUNE_LOCALKEY_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ -
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
15 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
17 {
│ │ │ │ -
18 public:
│ │ │ │ -
19
│ │ │ │ -
20 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
22 {
│ │ │ │ -
23 typename LB::Traits::DomainType x;
│ │ │ │ -
24 typename LB::Traits::RangeType y;
│ │ │ │ -
25
│ │ │ │ -
26 static_assert(LB::Traits::dimDomain <= 3,
│ │ │ │ -
27 "LocalInterpolation for HierarchicalSimplexP2 finite elements"
│ │ │ │ -
28 " is only implemented for dimDomain <=3!");
│ │ │ │ -
29
│ │ │ │ -
30 switch ( int(LB::Traits::dimDomain)) {
│ │ │ │ -
31
│ │ │ │ -
32 case 1 :
│ │ │ │ -
33
│ │ │ │ -
34 out.resize(3);
│ │ │ │ -
35
│ │ │ │ -
36 // First: the two vertex dofs
│ │ │ │ -
37 x[0] = 0.0; out[0] = f(x);
│ │ │ │ -
38 x[0] = 1.0; out[2] = f(x);
│ │ │ │ +
8#include <array>
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <ostream>
│ │ │ │ +
11
│ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 public:
│ │ │ │ +
26
│ │ │ │ +
28 enum {
│ │ │ │ + │ │ │ │ +
38 };
│ │ │ │
39
│ │ │ │ -
40 // Then: the edge dof
│ │ │ │ -
41 x[0] = 0.5; y = f(x);
│ │ │ │ -
42 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ -
43
│ │ │ │ -
44 break;
│ │ │ │ -
45
│ │ │ │ -
46
│ │ │ │ -
47 case 2 :
│ │ │ │ -
48
│ │ │ │ -
49 out.resize(6);
│ │ │ │ -
50
│ │ │ │ -
51 // First: the three vertex dofs
│ │ │ │ -
52 x[0] = 0.0; x[1] = 0.0; out[0] = f(x);
│ │ │ │ -
53 x[0] = 1.0; x[1] = 0.0; out[2] = f(x);
│ │ │ │ -
54 x[0] = 0.0; x[1] = 1.0; out[5] = f(x);
│ │ │ │ -
55
│ │ │ │ -
56 // Then: the three edge dofs
│ │ │ │ -
57 x[0] = 0.5; x[1] = 0.0; y = f(x);
│ │ │ │ -
58 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ -
59
│ │ │ │ -
60 x[0] = 0.0; x[1] = 0.5; y = f(x);
│ │ │ │ -
61 out[3] = y - 0.5*(out[0] + out[5]);
│ │ │ │ -
62
│ │ │ │ -
63 x[0] = 0.5; x[1] = 0.5; y = f(x);
│ │ │ │ -
64 out[4] = y - 0.5*(out[2] + out[5]);
│ │ │ │ -
65
│ │ │ │ -
66 break;
│ │ │ │ +
│ │ │ │ +
41 constexpr LocalKey () noexcept
│ │ │ │ +
42 : values_{}
│ │ │ │ +
43 {}
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
50 constexpr LocalKey (unsigned int s, unsigned int c, unsigned int i) noexcept
│ │ │ │ +
51 : values_{s,c,i}
│ │ │ │ +
52 {}
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
55 [[nodiscard]]
│ │ │ │ +
│ │ │ │ +
56 constexpr unsigned int subEntity () const noexcept
│ │ │ │ +
57 {
│ │ │ │ +
58 return values_[0];
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
62 [[nodiscard]]
│ │ │ │ +
│ │ │ │ +
63 constexpr unsigned int codim () const noexcept
│ │ │ │ +
64 {
│ │ │ │ +
65 return values_[1];
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │
67
│ │ │ │ -
68 case 3 :
│ │ │ │ -
69
│ │ │ │ -
70 out.resize(10);
│ │ │ │ -
71
│ │ │ │ -
72 // First: the four vertex dofs
│ │ │ │ -
73 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x);
│ │ │ │ -
74 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[2] = f(x);
│ │ │ │ -
75 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[5] = f(x);
│ │ │ │ -
76 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[9] = f(x);
│ │ │ │ -
77
│ │ │ │ -
78 // Then: the six edge dofs
│ │ │ │ -
79 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x);
│ │ │ │ -
80 out[1] = y - 0.5*(out[0] + out[2]);
│ │ │ │ -
81
│ │ │ │ -
82 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ -
83 out[3] = y - 0.5*(out[0] + out[5]);
│ │ │ │ -
84
│ │ │ │ -
85 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ -
86 out[4] = y - 0.5*(out[2] + out[5]);
│ │ │ │ -
87
│ │ │ │ -
88 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
89 out[6] = y - 0.5*(out[0] + out[9]);
│ │ │ │ -
90
│ │ │ │ -
91 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
92 out[7] = y - 0.5*(out[2] + out[9]);
│ │ │ │ -
93
│ │ │ │ -
94 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ -
95 out[8] = y - 0.5*(out[5] + out[9]);
│ │ │ │ -
96
│ │ │ │ -
97 break;
│ │ │ │ -
98
│ │ │ │ -
99 }
│ │ │ │ -
100 }
│ │ │ │ +
69 [[nodiscard]]
│ │ │ │ +
│ │ │ │ +
70 constexpr unsigned int index () const noexcept
│ │ │ │ +
71 {
│ │ │ │ +
72 return values_[2];
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
│ │ │ │ +
76 constexpr void index (unsigned int i) noexcept
│ │ │ │ +
77 {
│ │ │ │ +
78 values_[2] = i;
│ │ │ │ +
79 }
│ │ │ │ +
│ │ │ │ +
80
│ │ │ │ +
82 [[nodiscard]]
│ │ │ │ +
│ │ │ │ +
83 bool operator< (const LocalKey& other) const noexcept
│ │ │ │ +
84 {
│ │ │ │ +
85 return values_ < other.values_;
│ │ │ │ +
86 }
│ │ │ │
│ │ │ │ -
101
│ │ │ │ -
102 };
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
89 friend std::ostream& operator<< (std::ostream& s, const LocalKey& localKey)
│ │ │ │ +
90 {
│ │ │ │ +
91 return s << "[ subEntity: " << localKey.subEntity()
│ │ │ │ +
92 << ", codim: " << localKey.codim()
│ │ │ │ +
93 << ", index: " << localKey.index() << " ]";
│ │ │ │ +
94 }
│ │ │ │ +
│ │ │ │ +
95
│ │ │ │ +
96 private:
│ │ │ │ +
97
│ │ │ │ +
98 // We use an array to store the values in order to be able to use the array::operator< implementation
│ │ │ │ +
99 std::array<unsigned int,3> values_;
│ │ │ │ +
100
│ │ │ │ +
101 };
│ │ │ │
│ │ │ │ +
102
│ │ │ │
103}
│ │ │ │ -
104
│ │ │ │ -
105#endif
│ │ │ │ +
104#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalsimplexp2localinterpolation.hh:21
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
bool operator<(const LocalKey &other) const noexcept
Less-than operator so we can use this class as a key type in stl containers.
Definition localkey.hh:83
│ │ │ │ +
constexpr void index(unsigned int i) noexcept
Set index component.
Definition localkey.hh:76
│ │ │ │ +
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ +
constexpr LocalKey(unsigned int s, unsigned int c, unsigned int i) noexcept
Initialize all components.
Definition localkey.hh:50
│ │ │ │ +
@ intersectionCodim
Codimension returned by LocalKey::codim() for degrees of freedom attached to an intersection.
Definition localkey.hh:37
│ │ │ │ +
constexpr unsigned int codim() const noexcept
Return codim of associated entity.
Definition localkey.hh:63
│ │ │ │ +
friend std::ostream & operator<<(std::ostream &s, const LocalKey &localKey)
Write LocalKey object to output stream.
Definition localkey.hh:89
│ │ │ │ +
constexpr LocalKey() noexcept
Standard constructor for uninitialized local index.
Definition localkey.hh:41
│ │ │ │ +
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,122 +1,129 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ -hierarchicalsimplexp2localinterpolation.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +localkey.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_LOCALKEY_HH │ │ │ │ │ +6#define DUNE_LOCALKEY_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -15 template │ │ │ │ │ -_1_6 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -17 { │ │ │ │ │ -18 public: │ │ │ │ │ -19 │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -22 { │ │ │ │ │ -23 typename LB::Traits::DomainType x; │ │ │ │ │ -24 typename LB::Traits::RangeType y; │ │ │ │ │ -25 │ │ │ │ │ -26 static_assert(LB::Traits::dimDomain <= 3, │ │ │ │ │ -27 "LocalInterpolation for HierarchicalSimplexP2 finite elements" │ │ │ │ │ -28 " is only implemented for dimDomain <=3!"); │ │ │ │ │ -29 │ │ │ │ │ -30 switch ( int(LB::Traits::dimDomain)) { │ │ │ │ │ -31 │ │ │ │ │ -32 case 1 : │ │ │ │ │ -33 │ │ │ │ │ -34 out.resize(3); │ │ │ │ │ -35 │ │ │ │ │ -36 // First: the two vertex dofs │ │ │ │ │ -37 x[0] = 0.0; out[0] = f(x); │ │ │ │ │ -38 x[0] = 1.0; out[2] = f(x); │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +_2_3 class _L_o_c_a_l_K_e_y │ │ │ │ │ +24 { │ │ │ │ │ +25 public: │ │ │ │ │ +26 │ │ │ │ │ +28 enum { │ │ │ │ │ +37 _i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m=666 │ │ │ │ │ +_3_8 }; │ │ │ │ │ 39 │ │ │ │ │ -40 // Then: the edge dof │ │ │ │ │ -41 x[0] = 0.5; y = f(x); │ │ │ │ │ -42 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ -43 │ │ │ │ │ -44 break; │ │ │ │ │ -45 │ │ │ │ │ -46 │ │ │ │ │ -47 case 2 : │ │ │ │ │ -48 │ │ │ │ │ -49 out.resize(6); │ │ │ │ │ -50 │ │ │ │ │ -51 // First: the three vertex dofs │ │ │ │ │ -52 x[0] = 0.0; x[1] = 0.0; out[0] = f(x); │ │ │ │ │ -53 x[0] = 1.0; x[1] = 0.0; out[2] = f(x); │ │ │ │ │ -54 x[0] = 0.0; x[1] = 1.0; out[5] = f(x); │ │ │ │ │ -55 │ │ │ │ │ -56 // Then: the three edge dofs │ │ │ │ │ -57 x[0] = 0.5; x[1] = 0.0; y = f(x); │ │ │ │ │ -58 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ -59 │ │ │ │ │ -60 x[0] = 0.0; x[1] = 0.5; y = f(x); │ │ │ │ │ -61 out[3] = y - 0.5*(out[0] + out[5]); │ │ │ │ │ -62 │ │ │ │ │ -63 x[0] = 0.5; x[1] = 0.5; y = f(x); │ │ │ │ │ -64 out[4] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ -65 │ │ │ │ │ -66 break; │ │ │ │ │ +_4_1 constexpr _L_o_c_a_l_K_e_y () noexcept │ │ │ │ │ +42 : values_{} │ │ │ │ │ +43 {} │ │ │ │ │ +44 │ │ │ │ │ +_5_0 constexpr _L_o_c_a_l_K_e_y (unsigned int s, unsigned int c, unsigned int i) noexcept │ │ │ │ │ +51 : values_{s,c,i} │ │ │ │ │ +52 {} │ │ │ │ │ +53 │ │ │ │ │ +55 [[nodiscard]] │ │ │ │ │ +_5_6 constexpr unsigned int _s_u_b_E_n_t_i_t_y () const noexcept │ │ │ │ │ +57 { │ │ │ │ │ +58 return values_[0]; │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +62 [[nodiscard]] │ │ │ │ │ +_6_3 constexpr unsigned int _c_o_d_i_m () const noexcept │ │ │ │ │ +64 { │ │ │ │ │ +65 return values_[1]; │ │ │ │ │ +66 } │ │ │ │ │ 67 │ │ │ │ │ -68 case 3 : │ │ │ │ │ -69 │ │ │ │ │ -70 out.resize(10); │ │ │ │ │ -71 │ │ │ │ │ -72 // First: the four vertex dofs │ │ │ │ │ -73 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x); │ │ │ │ │ -74 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[2] = f(x); │ │ │ │ │ -75 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[5] = f(x); │ │ │ │ │ -76 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[9] = f(x); │ │ │ │ │ -77 │ │ │ │ │ -78 // Then: the six edge dofs │ │ │ │ │ -79 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x); │ │ │ │ │ -80 out[1] = y - 0.5*(out[0] + out[2]); │ │ │ │ │ -81 │ │ │ │ │ -82 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ -83 out[3] = y - 0.5*(out[0] + out[5]); │ │ │ │ │ -84 │ │ │ │ │ -85 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ -86 out[4] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ +69 [[nodiscard]] │ │ │ │ │ +_7_0 constexpr unsigned int _i_n_d_e_x () const noexcept │ │ │ │ │ +71 { │ │ │ │ │ +72 return values_[2]; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +_7_6 constexpr void _i_n_d_e_x (unsigned int i) noexcept │ │ │ │ │ +77 { │ │ │ │ │ +78 values_[2] = i; │ │ │ │ │ +79 } │ │ │ │ │ +80 │ │ │ │ │ +82 [[nodiscard]] │ │ │ │ │ +_8_3 bool _o_p_e_r_a_t_o_r_<_ (const _L_o_c_a_l_K_e_y& other) const noexcept │ │ │ │ │ +84 { │ │ │ │ │ +85 return values_ < other.values_; │ │ │ │ │ +86 } │ │ │ │ │ 87 │ │ │ │ │ -88 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -89 out[6] = y - 0.5*(out[0] + out[9]); │ │ │ │ │ -90 │ │ │ │ │ -91 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -92 out[7] = y - 0.5*(out[2] + out[9]); │ │ │ │ │ -93 │ │ │ │ │ -94 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ -95 out[8] = y - 0.5*(out[5] + out[9]); │ │ │ │ │ -96 │ │ │ │ │ -97 break; │ │ │ │ │ -98 │ │ │ │ │ -99 } │ │ │ │ │ -100 } │ │ │ │ │ -101 │ │ │ │ │ -102 }; │ │ │ │ │ +_8_9 friend std::ostream& _o_p_e_r_a_t_o_r_<_<_ (std::ostream& s, const _L_o_c_a_l_K_e_y& localKey) │ │ │ │ │ +90 { │ │ │ │ │ +91 return s << "[ subEntity: " << localKey._s_u_b_E_n_t_i_t_y() │ │ │ │ │ +92 << ", codim: " << localKey._c_o_d_i_m() │ │ │ │ │ +93 << ", index: " << localKey._i_n_d_e_x() << " ]"; │ │ │ │ │ +94 } │ │ │ │ │ +95 │ │ │ │ │ +96 private: │ │ │ │ │ +97 │ │ │ │ │ +98 // We use an array to store the values in order to be able to use the │ │ │ │ │ +array::operator< implementation │ │ │ │ │ +99 std::array values_; │ │ │ │ │ +100 │ │ │ │ │ +101 }; │ │ │ │ │ +102 │ │ │ │ │ 103} │ │ │ │ │ -104 │ │ │ │ │ -105#endif │ │ │ │ │ +104#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:17 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_o_p_e_r_a_t_o_r_< │ │ │ │ │ +bool operator<(const LocalKey &other) const noexcept │ │ │ │ │ +Less-than operator so we can use this class as a key type in stl containers. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:83 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ +constexpr void index(unsigned int i) noexcept │ │ │ │ │ +Set index component. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ +constexpr unsigned int index() const noexcept │ │ │ │ │ +Return offset within subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +constexpr LocalKey(unsigned int s, unsigned int c, unsigned int i) noexcept │ │ │ │ │ +Initialize all components. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_t_e_r_s_e_c_t_i_o_n_C_o_d_i_m │ │ │ │ │ +@ intersectionCodim │ │ │ │ │ +Codimension returned by LocalKey::codim() for degrees of freedom attached to an │ │ │ │ │ +intersection. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_c_o_d_i_m │ │ │ │ │ +constexpr unsigned int codim() const noexcept │ │ │ │ │ +Return codim of associated entity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_o_p_e_r_a_t_o_r_<_< │ │ │ │ │ +friend std::ostream & operator<<(std::ostream &s, const LocalKey &localKey) │ │ │ │ │ +Write LocalKey object to output stream. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +constexpr LocalKey() noexcept │ │ │ │ │ +Standard constructor for uninitialized local index. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ +constexpr unsigned int subEntity() const noexcept │ │ │ │ │ +Return number of associated subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ +dune-localfunctions: virtualwrappers.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,55 +65,55 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalsimplexp2localbasis.hh File Reference
│ │ │ │ +
virtualwrappers.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Hierarchical p2 shape functions for the simplex. │ │ │ │ -More...

│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalSimplexP2LocalBasis< D, R, dim >
struct  Dune::LocalFiniteElementCloneFactoryHelper< Imp, IsInterface >
 
struct  Dune::LocalFiniteElementCloneFactory< Imp >
 
class  Dune::LocalBasisVirtualImp< T, Imp >
 class for wrapping a basis using the virtual interface More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 1 >
 Hierarchical P2 basis in 1d. More...
class  Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp >
 class for wrapping a local interpolation using the virtual interface More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 2 >
 Hierarchical P2 basis in 2d. More...
class  Dune::LocalCoefficientsVirtualImp< Imp >
 class for wrapping local coefficients using the virtual interface More...
 
class  Dune::HierarchicalSimplexP2LocalBasis< D, R, 3 >
 Hierarchical P2 basis in 3d. More...
class  Dune::LocalFiniteElementVirtualImp< Imp >
 class for wrapping a finite element using the virtual interface More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Hierarchical p2 shape functions for the simplex.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +1,39 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalsimplexp2localbasis.hh File Reference │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +virtualwrappers.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_<_ _I_m_p_,_ _I_s_I_n_t_e_r_f_a_c_e_ _> │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ -  Hierarchical P2 basis in 1d. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_<_ _I_m_p_ _> │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ -  Hierarchical P2 basis in 2d. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_<_ _T_,_ _I_m_p_ _> │ │ │ │ │ +  class for wrapping a basis using the virtual interface _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ -  Hierarchical P2 basis in 3d. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_,_ _I_m_p_ _> │ │ │ │ │ +  class for wrapping a local interpolation using the virtual interface │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_<_ _I_m_p_ _> │ │ │ │ │ +  class for wrapping local coefficients using the virtual interface │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_ _I_m_p_ _> │ │ │ │ │ +  class for wrapping a finite element using the virtual interface │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00524_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2localbasis.hh Source File │ │ │ │ +dune-localfunctions: virtualwrappers.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,367 +70,410 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalsimplexp2localbasis.hh
│ │ │ │ +
virtualwrappers.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH
│ │ │ │
7
│ │ │ │ -
12#include <numeric>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
13
│ │ │ │ -
14#include <dune/common/fvector.hh>
│ │ │ │ -
15#include <dune/common/fmatrix.hh>
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │
16
│ │ │ │ - │ │ │ │ -
18
│ │ │ │ -
19namespace Dune
│ │ │ │ -
20{
│ │ │ │ -
21 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24 public:
│ │ │ │ +
17 // forward declaration needed by friend declarations
│ │ │ │ +
18 template<class Imp>
│ │ │ │ +
19 class LocalFiniteElementVirtualImp;
│ │ │ │ +
20
│ │ │ │ +
21 // default clone method is the copy constructor
│ │ │ │ +
22 template<class Imp, bool IsInterface>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │
│ │ │ │ - │ │ │ │ +
25 static Imp* clone(const Imp& imp)
│ │ │ │
26 {
│ │ │ │ -
27 DUNE_THROW(Dune::NotImplemented,"HierarchicalSimplexP2LocalBasis not implemented for dim > 3.");
│ │ │ │ +
27 return new Imp(imp);
│ │ │ │
28 }
│ │ │ │
│ │ │ │
29 };
│ │ │ │
│ │ │ │
30
│ │ │ │ -
46 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
48 {
│ │ │ │ -
49 public:
│ │ │ │ -
51 typedef LocalBasisTraits<D,1,Dune::FieldVector<D,1>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
52 Dune::FieldMatrix<R,1,1> > Traits;
│ │ │ │ -
53
│ │ │ │ -
│ │ │ │ -
55 unsigned int size () const
│ │ │ │ -
56 {
│ │ │ │ -
57 return 3;
│ │ │ │ -
58 }
│ │ │ │ +
31 // if FE derives from virtual interface the clone method is used
│ │ │ │ +
32 template<class Imp>
│ │ │ │ +
33 struct LocalFiniteElementCloneFactoryHelper<Imp, true>
│ │ │ │ +
34 {
│ │ │ │ +
35 static Imp* clone(const Imp& imp)
│ │ │ │ +
36 {
│ │ │ │ +
37 return imp.clone();
│ │ │ │ +
38 }
│ │ │ │ +
39 };
│ │ │ │ +
40
│ │ │ │ +
41 // factory template to clone and create an objects
│ │ │ │ +
42 template<class Imp>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
44 {
│ │ │ │ + │ │ │ │ +
46
│ │ │ │ +
│ │ │ │ +
47 static Imp* clone(const Imp& imp)
│ │ │ │ +
48 {
│ │ │ │ + │ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
│ │ │ │ +
52 static Imp* create()
│ │ │ │ +
53 {
│ │ │ │ +
54 return new Imp;
│ │ │ │ +
55 }
│ │ │ │
│ │ │ │ +
56 };
│ │ │ │ +
│ │ │ │ +
57
│ │ │ │ +
58
│ │ │ │
59
│ │ │ │ -
│ │ │ │ -
61 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
62 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
63 {
│ │ │ │ -
64 out.resize(3);
│ │ │ │ +
60 // -----------------------------------------------------------------
│ │ │ │ +
61 // Basis
│ │ │ │ +
62 // -----------------------------------------------------------------
│ │ │ │ +
63
│ │ │ │ +
64
│ │ │ │
65
│ │ │ │ -
66 out[0] = 1-in[0];
│ │ │ │ -
67 out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5);
│ │ │ │ -
68 out[2] = in[0];
│ │ │ │ -
69 }
│ │ │ │ -
│ │ │ │ -
70
│ │ │ │ -
72 inline void
│ │ │ │ -
│ │ │ │ -
73 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
74 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
75 {
│ │ │ │ -
76 out.resize(3);
│ │ │ │ -
77
│ │ │ │ -
78 out[0][0][0] = -1;
│ │ │ │ -
79 out[1][0][0] = 4-8*in[0];
│ │ │ │ -
80 out[2][0][0] = 1;
│ │ │ │ -
81 }
│ │ │ │ -
│ │ │ │ -
82
│ │ │ │ -
│ │ │ │ -
84 void partial (const std::array<unsigned int, 1>& order,
│ │ │ │ -
85 const typename Traits::DomainType& in, // position
│ │ │ │ -
86 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
87 {
│ │ │ │ -
88 auto totalOrder = order[0];
│ │ │ │ -
89 if (totalOrder == 0) {
│ │ │ │ -
90 evaluateFunction(in, out);
│ │ │ │ -
91 } else if (totalOrder == 1) {
│ │ │ │ -
92 out.resize(size());
│ │ │ │ -
93 out[0] = -1;
│ │ │ │ -
94 out[1] = 4-8*in[0];
│ │ │ │ -
95 out[2] = 1;
│ │ │ │ -
96 } else if (totalOrder == 2) {
│ │ │ │ -
97 out.resize(size());
│ │ │ │ -
98 out[0] = 0;
│ │ │ │ -
99 out[1] = -8;
│ │ │ │ -
100 out[2] = 0;
│ │ │ │ -
101 } else {
│ │ │ │ -
102 out.resize(size());
│ │ │ │ -
103 out[0] = out[1] = out[2] = 0;
│ │ │ │ -
104 }
│ │ │ │ -
105 }
│ │ │ │ +
72 template<class T , class Imp>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
75 {
│ │ │ │ +
76 template<class FEImp>
│ │ │ │ + │ │ │ │ +
78
│ │ │ │ +
79 protected:
│ │ │ │ +
80
│ │ │ │ +
│ │ │ │ +
82 LocalBasisVirtualImp( const Imp &imp )
│ │ │ │ +
83 : impl_(imp)
│ │ │ │ +
84 {}
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86 public:
│ │ │ │ +
87 using Traits = T;
│ │ │ │ +
88
│ │ │ │ +
│ │ │ │ +
90 unsigned int size () const
│ │ │ │ +
91 {
│ │ │ │ +
92 return impl_.size();
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
│ │ │ │ +
96 unsigned int order () const
│ │ │ │ +
97 {
│ │ │ │ +
98 return impl_.order();
│ │ │ │ +
99 }
│ │ │ │ +
│ │ │ │ +
100
│ │ │ │ +
│ │ │ │ +
102 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
103 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
104 {
│ │ │ │ +
105 impl_.evaluateFunction(in,out);
│ │ │ │ +
106 }
│ │ │ │
│ │ │ │ -
106
│ │ │ │ +
107
│ │ │ │
│ │ │ │ -
109 unsigned int order () const
│ │ │ │ -
110 {
│ │ │ │ -
111 return 2;
│ │ │ │ -
112 }
│ │ │ │ -
│ │ │ │ -
113
│ │ │ │ -
114 };
│ │ │ │ +
109 inline void evaluateJacobian(
│ │ │ │ +
110 const typename Traits::DomainType& in,
│ │ │ │ +
111 std::vector<typename Traits::JacobianType>& out) const
│ │ │ │ +
112 {
│ │ │ │ +
113 impl_.evaluateJacobian(in,out);
│ │ │ │ +
114 }
│ │ │ │
│ │ │ │
115
│ │ │ │ -
136 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
138 {
│ │ │ │ -
139 public:
│ │ │ │ -
141 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
142 Dune::FieldMatrix<R,1,2> > Traits;
│ │ │ │ -
143
│ │ │ │ -
│ │ │ │ -
145 unsigned int size () const
│ │ │ │ -
146 {
│ │ │ │ -
147 return 6;
│ │ │ │ -
148 }
│ │ │ │ -
│ │ │ │ -
149
│ │ │ │ -
│ │ │ │ -
151 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
152 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
153 {
│ │ │ │ -
154 out.resize(6);
│ │ │ │ -
155
│ │ │ │ -
156 out[0] = 1 - in[0] - in[1];
│ │ │ │ -
157 out[1] = 4*in[0]*(1-in[0]-in[1]);
│ │ │ │ -
158 out[2] = in[0];
│ │ │ │ -
159 out[3] = 4*in[1]*(1-in[0]-in[1]);
│ │ │ │ -
160 out[4] = 4*in[0]*in[1];
│ │ │ │ -
161 out[5] = in[1];
│ │ │ │ -
162
│ │ │ │ -
163 }
│ │ │ │ +
│ │ │ │ +
121 void partial(const std::array<unsigned int,Traits::dimDomain>& order,
│ │ │ │ +
122 const typename Traits::DomainType& in,
│ │ │ │ +
123 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
124 {
│ │ │ │ +
125 impl_.partial(order,in,out);
│ │ │ │ +
126 }
│ │ │ │ +
│ │ │ │ +
127
│ │ │ │ +
128 protected:
│ │ │ │ +
129 const Imp& impl_;
│ │ │ │ +
130 };
│ │ │ │ +
│ │ │ │ +
131
│ │ │ │ +
132
│ │ │ │ +
133
│ │ │ │ +
134 // -----------------------------------------------------------------
│ │ │ │ +
135 // Interpolation
│ │ │ │ +
136 // -----------------------------------------------------------------
│ │ │ │ +
137
│ │ │ │ +
146 template<class DomainType, class RangeType, class Imp>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
148 : public LocalInterpolationVirtualInterface< DomainType, RangeType >
│ │ │ │ +
149 {
│ │ │ │ +
150 template<class FEImp>
│ │ │ │ + │ │ │ │ +
152
│ │ │ │ + │ │ │ │ +
154
│ │ │ │ +
155 protected:
│ │ │ │ +
156
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
159 : impl_(imp) {}
│ │ │ │
│ │ │ │ +
160
│ │ │ │ +
161 public:
│ │ │ │ +
162
│ │ │ │ + │ │ │ │
164
│ │ │ │ -
166 inline void
│ │ │ │ -
│ │ │ │ -
167 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
168 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
169 {
│ │ │ │ -
170 out.resize(6);
│ │ │ │ -
171
│ │ │ │ -
172 out[0][0][0] = -1; out[0][0][1] = -1;
│ │ │ │ -
173 out[1][0][0] = 4-8*in[0]-4*in[1]; out[1][0][1] = -4*in[0];
│ │ │ │ -
174 out[2][0][0] = 1; out[2][0][1] = 0;
│ │ │ │ -
175 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1];
│ │ │ │ -
176 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0];
│ │ │ │ -
177 out[5][0][0] = 0; out[5][0][1] = 1;
│ │ │ │ -
178 }
│ │ │ │ + │ │ │ │ +
166
│ │ │ │ +
│ │ │ │ +
168 virtual void interpolate (const FunctionType& f, std::vector<CoefficientType>& out) const
│ │ │ │ +
169 {
│ │ │ │ +
170 impl_.interpolate(f,out);
│ │ │ │ +
171 }
│ │ │ │ +
│ │ │ │ +
172
│ │ │ │ +
173 protected:
│ │ │ │ +
174 const Imp& impl_;
│ │ │ │ +
175
│ │ │ │ +
176 };
│ │ │ │
│ │ │ │ +
177
│ │ │ │ +
178
│ │ │ │
179
│ │ │ │ -
│ │ │ │ -
181 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
182 const typename Traits::DomainType& in, // position
│ │ │ │ -
183 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
184 {
│ │ │ │ -
185 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
186 if (totalOrder == 0) {
│ │ │ │ -
187 evaluateFunction(in, out);
│ │ │ │ -
188 } else if (totalOrder == 1) {
│ │ │ │ -
189 out.resize(size());
│ │ │ │ -
190 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
191
│ │ │ │ -
192 switch (direction) {
│ │ │ │ -
193 case 0:
│ │ │ │ -
194 out[0] = -1;
│ │ │ │ -
195 out[1] = 4-8*in[0]-4*in[1];
│ │ │ │ -
196 out[2] = 1;
│ │ │ │ -
197 out[3] = -4*in[1];
│ │ │ │ -
198 out[4] = 4*in[1];
│ │ │ │ -
199 out[5] = 0;
│ │ │ │ -
200 break;
│ │ │ │ -
201 case 1:
│ │ │ │ -
202 out[0] = -1;
│ │ │ │ -
203 out[1] = -4*in[0];
│ │ │ │ -
204 out[2] = 0;
│ │ │ │ -
205 out[3] = 4-4*in[0]-8*in[1];
│ │ │ │ -
206 out[4] = 4*in[0];
│ │ │ │ -
207 out[5] = 1;
│ │ │ │ -
208 break;
│ │ │ │ -
209 default:
│ │ │ │ -
210 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
211 }
│ │ │ │ -
212 } else {
│ │ │ │ -
213 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
214 }
│ │ │ │ -
215 }
│ │ │ │ -
│ │ │ │ -
216
│ │ │ │ -
│ │ │ │ -
219 unsigned int order () const
│ │ │ │ -
220 {
│ │ │ │ -
221 return 2;
│ │ │ │ -
222 }
│ │ │ │ +
180 // -----------------------------------------------------------------
│ │ │ │ +
181 // Coefficients
│ │ │ │ +
182 // -----------------------------------------------------------------
│ │ │ │ +
183
│ │ │ │ +
190 template<class Imp>
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ +
193 {
│ │ │ │ +
194 template<class FEImp>
│ │ │ │ + │ │ │ │ +
196
│ │ │ │ +
197 protected:
│ │ │ │ +
198
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
201 : impl_(imp)
│ │ │ │ +
202 {}
│ │ │ │ +
│ │ │ │ +
203
│ │ │ │ +
204 public:
│ │ │ │ +
205
│ │ │ │ +
│ │ │ │ +
207 std::size_t size () const
│ │ │ │ +
208 {
│ │ │ │ +
209 return impl_.size();
│ │ │ │ +
210 }
│ │ │ │ +
│ │ │ │ +
211
│ │ │ │ +
│ │ │ │ +
213 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
214 {
│ │ │ │ +
215 return impl_.localKey(i);
│ │ │ │ +
216 }
│ │ │ │ +
│ │ │ │ +
217
│ │ │ │ +
218 protected:
│ │ │ │ +
219 const Imp& impl_;
│ │ │ │ +
220
│ │ │ │ +
221 };
│ │ │ │
│ │ │ │ +
222
│ │ │ │
223
│ │ │ │ -
224 };
│ │ │ │ -
│ │ │ │ -
225
│ │ │ │ -
250 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
252 {
│ │ │ │ -
253 public:
│ │ │ │ -
255 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ -
256 Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │ -
257
│ │ │ │ -
│ │ │ │ -
259 unsigned int size () const
│ │ │ │ -
260 {
│ │ │ │ -
261 return 10;
│ │ │ │ -
262 }
│ │ │ │ -
│ │ │ │ -
263
│ │ │ │ -
│ │ │ │ -
265 void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
266 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ -
267 {
│ │ │ │ -
268 out.resize(10);
│ │ │ │ -
269
│ │ │ │ -
270 out[0] = 1 - in[0] - in[1] - in[2];
│ │ │ │ -
271 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ -
272 out[2] = in[0];
│ │ │ │ -
273 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ -
274 out[4] = 4 * in[0] * in[1];
│ │ │ │ -
275 out[5] = in[1];
│ │ │ │ -
276 out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]);
│ │ │ │ -
277 out[7] = 4 * in[0] * in[2];
│ │ │ │ -
278 out[8] = 4 * in[1] * in[2];
│ │ │ │ -
279 out[9] = in[2];
│ │ │ │ +
224
│ │ │ │ +
225 // -----------------------------------------------------------------
│ │ │ │ +
226 // Finite Element
│ │ │ │ +
227 // -----------------------------------------------------------------
│ │ │ │ +
228
│ │ │ │ +
237 template<class Imp>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
239 : public LocalFiniteElementVirtualInterface<typename Imp::Traits::LocalBasisType::Traits>
│ │ │ │ +
240 {
│ │ │ │ +
241 using LocalBasisTraits = typename Imp::Traits::LocalBasisType::Traits;
│ │ │ │ + │ │ │ │ +
243
│ │ │ │ +
244 public:
│ │ │ │ +
245 typedef typename Interface::Traits Traits;
│ │ │ │ +
246
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
253 {}
│ │ │ │ +
│ │ │ │ +
254
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
257 : impl_(LocalFiniteElementCloneFactory<Imp>::create()),
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
261 {}
│ │ │ │ +
│ │ │ │ +
262
│ │ │ │ +
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
269 {}
│ │ │ │ +
│ │ │ │ +
270
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
272 {
│ │ │ │ +
273 delete impl_;
│ │ │ │ +
274 }
│ │ │ │ +
│ │ │ │ +
275
│ │ │ │ +
│ │ │ │ +
277 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
278 {
│ │ │ │ +
279 return localBasisImp_;
│ │ │ │
280 }
│ │ │ │
│ │ │ │
281
│ │ │ │
│ │ │ │ -
283 void evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ -
284 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ -
285 {
│ │ │ │ -
286 out.resize(10);
│ │ │ │ + │ │ │ │ +
284 {
│ │ │ │ + │ │ │ │ +
286 }
│ │ │ │ +
│ │ │ │
287
│ │ │ │ -
288 out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1;
│ │ │ │ -
289 out[1][0][0] = 4-8*in[0]-4*in[1]-4*in[2]; out[1][0][1] = -4*in[0]; out[1][0][2] = -4*in[0];
│ │ │ │ -
290 out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ -
291 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]-4*in[2]; out[3][0][2] = -4*in[1];
│ │ │ │ -
292 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0;
│ │ │ │ -
293 out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0;
│ │ │ │ -
294 out[6][0][0] = -4*in[2]; out[6][0][1] = -4*in[2]; out[6][0][2] = 4-4*in[0]-4*in[1]-8*in[2];
│ │ │ │ -
295 out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0];
│ │ │ │ -
296 out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1];
│ │ │ │ -
297 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1;
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
290 {
│ │ │ │ + │ │ │ │ +
292 }
│ │ │ │ +
│ │ │ │ +
293
│ │ │ │ +
│ │ │ │ +
295 unsigned int size () const
│ │ │ │ +
296 {
│ │ │ │ +
297 return impl_->size();
│ │ │ │
298 }
│ │ │ │
│ │ │ │
299
│ │ │ │
│ │ │ │ -
301 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
302 const typename Traits::DomainType& in, // position
│ │ │ │ -
303 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
304 {
│ │ │ │ -
305 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
306 if (totalOrder == 0) {
│ │ │ │ -
307 evaluateFunction(in, out);
│ │ │ │ -
308 } else if (totalOrder == 1) {
│ │ │ │ -
309 out.resize(size());
│ │ │ │ -
310 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
311
│ │ │ │ -
312 switch (direction) {
│ │ │ │ -
313 case 0:
│ │ │ │ -
314 out[0] = -1;
│ │ │ │ -
315 out[1] = 4-8*in[0]-4*in[1]-4*in[2];
│ │ │ │ -
316 out[2] = 1;
│ │ │ │ -
317 out[3] = -4*in[1];
│ │ │ │ -
318 out[4] = 4*in[1];
│ │ │ │ -
319 out[5] = 0;
│ │ │ │ -
320 out[6] = -4*in[2];
│ │ │ │ -
321 out[7] = 4*in[2];
│ │ │ │ -
322 out[8] = 0;
│ │ │ │ -
323 out[9] = 0;
│ │ │ │ -
324 break;
│ │ │ │ -
325 case 1:
│ │ │ │ -
326 out[0] = -1;
│ │ │ │ -
327 out[1] = -4*in[0];
│ │ │ │ -
328 out[2] = 0;
│ │ │ │ -
329 out[3] = 4-4*in[0]-8*in[1]-4*in[2];
│ │ │ │ -
330 out[4] = 4*in[0];
│ │ │ │ -
331 out[5] = 1;
│ │ │ │ -
332 out[6] = -4*in[2];
│ │ │ │ -
333 out[7] = 0;
│ │ │ │ -
334 out[8] = 4*in[2];
│ │ │ │ -
335 out[9] = 0;
│ │ │ │ -
336 break;
│ │ │ │ -
337 case 2:
│ │ │ │ -
338 out[0] = -1;
│ │ │ │ -
339 out[1] = -4*in[0];
│ │ │ │ -
340 out[2] = 0;
│ │ │ │ -
341 out[3] = -4*in[1];
│ │ │ │ -
342 out[4] = 0;
│ │ │ │ -
343 out[5] = 0;
│ │ │ │ -
344 out[6] = 4-4*in[0]-4*in[1]-8*in[2];
│ │ │ │ -
345 out[7] = 4*in[0];
│ │ │ │ -
346 out[8] = 4*in[1];
│ │ │ │ -
347 out[9] = 1;
│ │ │ │ -
348 break;
│ │ │ │ -
349 default:
│ │ │ │ -
350 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
351 }
│ │ │ │ -
352 } else {
│ │ │ │ -
353 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
354 }
│ │ │ │ -
355 }
│ │ │ │ -
│ │ │ │ -
356
│ │ │ │ -
│ │ │ │ -
359 unsigned int order () const
│ │ │ │ -
360 {
│ │ │ │ -
361 return 2;
│ │ │ │ -
362 }
│ │ │ │ -
│ │ │ │ -
363
│ │ │ │ -
364 };
│ │ │ │ -
│ │ │ │ -
365}
│ │ │ │ -
366#endif
│ │ │ │ +
301 const GeometryType type () const
│ │ │ │ +
302 {
│ │ │ │ +
303 return impl_->type();
│ │ │ │ +
304 }
│ │ │ │ +
│ │ │ │ +
305
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
312 {
│ │ │ │ +
313 return new LocalFiniteElementVirtualImp<Imp>(*this);
│ │ │ │ +
314 }
│ │ │ │ +
│ │ │ │ +
315
│ │ │ │ +
316 protected:
│ │ │ │ +
317 const Imp* impl_;
│ │ │ │ +
318
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
323 typename Imp::Traits::LocalInterpolationType> localInterpolationImp_;
│ │ │ │ +
324 };
│ │ │ │ +
│ │ │ │ +
325}
│ │ │ │ +
326#endif
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition hierarchicalsimplexp2localbasis.hh:23
│ │ │ │ -
HierarchicalSimplexP2LocalBasis()
Definition hierarchicalsimplexp2localbasis.hh:25
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions (2, in this case)
Definition hierarchicalsimplexp2localbasis.hh:109
│ │ │ │ -
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:52
│ │ │ │ -
void partial(const std::array< unsigned int, 1 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:84
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:55
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:73
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:61
│ │ │ │ -
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:142
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:181
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:145
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition hierarchicalsimplexp2localbasis.hh:219
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:167
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:151
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition hierarchicalsimplexp2localbasis.hh:256
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:265
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:283
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition hierarchicalsimplexp2localbasis.hh:259
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2localbasis.hh:301
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions (2 in this case)
Definition hierarchicalsimplexp2localbasis.hh:359
│ │ │ │ - │ │ │ │ +
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
virtual base class for a local interpolation
Definition virtualinterface.hh:133
│ │ │ │ +
std::function< RangeType(DomainType)> FunctionType
type of function to interpolate
Definition virtualinterface.hh:137
│ │ │ │ +
RangeType::field_type CoefficientType
type of the coefficient vector in the interpolate method
Definition virtualinterface.hh:140
│ │ │ │ +
virtual base class for a local basis
Definition virtualinterface.hh:40
│ │ │ │ +
virtual base class for local coefficients
Definition virtualinterface.hh:198
│ │ │ │ +
virtual base class for local finite elements with functions
Definition virtualinterface.hh:225
│ │ │ │ +
class for wrapping a finite element using the virtual interface
Definition virtualwrappers.hh:240
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition virtualwrappers.hh:277
│ │ │ │ +
virtual LocalFiniteElementVirtualImp< Imp > * clone() const
clone this wrapper
Definition virtualwrappers.hh:311
│ │ │ │ +
const LocalInterpolationVirtualImp< typename LocalBasisTraits::DomainType, typename LocalBasisTraits::RangeType, typename Imp::Traits::LocalInterpolationType > localInterpolationImp_
Definition virtualwrappers.hh:323
│ │ │ │ +
LocalFiniteElementVirtualImp(const Imp &imp)
taking a LocalFiniteElementVirtualInterface implementation
Definition virtualwrappers.hh:248
│ │ │ │ +
Interface::Traits Traits
Definition virtualwrappers.hh:245
│ │ │ │ +
LocalFiniteElementVirtualImp()
Default constructor. Assumes that the implementation class is default constructible as well.
Definition virtualwrappers.hh:256
│ │ │ │ +
LocalFiniteElementVirtualImp(const LocalFiniteElementVirtualImp &other)
Copy constructor needed for deep copy.
Definition virtualwrappers.hh:264
│ │ │ │ +
~LocalFiniteElementVirtualImp()
Definition virtualwrappers.hh:271
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition virtualwrappers.hh:295
│ │ │ │ +
const GeometryType type() const
Definition virtualwrappers.hh:301
│ │ │ │ +
const Imp * impl_
Definition virtualwrappers.hh:317
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition virtualwrappers.hh:283
│ │ │ │ +
const LocalBasisVirtualImp< LocalBasisTraits, typename Imp::Traits::LocalBasisType > localBasisImp_
Definition virtualwrappers.hh:319
│ │ │ │ +
const LocalCoefficientsVirtualImp< typename Imp::Traits::LocalCoefficientsType > localCoefficientsImp_
Definition virtualwrappers.hh:320
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition virtualwrappers.hh:289
│ │ │ │ +
Definition virtualwrappers.hh:24
│ │ │ │ +
static Imp * clone(const Imp &imp)
Definition virtualwrappers.hh:25
│ │ │ │ +
Definition virtualwrappers.hh:44
│ │ │ │ +
static Imp * clone(const Imp &imp)
Definition virtualwrappers.hh:47
│ │ │ │ +
static Imp * create()
Definition virtualwrappers.hh:52
│ │ │ │ +
LocalFiniteElementVirtualInterface< typename Imp::Traits::LocalBasisType::Traits > Interface
Definition virtualwrappers.hh:45
│ │ │ │ +
class for wrapping a basis using the virtual interface
Definition virtualwrappers.hh:75
│ │ │ │ +
void partial(const std::array< unsigned int, Traits::dimDomain > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of any order of all shape functions.
Definition virtualwrappers.hh:121
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all basis function at given position.
Definition virtualwrappers.hh:102
│ │ │ │ +
const Imp & impl_
Definition virtualwrappers.hh:129
│ │ │ │ +
unsigned int size() const
Number of shape functions.
Definition virtualwrappers.hh:90
│ │ │ │ +
T Traits
Definition virtualwrappers.hh:87
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate jacobian of all shape functions at given position.
Definition virtualwrappers.hh:109
│ │ │ │ +
LocalBasisVirtualImp(const Imp &imp)
constructor taking an implementation of the interface
Definition virtualwrappers.hh:82
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition virtualwrappers.hh:96
│ │ │ │ +
class for wrapping a local interpolation using the virtual interface
Definition virtualwrappers.hh:149
│ │ │ │ +
virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > &out) const
determine coefficients interpolating a given function
Definition virtualwrappers.hh:168
│ │ │ │ +
const Imp & impl_
Definition virtualwrappers.hh:174
│ │ │ │ +
Base::FunctionType FunctionType
Definition virtualwrappers.hh:163
│ │ │ │ +
LocalInterpolationVirtualImp(const Imp &imp)
constructor taking an implementation of the Dune::LocalInterpolationVirtualInterface
Definition virtualwrappers.hh:158
│ │ │ │ +
Base::CoefficientType CoefficientType
Definition virtualwrappers.hh:165
│ │ │ │ +
class for wrapping local coefficients using the virtual interface
Definition virtualwrappers.hh:193
│ │ │ │ +
LocalCoefficientsVirtualImp(const Imp &imp)
constructor taking an implementation of the Dune::LocalCoefficientsVirtualInterface
Definition virtualwrappers.hh:200
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition virtualwrappers.hh:213
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition virtualwrappers.hh:207
│ │ │ │ +
const Imp & impl_
Definition virtualwrappers.hh:219
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,403 +1,489 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2 │ │ │ │ │ -hierarchicalsimplexp2localbasis.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +virtualwrappers.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_SIMPLEX_P2_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_VIRTUALWRAPPERS_HH │ │ │ │ │ 7 │ │ │ │ │ -12#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h> │ │ │ │ │ 13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ 16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18 │ │ │ │ │ -19namespace _D_u_n_e │ │ │ │ │ -20{ │ │ │ │ │ -21 template │ │ │ │ │ -_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -23 { │ │ │ │ │ -24 public: │ │ │ │ │ -_2_5 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +17 // forward declaration needed by friend declarations │ │ │ │ │ +18 template │ │ │ │ │ +19 class LocalFiniteElementVirtualImp; │ │ │ │ │ +20 │ │ │ │ │ +21 // default clone method is the copy constructor │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r │ │ │ │ │ +24 { │ │ │ │ │ +_2_5 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ 26 { │ │ │ │ │ -27 DUNE_THROW(Dune::NotImplemented,"HierarchicalSimplexP2LocalBasis not │ │ │ │ │ -implemented for dim > 3."); │ │ │ │ │ +27 return new Imp(imp); │ │ │ │ │ 28 } │ │ │ │ │ 29 }; │ │ │ │ │ 30 │ │ │ │ │ -46 template │ │ │ │ │ -_4_7 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +31 // if FE derives from virtual interface the clone method is used │ │ │ │ │ +32 template │ │ │ │ │ +33 struct LocalFiniteElementCloneFactoryHelper │ │ │ │ │ +34 { │ │ │ │ │ +35 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ +36 { │ │ │ │ │ +37 return imp.clone(); │ │ │ │ │ +38 } │ │ │ │ │ +39 }; │ │ │ │ │ +40 │ │ │ │ │ +41 // factory template to clone and create an objects │ │ │ │ │ +42 template │ │ │ │ │ +_4_3 struct _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y │ │ │ │ │ +44 { │ │ │ │ │ +_4_5 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ +_L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_T_r_a_i_t_s_> _I_n_t_e_r_f_a_c_e; │ │ │ │ │ +46 │ │ │ │ │ +_4_7 static Imp* _c_l_o_n_e(const Imp& imp) │ │ │ │ │ 48 { │ │ │ │ │ -49 public: │ │ │ │ │ -51 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_1_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_1_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_5_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -53 │ │ │ │ │ -_5_5 unsigned int _s_i_z_e () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return 3; │ │ │ │ │ -58 } │ │ │ │ │ +49 return _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_<_I_m_p_,_ _s_t_d_:_:_i_s___b_a_s_e___o_f_<_I_n_t_e_r_f_a_c_e_, │ │ │ │ │ +_I_m_p_>_:_:_v_a_l_u_e>_:_:_c_l_o_n_e(imp); │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +_5_2 static Imp* _c_r_e_a_t_e() │ │ │ │ │ +53 { │ │ │ │ │ +54 return new Imp; │ │ │ │ │ +55 } │ │ │ │ │ +56 }; │ │ │ │ │ +57 │ │ │ │ │ +58 │ │ │ │ │ 59 │ │ │ │ │ -_6_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -62 std::vector& out) const │ │ │ │ │ -63 { │ │ │ │ │ -64 out.resize(3); │ │ │ │ │ +60 // ----------------------------------------------------------------- │ │ │ │ │ +61 // Basis │ │ │ │ │ +62 // ----------------------------------------------------------------- │ │ │ │ │ +63 │ │ │ │ │ +64 │ │ │ │ │ 65 │ │ │ │ │ -66 out[0] = 1-in[0]; │ │ │ │ │ -67 out[1] = 1-4*(in[0]-0.5)*(in[0]-0.5); │ │ │ │ │ -68 out[2] = in[0]; │ │ │ │ │ -69 } │ │ │ │ │ -70 │ │ │ │ │ -72 inline void │ │ │ │ │ -_7_3 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -74 std::vector& out) const // return value │ │ │ │ │ +72 template │ │ │ │ │ +_7_3 class _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +74 : public _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ 75 { │ │ │ │ │ -76 out.resize(3); │ │ │ │ │ -77 │ │ │ │ │ -78 out[0][0][0] = -1; │ │ │ │ │ -79 out[1][0][0] = 4-8*in[0]; │ │ │ │ │ -80 out[2][0][0] = 1; │ │ │ │ │ -81 } │ │ │ │ │ -82 │ │ │ │ │ -_8_4 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -85 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -86 std::vector& out) const // return value │ │ │ │ │ -87 { │ │ │ │ │ -88 auto totalOrder = order[0]; │ │ │ │ │ -89 if (totalOrder == 0) { │ │ │ │ │ -90 evaluateFunction(in, out); │ │ │ │ │ -91 } else if (totalOrder == 1) { │ │ │ │ │ -92 out.resize(size()); │ │ │ │ │ -93 out[0] = -1; │ │ │ │ │ -94 out[1] = 4-8*in[0]; │ │ │ │ │ -95 out[2] = 1; │ │ │ │ │ -96 } else if (totalOrder == 2) { │ │ │ │ │ -97 out.resize(size()); │ │ │ │ │ -98 out[0] = 0; │ │ │ │ │ -99 out[1] = -8; │ │ │ │ │ -100 out[2] = 0; │ │ │ │ │ -101 } else { │ │ │ │ │ -102 out.resize(size()); │ │ │ │ │ -103 out[0] = out[1] = out[2] = 0; │ │ │ │ │ -104 } │ │ │ │ │ -105 } │ │ │ │ │ -106 │ │ │ │ │ -_1_0_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ -110 { │ │ │ │ │ -111 return 2; │ │ │ │ │ -112 } │ │ │ │ │ -113 │ │ │ │ │ -114 }; │ │ │ │ │ +76 template │ │ │ │ │ +_7_7 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ +78 │ │ │ │ │ +79 protected: │ │ │ │ │ +80 │ │ │ │ │ +_8_2 _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ +83 : _i_m_p_l__(imp) │ │ │ │ │ +84 {} │ │ │ │ │ +85 │ │ │ │ │ +86 public: │ │ │ │ │ +_8_7 using _T_r_a_i_t_s = T; │ │ │ │ │ +88 │ │ │ │ │ +_9_0 unsigned int _s_i_z_e () const │ │ │ │ │ +91 { │ │ │ │ │ +92 return _i_m_p_l__.size(); │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +_9_6 unsigned int _o_r_d_e_r () const │ │ │ │ │ +97 { │ │ │ │ │ +98 return _i_m_p_l__.order(); │ │ │ │ │ +99 } │ │ │ │ │ +100 │ │ │ │ │ +_1_0_2 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename Traits::DomainType& in, │ │ │ │ │ +103 std::vector& out) const │ │ │ │ │ +104 { │ │ │ │ │ +105 _i_m_p_l__.evaluateFunction(in,out); │ │ │ │ │ +106 } │ │ │ │ │ +107 │ │ │ │ │ +_1_0_9 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n( │ │ │ │ │ +110 const typename Traits::DomainType& in, │ │ │ │ │ +111 std::vector& out) const │ │ │ │ │ +112 { │ │ │ │ │ +113 _i_m_p_l__.evaluateJacobian(in,out); │ │ │ │ │ +114 } │ │ │ │ │ 115 │ │ │ │ │ -136 template │ │ │ │ │ -_1_3_7 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -138 { │ │ │ │ │ -139 public: │ │ │ │ │ -141 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_1_4_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -143 │ │ │ │ │ -_1_4_5 unsigned int _s_i_z_e () const │ │ │ │ │ -146 { │ │ │ │ │ -147 return 6; │ │ │ │ │ -148 } │ │ │ │ │ -149 │ │ │ │ │ -_1_5_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -152 std::vector& out) const │ │ │ │ │ -153 { │ │ │ │ │ -154 out.resize(6); │ │ │ │ │ -155 │ │ │ │ │ -156 out[0] = 1 - in[0] - in[1]; │ │ │ │ │ -157 out[1] = 4*in[0]*(1-in[0]-in[1]); │ │ │ │ │ -158 out[2] = in[0]; │ │ │ │ │ -159 out[3] = 4*in[1]*(1-in[0]-in[1]); │ │ │ │ │ -160 out[4] = 4*in[0]*in[1]; │ │ │ │ │ -161 out[5] = in[1]; │ │ │ │ │ +_1_2_1 void _p_a_r_t_i_a_l(const std::array& _o_r_d_e_r, │ │ │ │ │ +122 const typename Traits::DomainType& in, │ │ │ │ │ +123 std::vector& out) const │ │ │ │ │ +124 { │ │ │ │ │ +125 _i_m_p_l__.partial(_o_r_d_e_r,in,out); │ │ │ │ │ +126 } │ │ │ │ │ +127 │ │ │ │ │ +128 protected: │ │ │ │ │ +_1_2_9 const Imp& _i_m_p_l__; │ │ │ │ │ +130 }; │ │ │ │ │ +131 │ │ │ │ │ +132 │ │ │ │ │ +133 │ │ │ │ │ +134 // ----------------------------------------------------------------- │ │ │ │ │ +135 // Interpolation │ │ │ │ │ +136 // ----------------------------------------------------------------- │ │ │ │ │ +137 │ │ │ │ │ +146 template │ │ │ │ │ +_1_4_7 class _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +148 : public _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e< DomainType, RangeType > │ │ │ │ │ +149 { │ │ │ │ │ +150 template │ │ │ │ │ +_1_5_1 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ +152 │ │ │ │ │ +153 typedef _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_ _D_o_m_a_i_n_T_y_p_e_,_ _R_a_n_g_e_T_y_p_e_ _> _B_a_s_e; │ │ │ │ │ +154 │ │ │ │ │ +155 protected: │ │ │ │ │ +156 │ │ │ │ │ +_1_5_8 _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p( const Imp &imp) │ │ │ │ │ +159 : _i_m_p_l__(imp) {} │ │ │ │ │ +160 │ │ │ │ │ +161 public: │ │ │ │ │ 162 │ │ │ │ │ -163 } │ │ │ │ │ +_1_6_3 typedef typename _B_a_s_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e _F_u_n_c_t_i_o_n_T_y_p_e; │ │ │ │ │ 164 │ │ │ │ │ -166 inline void │ │ │ │ │ -_1_6_7 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -168 std::vector& out) const // return value │ │ │ │ │ +_1_6_5 typedef typename _B_a_s_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e _C_o_e_f_f_i_c_i_e_n_t_T_y_p_e; │ │ │ │ │ +166 │ │ │ │ │ +_1_6_8 virtual void _i_n_t_e_r_p_o_l_a_t_e (const _F_u_n_c_t_i_o_n_T_y_p_e& f, std:: │ │ │ │ │ +vector& out) const │ │ │ │ │ 169 { │ │ │ │ │ -170 out.resize(6); │ │ │ │ │ -171 │ │ │ │ │ -172 out[0][0][0] = -1; out[0][0][1] = -1; │ │ │ │ │ -173 out[1][0][0] = 4-8*in[0]-4*in[1]; out[1][0][1] = -4*in[0]; │ │ │ │ │ -174 out[2][0][0] = 1; out[2][0][1] = 0; │ │ │ │ │ -175 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]; │ │ │ │ │ -176 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; │ │ │ │ │ -177 out[5][0][0] = 0; out[5][0][1] = 1; │ │ │ │ │ -178 } │ │ │ │ │ +170 _i_m_p_l__.interpolate(f,out); │ │ │ │ │ +171 } │ │ │ │ │ +172 │ │ │ │ │ +173 protected: │ │ │ │ │ +_1_7_4 const Imp& _i_m_p_l__; │ │ │ │ │ +175 │ │ │ │ │ +176 }; │ │ │ │ │ +177 │ │ │ │ │ +178 │ │ │ │ │ 179 │ │ │ │ │ -_1_8_1 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -182 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -183 std::vector& out) const // return value │ │ │ │ │ -184 { │ │ │ │ │ -185 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -186 if (totalOrder == 0) { │ │ │ │ │ -187 evaluateFunction(in, out); │ │ │ │ │ -188 } else if (totalOrder == 1) { │ │ │ │ │ -189 out.resize(size()); │ │ │ │ │ -190 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -191 │ │ │ │ │ -192 switch (direction) { │ │ │ │ │ -193 case 0: │ │ │ │ │ -194 out[0] = -1; │ │ │ │ │ -195 out[1] = 4-8*in[0]-4*in[1]; │ │ │ │ │ -196 out[2] = 1; │ │ │ │ │ -197 out[3] = -4*in[1]; │ │ │ │ │ -198 out[4] = 4*in[1]; │ │ │ │ │ -199 out[5] = 0; │ │ │ │ │ -200 break; │ │ │ │ │ -201 case 1: │ │ │ │ │ -202 out[0] = -1; │ │ │ │ │ -203 out[1] = -4*in[0]; │ │ │ │ │ -204 out[2] = 0; │ │ │ │ │ -205 out[3] = 4-4*in[0]-8*in[1]; │ │ │ │ │ -206 out[4] = 4*in[0]; │ │ │ │ │ -207 out[5] = 1; │ │ │ │ │ -208 break; │ │ │ │ │ -209 default: │ │ │ │ │ -210 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -211 } │ │ │ │ │ -212 } else { │ │ │ │ │ -213 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -214 } │ │ │ │ │ -215 } │ │ │ │ │ -216 │ │ │ │ │ -_2_1_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ -220 { │ │ │ │ │ -221 return 2; │ │ │ │ │ -222 } │ │ │ │ │ +180 // ----------------------------------------------------------------- │ │ │ │ │ +181 // Coefficients │ │ │ │ │ +182 // ----------------------------------------------------------------- │ │ │ │ │ +183 │ │ │ │ │ +190 template │ │ │ │ │ +_1_9_1 class _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +192 : public _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +193 { │ │ │ │ │ +194 template │ │ │ │ │ +_1_9_5 friend class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p; │ │ │ │ │ +196 │ │ │ │ │ +197 protected: │ │ │ │ │ +198 │ │ │ │ │ +_2_0_0 _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ +201 : _i_m_p_l__(imp) │ │ │ │ │ +202 {} │ │ │ │ │ +203 │ │ │ │ │ +204 public: │ │ │ │ │ +205 │ │ │ │ │ +_2_0_7 std::size_t _s_i_z_e () const │ │ │ │ │ +208 { │ │ │ │ │ +209 return _i_m_p_l__.size(); │ │ │ │ │ +210 } │ │ │ │ │ +211 │ │ │ │ │ +_2_1_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const │ │ │ │ │ +214 { │ │ │ │ │ +215 return _i_m_p_l__.localKey(i); │ │ │ │ │ +216 } │ │ │ │ │ +217 │ │ │ │ │ +218 protected: │ │ │ │ │ +_2_1_9 const Imp& _i_m_p_l__; │ │ │ │ │ +220 │ │ │ │ │ +221 }; │ │ │ │ │ +222 │ │ │ │ │ 223 │ │ │ │ │ -224 }; │ │ │ │ │ -225 │ │ │ │ │ -250 template │ │ │ │ │ -_2_5_1 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -252 { │ │ │ │ │ -253 public: │ │ │ │ │ -255 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ -FieldVector, │ │ │ │ │ -_2_5_6 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -257 │ │ │ │ │ -_2_5_9 unsigned int _s_i_z_e () const │ │ │ │ │ -260 { │ │ │ │ │ -261 return 10; │ │ │ │ │ -262 } │ │ │ │ │ -263 │ │ │ │ │ -_2_6_5 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -266 std::vector& out) const │ │ │ │ │ -267 { │ │ │ │ │ -268 out.resize(10); │ │ │ │ │ -269 │ │ │ │ │ -270 out[0] = 1 - in[0] - in[1] - in[2]; │ │ │ │ │ -271 out[1] = 4 * in[0] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ -272 out[2] = in[0]; │ │ │ │ │ -273 out[3] = 4 * in[1] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ -274 out[4] = 4 * in[0] * in[1]; │ │ │ │ │ -275 out[5] = in[1]; │ │ │ │ │ -276 out[6] = 4 * in[2] * (1 - in[0] - in[1] - in[2]); │ │ │ │ │ -277 out[7] = 4 * in[0] * in[2]; │ │ │ │ │ -278 out[8] = 4 * in[1] * in[2]; │ │ │ │ │ -279 out[9] = in[2]; │ │ │ │ │ +224 │ │ │ │ │ +225 // ----------------------------------------------------------------- │ │ │ │ │ +226 // Finite Element │ │ │ │ │ +227 // ----------------------------------------------------------------- │ │ │ │ │ +228 │ │ │ │ │ +237 template │ │ │ │ │ +_2_3_8 class _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +239 : public _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +240 { │ │ │ │ │ +241 using LocalBasisTraits = typename Imp::Traits::LocalBasisType::Traits; │ │ │ │ │ +242 using _I_n_t_e_r_f_a_c_e = _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_<_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_>; │ │ │ │ │ +243 │ │ │ │ │ +244 public: │ │ │ │ │ +_2_4_5 typedef typename _I_n_t_e_r_f_a_c_e_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ +246 │ │ │ │ │ +_2_4_8 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p( const Imp &imp ) │ │ │ │ │ +249 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::_c_l_o_n_e(imp)), │ │ │ │ │ +250 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ +251 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ +252 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ +253 {} │ │ │ │ │ +254 │ │ │ │ │ +_2_5_6 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p() │ │ │ │ │ +257 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::create()), │ │ │ │ │ +258 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ +259 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ +260 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ +261 {} │ │ │ │ │ +262 │ │ │ │ │ +_2_6_4 _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p(const _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p& other) │ │ │ │ │ +265 : _i_m_p_l__(_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y::_c_l_o_n_e(*other._i_m_p_l__)), │ │ │ │ │ +266 _l_o_c_a_l_B_a_s_i_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_B_a_s_i_s()), │ │ │ │ │ +267 _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__(_i_m_p_l__->_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s()), │ │ │ │ │ +268 _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__(_i_m_p_l__->_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n()) │ │ │ │ │ +269 {} │ │ │ │ │ +270 │ │ │ │ │ +_2_7_1 _~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p() │ │ │ │ │ +272 { │ │ │ │ │ +273 delete _i_m_p_l__; │ │ │ │ │ +274 } │ │ │ │ │ +275 │ │ │ │ │ +_2_7_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +278 { │ │ │ │ │ +279 return _l_o_c_a_l_B_a_s_i_s_I_m_p__; │ │ │ │ │ 280 } │ │ │ │ │ 281 │ │ │ │ │ -_2_8_3 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -284 std::vector& out) const // return value │ │ │ │ │ -285 { │ │ │ │ │ -286 out.resize(10); │ │ │ │ │ +_2_8_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +284 { │ │ │ │ │ +285 return _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__; │ │ │ │ │ +286 } │ │ │ │ │ 287 │ │ │ │ │ -288 out[0][0][0] = -1; out[0][0][1] = -1; out[0][0][2] = -1; │ │ │ │ │ -289 out[1][0][0] = 4-8*in[0]-4*in[1]-4*in[2]; out[1][0][1] = -4*in[0]; out[1] │ │ │ │ │ -[0][2] = -4*in[0]; │ │ │ │ │ -290 out[2][0][0] = 1; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ -291 out[3][0][0] = -4*in[1]; out[3][0][1] = 4-4*in[0]-8*in[1]-4*in[2]; out[3] │ │ │ │ │ -[0][2] = -4*in[1]; │ │ │ │ │ -292 out[4][0][0] = 4*in[1]; out[4][0][1] = 4*in[0]; out[4][0][2] = 0; │ │ │ │ │ -293 out[5][0][0] = 0; out[5][0][1] = 1; out[5][0][2] = 0; │ │ │ │ │ -294 out[6][0][0] = -4*in[2]; out[6][0][1] = -4*in[2]; out[6][0][2] = 4-4*in[0]- │ │ │ │ │ -4*in[1]-8*in[2]; │ │ │ │ │ -295 out[7][0][0] = 4*in[2]; out[7][0][1] = 0; out[7][0][2] = 4*in[0]; │ │ │ │ │ -296 out[8][0][0] = 0; out[8][0][1] = 4*in[2]; out[8][0][2] = 4*in[1]; │ │ │ │ │ -297 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 1; │ │ │ │ │ +_2_8_9 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +290 { │ │ │ │ │ +291 return _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__; │ │ │ │ │ +292 } │ │ │ │ │ +293 │ │ │ │ │ +_2_9_5 unsigned int _s_i_z_e () const │ │ │ │ │ +296 { │ │ │ │ │ +297 return _i_m_p_l__->size(); │ │ │ │ │ 298 } │ │ │ │ │ 299 │ │ │ │ │ -_3_0_1 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -302 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -303 std::vector& out) const // return value │ │ │ │ │ -304 { │ │ │ │ │ -305 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ -306 if (totalOrder == 0) { │ │ │ │ │ -307 evaluateFunction(in, out); │ │ │ │ │ -308 } else if (totalOrder == 1) { │ │ │ │ │ -309 out.resize(size()); │ │ │ │ │ -310 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ -(), order.end(), 1)); │ │ │ │ │ -311 │ │ │ │ │ -312 switch (direction) { │ │ │ │ │ -313 case 0: │ │ │ │ │ -314 out[0] = -1; │ │ │ │ │ -315 out[1] = 4-8*in[0]-4*in[1]-4*in[2]; │ │ │ │ │ -316 out[2] = 1; │ │ │ │ │ -317 out[3] = -4*in[1]; │ │ │ │ │ -318 out[4] = 4*in[1]; │ │ │ │ │ -319 out[5] = 0; │ │ │ │ │ -320 out[6] = -4*in[2]; │ │ │ │ │ -321 out[7] = 4*in[2]; │ │ │ │ │ -322 out[8] = 0; │ │ │ │ │ -323 out[9] = 0; │ │ │ │ │ -324 break; │ │ │ │ │ -325 case 1: │ │ │ │ │ -326 out[0] = -1; │ │ │ │ │ -327 out[1] = -4*in[0]; │ │ │ │ │ -328 out[2] = 0; │ │ │ │ │ -329 out[3] = 4-4*in[0]-8*in[1]-4*in[2]; │ │ │ │ │ -330 out[4] = 4*in[0]; │ │ │ │ │ -331 out[5] = 1; │ │ │ │ │ -332 out[6] = -4*in[2]; │ │ │ │ │ -333 out[7] = 0; │ │ │ │ │ -334 out[8] = 4*in[2]; │ │ │ │ │ -335 out[9] = 0; │ │ │ │ │ -336 break; │ │ │ │ │ -337 case 2: │ │ │ │ │ -338 out[0] = -1; │ │ │ │ │ -339 out[1] = -4*in[0]; │ │ │ │ │ -340 out[2] = 0; │ │ │ │ │ -341 out[3] = -4*in[1]; │ │ │ │ │ -342 out[4] = 0; │ │ │ │ │ -343 out[5] = 0; │ │ │ │ │ -344 out[6] = 4-4*in[0]-4*in[1]-8*in[2]; │ │ │ │ │ -345 out[7] = 4*in[0]; │ │ │ │ │ -346 out[8] = 4*in[1]; │ │ │ │ │ -347 out[9] = 1; │ │ │ │ │ -348 break; │ │ │ │ │ -349 default: │ │ │ │ │ -350 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -351 } │ │ │ │ │ -352 } else { │ │ │ │ │ -353 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -354 } │ │ │ │ │ -355 } │ │ │ │ │ -356 │ │ │ │ │ -_3_5_9 unsigned int _o_r_d_e_r () const │ │ │ │ │ -360 { │ │ │ │ │ -361 return 2; │ │ │ │ │ -362 } │ │ │ │ │ -363 │ │ │ │ │ -364 }; │ │ │ │ │ -365} │ │ │ │ │ -366#endif │ │ │ │ │ +_3_0_1 const GeometryType _t_y_p_e () const │ │ │ │ │ +302 { │ │ │ │ │ +303 return _i_m_p_l__->type(); │ │ │ │ │ +304 } │ │ │ │ │ +305 │ │ │ │ │ +_3_1_1 virtual _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_I_m_p_>* _c_l_o_n_e() const │ │ │ │ │ +312 { │ │ │ │ │ +313 return new _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_<_I_m_p_>(*this); │ │ │ │ │ +314 } │ │ │ │ │ +315 │ │ │ │ │ +316 protected: │ │ │ │ │ +_3_1_7 const Imp* _i_m_p_l__; │ │ │ │ │ +318 │ │ │ │ │ +_3_1_9 const _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_<_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_,_ _t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ +_L_o_c_a_l_B_a_s_i_s_T_y_p_e_> _l_o_c_a_l_B_a_s_i_s_I_m_p__; │ │ │ │ │ +_3_2_0 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_<_t_y_p_e_n_a_m_e_ _I_m_p_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ +_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_> _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__; │ │ │ │ │ +321 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__; │ │ │ │ │ +324 }; │ │ │ │ │ +325} │ │ │ │ │ +326#endif │ │ │ │ │ +_v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ D DomainType │ │ │ │ │ domain type │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -HierarchicalSimplexP2LocalBasis() │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions (2, in this case) │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:109 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 1 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 1 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +R RangeType │ │ │ │ │ +range type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for a local interpolation │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:133 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ +std::function< RangeType(DomainType)> FunctionType │ │ │ │ │ +type of function to interpolate │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:137 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ +RangeType::field_type CoefficientType │ │ │ │ │ +type of the coefficient vector in the interpolate method │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:140 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for a local basis │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local coefficients │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:198 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e │ │ │ │ │ +virtual base class for local finite elements with functions │ │ │ │ │ +DDeeffiinniittiioonn virtualinterface.hh:225 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping a finite element using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:240 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:277 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_c_l_o_n_e │ │ │ │ │ +virtual LocalFiniteElementVirtualImp< Imp > * clone() const │ │ │ │ │ +clone this wrapper │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:311 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_I_m_p__ │ │ │ │ │ +const LocalInterpolationVirtualImp< typename LocalBasisTraits::DomainType, │ │ │ │ │ +typename LocalBasisTraits::RangeType, typename Imp::Traits:: │ │ │ │ │ +LocalInterpolationType > localInterpolationImp_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:323 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalFiniteElementVirtualImp(const Imp &imp) │ │ │ │ │ +taking a LocalFiniteElementVirtualInterface implementation │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:248 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_T_r_a_i_t_s │ │ │ │ │ +Interface::Traits Traits │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:245 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalFiniteElementVirtualImp() │ │ │ │ │ +Default constructor. Assumes that the implementation class is default │ │ │ │ │ +constructible as well. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:256 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalFiniteElementVirtualImp(const LocalFiniteElementVirtualImp &other) │ │ │ │ │ +Copy constructor needed for deep copy. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:264 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_~_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +~LocalFiniteElementVirtualImp() │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:271 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:73 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:295 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_t_y_p_e │ │ │ │ │ +const GeometryType type() const │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:301 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ +const Imp * impl_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:317 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:283 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_B_a_s_i_s_I_m_p__ │ │ │ │ │ +const LocalBasisVirtualImp< LocalBasisTraits, typename Imp::Traits:: │ │ │ │ │ +LocalBasisType > localBasisImp_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:319 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_I_m_p__ │ │ │ │ │ +const LocalCoefficientsVirtualImp< typename Imp::Traits::LocalCoefficientsType │ │ │ │ │ +> localCoefficientsImp_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:320 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:289 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_H_e_l_p_e_r_:_:_c_l_o_n_e │ │ │ │ │ +static Imp * clone(const Imp &imp) │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_c_l_o_n_e │ │ │ │ │ +static Imp * clone(const Imp &imp) │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Imp * create() │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_C_l_o_n_e_F_a_c_t_o_r_y_:_:_I_n_t_e_r_f_a_c_e │ │ │ │ │ +LocalFiniteElementVirtualInterface< typename Imp::Traits::LocalBasisType:: │ │ │ │ │ +Traits > Interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping a basis using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, Traits::dimDomain > &order, const │ │ │ │ │ +typename Traits::DomainType &in, std::vector< typename Traits::RangeType > │ │ │ │ │ +&out) const │ │ │ │ │ +Evaluate partial derivatives of any order of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:121 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:142 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:181 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ +Evaluate all basis function at given position. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:102 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ +const Imp & impl_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:129 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:145 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions (2 in this case) │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:219 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_T_r_a_i_t_s │ │ │ │ │ +T Traits │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:167 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:151 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:256 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:265 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:283 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:259 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:301 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ +Evaluate jacobian of all shape functions at given position. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:109 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalBasisVirtualImp(const Imp &imp) │ │ │ │ │ +constructor taking an implementation of the interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:82 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_m_p_:_:_o_r_d_e_r │ │ │ │ │ unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions (2 in this case) │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:359 │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping a local interpolation using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:149 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +virtual void interpolate(const FunctionType &f, std::vector< CoefficientType > │ │ │ │ │ +&out) const │ │ │ │ │ +determine coefficients interpolating a given function │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:168 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ +const Imp & impl_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:174 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_F_u_n_c_t_i_o_n_T_y_p_e │ │ │ │ │ +Base::FunctionType FunctionType │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalInterpolationVirtualImp(const Imp &imp) │ │ │ │ │ +constructor taking an implementation of the Dune:: │ │ │ │ │ +LocalInterpolationVirtualInterface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:158 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_V_i_r_t_u_a_l_I_m_p_:_:_C_o_e_f_f_i_c_i_e_n_t_T_y_p_e │ │ │ │ │ +Base::CoefficientType CoefficientType │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:165 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +class for wrapping local coefficients using the virtual interface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:193 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p │ │ │ │ │ +LocalCoefficientsVirtualImp(const Imp &imp) │ │ │ │ │ +constructor taking an implementation of the Dune:: │ │ │ │ │ +LocalCoefficientsVirtualInterface │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:200 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:213 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:207 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_V_i_r_t_u_a_l_I_m_p_:_:_i_m_p_l__ │ │ │ │ │ +const Imp & impl_ │ │ │ │ │ +DDeeffiinniittiioonn virtualwrappers.hh:219 │ │ │ │ │ _l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localbasis.hh File Reference │ │ │ │ +dune-localfunctions: hierarchical.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,46 +65,31 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
│ │ │ │ -Classes | │ │ │ │ -Namespaces
│ │ │ │ -
hierarchicalprismp2localbasis.hh File Reference
│ │ │ │ +
hierarchical.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ -

Hierarchical prism p2 shape functions for the simplex. │ │ │ │ +

Convenience header that includes all available hierarchical LocalFiniteElements. │ │ │ │ More...

│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Classes

class  Dune::HierarchicalPrismP2LocalBasis< D, R >
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -

│ │ │ │ -Namespaces

namespace  Dune
 
│ │ │ │

Detailed Description

│ │ │ │ -

Hierarchical prism p2 shape functions for the simplex.

│ │ │ │ +

Convenience header that includes all available hierarchical LocalFiniteElements.

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,26 +1,18 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ -_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalprismp2localbasis.hh File Reference │ │ │ │ │ -Hierarchical prism p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +hierarchical.hh File Reference │ │ │ │ │ +Convenience header that includes all available hierarchical │ │ │ │ │ +LocalFiniteElements. _M_o_r_e_._._. │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_ _> │ │ │ │ │ -  │ │ │ │ │ -NNaammeessppaacceess │ │ │ │ │ -namespace   _D_u_n_e │ │ │ │ │ -  │ │ │ │ │ ********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Hierarchical prism p2 shape functions for the simplex. │ │ │ │ │ +Convenience header that includes all available hierarchical │ │ │ │ │ +LocalFiniteElements. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00527_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localbasis.hh Source File │ │ │ │ +dune-localfunctions: hierarchical.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,271 +70,31 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalprismp2localbasis.hh
│ │ │ │ +
hierarchical.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
12#include <numeric>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/common/fvector.hh>
│ │ │ │ -
15#include <dune/common/fmatrix.hh>
│ │ │ │ -
16
│ │ │ │ - │ │ │ │ -
18
│ │ │ │ -
19namespace Dune
│ │ │ │ -
20{
│ │ │ │ -
21 template<class D, class R>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24 public:
│ │ │ │ -
26 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │ -
27
│ │ │ │ -
│ │ │ │ -
29 unsigned int size () const
│ │ │ │ -
30 {
│ │ │ │ -
31 return 18;
│ │ │ │ -
32 }
│ │ │ │ -
│ │ │ │ -
33
│ │ │ │ -
│ │ │ │ -
35 void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ -
36 std::vector<typename Traits::RangeType> & out) const
│ │ │ │ -
37 {
│ │ │ │ -
38 out.resize(18);
│ │ │ │ -
39
│ │ │ │ -
40 out[0]=(1.0-in[0]-in[1])*(1.0-in[2]);
│ │ │ │ -
41 out[1]= in[0]*(1-in[2]);
│ │ │ │ -
42 out[2]=in[1]*(1-in[2]);
│ │ │ │ -
43 out[3]=in[2]*(1.0-in[0]-in[1]);
│ │ │ │ -
44 out[4]=in[0]*in[2];
│ │ │ │ -
45 out[5]=in[1]*in[2];
│ │ │ │ -
46
│ │ │ │ -
47 //edges
│ │ │ │ -
48 out[6]=2*(1.0-in[0]-in[1])*(0.5-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
49 out[7]=2*in[0]*(-0.5+in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
50 out[8]=2*in[1]*(-0.5+in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
51 out[9]=4*in[0]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
52 out[10]=4*in[1]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
53 out[11]=4*in[0]*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
54 out[12]=4*in[0]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
55 out[13]=4*in[1]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
56 out[14]=4*in[0]*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
57
│ │ │ │ -
58 //faces
│ │ │ │ -
59 out[15]=4*in[0]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
60 out[16]=4*in[1]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
61 out[17]=4*in[0]*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
62 }
│ │ │ │ -
│ │ │ │ -
63
│ │ │ │ -
64
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
67 void evaluateJacobian (const typename Traits::DomainType& in, //position
│ │ │ │ -
68 std::vector<typename Traits::JacobianType>& out) const //return value
│ │ │ │ -
69 {
│ │ │ │ -
70 out.resize(18);
│ │ │ │ -
71
│ │ │ │ -
72 //vertices
│ │ │ │ -
73 out[0][0][0] = in[2]-1;
│ │ │ │ -
74 out[0][0][1] = in[2]-1;
│ │ │ │ -
75 out[0][0][2] = in[0]+in[1]-1;
│ │ │ │ -
76
│ │ │ │ -
77 out[1][0][0] = 1-in[2];
│ │ │ │ -
78 out[1][0][1] = 0;
│ │ │ │ -
79 out[1][0][2] =-in[0];
│ │ │ │ -
80
│ │ │ │ -
81 out[2][0][0] = 0;
│ │ │ │ -
82 out[2][0][1] = 1-in[2];
│ │ │ │ -
83 out[2][0][2] = -in[1];
│ │ │ │ -
84
│ │ │ │ -
85 out[3][0][0] = -in[2];
│ │ │ │ -
86 out[3][0][1] = -in[2];
│ │ │ │ -
87 out[3][0][2] = 1-in[0]-in[1];
│ │ │ │ -
88
│ │ │ │ -
89 out[4][0][0] = in[2];
│ │ │ │ -
90 out[4][0][1] = 0;
│ │ │ │ -
91 out[4][0][2] = in[0];
│ │ │ │ -
92
│ │ │ │ -
93 out[5][0][0] = 0;
│ │ │ │ -
94 out[5][0][1] = in[2];
│ │ │ │ -
95 out[5][0][2] = in[1];
│ │ │ │ -
96
│ │ │ │ -
97 //edges
│ │ │ │ -
98 out[6][0][0] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
99 out[6][0][1] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
100 out[6][0][2] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
101
│ │ │ │ -
102 out[7][0][0] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
103 out[7][0][1] = 0;
│ │ │ │ -
104 out[7][0][2] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]);
│ │ │ │ -
105
│ │ │ │ -
106 out[8][0][0] = 0;
│ │ │ │ -
107 out[8][0][1] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
108 out[8][0][2] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]);
│ │ │ │ -
109
│ │ │ │ -
110 out[9][0][0] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
111 out[9][0][1] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
112 out[9][0][2] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ -
113
│ │ │ │ -
114 out[10][0][0] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
115 out[10][0][1] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
116 out[10][0][2] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ -
117
│ │ │ │ -
118 out[11][0][0] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
119 out[11][0][1] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
120 out[11][0][2] = 4*in[0]*in[1]*(-3+4*in[2]);
│ │ │ │ -
121
│ │ │ │ -
122 out[12][0][0] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
123 out[12][0][1] = (-4*in[0])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
124 out[12][0][2] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ -
125
│ │ │ │ -
126 out[13][0][0] = -4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
127 out[13][0][1] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
128 out[13][0][2] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ -
129
│ │ │ │ -
130 out[14][0][0] = 4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
131 out[14][0][1] = 4*in[0]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
132 out[14][0][2] = 4*in[0]*in[1]*(-1+4*in[2]);
│ │ │ │ -
133
│ │ │ │ -
134 //faces
│ │ │ │ -
135 out[15][0][0] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
136 out[15][0][1] = -4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
137 out[15][0][2] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
138
│ │ │ │ -
139 out[16][0][0] = -4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
140 out[16][0][1] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
141 out[16][0][2] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
142
│ │ │ │ -
143 out[17][0][0] = 4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
144 out[17][0][1] = 4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
145 out[17][0][2] = 4*in[0]*in[1]*(4-8*in[2]);
│ │ │ │ -
146 }
│ │ │ │ -
│ │ │ │ -
147
│ │ │ │ -
│ │ │ │ -
149 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ -
150 const typename Traits::DomainType& in, // position
│ │ │ │ -
151 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ -
152 {
│ │ │ │ -
153 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
154 if (totalOrder == 0) {
│ │ │ │ -
155 evaluateFunction(in, out);
│ │ │ │ -
156 } else if (totalOrder == 1) {
│ │ │ │ -
157 out.resize(size());
│ │ │ │ -
158 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
159
│ │ │ │ -
160 switch (direction) {
│ │ │ │ -
161 case 0:
│ │ │ │ -
162 out[0] = in[2]-1;
│ │ │ │ -
163 out[1] = 1-in[2];
│ │ │ │ -
164 out[2] = 0;
│ │ │ │ -
165 out[3] = -in[2];
│ │ │ │ -
166 out[4] = in[2];
│ │ │ │ -
167 out[5] = 0;
│ │ │ │ -
168 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
169 out[7] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
170 out[8] = 0;
│ │ │ │ -
171 out[9] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
172 out[10] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
173 out[11] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
174 out[12] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
175 out[13] = -4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
176 out[14] = 4*in[1]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
177 out[15] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
178 out[16] = -4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
179 out[17] = 4*in[1]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
180 break;
│ │ │ │ -
181 case 1:
│ │ │ │ -
182 out[0] = in[2]-1;
│ │ │ │ -
183 out[1] = 0;
│ │ │ │ -
184 out[2] = 1-in[2];
│ │ │ │ -
185 out[3] = -in[2];
│ │ │ │ -
186 out[4] = 0;
│ │ │ │ -
187 out[5] = in[2];
│ │ │ │ -
188 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
189 out[7] = 0;
│ │ │ │ -
190 out[8] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
191 out[9] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
192 out[10] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
193 out[11] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]);
│ │ │ │ -
194 out[12] = (-4*in[0])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
195 out[13] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
196 out[14] = 4*in[0]*(-in[2]+2*in[2]*in[2]);
│ │ │ │ -
197 out[15] = -4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
198 out[16] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
199 out[17] = 4*in[0]*(4*in[2]-4*in[2]*in[2]);
│ │ │ │ -
200 break;
│ │ │ │ -
201 case 2:
│ │ │ │ -
202 out[0] = in[0]+in[1]-1;
│ │ │ │ -
203 out[1] =-in[0];
│ │ │ │ -
204 out[2] = -in[1];
│ │ │ │ -
205 out[3] = 1-in[0]-in[1];
│ │ │ │ -
206 out[4] = in[0];
│ │ │ │ -
207 out[5] = in[1];
│ │ │ │ -
208 out[6] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
209 out[7] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]);
│ │ │ │ -
210 out[8] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]);
│ │ │ │ -
211 out[9] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ -
212 out[10] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]);
│ │ │ │ -
213 out[11] = 4*in[0]*in[1]*(-3+4*in[2]);
│ │ │ │ -
214 out[12] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ -
215 out[13] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]);
│ │ │ │ -
216 out[14] = 4*in[0]*in[1]*(-1+4*in[2]);
│ │ │ │ -
217 out[15] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
218 out[16] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]);
│ │ │ │ -
219 out[17] = 4*in[0]*in[1]*(4-8*in[2]);
│ │ │ │ -
220 break;
│ │ │ │ -
221 default:
│ │ │ │ -
222 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ -
223 }
│ │ │ │ -
224 } else {
│ │ │ │ -
225 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
226 }
│ │ │ │ -
227 }
│ │ │ │ -
│ │ │ │ -
228
│ │ │ │ -
│ │ │ │ -
231 unsigned int order() const
│ │ │ │ -
232 {
│ │ │ │ -
233 return 2;
│ │ │ │ -
234 }
│ │ │ │ -
│ │ │ │ -
235
│ │ │ │ -
236 };
│ │ │ │ -
│ │ │ │ -
237}
│ │ │ │ -
238#endif
│ │ │ │ -
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
Definition hierarchicalprismp2localbasis.hh:23
│ │ │ │ -
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition hierarchicalprismp2localbasis.hh:26
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition hierarchicalprismp2localbasis.hh:29
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition hierarchicalprismp2localbasis.hh:231
│ │ │ │ -
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition hierarchicalprismp2localbasis.hh:149
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition hierarchicalprismp2localbasis.hh:35
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition hierarchicalprismp2localbasis.hh:67
│ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,282 +1,22 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ -hierarchicalprismp2localbasis.hh │ │ │ │ │ +hierarchical.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16 │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -18 │ │ │ │ │ -19namespace _D_u_n_e │ │ │ │ │ -20{ │ │ │ │ │ -21 template │ │ │ │ │ -_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -23 { │ │ │ │ │ -24 public: │ │ │ │ │ -_2_6 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ -FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ -27 │ │ │ │ │ -_2_9 unsigned int _s_i_z_e () const │ │ │ │ │ -30 { │ │ │ │ │ -31 return 18; │ │ │ │ │ -32 } │ │ │ │ │ -33 │ │ │ │ │ -_3_5 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ -36 std::vector & out) const │ │ │ │ │ -37 { │ │ │ │ │ -38 out.resize(18); │ │ │ │ │ -39 │ │ │ │ │ -40 out[0]=(1.0-in[0]-in[1])*(1.0-in[2]); │ │ │ │ │ -41 out[1]= in[0]*(1-in[2]); │ │ │ │ │ -42 out[2]=in[1]*(1-in[2]); │ │ │ │ │ -43 out[3]=in[2]*(1.0-in[0]-in[1]); │ │ │ │ │ -44 out[4]=in[0]*in[2]; │ │ │ │ │ -45 out[5]=in[1]*in[2]; │ │ │ │ │ -46 │ │ │ │ │ -47 //edges │ │ │ │ │ -48 out[6]=2*(1.0-in[0]-in[1])*(0.5-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -49 out[7]=2*in[0]*(-0.5+in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -50 out[8]=2*in[1]*(-0.5+in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -51 out[9]=4*in[0]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -52 out[10]=4*in[1]*(1-in[0]-in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -53 out[11]=4*in[0]*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -54 out[12]=4*in[0]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -55 out[13]=4*in[1]*(1-in[0]-in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -56 out[14]=4*in[0]*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -57 │ │ │ │ │ -58 //faces │ │ │ │ │ -59 out[15]=4*in[0]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -60 out[16]=4*in[1]*(1-in[0]-in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -61 out[17]=4*in[0]*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -62 } │ │ │ │ │ -63 │ │ │ │ │ -64 │ │ │ │ │ -65 │ │ │ │ │ -_6_7 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, //position │ │ │ │ │ -68 std::vector& out) const //return value │ │ │ │ │ -69 { │ │ │ │ │ -70 out.resize(18); │ │ │ │ │ -71 │ │ │ │ │ -72 //vertices │ │ │ │ │ -73 out[0][0][0] = in[2]-1; │ │ │ │ │ -74 out[0][0][1] = in[2]-1; │ │ │ │ │ -75 out[0][0][2] = in[0]+in[1]-1; │ │ │ │ │ -76 │ │ │ │ │ -77 out[1][0][0] = 1-in[2]; │ │ │ │ │ -78 out[1][0][1] = 0; │ │ │ │ │ -79 out[1][0][2] =-in[0]; │ │ │ │ │ -80 │ │ │ │ │ -81 out[2][0][0] = 0; │ │ │ │ │ -82 out[2][0][1] = 1-in[2]; │ │ │ │ │ -83 out[2][0][2] = -in[1]; │ │ │ │ │ -84 │ │ │ │ │ -85 out[3][0][0] = -in[2]; │ │ │ │ │ -86 out[3][0][1] = -in[2]; │ │ │ │ │ -87 out[3][0][2] = 1-in[0]-in[1]; │ │ │ │ │ -88 │ │ │ │ │ -89 out[4][0][0] = in[2]; │ │ │ │ │ -90 out[4][0][1] = 0; │ │ │ │ │ -91 out[4][0][2] = in[0]; │ │ │ │ │ -92 │ │ │ │ │ -93 out[5][0][0] = 0; │ │ │ │ │ -94 out[5][0][1] = in[2]; │ │ │ │ │ -95 out[5][0][2] = in[1]; │ │ │ │ │ -96 │ │ │ │ │ -97 //edges │ │ │ │ │ -98 out[6][0][0] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -99 out[6][0][1] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -100 out[6][0][2] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -101 │ │ │ │ │ -102 out[7][0][0] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -103 out[7][0][1] = 0; │ │ │ │ │ -104 out[7][0][2] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]); │ │ │ │ │ -105 │ │ │ │ │ -106 out[8][0][0] = 0; │ │ │ │ │ -107 out[8][0][1] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -108 out[8][0][2] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]); │ │ │ │ │ -109 │ │ │ │ │ -110 out[9][0][0] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -111 out[9][0][1] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -112 out[9][0][2] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ -113 │ │ │ │ │ -114 out[10][0][0] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -115 out[10][0][1] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -116 out[10][0][2] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ -117 │ │ │ │ │ -118 out[11][0][0] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -119 out[11][0][1] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -120 out[11][0][2] = 4*in[0]*in[1]*(-3+4*in[2]); │ │ │ │ │ -121 │ │ │ │ │ -122 out[12][0][0] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -123 out[12][0][1] = (-4*in[0])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -124 out[12][0][2] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ -125 │ │ │ │ │ -126 out[13][0][0] = -4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -127 out[13][0][1] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -128 out[13][0][2] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ -129 │ │ │ │ │ -130 out[14][0][0] = 4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -131 out[14][0][1] = 4*in[0]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -132 out[14][0][2] = 4*in[0]*in[1]*(-1+4*in[2]); │ │ │ │ │ -133 │ │ │ │ │ -134 //faces │ │ │ │ │ -135 out[15][0][0] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -136 out[15][0][1] = -4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -137 out[15][0][2] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -138 │ │ │ │ │ -139 out[16][0][0] = -4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -140 out[16][0][1] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -141 out[16][0][2] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -142 │ │ │ │ │ -143 out[17][0][0] = 4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -144 out[17][0][1] = 4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -145 out[17][0][2] = 4*in[0]*in[1]*(4-8*in[2]); │ │ │ │ │ -146 } │ │ │ │ │ -147 │ │ │ │ │ -_1_4_9 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -150 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ -151 std::vector& out) const // return value │ │ │ │ │ -152 { │ │ │ │ │ -153 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -154 if (totalOrder == 0) { │ │ │ │ │ -155 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -156 } else if (totalOrder == 1) { │ │ │ │ │ -157 out.resize(_s_i_z_e()); │ │ │ │ │ -158 auto const direction = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin │ │ │ │ │ -(), _o_r_d_e_r.end(), 1)); │ │ │ │ │ -159 │ │ │ │ │ -160 switch (direction) { │ │ │ │ │ -161 case 0: │ │ │ │ │ -162 out[0] = in[2]-1; │ │ │ │ │ -163 out[1] = 1-in[2]; │ │ │ │ │ -164 out[2] = 0; │ │ │ │ │ -165 out[3] = -in[2]; │ │ │ │ │ -166 out[4] = in[2]; │ │ │ │ │ -167 out[5] = 0; │ │ │ │ │ -168 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -169 out[7] = (-1+4*in[0])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -170 out[8] = 0; │ │ │ │ │ -171 out[9] = (4-8*in[0]-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -172 out[10] = (-4*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -173 out[11] = 4*in[1]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -174 out[12] = (4-8*in[0]-4*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -175 out[13] = -4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -176 out[14] = 4*in[1]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -177 out[15] = (4-8*in[0]-4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -178 out[16] = -4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -179 out[17] = 4*in[1]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -180 break; │ │ │ │ │ -181 case 1: │ │ │ │ │ -182 out[0] = in[2]-1; │ │ │ │ │ -183 out[1] = 0; │ │ │ │ │ -184 out[2] = 1-in[2]; │ │ │ │ │ -185 out[3] = -in[2]; │ │ │ │ │ -186 out[4] = 0; │ │ │ │ │ -187 out[5] = in[2]; │ │ │ │ │ -188 out[6] = (-3+4*in[0]+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -189 out[7] = 0; │ │ │ │ │ -190 out[8] = (-1+4*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -191 out[9] = -4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -192 out[10] = (4-4*in[0]-8*in[1])*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -193 out[11] = 4*in[0]*(1-3*in[2]+2*in[2]*in[2]); │ │ │ │ │ -194 out[12] = (-4*in[0])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -195 out[13] = (4-4*in[0]-8*in[1])*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -196 out[14] = 4*in[0]*(-in[2]+2*in[2]*in[2]); │ │ │ │ │ -197 out[15] = -4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -198 out[16] = (4-4*in[0]-8*in[1])*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -199 out[17] = 4*in[0]*(4*in[2]-4*in[2]*in[2]); │ │ │ │ │ -200 break; │ │ │ │ │ -201 case 2: │ │ │ │ │ -202 out[0] = in[0]+in[1]-1; │ │ │ │ │ -203 out[1] =-in[0]; │ │ │ │ │ -204 out[2] = -in[1]; │ │ │ │ │ -205 out[3] = 1-in[0]-in[1]; │ │ │ │ │ -206 out[4] = in[0]; │ │ │ │ │ -207 out[5] = in[1]; │ │ │ │ │ -208 out[6] = 2*(1-in[0]-in[1])*(0.5-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -209 out[7] = 2*in[0]*(-0.5+in[0])*(4-8*in[2]); │ │ │ │ │ -210 out[8] = 2*in[1]*(-0.5+in[1])*(4-8*in[2]); │ │ │ │ │ -211 out[9] = 4*in[0]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ -212 out[10] = 4*in[1]*(1-in[0]-in[1])*(-3+4*in[2]); │ │ │ │ │ -213 out[11] = 4*in[0]*in[1]*(-3+4*in[2]); │ │ │ │ │ -214 out[12] = 4*in[0]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ -215 out[13] = 4*in[1]*(1-in[0]-in[1])*(-1+4*in[2]); │ │ │ │ │ -216 out[14] = 4*in[0]*in[1]*(-1+4*in[2]); │ │ │ │ │ -217 out[15] = 4*in[0]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -218 out[16] = 4*in[1]*(1-in[0]-in[1])*(4-8*in[2]); │ │ │ │ │ -219 out[17] = 4*in[0]*in[1]*(4-8*in[2]); │ │ │ │ │ -220 break; │ │ │ │ │ -221 default: │ │ │ │ │ -222 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ -223 } │ │ │ │ │ -224 } else { │ │ │ │ │ -225 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -226 } │ │ │ │ │ -227 } │ │ │ │ │ -228 │ │ │ │ │ -_2_3_1 unsigned int _o_r_d_e_r() const │ │ │ │ │ -232 { │ │ │ │ │ -233 return 2; │ │ │ │ │ -234 } │ │ │ │ │ -235 │ │ │ │ │ -236 }; │ │ │ │ │ -237} │ │ │ │ │ -238#endif │ │ │ │ │ -_D_u_n_e │ │ │ │ │ -DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ -1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:231 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ -Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:149 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::RangeType > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ -typename Traits::JacobianType > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:67 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +9#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h> │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/ │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h> │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_._h_h │ │ │ │ │ +_h_i_e_r_a_r_c_h_i_c_a_l_p_2_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,38 +65,58 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalprismp2localinterpolation.hh File Reference
│ │ │ │ +
refinedp0.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <vector>
│ │ │ │ + │ │ │ │ +

Piecewise P0 finite element. │ │ │ │ +More...

│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ +#include "refinedp0/refinedp0localbasis.hh"
│ │ │ │ +#include "refinedp0/refinedp0localcoefficients.hh"
│ │ │ │ +#include "refinedp0/refinedp0localinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalPrismP2LocalInterpolation< LB >
class  Dune::RefinedP0LocalFiniteElement< D, R, dim >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 1 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 2 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
 
class  Dune::RefinedP0LocalFiniteElement< D, R, 3 >
 Local finite element that is piecewise P0 on a once uniformly refined reference geometry. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Piecewise P0 finite element.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +1,41 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalprismp2localinterpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +refinedp0.hh File Reference │ │ │ │ │ +Piecewise P0 finite element. _M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ + reference geometry. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ +  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ + reference geometry. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ +  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ + reference geometry. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ +  Local finite element that is piecewise P0 on a once uniformly refined │ │ │ │ │ + reference geometry. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Piecewise P0 finite element. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00530_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2localinterpolation.hh Source File │ │ │ │ +dune-localfunctions: refinedp0.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,104 +70,264 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalprismp2localinterpolation.hh
│ │ │ │ +
refinedp0.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │ -
8#include <vector>
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
15 template<class LB>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
17 {
│ │ │ │ -
18 public:
│ │ │ │ -
19
│ │ │ │ -
20 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
21 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ -
22 {
│ │ │ │ -
23 typename LB::Traits::DomainType x;
│ │ │ │ -
24 typename LB::Traits::RangeType y;
│ │ │ │ -
25 out.resize(18);
│ │ │ │ -
26
│ │ │ │ -
27 //First the vertex dofs
│ │ │ │ -
28 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x);
│ │ │ │ -
29 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[1] = f(x);
│ │ │ │ -
30 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[2] = f(x);
│ │ │ │ -
31 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[3] = f(x);
│ │ │ │ -
32 x[0] = 1.0; x[1] = 0.0; x[2] = 1.0; out[4] = f(x);
│ │ │ │ -
33 x[0] = 0.0; x[1] = 1.0; x[2] = 1.0; out[5] = f(x);
│ │ │ │ -
34
│ │ │ │ -
35
│ │ │ │ -
36 // Then: the 9 edge dofs and the 3 face dofs
│ │ │ │ -
37 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
38 out[6] = y - 0.5*(out[0] + out[3]);
│ │ │ │ -
39
│ │ │ │ -
40 x[0] = 1.0; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
41 out[7] = y - 0.5*(out[1] + out[4]);
│ │ │ │ -
42
│ │ │ │ -
43 x[0] = 0.0; x[1] = 1.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
44 out[8] = y - 0.5*(out[2] + out[5]);
│ │ │ │ -
45
│ │ │ │ -
46 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x);
│ │ │ │ -
47 out[9] = y - 0.5*(out[0] + out[1]);
│ │ │ │ -
48
│ │ │ │ -
49 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ -
50 out[10] = y - 0.5*(out[2] + out[0]);
│ │ │ │ -
51
│ │ │ │ -
52 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x);
│ │ │ │ -
53 out[11] = y - 0.5*(out[2] + out[1]);
│ │ │ │ -
54
│ │ │ │ -
55 x[0] = 0.5; x[1] = 0.0; x[2] = 1.0; y = f(x);
│ │ │ │ -
56 out[12] = y - 0.5*(out[3] + out[4]);
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
16
│ │ │ │ +
20namespace Dune
│ │ │ │ +
21{
│ │ │ │ +
22
│ │ │ │ +
27 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ + │ │ │ │ +
31
│ │ │ │ +
32 public:
│ │ │ │ +
33 // We steal the p0 traits since they exist for all dim.
│ │ │ │ +
34 // This allows to instantiate the type and access the Traits.
│ │ │ │ + │ │ │ │ +
36 };
│ │ │ │ +
│ │ │ │ +
37
│ │ │ │ +
42 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
44 {
│ │ │ │ +
45 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
52
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
56 {}
│ │ │ │ +
│ │ │ │
57
│ │ │ │ -
58 x[0] = 0.0; x[1] = 0.5; x[2] = 1.0; y = f(x);
│ │ │ │ -
59 out[13] = y - 0.5*(out[3] + out[5]);
│ │ │ │ -
60
│ │ │ │ -
61 x[0] = 0.5; x[1] = 0.5; x[2] = 1.0; y = f(x);
│ │ │ │ -
62 out[14] = y - 0.5*(out[4] + out[5]);
│ │ │ │ -
63
│ │ │ │ +
│ │ │ │ +
60 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
61 {
│ │ │ │ +
62 return basis_;
│ │ │ │ +
63 }
│ │ │ │ +
│ │ │ │
64
│ │ │ │ -
65 //faces
│ │ │ │ -
66 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x);
│ │ │ │ -
67 out[15] = y - 0.25*(out[4] + out[1] + out[0] + out[3] );
│ │ │ │ -
68
│ │ │ │ -
69 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ -
70 out[16] = y - 0.25*(out[2] + out[0] + out[3] + out[5] );
│ │ │ │ -
71
│ │ │ │ -
72 x[0] = 0.5; x[1] = 0.5; x[2] = 0.5; y = f(x);
│ │ │ │ -
73 out[17] = y - 0.25*(out[2] + out[1] + out[4] + out[5] );
│ │ │ │ -
74
│ │ │ │ -
75 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
68 {
│ │ │ │ +
69 return coefficients_;
│ │ │ │ +
70 }
│ │ │ │
│ │ │ │ -
76 };
│ │ │ │ +
71
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
75 {
│ │ │ │ +
76 return interpolation_;
│ │ │ │ +
77 }
│ │ │ │
│ │ │ │ -
77}
│ │ │ │
78
│ │ │ │ -
79#endif
│ │ │ │ +
│ │ │ │ +
80 unsigned int size () const
│ │ │ │ +
81 {
│ │ │ │ +
82 return basis_.size();
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
│ │ │ │ +
87 static constexpr GeometryType type ()
│ │ │ │ +
88 {
│ │ │ │ +
89 return GeometryTypes::line;
│ │ │ │ +
90 }
│ │ │ │ +
│ │ │ │ +
91
│ │ │ │ +
92 private:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
96 };
│ │ │ │ +
│ │ │ │ +
97
│ │ │ │ +
102 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
104 {
│ │ │ │ +
105 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
112
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
116 {}
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
│ │ │ │ +
120 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
121 {
│ │ │ │ +
122 return basis_;
│ │ │ │ +
123 }
│ │ │ │ +
│ │ │ │ +
124
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
128 {
│ │ │ │ +
129 return coefficients_;
│ │ │ │ +
130 }
│ │ │ │ +
│ │ │ │ +
131
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
135 {
│ │ │ │ +
136 return interpolation_;
│ │ │ │ +
137 }
│ │ │ │ +
│ │ │ │ +
138
│ │ │ │ +
│ │ │ │ +
140 unsigned int size () const
│ │ │ │ +
141 {
│ │ │ │ +
142 return basis_.size();
│ │ │ │ +
143 }
│ │ │ │ +
│ │ │ │ +
144
│ │ │ │ +
│ │ │ │ +
147 static constexpr GeometryType type ()
│ │ │ │ +
148 {
│ │ │ │ +
149 return GeometryTypes::triangle;
│ │ │ │ +
150 }
│ │ │ │ +
│ │ │ │ +
151
│ │ │ │ +
152 private:
│ │ │ │ + │ │ │ │ +
154 RefinedP0LocalCoefficients<2> coefficients_;
│ │ │ │ + │ │ │ │ +
156 };
│ │ │ │ +
│ │ │ │ +
157
│ │ │ │ +
162 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
164 {
│ │ │ │ +
165 public:
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
172
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
176 {}
│ │ │ │ +
│ │ │ │ +
177
│ │ │ │ +
│ │ │ │ +
180 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
181 {
│ │ │ │ +
182 return basis_;
│ │ │ │ +
183 }
│ │ │ │ +
│ │ │ │ +
184
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
188 {
│ │ │ │ +
189 return coefficients_;
│ │ │ │ +
190 }
│ │ │ │ +
│ │ │ │ +
191
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
195 {
│ │ │ │ +
196 return interpolation_;
│ │ │ │ +
197 }
│ │ │ │ +
│ │ │ │ +
198
│ │ │ │ +
│ │ │ │ +
200 unsigned int size () const
│ │ │ │ +
201 {
│ │ │ │ +
202 return basis_.size();
│ │ │ │ +
203 }
│ │ │ │ +
│ │ │ │ +
204
│ │ │ │ +
│ │ │ │ +
207 static constexpr GeometryType type ()
│ │ │ │ +
208 {
│ │ │ │ +
209 return GeometryTypes::tetrahedron;
│ │ │ │ +
210 }
│ │ │ │ +
│ │ │ │ +
211
│ │ │ │ +
212 private:
│ │ │ │ + │ │ │ │ +
214 RefinedP0LocalCoefficients<3> coefficients_;
│ │ │ │ + │ │ │ │ +
216 };
│ │ │ │ +
│ │ │ │ +
217
│ │ │ │ +
218
│ │ │ │ +
219}
│ │ │ │ +
220
│ │ │ │ +
221#endif
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Definition hierarchicalprismp2localinterpolation.hh:17
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Definition hierarchicalprismp2localinterpolation.hh:21
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Local finite element that is piecewise P0 on a once uniformly refined reference geometry.
Definition refinedp0.hh:29
│ │ │ │ +
P0LocalFiniteElement< D, R, dim >::Traits Traits
Definition refinedp0.hh:35
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:60
│ │ │ │ +
static constexpr GeometryType type()
Definition refinedp0.hh:87
│ │ │ │ +
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:55
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:74
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:67
│ │ │ │ +
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 1 >, RefinedP0LocalCoefficients< 1 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > > > Traits
Definition refinedp0.hh:51
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:80
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:140
│ │ │ │ +
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:115
│ │ │ │ +
static constexpr GeometryType type()
Definition refinedp0.hh:147
│ │ │ │ +
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 2 >, RefinedP0LocalCoefficients< 2 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > > > Traits
Definition refinedp0.hh:111
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:127
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:134
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:120
│ │ │ │ +
RefinedP0LocalFiniteElement()
Definition refinedp0.hh:175
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
Definition refinedp0.hh:180
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Definition refinedp0.hh:194
│ │ │ │ +
static constexpr GeometryType type()
Definition refinedp0.hh:207
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition refinedp0.hh:200
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Definition refinedp0.hh:187
│ │ │ │ +
LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 3 >, RefinedP0LocalCoefficients< 3 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > > > Traits
Definition refinedp0.hh:171
│ │ │ │ +
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ +
Layout map for RefinedP0 elements.
Definition refinedp0localcoefficients.hh:26
│ │ │ │ +
Definition refinedp0localinterpolation.hh:17
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,96 +1,281 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2 │ │ │ │ │ -hierarchicalprismp2localinterpolation.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ +refinedp0.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALINTERPOLATION_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALFINITEELEMENT_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -15 template │ │ │ │ │ -_1_6 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -17 { │ │ │ │ │ -18 public: │ │ │ │ │ -19 │ │ │ │ │ -20 template │ │ │ │ │ -_2_1 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ -22 { │ │ │ │ │ -23 typename LB::Traits::DomainType x; │ │ │ │ │ -24 typename LB::Traits::RangeType y; │ │ │ │ │ -25 out.resize(18); │ │ │ │ │ -26 │ │ │ │ │ -27 //First the vertex dofs │ │ │ │ │ -28 x[0] = 0.0; x[1] = 0.0; x[2] = 0.0; out[0] = f(x); │ │ │ │ │ -29 x[0] = 1.0; x[1] = 0.0; x[2] = 0.0; out[1] = f(x); │ │ │ │ │ -30 x[0] = 0.0; x[1] = 1.0; x[2] = 0.0; out[2] = f(x); │ │ │ │ │ -31 x[0] = 0.0; x[1] = 0.0; x[2] = 1.0; out[3] = f(x); │ │ │ │ │ -32 x[0] = 1.0; x[1] = 0.0; x[2] = 1.0; out[4] = f(x); │ │ │ │ │ -33 x[0] = 0.0; x[1] = 1.0; x[2] = 1.0; out[5] = f(x); │ │ │ │ │ -34 │ │ │ │ │ -35 │ │ │ │ │ -36 // Then: the 9 edge dofs and the 3 face dofs │ │ │ │ │ -37 x[0] = 0.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -38 out[6] = y - 0.5*(out[0] + out[3]); │ │ │ │ │ -39 │ │ │ │ │ -40 x[0] = 1.0; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -41 out[7] = y - 0.5*(out[1] + out[4]); │ │ │ │ │ -42 │ │ │ │ │ -43 x[0] = 0.0; x[1] = 1.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -44 out[8] = y - 0.5*(out[2] + out[5]); │ │ │ │ │ -45 │ │ │ │ │ -46 x[0] = 0.5; x[1] = 0.0; x[2] = 0.0; y = f(x); │ │ │ │ │ -47 out[9] = y - 0.5*(out[0] + out[1]); │ │ │ │ │ -48 │ │ │ │ │ -49 x[0] = 0.0; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ -50 out[10] = y - 0.5*(out[2] + out[0]); │ │ │ │ │ -51 │ │ │ │ │ -52 x[0] = 0.5; x[1] = 0.5; x[2] = 0.0; y = f(x); │ │ │ │ │ -53 out[11] = y - 0.5*(out[2] + out[1]); │ │ │ │ │ -54 │ │ │ │ │ -55 x[0] = 0.5; x[1] = 0.0; x[2] = 1.0; y = f(x); │ │ │ │ │ -56 out[12] = y - 0.5*(out[3] + out[4]); │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +14#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +15#include "_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +16 │ │ │ │ │ +20namespace _D_u_n_e │ │ │ │ │ +21{ │ │ │ │ │ +22 │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t() {} │ │ │ │ │ +31 │ │ │ │ │ +32 public: │ │ │ │ │ +33 // We steal the p0 traits since they exist for all dim. │ │ │ │ │ +34 // This allows to instantiate the type and access the Traits. │ │ │ │ │ +_3_5 typedef typename _P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>_:_:_T_r_a_i_t_s _T_r_a_i_t_s; │ │ │ │ │ +36 }; │ │ │ │ │ +37 │ │ │ │ │ +42 template │ │ │ │ │ +_4_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +44 { │ │ │ │ │ +45 public: │ │ │ │ │ +48 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +49 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_>, │ │ │ │ │ +50 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_1_>, │ │ │ │ │ +_5_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> > > _T_r_a_i_t_s; │ │ │ │ │ +52 │ │ │ │ │ +_5_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +56 {} │ │ │ │ │ 57 │ │ │ │ │ -58 x[0] = 0.0; x[1] = 0.5; x[2] = 1.0; y = f(x); │ │ │ │ │ -59 out[13] = y - 0.5*(out[3] + out[5]); │ │ │ │ │ -60 │ │ │ │ │ -61 x[0] = 0.5; x[1] = 0.5; x[2] = 1.0; y = f(x); │ │ │ │ │ -62 out[14] = y - 0.5*(out[4] + out[5]); │ │ │ │ │ -63 │ │ │ │ │ +_6_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +61 { │ │ │ │ │ +62 return basis_; │ │ │ │ │ +63 } │ │ │ │ │ 64 │ │ │ │ │ -65 //faces │ │ │ │ │ -66 x[0] = 0.5; x[1] = 0.0; x[2] = 0.5; y = f(x); │ │ │ │ │ -67 out[15] = y - 0.25*(out[4] + out[1] + out[0] + out[3] ); │ │ │ │ │ -68 │ │ │ │ │ -69 x[0] = 0.0; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ -70 out[16] = y - 0.25*(out[2] + out[0] + out[3] + out[5] ); │ │ │ │ │ +_6_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +68 { │ │ │ │ │ +69 return coefficients_; │ │ │ │ │ +70 } │ │ │ │ │ 71 │ │ │ │ │ -72 x[0] = 0.5; x[1] = 0.5; x[2] = 0.5; y = f(x); │ │ │ │ │ -73 out[17] = y - 0.25*(out[2] + out[1] + out[4] + out[5] ); │ │ │ │ │ -74 │ │ │ │ │ -75 } │ │ │ │ │ -76 }; │ │ │ │ │ -77} │ │ │ │ │ +_7_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +75 { │ │ │ │ │ +76 return interpolation_; │ │ │ │ │ +77 } │ │ │ │ │ 78 │ │ │ │ │ -79#endif │ │ │ │ │ +_8_0 unsigned int _s_i_z_e () const │ │ │ │ │ +81 { │ │ │ │ │ +82 return basis_.size(); │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +88 { │ │ │ │ │ +89 return GeometryTypes::line; │ │ │ │ │ +90 } │ │ │ │ │ +91 │ │ │ │ │ +92 private: │ │ │ │ │ +93 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> basis_; │ │ │ │ │ +94 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_1_> coefficients_; │ │ │ │ │ +95 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> > interpolation_; │ │ │ │ │ +96 }; │ │ │ │ │ +97 │ │ │ │ │ +102 template │ │ │ │ │ +_1_0_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +104 { │ │ │ │ │ +105 public: │ │ │ │ │ +108 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +109 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_>, │ │ │ │ │ +110 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_2_>, │ │ │ │ │ +_1_1_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> > > _T_r_a_i_t_s; │ │ │ │ │ +112 │ │ │ │ │ +_1_1_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +116 {} │ │ │ │ │ +117 │ │ │ │ │ +_1_2_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +121 { │ │ │ │ │ +122 return basis_; │ │ │ │ │ +123 } │ │ │ │ │ +124 │ │ │ │ │ +_1_2_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +128 { │ │ │ │ │ +129 return coefficients_; │ │ │ │ │ +130 } │ │ │ │ │ +131 │ │ │ │ │ +_1_3_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +135 { │ │ │ │ │ +136 return interpolation_; │ │ │ │ │ +137 } │ │ │ │ │ +138 │ │ │ │ │ +_1_4_0 unsigned int _s_i_z_e () const │ │ │ │ │ +141 { │ │ │ │ │ +142 return basis_.size(); │ │ │ │ │ +143 } │ │ │ │ │ +144 │ │ │ │ │ +_1_4_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +148 { │ │ │ │ │ +149 return GeometryTypes::triangle; │ │ │ │ │ +150 } │ │ │ │ │ +151 │ │ │ │ │ +152 private: │ │ │ │ │ +153 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> basis_; │ │ │ │ │ +154 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_2_> coefficients_; │ │ │ │ │ +155 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> > interpolation_; │ │ │ │ │ +156 }; │ │ │ │ │ +157 │ │ │ │ │ +162 template │ │ │ │ │ +_1_6_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +164 { │ │ │ │ │ +165 public: │ │ │ │ │ +168 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ +169 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_>, │ │ │ │ │ +170 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_3_>, │ │ │ │ │ +_1_7_1 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> > > _T_r_a_i_t_s; │ │ │ │ │ +172 │ │ │ │ │ +_1_7_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +176 {} │ │ │ │ │ +177 │ │ │ │ │ +_1_8_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +181 { │ │ │ │ │ +182 return basis_; │ │ │ │ │ +183 } │ │ │ │ │ +184 │ │ │ │ │ +_1_8_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +188 { │ │ │ │ │ +189 return coefficients_; │ │ │ │ │ +190 } │ │ │ │ │ +191 │ │ │ │ │ +_1_9_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +195 { │ │ │ │ │ +196 return interpolation_; │ │ │ │ │ +197 } │ │ │ │ │ +198 │ │ │ │ │ +_2_0_0 unsigned int _s_i_z_e () const │ │ │ │ │ +201 { │ │ │ │ │ +202 return basis_.size(); │ │ │ │ │ +203 } │ │ │ │ │ +204 │ │ │ │ │ +_2_0_7 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +208 { │ │ │ │ │ +209 return GeometryTypes::tetrahedron; │ │ │ │ │ +210 } │ │ │ │ │ +211 │ │ │ │ │ +212 private: │ │ │ │ │ +213 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> basis_; │ │ │ │ │ +214 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_3_> coefficients_; │ │ │ │ │ +215 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> > interpolation_; │ │ │ │ │ +216 }; │ │ │ │ │ +217 │ │ │ │ │ +218 │ │ │ │ │ +219} │ │ │ │ │ +220 │ │ │ │ │ +221#endif │ │ │ │ │ +_p_0_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:17 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:21 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Local finite element that is piecewise P0 on a once uniformly refined reference │ │ │ │ │ +geometry. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +P0LocalFiniteElement< D, R, dim >::Traits Traits │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:87 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RefinedP0LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:67 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 1 >, │ │ │ │ │ +RefinedP0LocalCoefficients< 1 >, RefinedP0LocalInterpolation< │ │ │ │ │ +RefinedP0LocalBasis< D, R, 1 > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:80 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:140 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RefinedP0LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:115 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:147 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 2 >, │ │ │ │ │ +RefinedP0LocalCoefficients< 2 >, RefinedP0LocalInterpolation< │ │ │ │ │ +RefinedP0LocalBasis< D, R, 2 > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:134 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _2_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:120 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RefinedP0LocalFiniteElement() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:175 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:180 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:194 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:207 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:200 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:187 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 3 >, │ │ │ │ │ +RefinedP0LocalCoefficients< 3 >, RefinedP0LocalInterpolation< │ │ │ │ │ +RefinedP0LocalBasis< D, R, 3 > > > Traits │ │ │ │ │ +DDeeffiinniittiioonn refinedp0.hh:171 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for RefinedP0 elements. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localcoefficients.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:17 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh File Reference │ │ │ │ +dune-localfunctions: refinedp1.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,59 +65,43 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalsimplexp2withelementbubble.hh File Reference
│ │ │ │ +
refinedp1.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ -

Hierarchical p2 shape functions for the simplex. │ │ │ │ -More...

│ │ │ │ -
#include <array>
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <numeric>
│ │ │ │ -#include <stdexcept>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/geometry/referenceelement.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/p0.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim >
 P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order dim+1. More...
 
class  Dune::HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim >
 The local keys of the hierarchical basis functions with element bubble. More...
 
class  Dune::HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LB, dim >
class  Dune::RefinedP1LocalFiniteElement< D, R, dim >
 Piecewise linear continuous Lagrange functions on a uniformly refined simplex element. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -

Detailed Description

│ │ │ │ -

Hierarchical p2 shape functions for the simplex.

│ │ │ │ -
│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,42 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalsimplexp2withelementbubble.hh File Reference │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. _M_o_r_e_._._. │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +refinedp1.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_/_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  P1 basis in dim-d enriched by quadratic edge bubble functions and an │ │ │ │ │ - element bubble function of order dim+1. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ -  The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_,_ _d_i_m │ │ │ │ │ - _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Piecewise linear continuous Lagrange functions on a uniformly refined │ │ │ │ │ + simplex element. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00533_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalsimplexp2withelementbubble.hh Source File │ │ │ │ +dune-localfunctions: refinedp1.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,340 +70,120 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalsimplexp2withelementbubble.hh
│ │ │ │ +
refinedp1.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │
7
│ │ │ │ -
12#include <array>
│ │ │ │ -
13#include <cassert>
│ │ │ │ -
14#include <numeric>
│ │ │ │ -
15#include <stdexcept>
│ │ │ │ -
16#include <vector>
│ │ │ │ -
17
│ │ │ │ -
18#include <dune/common/fvector.hh>
│ │ │ │ -
19#include <dune/common/fmatrix.hh>
│ │ │ │ -
20#include <dune/common/math.hh>
│ │ │ │ -
21
│ │ │ │ -
22#include <dune/geometry/referenceelement.hh>
│ │ │ │ -
23
│ │ │ │ - │ │ │ │ - │ │ │ │ -
26
│ │ │ │ -
27namespace Dune
│ │ │ │ -
28{
│ │ │ │ -
44 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
46 {
│ │ │ │ - │ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │ + │ │ │ │ +
12
│ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
27 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
29 {
│ │ │ │ +
30 public:
│ │ │ │ + │ │ │ │ +
34 Impl::LagrangeSimplexLocalCoefficients<dim,2>,
│ │ │ │ +
35 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,dim,2> > > Traits;
│ │ │ │ +
36
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 {}
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
44 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ +
45 {
│ │ │ │ +
46 return basis_;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │
48
│ │ │ │ -
50 using DomainType = FieldVector<D,dim>;
│ │ │ │ -
51
│ │ │ │ -
53 using RangeType = FieldVector<R,1>;
│ │ │ │ -
54
│ │ │ │ -
56 using JacobianType = FieldMatrix<R,1,dim>;
│ │ │ │ -
57
│ │ │ │ -
58 // Number of vertices
│ │ │ │ -
59 static constexpr int numVertices = dim+1;
│ │ │ │ -
60
│ │ │ │ -
61 // Number of edges (or zero for dim==1)
│ │ │ │ -
62 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ -
63
│ │ │ │ -
64 // helper function to evaluate the vertex basis functions
│ │ │ │ -
65 template <class It>
│ │ │ │ -
66 static constexpr It evaluateVertexFunctions (const DomainType& in, It outIt)
│ │ │ │ -
67 {
│ │ │ │ -
68 *outIt = 1;
│ │ │ │ -
69 for (int i = 0; i < dim; ++i)
│ │ │ │ -
70 *outIt -= in[i];
│ │ │ │ -
71 ++outIt;
│ │ │ │ -
72 for (int i = 0; i < dim; ++i)
│ │ │ │ -
73 *outIt++ = in[i];
│ │ │ │ -
74 return outIt;
│ │ │ │ -
75 }
│ │ │ │ -
76
│ │ │ │ -
77 // helper function to evaluate the basis functions
│ │ │ │ -
78 template <class It>
│ │ │ │ -
79 static constexpr It evaluateAllFunctions (const DomainType& in, It outIt)
│ │ │ │ -
80 {
│ │ │ │ -
81 It vertexValues = outIt;
│ │ │ │ -
82 outIt = evaluateVertexFunctions(in, outIt);
│ │ │ │ -
83
│ │ │ │ -
84 if constexpr(dim > 1) {
│ │ │ │ -
85 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ -
86 for (int i = 0; i < numEdges; ++i) {
│ │ │ │ -
87 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
88 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
89 *outIt++ = 4 * vertexValues[v0] * vertexValues[v1];
│ │ │ │ -
90 }
│ │ │ │ -
91 }
│ │ │ │ -
92
│ │ │ │ -
93 // element bubble function
│ │ │ │ -
94 *outIt = power(dim+1, dim+1);
│ │ │ │ -
95 for (int i = 0; i < numVertices; ++i)
│ │ │ │ -
96 *outIt *= vertexValues[i];
│ │ │ │ -
97 return outIt;
│ │ │ │ -
98 }
│ │ │ │ -
99
│ │ │ │ -
100 public:
│ │ │ │ - │ │ │ │ -
103
│ │ │ │ -
│ │ │ │ -
105 static constexpr std::size_t size () noexcept
│ │ │ │ -
106 {
│ │ │ │ -
107 return numVertices + numEdges + 1;
│ │ │ │ -
108 }
│ │ │ │ -
│ │ │ │ -
109
│ │ │ │ -
│ │ │ │ -
111 static constexpr void evaluateFunction (const DomainType& in,
│ │ │ │ -
112 std::vector<RangeType>& out)
│ │ │ │ -
113 {
│ │ │ │ -
114 out.resize(size());
│ │ │ │ -
115 evaluateAllFunctions(in,out.begin());
│ │ │ │ -
116 }
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
│ │ │ │ -
119 static constexpr void evaluateJacobian (const DomainType& in,
│ │ │ │ -
120 std::vector<JacobianType>& out)
│ │ │ │ -
121 {
│ │ │ │ -
122 out.resize(size());
│ │ │ │ -
123
│ │ │ │ -
124 // vertex basis functions
│ │ │ │ -
125 RangeType tmp = 1;
│ │ │ │ -
126 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
127 out[0][0][i] = -1;
│ │ │ │ -
128 for (int j = 0; j < dim; ++j)
│ │ │ │ -
129 out[j+1][0][i] = (i == j);
│ │ │ │ -
130 tmp -= in[i];
│ │ │ │ -
131 }
│ │ │ │ -
132
│ │ │ │ -
133 int n = numVertices;
│ │ │ │ -
134 std::array<RangeType,numVertices> shapeValues;
│ │ │ │ -
135 evaluateVertexFunctions(in, shapeValues.begin());
│ │ │ │ -
136
│ │ │ │ -
137 // edge basis functions
│ │ │ │ -
138 if constexpr(dim > 1) {
│ │ │ │ -
139 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ -
140 for (int i = 0; i < numEdges; ++i,++n) {
│ │ │ │ -
141 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
142 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
143 for (int j = 0; j < dim; ++j)
│ │ │ │ -
144 out[n][0][j] = 4 * (out[v0][0][j] * shapeValues[v1] + shapeValues[v0] * out[v1][0][j]);
│ │ │ │ -
145 }
│ │ │ │ -
146 }
│ │ │ │ -
147
│ │ │ │ -
148 // element bubble function
│ │ │ │ -
149 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
150 out[n][0][i] = power(dim+1, dim+1) * (tmp - in[i]);
│ │ │ │ -
151 for (int j = i+1; j < dim+i; ++j)
│ │ │ │ -
152 out[n][0][i] *= in[j % dim];
│ │ │ │ -
153 }
│ │ │ │ -
154 }
│ │ │ │ -
│ │ │ │ -
155
│ │ │ │ -
│ │ │ │ -
157 static constexpr void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
158 const DomainType& in,
│ │ │ │ -
159 std::vector<RangeType>& out)
│ │ │ │ -
160 {
│ │ │ │ -
161 unsigned int totalOrder = 0;
│ │ │ │ -
162 for (int i = 0; i < dim; ++i)
│ │ │ │ -
163 totalOrder += order[i];
│ │ │ │ -
164
│ │ │ │ -
165 switch (totalOrder) {
│ │ │ │ -
166 case 0:
│ │ │ │ -
167 evaluateFunction(in,out);
│ │ │ │ -
168 break;
│ │ │ │ -
169 case 1: {
│ │ │ │ -
170 out.resize(size());
│ │ │ │ -
171 int d = 0; // the direction of differentiation
│ │ │ │ -
172 for (int i = 0; i < dim; ++i)
│ │ │ │ -
173 d += i * order[i];
│ │ │ │ -
174
│ │ │ │ -
175 // vertex basis functions
│ │ │ │ -
176 RangeType tmp = 1;
│ │ │ │ -
177 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
178 out[0] = -1;
│ │ │ │ -
179 for (int j = 0; j < dim; ++j)
│ │ │ │ -
180 out[j+1] = (dim == j);
│ │ │ │ -
181 tmp -= in[i];
│ │ │ │ -
182 }
│ │ │ │ -
183
│ │ │ │ -
184 int n = numVertices;
│ │ │ │ -
185 std::array<RangeType,numVertices> shapeValues;
│ │ │ │ -
186 evaluateVertexFunctions(in, shapeValues.begin());
│ │ │ │ -
187
│ │ │ │ -
188 // edge basis functions
│ │ │ │ -
189 if constexpr(dim > 1) {
│ │ │ │ -
190 auto refElem = referenceElement<D,dim>(GeometryTypes::simplex(dim));
│ │ │ │ -
191 for (int i = 0; i < numEdges; ++i,++n) {
│ │ │ │ -
192 const int v0 = refElem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
193 const int v1 = refElem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
194 out[n] = 4 * (out[v0] * shapeValues[v1] + shapeValues[v0] * out[v1]);
│ │ │ │ -
195 }
│ │ │ │ -
196 }
│ │ │ │ -
197
│ │ │ │ -
198 // element bubble function
│ │ │ │ -
199 out[n] = power(dim+1, dim+1) * (tmp - in[d]);
│ │ │ │ -
200 for (int j = d+1; j < dim+d; ++j)
│ │ │ │ -
201 out[n] *= in[j % dim];
│ │ │ │ -
202 } break;
│ │ │ │ -
203 default:
│ │ │ │ -
204 throw std::runtime_error("Desired derivative order is not implemented");
│ │ │ │ -
205 }
│ │ │ │ -
206 }
│ │ │ │ -
│ │ │ │ -
207
│ │ │ │ -
│ │ │ │ -
209 static constexpr unsigned int order () noexcept
│ │ │ │ -
210 {
│ │ │ │ -
211 return dim+1;
│ │ │ │ -
212 }
│ │ │ │ -
│ │ │ │ -
213 };
│ │ │ │ -
│ │ │ │ -
214
│ │ │ │ -
215
│ │ │ │ -
227 template <int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
229 {
│ │ │ │ -
230 // Number of vertices
│ │ │ │ -
231 static constexpr int numVertices = dim+1;
│ │ │ │ -
232
│ │ │ │ -
233 // Number of edges (or zero for dim==1)
│ │ │ │ -
234 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ -
235
│ │ │ │ -
236 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
239 {
│ │ │ │ -
240 int n = 0;
│ │ │ │ -
241 for (int i = 0; i < numVertices; ++i)
│ │ │ │ -
242 li_[n++] = LocalKey(i,dim,0); // Vertex
│ │ │ │ -
243 if constexpr(dim > 1) {
│ │ │ │ -
244 for (int i = 0; i < numEdges; ++i)
│ │ │ │ -
245 li_[n++] = LocalKey(i,dim-1,0); // Edges
│ │ │ │ -
246 }
│ │ │ │ -
247 li_[n++] = LocalKey(0,0,0); // Element
│ │ │ │ -
248 }
│ │ │ │ -
│ │ │ │ -
249
│ │ │ │ -
│ │ │ │ -
251 static constexpr std::size_t size () noexcept
│ │ │ │ -
252 {
│ │ │ │ -
253 return numVertices + numEdges + 1;
│ │ │ │ -
254 }
│ │ │ │ -
│ │ │ │ -
255
│ │ │ │ -
│ │ │ │ -
257 const LocalKey& localKey (std::size_t i) const noexcept
│ │ │ │ -
258 {
│ │ │ │ -
259 return li_[i];
│ │ │ │ -
260 }
│ │ │ │ -
│ │ │ │ -
261
│ │ │ │ -
262 private:
│ │ │ │ -
263 std::array<LocalKey, numVertices+numEdges+1> li_;
│ │ │ │ -
264 };
│ │ │ │ -
│ │ │ │ -
265
│ │ │ │ -
269 template<class LB, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
271 {
│ │ │ │ -
272 using LocalBasis = LB;
│ │ │ │ -
273 using DomainType = typename LB::Traits::DomainType;
│ │ │ │ -
274 using RangeType = typename LB::Traits::RangeType;
│ │ │ │ -
275
│ │ │ │ -
276 // Number of vertices
│ │ │ │ -
277 static constexpr int numVertices = dim+1;
│ │ │ │ -
278
│ │ │ │ -
279 // Number of edges (or zero for dim==1)
│ │ │ │ -
280 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0);
│ │ │ │ -
281
│ │ │ │ -
282 public:
│ │ │ │ -
290 template<class F, class C,
│ │ │ │ -
291 class R = std::invoke_result_t<F, DomainType>,
│ │ │ │ -
292 std::enable_if_t<std::is_convertible_v<R, C>, int> = 0>
│ │ │ │ -
│ │ │ │ -
293 static constexpr void interpolate (const F& f, std::vector<C>& out)
│ │ │ │ -
294 {
│ │ │ │ -
295 auto refElem = referenceElement<typename LB::Traits::DomainFieldType,dim>(GeometryTypes::simplex(dim));
│ │ │ │ -
296
│ │ │ │ -
297 out.resize(LB::size());
│ │ │ │ -
298 int n = 0;
│ │ │ │ -
299
│ │ │ │ -
300 // vertices
│ │ │ │ -
301 assert(numVertices == refElem.size(dim));
│ │ │ │ -
302 for (int i = 0; i < numVertices; ++i)
│ │ │ │ -
303 out[n++] = f(refElem.position(i,dim));
│ │ │ │ -
304
│ │ │ │ -
305 std::array<RangeType,LB::size()> shapeValues;
│ │ │ │ -
306
│ │ │ │ -
307 // edge bubbles
│ │ │ │ -
308 if constexpr(dim > 1) {
│ │ │ │ -
309 assert(numEdges == refElem.size(dim-1));
│ │ │ │ -
310 for (int i = 0; i < numEdges; ++i) {
│ │ │ │ -
311 R y = f(refElem.position(i,dim-1));
│ │ │ │ -
312 LB::evaluateVertexFunctions(refElem.position(i,dim-1), shapeValues.begin());
│ │ │ │ -
313 for (int j = 0; j < numVertices; ++j)
│ │ │ │ -
314 y -= out[j]*shapeValues[j];
│ │ │ │ -
315 out[n++] = y;
│ │ │ │ -
316 }
│ │ │ │ -
317 }
│ │ │ │ -
318
│ │ │ │ -
319 // element bubble
│ │ │ │ -
320 R y = f(refElem.position(0,0));
│ │ │ │ -
321 LB::evaluateAllFunctions(refElem.position(0,0), shapeValues.begin());
│ │ │ │ -
322 for (int j = 0; j < numVertices+numEdges; ++j)
│ │ │ │ -
323 y -= out[j]*shapeValues[j];
│ │ │ │ -
324 out[n++] = y;
│ │ │ │ -
325 }
│ │ │ │ -
│ │ │ │ -
326 };
│ │ │ │ -
│ │ │ │ -
327
│ │ │ │ -
328} // end namespace Dune
│ │ │ │ -
329
│ │ │ │ -
330#endif // DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ + │ │ │ │ +
52 {
│ │ │ │ +
53 return coefficients_;
│ │ │ │ +
54 }
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
59 {
│ │ │ │ +
60 return interpolation_;
│ │ │ │ +
61 }
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
│ │ │ │ +
64 unsigned int size () const
│ │ │ │ +
65 {
│ │ │ │ +
66 return basis_.size();
│ │ │ │ +
67 }
│ │ │ │ +
│ │ │ │ +
68
│ │ │ │ +
│ │ │ │ +
71 static constexpr GeometryType type ()
│ │ │ │ +
72 {
│ │ │ │ +
73 return GeometryTypes::simplex(dim);
│ │ │ │ +
74 }
│ │ │ │ +
│ │ │ │ +
75
│ │ │ │ +
76 private:
│ │ │ │ + │ │ │ │ +
78 Impl::LagrangeSimplexLocalCoefficients<dim,2> coefficients_;
│ │ │ │ +
79 // Yes, the template argument here really is LagrangeSimplexLocalBasis, even though this is not
│ │ │ │ +
80 // the local basis of the refined locale finite element: The reason is that LagrangeSimplexLocalInterpolation
│ │ │ │ +
81 // uses this argument to determine the polynomial order, and RefinedP1LocalBasis returns order 1
│ │ │ │ +
82 // whereas order 2 is needed here.
│ │ │ │ +
83 Impl::LagrangeSimplexLocalInterpolation<Impl::LagrangeSimplexLocalBasis<D,R,dim,2> > interpolation_;
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86}
│ │ │ │ +
87
│ │ │ │ +
88#endif // DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
Linear Lagrange shape functions on a uniformly refined reference element.
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order...
Definition hierarchicalsimplexp2withelementbubble.hh:46
│ │ │ │ -
static constexpr void evaluateFunction(const DomainType &in, std::vector< RangeType > &out)
Evaluate all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:111
│ │ │ │ -
static constexpr void partial(const std::array< unsigned int, dim > &order, const DomainType &in, std::vector< RangeType > &out)
Evaluate partial derivatives of all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:157
│ │ │ │ -
static constexpr unsigned int order() noexcept
Polynomial order of the shape functions (4 in this case)
Definition hierarchicalsimplexp2withelementbubble.hh:209
│ │ │ │ -
static constexpr void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out)
Evaluate Jacobian of all shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:119
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:105
│ │ │ │ -
The local keys of the hierarchical basis functions with element bubble.
Definition hierarchicalsimplexp2withelementbubble.hh:229
│ │ │ │ -
HierarchicalSimplexP2WithElementBubbleLocalCoefficients() noexcept
Default constructor, initializes the local keys.
Definition hierarchicalsimplexp2withelementbubble.hh:238
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of coefficients.
Definition hierarchicalsimplexp2withelementbubble.hh:251
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const noexcept
Returns the i'th local key.
Definition hierarchicalsimplexp2withelementbubble.hh:257
│ │ │ │ -
Definition hierarchicalsimplexp2withelementbubble.hh:271
│ │ │ │ -
static constexpr void interpolate(const F &f, std::vector< C > &out)
Local interpolation of the function f.
Definition hierarchicalsimplexp2withelementbubble.hh:293
│ │ │ │ - │ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Piecewise linear continuous Lagrange functions on a uniformly refined simplex element.
Definition refinedp1.hh:29
│ │ │ │ +
static constexpr GeometryType type()
The element type that this finite element is defined on.
Definition refinedp1.hh:71
│ │ │ │ +
unsigned int size() const
Number of shape functions of this finite element.
Definition refinedp1.hh:64
│ │ │ │ +
RefinedP1LocalFiniteElement()
Default constructor.
Definition refinedp1.hh:39
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
Evaluates all degrees of freedom for a given function.
Definition refinedp1.hh:58
│ │ │ │ +
LocalFiniteElementTraits< RefinedP1LocalBasis< D, R, dim >, Impl::LagrangeSimplexLocalCoefficients< dim, 2 >, Impl::LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, dim, 2 > > > Traits
Export all types used by this implementation.
Definition refinedp1.hh:35
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
Produces the assignments of the degrees of freedom to the element subentities.
Definition refinedp1.hh:51
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
The set of shape functions.
Definition refinedp1.hh:44
│ │ │ │ +
Definition refinedp1localbasis.hh:23
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,355 +1,140 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e │ │ │ │ │ -hierarchicalsimplexp2withelementbubble.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ +refinedp1.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ 7 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17 │ │ │ │ │ -18#include │ │ │ │ │ -19#include │ │ │ │ │ -20#include │ │ │ │ │ -21 │ │ │ │ │ -22#include │ │ │ │ │ -23 │ │ │ │ │ -24#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -25#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -26 │ │ │ │ │ -27namespace _D_u_n_e │ │ │ │ │ -28{ │ │ │ │ │ -44 template │ │ │ │ │ -_4_5 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -46 { │ │ │ │ │ -_4_7 template friend class │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_p_0_._h_h> │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_1_/_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +27 template │ │ │ │ │ +_2_8 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +29 { │ │ │ │ │ +30 public: │ │ │ │ │ +33 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ +34 Impl::LagrangeSimplexLocalCoefficients, │ │ │ │ │ +_3_5 Impl::LagrangeSimplexLocalInterpolation > > _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +_3_9 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ +40 {} │ │ │ │ │ +41 │ │ │ │ │ +_4_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +45 { │ │ │ │ │ +46 return basis_; │ │ │ │ │ +47 } │ │ │ │ │ 48 │ │ │ │ │ -50 using DomainType = FieldVector; │ │ │ │ │ -51 │ │ │ │ │ -53 using RangeType = FieldVector; │ │ │ │ │ -54 │ │ │ │ │ -56 using JacobianType = FieldMatrix; │ │ │ │ │ -57 │ │ │ │ │ -58 // Number of vertices │ │ │ │ │ -59 static constexpr int numVertices = dim+1; │ │ │ │ │ -60 │ │ │ │ │ -61 // Number of edges (or zero for dim==1) │ │ │ │ │ -62 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ -63 │ │ │ │ │ -64 // helper function to evaluate the vertex basis functions │ │ │ │ │ -65 template │ │ │ │ │ -66 static constexpr It evaluateVertexFunctions (const DomainType& in, It outIt) │ │ │ │ │ -67 { │ │ │ │ │ -68 *outIt = 1; │ │ │ │ │ -69 for (int i = 0; i < dim; ++i) │ │ │ │ │ -70 *outIt -= in[i]; │ │ │ │ │ -71 ++outIt; │ │ │ │ │ -72 for (int i = 0; i < dim; ++i) │ │ │ │ │ -73 *outIt++ = in[i]; │ │ │ │ │ -74 return outIt; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -77 // helper function to evaluate the basis functions │ │ │ │ │ -78 template │ │ │ │ │ -79 static constexpr It evaluateAllFunctions (const DomainType& in, It outIt) │ │ │ │ │ -80 { │ │ │ │ │ -81 It vertexValues = outIt; │ │ │ │ │ -82 outIt = evaluateVertexFunctions(in, outIt); │ │ │ │ │ -83 │ │ │ │ │ -84 if constexpr(dim > 1) { │ │ │ │ │ -85 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ -86 for (int i = 0; i < numEdges; ++i) { │ │ │ │ │ -87 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -88 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -89 *outIt++ = 4 * vertexValues[v0] * vertexValues[v1]; │ │ │ │ │ -90 } │ │ │ │ │ -91 } │ │ │ │ │ -92 │ │ │ │ │ -93 // element bubble function │ │ │ │ │ -94 *outIt = power(dim+1, dim+1); │ │ │ │ │ -95 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ -96 *outIt *= vertexValues[i]; │ │ │ │ │ -97 return outIt; │ │ │ │ │ -98 } │ │ │ │ │ -99 │ │ │ │ │ -100 public: │ │ │ │ │ -_1_0_2 using _T_r_a_i_t_s = │ │ │ │ │ -_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_o_m_a_i_n_T_y_p_e_,_R_,_1_,_R_a_n_g_e_T_y_p_e_,_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ -103 │ │ │ │ │ -_1_0_5 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -106 { │ │ │ │ │ -107 return numVertices + numEdges + 1; │ │ │ │ │ -108 } │ │ │ │ │ -109 │ │ │ │ │ -_1_1_1 static constexpr void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, │ │ │ │ │ -112 std::vector& out) │ │ │ │ │ -113 { │ │ │ │ │ -114 out.resize(_s_i_z_e()); │ │ │ │ │ -115 evaluateAllFunctions(in,out.begin()); │ │ │ │ │ -116 } │ │ │ │ │ -117 │ │ │ │ │ -_1_1_9 static constexpr void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, │ │ │ │ │ -120 std::vector& out) │ │ │ │ │ -121 { │ │ │ │ │ -122 out.resize(_s_i_z_e()); │ │ │ │ │ -123 │ │ │ │ │ -124 // vertex basis functions │ │ │ │ │ -125 RangeType tmp = 1; │ │ │ │ │ -126 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -127 out[0][0][i] = -1; │ │ │ │ │ -128 for (int j = 0; j < dim; ++j) │ │ │ │ │ -129 out[j+1][0][i] = (i == j); │ │ │ │ │ -130 tmp -= in[i]; │ │ │ │ │ -131 } │ │ │ │ │ -132 │ │ │ │ │ -133 int n = numVertices; │ │ │ │ │ -134 std::array shapeValues; │ │ │ │ │ -135 evaluateVertexFunctions(in, shapeValues.begin()); │ │ │ │ │ -136 │ │ │ │ │ -137 // edge basis functions │ │ │ │ │ -138 if constexpr(dim > 1) { │ │ │ │ │ -139 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ -140 for (int i = 0; i < numEdges; ++i,++n) { │ │ │ │ │ -141 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -142 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -143 for (int j = 0; j < dim; ++j) │ │ │ │ │ -144 out[n][0][j] = 4 * (out[v0][0][j] * shapeValues[v1] + shapeValues[v0] * out │ │ │ │ │ -[v1][0][j]); │ │ │ │ │ -145 } │ │ │ │ │ -146 } │ │ │ │ │ -147 │ │ │ │ │ -148 // element bubble function │ │ │ │ │ -149 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -150 out[n][0][i] = power(dim+1, dim+1) * (tmp - in[i]); │ │ │ │ │ -151 for (int j = i+1; j < dim+i; ++j) │ │ │ │ │ -152 out[n][0][i] *= in[j % dim]; │ │ │ │ │ -153 } │ │ │ │ │ -154 } │ │ │ │ │ -155 │ │ │ │ │ -_1_5_7 static constexpr void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -158 const DomainType& in, │ │ │ │ │ -159 std::vector& out) │ │ │ │ │ -160 { │ │ │ │ │ -161 unsigned int totalOrder = 0; │ │ │ │ │ -162 for (int i = 0; i < dim; ++i) │ │ │ │ │ -163 totalOrder += _o_r_d_e_r[i]; │ │ │ │ │ -164 │ │ │ │ │ -165 switch (totalOrder) { │ │ │ │ │ -166 case 0: │ │ │ │ │ -167 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in,out); │ │ │ │ │ -168 break; │ │ │ │ │ -169 case 1: { │ │ │ │ │ -170 out.resize(_s_i_z_e()); │ │ │ │ │ -171 int d = 0; // the direction of differentiation │ │ │ │ │ -172 for (int i = 0; i < dim; ++i) │ │ │ │ │ -173 d += i * _o_r_d_e_r[i]; │ │ │ │ │ -174 │ │ │ │ │ -175 // vertex basis functions │ │ │ │ │ -176 RangeType tmp = 1; │ │ │ │ │ -177 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -178 out[0] = -1; │ │ │ │ │ -179 for (int j = 0; j < dim; ++j) │ │ │ │ │ -180 out[j+1] = (dim == j); │ │ │ │ │ -181 tmp -= in[i]; │ │ │ │ │ -182 } │ │ │ │ │ -183 │ │ │ │ │ -184 int n = numVertices; │ │ │ │ │ -185 std::array shapeValues; │ │ │ │ │ -186 evaluateVertexFunctions(in, shapeValues.begin()); │ │ │ │ │ -187 │ │ │ │ │ -188 // edge basis functions │ │ │ │ │ -189 if constexpr(dim > 1) { │ │ │ │ │ -190 auto refElem = referenceElement(GeometryTypes::simplex(dim)); │ │ │ │ │ -191 for (int i = 0; i < numEdges; ++i,++n) { │ │ │ │ │ -192 const int v0 = refElem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -193 const int v1 = refElem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -194 out[n] = 4 * (out[v0] * shapeValues[v1] + shapeValues[v0] * out[v1]); │ │ │ │ │ -195 } │ │ │ │ │ -196 } │ │ │ │ │ -197 │ │ │ │ │ -198 // element bubble function │ │ │ │ │ -199 out[n] = power(dim+1, dim+1) * (tmp - in[d]); │ │ │ │ │ -200 for (int j = d+1; j < dim+d; ++j) │ │ │ │ │ -201 out[n] *= in[j % dim]; │ │ │ │ │ -202 } break; │ │ │ │ │ -203 default: │ │ │ │ │ -204 throw std::runtime_error("Desired derivative order is not implemented"); │ │ │ │ │ -205 } │ │ │ │ │ -206 } │ │ │ │ │ -207 │ │ │ │ │ -_2_0_9 static constexpr unsigned int _o_r_d_e_r () noexcept │ │ │ │ │ -210 { │ │ │ │ │ -211 return dim+1; │ │ │ │ │ -212 } │ │ │ │ │ -213 }; │ │ │ │ │ -214 │ │ │ │ │ -215 │ │ │ │ │ -227 template │ │ │ │ │ -_2_2_8 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -229 { │ │ │ │ │ -230 // Number of vertices │ │ │ │ │ -231 static constexpr int numVertices = dim+1; │ │ │ │ │ -232 │ │ │ │ │ -233 // Number of edges (or zero for dim==1) │ │ │ │ │ -234 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ -235 │ │ │ │ │ -236 public: │ │ │ │ │ -_2_3_8 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () noexcept │ │ │ │ │ -239 { │ │ │ │ │ -240 int n = 0; │ │ │ │ │ -241 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ -242 li_[n++] = _L_o_c_a_l_K_e_y(i,dim,0); // Vertex │ │ │ │ │ -243 if constexpr(dim > 1) { │ │ │ │ │ -244 for (int i = 0; i < numEdges; ++i) │ │ │ │ │ -245 li_[n++] = _L_o_c_a_l_K_e_y(i,dim-1,0); // Edges │ │ │ │ │ -246 } │ │ │ │ │ -247 li_[n++] = _L_o_c_a_l_K_e_y(0,0,0); // Element │ │ │ │ │ -248 } │ │ │ │ │ -249 │ │ │ │ │ -_2_5_1 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -252 { │ │ │ │ │ -253 return numVertices + numEdges + 1; │ │ │ │ │ -254 } │ │ │ │ │ -255 │ │ │ │ │ -_2_5_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const noexcept │ │ │ │ │ -258 { │ │ │ │ │ -259 return li_[i]; │ │ │ │ │ -260 } │ │ │ │ │ -261 │ │ │ │ │ -262 private: │ │ │ │ │ -263 std::array li_; │ │ │ │ │ -264 }; │ │ │ │ │ -265 │ │ │ │ │ -269 template │ │ │ │ │ -_2_7_0 class _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -271 { │ │ │ │ │ -272 using LocalBasis = LB; │ │ │ │ │ -273 using DomainType = typename LB::Traits::DomainType; │ │ │ │ │ -274 using RangeType = typename LB::Traits::RangeType; │ │ │ │ │ -275 │ │ │ │ │ -276 // Number of vertices │ │ │ │ │ -277 static constexpr int numVertices = dim+1; │ │ │ │ │ -278 │ │ │ │ │ -279 // Number of edges (or zero for dim==1) │ │ │ │ │ -280 static constexpr int numEdges = (dim > 1 ? ((dim+1)*dim / 2) : 0); │ │ │ │ │ -281 │ │ │ │ │ -282 public: │ │ │ │ │ -290 template, │ │ │ │ │ -292 std::enable_if_t, int> = 0> │ │ │ │ │ -_2_9_3 static constexpr void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) │ │ │ │ │ -294 { │ │ │ │ │ -295 auto refElem = referenceElement │ │ │ │ │ -(GeometryTypes::simplex(dim)); │ │ │ │ │ -296 │ │ │ │ │ -297 out.resize(LB::size()); │ │ │ │ │ -298 int n = 0; │ │ │ │ │ -299 │ │ │ │ │ -300 // vertices │ │ │ │ │ -301 assert(numVertices == refElem.size(dim)); │ │ │ │ │ -302 for (int i = 0; i < numVertices; ++i) │ │ │ │ │ -303 out[n++] = f(refElem.position(i,dim)); │ │ │ │ │ -304 │ │ │ │ │ -305 std::array shapeValues; │ │ │ │ │ -306 │ │ │ │ │ -307 // edge bubbles │ │ │ │ │ -308 if constexpr(dim > 1) { │ │ │ │ │ -309 assert(numEdges == refElem.size(dim-1)); │ │ │ │ │ -310 for (int i = 0; i < numEdges; ++i) { │ │ │ │ │ -311 R y = f(refElem.position(i,dim-1)); │ │ │ │ │ -312 LB::evaluateVertexFunctions(refElem.position(i,dim-1), shapeValues.begin │ │ │ │ │ -()); │ │ │ │ │ -313 for (int j = 0; j < numVertices; ++j) │ │ │ │ │ -314 y -= out[j]*shapeValues[j]; │ │ │ │ │ -315 out[n++] = y; │ │ │ │ │ -316 } │ │ │ │ │ -317 } │ │ │ │ │ -318 │ │ │ │ │ -319 // element bubble │ │ │ │ │ -320 R y = f(refElem.position(0,0)); │ │ │ │ │ -321 LB::evaluateAllFunctions(refElem.position(0,0), shapeValues.begin()); │ │ │ │ │ -322 for (int j = 0; j < numVertices+numEdges; ++j) │ │ │ │ │ -323 y -= out[j]*shapeValues[j]; │ │ │ │ │ -324 out[n++] = y; │ │ │ │ │ -325 } │ │ │ │ │ -326 }; │ │ │ │ │ -327 │ │ │ │ │ -328} // end namespace Dune │ │ │ │ │ -329 │ │ │ │ │ -330#endif // DUNE_HIERARCHICAL_SIMPLEX_P2_WITH_ELEMENT_BUBBLE_LOCALBASIS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +52 { │ │ │ │ │ +53 return coefficients_; │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +_5_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +59 { │ │ │ │ │ +60 return interpolation_; │ │ │ │ │ +61 } │ │ │ │ │ +62 │ │ │ │ │ +_6_4 unsigned int _s_i_z_e () const │ │ │ │ │ +65 { │ │ │ │ │ +66 return basis_.size(); │ │ │ │ │ +67 } │ │ │ │ │ +68 │ │ │ │ │ +_7_1 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ +72 { │ │ │ │ │ +73 return GeometryTypes::simplex(dim); │ │ │ │ │ +74 } │ │ │ │ │ +75 │ │ │ │ │ +76 private: │ │ │ │ │ +77 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis_; │ │ │ │ │ +78 Impl::LagrangeSimplexLocalCoefficients coefficients_; │ │ │ │ │ +79 // Yes, the template argument here really is LagrangeSimplexLocalBasis, even │ │ │ │ │ +though this is not │ │ │ │ │ +80 // the local basis of the refined locale finite element: The reason is that │ │ │ │ │ +LagrangeSimplexLocalInterpolation │ │ │ │ │ +81 // uses this argument to determine the polynomial order, and │ │ │ │ │ +RefinedP1LocalBasis returns order 1 │ │ │ │ │ +82 // whereas order 2 is needed here. │ │ │ │ │ +83 Impl::LagrangeSimplexLocalInterpolation > interpolation_; │ │ │ │ │ +84 }; │ │ │ │ │ +85 │ │ │ │ │ +86} │ │ │ │ │ +87 │ │ │ │ │ +88#endif // DUNE_LOCALFUNCTIONS_REFINED_REFINEDP1_HH │ │ │ │ │ +_p_0_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ +_r_e_f_i_n_e_d_p_1_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -P1 basis in dim-d enriched by quadratic edge bubble functions and an element │ │ │ │ │ -bubble function of order... │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -static constexpr void evaluateFunction(const DomainType &in, std::vector< │ │ │ │ │ -RangeType > &out) │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -static constexpr void partial(const std::array< unsigned int, dim > &order, │ │ │ │ │ -const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:157 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -static constexpr unsigned int order() noexcept │ │ │ │ │ -Polynomial order of the shape functions (4 in this case) │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:209 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -static constexpr void evaluateJacobian(const DomainType &in, std::vector< │ │ │ │ │ -JacobianType > &out) │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:119 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:229 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_: │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -HierarchicalSimplexP2WithElementBubbleLocalCoefficients() noexcept │ │ │ │ │ -Default constructor, initializes the local keys. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:238 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of coefficients. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:251 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const noexcept │ │ │ │ │ -Returns the i'th local key. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:257 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:271 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -static constexpr void interpolate(const F &f, std::vector< C > &out) │ │ │ │ │ -Local interpolation of the function f. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:293 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Piecewise linear continuous Lagrange functions on a uniformly refined simplex │ │ │ │ │ +element. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +static constexpr GeometryType type() │ │ │ │ │ +The element type that this finite element is defined on. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:71 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions of this finite element. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:64 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +RefinedP1LocalFiniteElement() │ │ │ │ │ +Default constructor. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:39 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +Evaluates all degrees of freedom for a given function. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:58 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RefinedP1LocalBasis< D, R, dim >, Impl:: │ │ │ │ │ +LagrangeSimplexLocalCoefficients< dim, 2 >, Impl:: │ │ │ │ │ +LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, dim, │ │ │ │ │ +2 > > > Traits │ │ │ │ │ +Export all types used by this implementation. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +Produces the assignments of the degrees of freedom to the element subentities. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:51 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +The set of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:23 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2withelementbubble.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalp2withelementbubble.hh File Reference
│ │ │ │ +
refinedp0localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalP2WithElementBubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble function. More...
class  Dune::RefinedP0LocalBasis< D, R, dim >
 Uniformly refined constant shape functions on a unit simplex in R^dim. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalp2withelementbubble.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_/ │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ +refinedp0localbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  Linear Lagrange functions enriched with quadratic edge bubble functions │ │ │ │ │ - and an element bubble function. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00536_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2withelementbubble.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,119 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalp2withelementbubble.hh
│ │ │ │ +
refinedp0localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ +
8#include <numeric>
│ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ +
10#include <dune/common/fvector.hh>
│ │ │ │ +
11#include <dune/common/fmatrix.hh>
│ │ │ │
12
│ │ │ │ -
13
│ │ │ │ -
14namespace Dune
│ │ │ │ -
15{
│ │ │ │ -
32 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
34 {
│ │ │ │ -
35 public:
│ │ │ │ - │ │ │ │ -
38
│ │ │ │ - │ │ │ │ -
41
│ │ │ │ - │ │ │ │ -
44
│ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
38 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
40 : public RefinedSimplexLocalBasis<D,dim>
│ │ │ │ +
41 {
│ │ │ │ +
42 // 2 to the k-th power
│ │ │ │ +
43 constexpr static int N = 1<<dim;
│ │ │ │ +
44 public:
│ │ │ │ +
46 typedef LocalBasisTraits<D,dim,Dune::FieldVector<D,dim>,R,1,Dune::FieldVector<R,1>, Dune::FieldMatrix<R,1,dim> > Traits;
│ │ │ │
47
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ -
50 const LocalBasisType& localBasis () const
│ │ │ │ -
51 {
│ │ │ │ -
52 return basis_;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
49 unsigned int size () const
│ │ │ │ +
50 {
│ │ │ │ +
51 return N;
│ │ │ │ +
52 }
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
55 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
56 std::vector<typename Traits::RangeType>& out) const
│ │ │ │
57 {
│ │ │ │ -
58 return coefficients_;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
63 {
│ │ │ │ -
64 return interpolation_;
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
│ │ │ │ -
68 static constexpr std::size_t size () noexcept
│ │ │ │ -
69 {
│ │ │ │ -
70 return LocalBasisType::size();
│ │ │ │ +
58 int subElement = this->getSubElement(in);
│ │ │ │ +
59 out.resize(N);
│ │ │ │ +
60 for(int i=0; i<N; ++i)
│ │ │ │ +
61 out[i] = (i==subElement) ? 1 : 0;
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
64 inline void
│ │ │ │ +
│ │ │ │ +
65 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
66 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
67 {
│ │ │ │ +
68 out.resize(N);
│ │ │ │ +
69 for(int i=0; i<N; ++i)
│ │ │ │ +
70 out[i][0] = 0;
│ │ │ │
71 }
│ │ │ │
│ │ │ │
72
│ │ │ │
│ │ │ │ -
74 static constexpr GeometryType type () noexcept
│ │ │ │ -
75 {
│ │ │ │ -
76 return GeometryTypes::simplex(dim);
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79 private:
│ │ │ │ -
80 LocalCoefficientsType coefficients_{};
│ │ │ │ -
81 [[no_unique_address]] LocalBasisType basis_{};
│ │ │ │ -
82 [[no_unique_address]] LocalInterpolationType interpolation_{};
│ │ │ │ -
83 };
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
85}
│ │ │ │ -
86
│ │ │ │ -
87#endif
│ │ │ │ - │ │ │ │ -
Hierarchical p2 shape functions for the simplex.
│ │ │ │ +
74 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
75 const typename Traits::DomainType& in, // position
│ │ │ │ +
76 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
77 {
│ │ │ │ +
78 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
79 if (totalOrder == 0) {
│ │ │ │ +
80 evaluateFunction(in, out);
│ │ │ │ +
81 } else {
│ │ │ │ +
82 out.resize(size());
│ │ │ │ +
83 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
84 out[i] = 0;
│ │ │ │ +
85 }
│ │ │ │ +
86 }
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
92 unsigned int order () const
│ │ │ │ +
93 {
│ │ │ │ +
94 return 0;
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96
│ │ │ │ +
97 };
│ │ │ │ +
│ │ │ │ +
98
│ │ │ │ +
99}
│ │ │ │ +
100#endif
│ │ │ │ +
Contains a base class for LocalBasis classes based on uniform refinement.
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble functio...
Definition hierarchicalp2withelementbubble.hh:34
│ │ │ │ -
HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim > LocalBasisType
Type of the local basis.
Definition hierarchicalp2withelementbubble.hh:37
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns the number of shape functions in this finite-element.
Definition hierarchicalp2withelementbubble.hh:68
│ │ │ │ -
static constexpr GeometryType type() noexcept
Returns the type of the geometry the finite-element is attached to.
Definition hierarchicalp2withelementbubble.hh:74
│ │ │ │ -
const LocalBasisType & localBasis() const
Returns the local basis, i.e., the set of shape functions.
Definition hierarchicalp2withelementbubble.hh:50
│ │ │ │ -
const LocalInterpolationType & localInterpolation() const
Returns object that evaluates degrees of freedom.
Definition hierarchicalp2withelementbubble.hh:62
│ │ │ │ -
HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim > LocalCoefficientsType
Type of the local coefficients.
Definition hierarchicalp2withelementbubble.hh:40
│ │ │ │ -
const LocalCoefficientsType & localCoefficients() const
Returns the assignment of the degrees of freedom to the element subentities.
Definition hierarchicalp2withelementbubble.hh:56
│ │ │ │ -
HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LocalBasisType, dim > LocalInterpolationType
Type of the local interpolation.
Definition hierarchicalp2withelementbubble.hh:43
│ │ │ │ -
P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order...
Definition hierarchicalsimplexp2withelementbubble.hh:46
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition hierarchicalsimplexp2withelementbubble.hh:105
│ │ │ │ -
The local keys of the hierarchical basis functions with element bubble.
Definition hierarchicalsimplexp2withelementbubble.hh:229
│ │ │ │ - │ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ +
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ +
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp0localbasis.hh:74
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp0localbasis.hh:55
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Definition refinedp0localbasis.hh:65
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition refinedp0localbasis.hh:92
│ │ │ │ +
LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
export type traits for function signature
Definition refinedp0localbasis.hh:46
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition refinedp0localbasis.hh:49
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,138 +1,131 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -hierarchicalp2withelementbubble.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ +refinedp0localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_P2_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_h_i_e_r_a_r_c_h_i_c_a_l_/_h_i_e_r_a_r_c_h_i_c_a_l_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_/ │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_w_i_t_h_e_l_e_m_e_n_t_b_u_b_b_l_e_._h_h> │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ 12 │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e │ │ │ │ │ -15{ │ │ │ │ │ -32 template │ │ │ │ │ -_3_3 class _H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -34 { │ │ │ │ │ -35 public: │ │ │ │ │ -_3_7 using _L_o_c_a_l_B_a_s_i_s_T_y_p_e = │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>; │ │ │ │ │ -38 │ │ │ │ │ -_4_0 using _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e = │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_d_i_m_>; │ │ │ │ │ -41 │ │ │ │ │ -_4_3 using _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e = │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_d_i_m_>; │ │ │ │ │ -44 │ │ │ │ │ -_4_6 using _T_r_a_i_t_s = │ │ │ │ │ -_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_L_o_c_a_l_B_a_s_i_s_T_y_p_e_,_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e_,_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e_>; │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +38 template │ │ │ │ │ +_3_9 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +40 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +41 { │ │ │ │ │ +42 // 2 to the k-th power │ │ │ │ │ +43 constexpr static int N = 1<,R,1,Dune:: │ │ │ │ │ +FieldVector, Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ 47 │ │ │ │ │ -48 │ │ │ │ │ -_5_0 const _L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return basis_; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 const _L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +_4_9 unsigned int _s_i_z_e () const │ │ │ │ │ +50 { │ │ │ │ │ +51 return N; │ │ │ │ │ +52 } │ │ │ │ │ +53 │ │ │ │ │ +_5_5 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +56 std::vector& out) const │ │ │ │ │ 57 { │ │ │ │ │ -58 return coefficients_; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_2 const _L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -63 { │ │ │ │ │ -64 return interpolation_; │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -_6_8 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -69 { │ │ │ │ │ -70 return _L_o_c_a_l_B_a_s_i_s_T_y_p_e_:_:_s_i_z_e(); │ │ │ │ │ +58 int subElement = this->getSubElement(in); │ │ │ │ │ +59 out.resize(N); │ │ │ │ │ +60 for(int i=0; i& out) const // return value │ │ │ │ │ +67 { │ │ │ │ │ +68 out.resize(N); │ │ │ │ │ +69 for(int i=0; i& _o_r_d_e_r, │ │ │ │ │ +75 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +76 std::vector& out) const // return value │ │ │ │ │ +77 { │ │ │ │ │ +78 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +79 if (totalOrder == 0) { │ │ │ │ │ +80 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +81 } else { │ │ │ │ │ +82 out.resize(_s_i_z_e()); │ │ │ │ │ +83 for (std::size_t i = 0; i < _s_i_z_e(); ++i) │ │ │ │ │ +84 out[i] = 0; │ │ │ │ │ +85 } │ │ │ │ │ +86 } │ │ │ │ │ +87 │ │ │ │ │ +_9_2 unsigned int _o_r_d_e_r () const │ │ │ │ │ +93 { │ │ │ │ │ +94 return 0; │ │ │ │ │ +95 } │ │ │ │ │ +96 │ │ │ │ │ +97 }; │ │ │ │ │ +98 │ │ │ │ │ +99} │ │ │ │ │ +100#endif │ │ │ │ │ +_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Linear Lagrange functions enriched with quadratic edge bubble functions and an │ │ │ │ │ -element bubble functio... │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim > LocalBasisType │ │ │ │ │ -Type of the local basis. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns the number of shape functions in this finite-element. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() noexcept │ │ │ │ │ -Returns the type of the geometry the finite-element is attached to. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const LocalBasisType & localBasis() const │ │ │ │ │ -Returns the local basis, i.e., the set of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const LocalInterpolationType & localInterpolation() const │ │ │ │ │ -Returns object that evaluates degrees of freedom. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim > │ │ │ │ │ -LocalCoefficientsType │ │ │ │ │ -Type of the local coefficients. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -Returns the assignment of the degrees of freedom to the element subentities. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LocalBasisType, dim > │ │ │ │ │ -LocalInterpolationType │ │ │ │ │ -Type of the local interpolation. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2withelementbubble.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -P1 basis in dim-d enriched by quadratic edge bubble functions and an element │ │ │ │ │ -bubble function of order... │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:105 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -The local keys of the hierarchical basis functions with element bubble. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2withelementbubble.hh:229 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_o_c_a_l_B_a_s_i_s_T_y_p_e_, │ │ │ │ │ -_d_i_m_ _> │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:74 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:92 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< │ │ │ │ │ +R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:49 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localinterpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalprismp2.hh File Reference
│ │ │ │ +
refinedp0localinterpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangeprism.hh>
│ │ │ │ -#include "hierarchicalprismp2/hierarchicalprismp2localbasis.hh"
│ │ │ │ -#include "hierarchicalprismp2/hierarchicalprismp2localinterpolation.hh"
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalPrismP2LocalFiniteElement< D, R >
class  Dune::RefinedP0LocalInterpolation< LB >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > >
 
class  Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalprismp2.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +refinedp0localinterpolation.hh File Reference │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_B_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00539_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalprismp2.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localinterpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,122 +70,197 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalprismp2.hh
│ │ │ │ +
refinedp0localinterpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ + │ │ │ │
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16
│ │ │ │ -
17namespace Dune
│ │ │ │ -
18{
│ │ │ │ -
19
│ │ │ │ +
10namespace Dune
│ │ │ │ +
11{
│ │ │ │ +
15 template<class LB>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
17 {};
│ │ │ │ +
│ │ │ │ +
18
│ │ │ │
22 template<class D, class R>
│ │ │ │
│ │ │ │ - │ │ │ │ + │ │ │ │
24 {
│ │ │ │ -
25
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ - │ │ │ │ -
31 Impl::LagrangePrismLocalCoefficients<2>,
│ │ │ │ - │ │ │ │ -
33
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {}
│ │ │ │ + │ │ │ │ +
26 typedef typename LB::Traits::DomainType DT;
│ │ │ │ +
27
│ │ │ │ +
28 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 interpolationPoints_(2)
│ │ │ │ +
31 {
│ │ │ │ +
32 // Interpolation is done by evaluating at the halved segments centers
│ │ │ │ +
33 interpolationPoints_[0][0] = 1.0/4.0;
│ │ │ │ +
34
│ │ │ │ +
35 interpolationPoints_[1][0] = 3.0/4.0;
│ │ │ │ +
36 }
│ │ │ │
│ │ │ │ +
37
│ │ │ │
38
│ │ │ │ -
│ │ │ │ -
41 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
42 {
│ │ │ │ -
43 return basis;
│ │ │ │ -
44 }
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
49 {
│ │ │ │ -
50 return coefficients;
│ │ │ │ -
51 }
│ │ │ │ +
39 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
40 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
41 {
│ │ │ │ +
42 out.resize(interpolationPoints_.size());
│ │ │ │ +
43 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ +
44 {
│ │ │ │ +
45 out[i] = f(interpolationPoints_[i]);
│ │ │ │ +
46 }
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
49 private:
│ │ │ │ +
50 std::vector<DT> interpolationPoints_;
│ │ │ │ +
51 };
│ │ │ │
│ │ │ │
52
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
56 {
│ │ │ │ -
57 return interpolation;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
61 unsigned int size () const
│ │ │ │ -
62 {
│ │ │ │ -
63 return basis.size();
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ -
65
│ │ │ │ -
│ │ │ │ -
68 static constexpr GeometryType type ()
│ │ │ │ -
69 {
│ │ │ │ -
70 return GeometryTypes::prism;
│ │ │ │ -
71 }
│ │ │ │ -
│ │ │ │ +
56 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
58 {
│ │ │ │ + │ │ │ │ +
60 typedef typename LB::Traits::DomainType DT;
│ │ │ │ +
61
│ │ │ │ +
62 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
64 interpolationPoints_(4)
│ │ │ │ +
65 {
│ │ │ │ +
66 // Interpolation is done by evaluating at the subtriangle centers
│ │ │ │ +
67 interpolationPoints_[0][0] = 1.0/6;
│ │ │ │ +
68 interpolationPoints_[0][1] = 1.0/6;
│ │ │ │ +
69
│ │ │ │ +
70 interpolationPoints_[1][0] = 4.0/6;
│ │ │ │ +
71 interpolationPoints_[1][1] = 1.0/6;
│ │ │ │
72
│ │ │ │ -
73 private:
│ │ │ │ - │ │ │ │ +
73 interpolationPoints_[2][0] = 1.0/6;
│ │ │ │ +
74 interpolationPoints_[2][1] = 4.0/6;
│ │ │ │
75
│ │ │ │ -
77 Impl::LagrangePrismLocalCoefficients<2> coefficients;
│ │ │ │ -
78
│ │ │ │ - │ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
82}
│ │ │ │ -
83
│ │ │ │ -
84#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ -
Hierarchical prism p2 shape functions for the simplex.
│ │ │ │ - │ │ │ │ +
76 interpolationPoints_[3][0] = 2.0/6;
│ │ │ │ +
77 interpolationPoints_[3][1] = 2.0/6;
│ │ │ │ +
78 }
│ │ │ │ +
│ │ │ │ +
79
│ │ │ │ +
80
│ │ │ │ +
81 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
82 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
83 {
│ │ │ │ +
84 out.resize(interpolationPoints_.size());
│ │ │ │ +
85 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ +
86 {
│ │ │ │ +
87 out[i] = f(interpolationPoints_[i]);
│ │ │ │ +
88 }
│ │ │ │ +
89 }
│ │ │ │ +
│ │ │ │ +
90
│ │ │ │ +
91 private:
│ │ │ │ +
92 std::vector<DT> interpolationPoints_;
│ │ │ │ +
93 };
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
98 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
100 {
│ │ │ │ + │ │ │ │ +
102 typedef typename LB::Traits::DomainType DT;
│ │ │ │ +
103
│ │ │ │ +
104 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
106 interpolationPoints_(8)
│ │ │ │ +
107 {
│ │ │ │ +
108 // Interpolation is done by evaluating at the subtriangle centers
│ │ │ │ +
109 interpolationPoints_[0][0] = 1.0/8;
│ │ │ │ +
110 interpolationPoints_[0][1] = 1.0/8;
│ │ │ │ +
111 interpolationPoints_[0][2] = 1.0/8;
│ │ │ │ +
112
│ │ │ │ +
113 interpolationPoints_[1][0] = 5.0/8;
│ │ │ │ +
114 interpolationPoints_[1][1] = 1.0/8;
│ │ │ │ +
115 interpolationPoints_[1][2] = 1.0/8;
│ │ │ │ +
116
│ │ │ │ +
117 interpolationPoints_[2][0] = 1.0/8;
│ │ │ │ +
118 interpolationPoints_[2][1] = 5.0/8;
│ │ │ │ +
119 interpolationPoints_[2][2] = 1.0/8;
│ │ │ │ +
120
│ │ │ │ +
121 interpolationPoints_[3][0] = 1.0/8;
│ │ │ │ +
122 interpolationPoints_[3][1] = 1.0/8;
│ │ │ │ +
123 interpolationPoints_[3][2] = 5.0/8;
│ │ │ │ +
124
│ │ │ │ +
125 interpolationPoints_[4][0] = 1.0/4;
│ │ │ │ +
126 interpolationPoints_[4][1] = 1.0/8;
│ │ │ │ +
127 interpolationPoints_[4][2] = 1.0/4;
│ │ │ │ +
128
│ │ │ │ +
129 interpolationPoints_[5][0] = 3.0/8;
│ │ │ │ +
130 interpolationPoints_[5][1] = 1.0/4;
│ │ │ │ +
131 interpolationPoints_[5][2] = 1.0/8;
│ │ │ │ +
132
│ │ │ │ +
133 interpolationPoints_[6][0] = 1.0/8;
│ │ │ │ +
134 interpolationPoints_[6][1] = 1.0/4;
│ │ │ │ +
135 interpolationPoints_[6][2] = 3.0/8;
│ │ │ │ +
136
│ │ │ │ +
137 interpolationPoints_[7][0] = 1.0/4;
│ │ │ │ +
138 interpolationPoints_[7][1] = 3.0/8;
│ │ │ │ +
139 interpolationPoints_[7][2] = 1.0/4;
│ │ │ │ +
140 }
│ │ │ │ +
│ │ │ │ +
141
│ │ │ │ +
142
│ │ │ │ +
143 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
144 void interpolate (const F& f, std::vector<C>& out) const
│ │ │ │ +
145 {
│ │ │ │ +
146 out.resize(interpolationPoints_.size());
│ │ │ │ +
147 for (size_t i = 0; i < out.size(); ++i)
│ │ │ │ +
148 {
│ │ │ │ +
149 out[i] = f(interpolationPoints_[i]);
│ │ │ │ +
150 }
│ │ │ │ +
151 }
│ │ │ │ +
│ │ │ │ +
152
│ │ │ │ +
153 private:
│ │ │ │ +
154 std::vector<DT> interpolationPoints_;
│ │ │ │ +
155 };
│ │ │ │ +
│ │ │ │ +
156}
│ │ │ │ +
157
│ │ │ │ +
158#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Definition hierarchicalprismp2.hh:24
│ │ │ │ -
static constexpr GeometryType type()
Definition hierarchicalprismp2.hh:68
│ │ │ │ -
HierarchicalPrismP2LocalFiniteElement()
Definition hierarchicalprismp2.hh:36
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition hierarchicalprismp2.hh:55
│ │ │ │ -
LocalFiniteElementTraits< HierarchicalPrismP2LocalBasis< D, R >, Impl::LagrangePrismLocalCoefficients< 2 >, HierarchicalPrismP2LocalInterpolation< HierarchicalPrismP2LocalBasis< D, R > > > Traits
Definition hierarchicalprismp2.hh:32
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition hierarchicalprismp2.hh:41
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition hierarchicalprismp2.hh:61
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition hierarchicalprismp2.hh:48
│ │ │ │ -
Definition hierarchicalprismp2localbasis.hh:23
│ │ │ │ -
Definition hierarchicalprismp2localinterpolation.hh:17
│ │ │ │ +
Uniformly refined constant shape functions on a unit simplex in R^dim.
Definition refinedp0localbasis.hh:41
│ │ │ │ +
Definition refinedp0localinterpolation.hh:17
│ │ │ │ +
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:29
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:40
│ │ │ │ +
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:63
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:82
│ │ │ │ +
RefinedP0LocalInterpolation()
Definition refinedp0localinterpolation.hh:105
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Definition refinedp0localinterpolation.hh:144
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,132 +1,191 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -hierarchicalprismp2.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ +refinedp0localinterpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_PRISM_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALINTERPOLATION_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ +8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_r_e_f_i_n_e_d_p_0_/_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ 9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -14#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -15 │ │ │ │ │ -16 │ │ │ │ │ -17namespace _D_u_n_e │ │ │ │ │ -18{ │ │ │ │ │ -19 │ │ │ │ │ +10namespace _D_u_n_e │ │ │ │ │ +11{ │ │ │ │ │ +15 template │ │ │ │ │ +_1_6 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +17 {}; │ │ │ │ │ +18 │ │ │ │ │ 22 template │ │ │ │ │ -_2_3 class _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +_2_3 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ 24 { │ │ │ │ │ -25 │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -30 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_>, │ │ │ │ │ -31 Impl::LagrangePrismLocalCoefficients<2>, │ │ │ │ │ -_3_2 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > > │ │ │ │ │ -_T_r_a_i_t_s; │ │ │ │ │ -33 │ │ │ │ │ -_3_6 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -37 {} │ │ │ │ │ +25 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_1_> _L_B; │ │ │ │ │ +26 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ +27 │ │ │ │ │ +28 public: │ │ │ │ │ +_2_9 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ +30 interpolationPoints_(2) │ │ │ │ │ +31 { │ │ │ │ │ +32 // Interpolation is done by evaluating at the halved segments centers │ │ │ │ │ +33 interpolationPoints_[0][0] = 1.0/4.0; │ │ │ │ │ +34 │ │ │ │ │ +35 interpolationPoints_[1][0] = 3.0/4.0; │ │ │ │ │ +36 } │ │ │ │ │ +37 │ │ │ │ │ 38 │ │ │ │ │ -_4_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -42 { │ │ │ │ │ -43 return basis; │ │ │ │ │ -44 } │ │ │ │ │ -45 │ │ │ │ │ -_4_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -49 { │ │ │ │ │ -50 return coefficients; │ │ │ │ │ -51 } │ │ │ │ │ +39 template │ │ │ │ │ +_4_0 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +41 { │ │ │ │ │ +42 out.resize(interpolationPoints_.size()); │ │ │ │ │ +43 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ +44 { │ │ │ │ │ +45 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ +46 } │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +49 private: │ │ │ │ │ +50 std::vector
interpolationPoints_; │ │ │ │ │ +51 }; │ │ │ │ │ 52 │ │ │ │ │ -_5_5 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -56 { │ │ │ │ │ -57 return interpolation; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_1 unsigned int _s_i_z_e () const │ │ │ │ │ -62 { │ │ │ │ │ -63 return basis.size(); │ │ │ │ │ -64 } │ │ │ │ │ -65 │ │ │ │ │ -_6_8 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -69 { │ │ │ │ │ -70 return GeometryTypes::prism; │ │ │ │ │ -71 } │ │ │ │ │ +56 template │ │ │ │ │ +_5_7 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ +58 { │ │ │ │ │ +59 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_2_> _L_B; │ │ │ │ │ +60 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ +61 │ │ │ │ │ +62 public: │ │ │ │ │ +_6_3 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ +64 interpolationPoints_(4) │ │ │ │ │ +65 { │ │ │ │ │ +66 // Interpolation is done by evaluating at the subtriangle centers │ │ │ │ │ +67 interpolationPoints_[0][0] = 1.0/6; │ │ │ │ │ +68 interpolationPoints_[0][1] = 1.0/6; │ │ │ │ │ +69 │ │ │ │ │ +70 interpolationPoints_[1][0] = 4.0/6; │ │ │ │ │ +71 interpolationPoints_[1][1] = 1.0/6; │ │ │ │ │ 72 │ │ │ │ │ -73 private: │ │ │ │ │ -74 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> basis; │ │ │ │ │ +73 interpolationPoints_[2][0] = 1.0/6; │ │ │ │ │ +74 interpolationPoints_[2][1] = 4.0/6; │ │ │ │ │ 75 │ │ │ │ │ -77 Impl::LagrangePrismLocalCoefficients<2> coefficients; │ │ │ │ │ -78 │ │ │ │ │ -79 _H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_> > │ │ │ │ │ -interpolation; │ │ │ │ │ -80 }; │ │ │ │ │ -81 │ │ │ │ │ -82} │ │ │ │ │ -83 │ │ │ │ │ -84#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_p_r_i_s_m_._h_h │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -Hierarchical prism p2 shape functions for the simplex. │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_p_r_i_s_m_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +76 interpolationPoints_[3][0] = 2.0/6; │ │ │ │ │ +77 interpolationPoints_[3][1] = 2.0/6; │ │ │ │ │ +78 } │ │ │ │ │ +79 │ │ │ │ │ +80 │ │ │ │ │ +81 template │ │ │ │ │ +_8_2 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +83 { │ │ │ │ │ +84 out.resize(interpolationPoints_.size()); │ │ │ │ │ +85 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ +86 { │ │ │ │ │ +87 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ +88 } │ │ │ │ │ +89 } │ │ │ │ │ +90 │ │ │ │ │ +91 private: │ │ │ │ │ +92 std::vector
interpolationPoints_; │ │ │ │ │ +93 }; │ │ │ │ │ +94 │ │ │ │ │ +98 template │ │ │ │ │ +_9_9 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n<_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s > │ │ │ │ │ +100 { │ │ │ │ │ +101 typedef _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_3_> _L_B; │ │ │ │ │ +102 typedef typename LB::Traits::DomainType DT; │ │ │ │ │ +103 │ │ │ │ │ +104 public: │ │ │ │ │ +_1_0_5 _R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n() : │ │ │ │ │ +106 interpolationPoints_(8) │ │ │ │ │ +107 { │ │ │ │ │ +108 // Interpolation is done by evaluating at the subtriangle centers │ │ │ │ │ +109 interpolationPoints_[0][0] = 1.0/8; │ │ │ │ │ +110 interpolationPoints_[0][1] = 1.0/8; │ │ │ │ │ +111 interpolationPoints_[0][2] = 1.0/8; │ │ │ │ │ +112 │ │ │ │ │ +113 interpolationPoints_[1][0] = 5.0/8; │ │ │ │ │ +114 interpolationPoints_[1][1] = 1.0/8; │ │ │ │ │ +115 interpolationPoints_[1][2] = 1.0/8; │ │ │ │ │ +116 │ │ │ │ │ +117 interpolationPoints_[2][0] = 1.0/8; │ │ │ │ │ +118 interpolationPoints_[2][1] = 5.0/8; │ │ │ │ │ +119 interpolationPoints_[2][2] = 1.0/8; │ │ │ │ │ +120 │ │ │ │ │ +121 interpolationPoints_[3][0] = 1.0/8; │ │ │ │ │ +122 interpolationPoints_[3][1] = 1.0/8; │ │ │ │ │ +123 interpolationPoints_[3][2] = 5.0/8; │ │ │ │ │ +124 │ │ │ │ │ +125 interpolationPoints_[4][0] = 1.0/4; │ │ │ │ │ +126 interpolationPoints_[4][1] = 1.0/8; │ │ │ │ │ +127 interpolationPoints_[4][2] = 1.0/4; │ │ │ │ │ +128 │ │ │ │ │ +129 interpolationPoints_[5][0] = 3.0/8; │ │ │ │ │ +130 interpolationPoints_[5][1] = 1.0/4; │ │ │ │ │ +131 interpolationPoints_[5][2] = 1.0/8; │ │ │ │ │ +132 │ │ │ │ │ +133 interpolationPoints_[6][0] = 1.0/8; │ │ │ │ │ +134 interpolationPoints_[6][1] = 1.0/4; │ │ │ │ │ +135 interpolationPoints_[6][2] = 3.0/8; │ │ │ │ │ +136 │ │ │ │ │ +137 interpolationPoints_[7][0] = 1.0/4; │ │ │ │ │ +138 interpolationPoints_[7][1] = 3.0/8; │ │ │ │ │ +139 interpolationPoints_[7][2] = 1.0/4; │ │ │ │ │ +140 } │ │ │ │ │ +141 │ │ │ │ │ +142 │ │ │ │ │ +143 template │ │ │ │ │ +_1_4_4 void _i_n_t_e_r_p_o_l_a_t_e (const F& f, std::vector& out) const │ │ │ │ │ +145 { │ │ │ │ │ +146 out.resize(interpolationPoints_.size()); │ │ │ │ │ +147 for (size_t i = 0; i < out.size(); ++i) │ │ │ │ │ +148 { │ │ │ │ │ +149 out[i] = f(interpolationPoints_[i]); │ │ │ │ │ +150 } │ │ │ │ │ +151 } │ │ │ │ │ +152 │ │ │ │ │ +153 private: │ │ │ │ │ +154 std::vector
interpolationPoints_; │ │ │ │ │ +155 }; │ │ │ │ │ +156} │ │ │ │ │ +157 │ │ │ │ │ +158#endif │ │ │ │ │ +_r_e_f_i_n_e_d_p_0_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:68 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_: │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -HierarchicalPrismP2LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< HierarchicalPrismP2LocalBasis< D, R >, Impl:: │ │ │ │ │ -LagrangePrismLocalCoefficients< 2 >, HierarchicalPrismP2LocalInterpolation< │ │ │ │ │ -HierarchicalPrismP2LocalBasis< D, R > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_r_i_s_m_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalprismp2localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localbasis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _>_:_: │ │ │ │ │ +_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RefinedP0LocalInterpolation() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_ _>_:_: │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _>_:_: │ │ │ │ │ +_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RefinedP0LocalInterpolation() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_ _>_:_: │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:82 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _>_:_: │ │ │ │ │ +_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +RefinedP0LocalInterpolation() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:105 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _R_e_f_i_n_e_d_P_0_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_ _>_:_: │ │ │ │ │ +_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localinterpolation.hh:144 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2.hh File Reference │ │ │ │ +dune-localfunctions: refinedp0localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,35 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
hierarchicalp2.hh File Reference
│ │ │ │ +
refinedp0localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include "hierarchicalp2/hierarchicalsimplexp2localbasis.hh"
│ │ │ │ -#include "hierarchicalp2/hierarchicalsimplexp2localinterpolation.hh"
│ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <iostream>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::HierarchicalP2LocalFiniteElement< D, R, dim >
class  Dune::RefinedP0LocalCoefficients< k >
 Layout map for RefinedP0 elements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -hierarchicalp2.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +refinedp0localcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _k_ _> │ │ │ │ │ +  Layout map for RefinedP0 elements. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00542_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp2.hh Source File │ │ │ │ +dune-localfunctions: refinedp0localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,124 +70,85 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalp2.hh
│ │ │ │ +
refinedp0localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ - │ │ │ │ -
12
│ │ │ │ - │ │ │ │ - │ │ │ │ -
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
21 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
23 {
│ │ │ │ -
24
│ │ │ │ -
25 static_assert(1 <= dim && dim <= 3,
│ │ │ │ -
26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3.");
│ │ │ │ -
27
│ │ │ │ -
28 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
35
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 {}
│ │ │ │ -
│ │ │ │ -
40
│ │ │ │ -
│ │ │ │ -
43 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
44 {
│ │ │ │ -
45 return basis;
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ -
47
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
51 {
│ │ │ │ -
52 return coefficients;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
58 {
│ │ │ │ -
59 return interpolation;
│ │ │ │ -
60 }
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
│ │ │ │ -
63 unsigned int size () const
│ │ │ │ -
64 {
│ │ │ │ -
65 return basis.size();
│ │ │ │ -
66 }
│ │ │ │ -
│ │ │ │ -
67
│ │ │ │ -
│ │ │ │ -
70 static constexpr GeometryType type ()
│ │ │ │ -
71 {
│ │ │ │ -
72 return GeometryTypes::simplex(dim);
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
75 private:
│ │ │ │ - │ │ │ │ -
77
│ │ │ │ -
78 typename Traits::LocalCoefficientsType coefficients;
│ │ │ │ -
79
│ │ │ │ - │ │ │ │ -
81 };
│ │ │ │ -
│ │ │ │ -
82
│ │ │ │ -
83}
│ │ │ │ -
84
│ │ │ │ -
85#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
Hierarchical p2 shape functions for the simplex.
│ │ │ │ +
8#include <cstddef>
│ │ │ │ +
9#include <iostream>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune
│ │ │ │ +
15{
│ │ │ │ +
16
│ │ │ │ +
24 template<unsigned int k>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 // 2 to the k-th power
│ │ │ │ +
28 constexpr static int N = 1<<k;
│ │ │ │ +
29
│ │ │ │ +
30 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
32 localKeys_(N)
│ │ │ │ +
33 {
│ │ │ │ +
34 // All functions are associated to the element
│ │ │ │ +
35 for (int i = 0; i < N; ++i)
│ │ │ │ +
36 localKeys_[i] = LocalKey(0,0,i);
│ │ │ │ +
37 }
│ │ │ │ +
│ │ │ │ +
38
│ │ │ │ +
│ │ │ │ +
40 std::size_t size () const
│ │ │ │ +
41 {
│ │ │ │ +
42 return N;
│ │ │ │ +
43 }
│ │ │ │ +
│ │ │ │ +
44
│ │ │ │ +
│ │ │ │ +
46 const LocalKey& localKey (std::size_t i) const
│ │ │ │ +
47 {
│ │ │ │ +
48 return localKeys_[i];
│ │ │ │ +
49 }
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
51 private:
│ │ │ │ +
52 std::vector<LocalKey> localKeys_;
│ │ │ │ +
53
│ │ │ │ +
54 };
│ │ │ │ +
│ │ │ │ +
55
│ │ │ │ +
56}
│ │ │ │ +
57
│ │ │ │ +
58#endif
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Definition hierarchicalp2.hh:23
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition hierarchicalp2.hh:43
│ │ │ │ -
HierarchicalP2LocalFiniteElement()
Definition hierarchicalp2.hh:38
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition hierarchicalp2.hh:63
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition hierarchicalp2.hh:50
│ │ │ │ -
LocalFiniteElementTraits< HierarchicalSimplexP2LocalBasis< D, R, dim >, typename LagrangeSimplexLocalFiniteElement< D, R, dim, 2 >::Traits::LocalCoefficientsType, HierarchicalSimplexP2LocalInterpolation< HierarchicalSimplexP2LocalBasis< D, R, dim > > > Traits
Definition hierarchicalp2.hh:34
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition hierarchicalp2.hh:57
│ │ │ │ -
static constexpr GeometryType type()
Definition hierarchicalp2.hh:70
│ │ │ │ -
Definition hierarchicalsimplexp2localbasis.hh:23
│ │ │ │ -
Definition hierarchicalsimplexp2localinterpolation.hh:17
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Layout map for RefinedP0 elements.
Definition refinedp0localcoefficients.hh:26
│ │ │ │ +
RefinedP0LocalCoefficients()
Definition refinedp0localcoefficients.hh:31
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition refinedp0localcoefficients.hh:40
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition refinedp0localcoefficients.hh:46
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,137 +1,82 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -hierarchicalp2.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_0 │ │ │ │ │ +refinedp0localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_P2_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_REFINED_P0_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -12 │ │ │ │ │ -13#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -14#include "_h_i_e_r_a_r_c_h_i_c_a_l_p_2_/_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -21 template │ │ │ │ │ -_2_2 class _H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -23 { │ │ │ │ │ -24 │ │ │ │ │ -25 static_assert(1 <= dim && dim <= 3, │ │ │ │ │ -26 "HierarchicalP2LocalFiniteElement only implemented for dim==1, 2, 3."); │ │ │ │ │ -27 │ │ │ │ │ -28 public: │ │ │ │ │ -31 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s< │ │ │ │ │ -32 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ -33 typename _L_a_g_r_a_n_g_e_S_i_m_p_l_e_x_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_,_2_>_:_:_T_r_a_i_t_s_:_: │ │ │ │ │ -_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e, │ │ │ │ │ -_3_4 │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> │ │ │ │ │ -> > _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -_3_8 _H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -39 {} │ │ │ │ │ -40 │ │ │ │ │ -_4_3 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -44 { │ │ │ │ │ -45 return basis; │ │ │ │ │ -46 } │ │ │ │ │ -47 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return coefficients; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_7 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -58 { │ │ │ │ │ -59 return interpolation; │ │ │ │ │ -60 } │ │ │ │ │ -61 │ │ │ │ │ -_6_3 unsigned int _s_i_z_e () const │ │ │ │ │ -64 { │ │ │ │ │ -65 return basis.size(); │ │ │ │ │ -66 } │ │ │ │ │ -67 │ │ │ │ │ -_7_0 static constexpr GeometryType _t_y_p_e () │ │ │ │ │ -71 { │ │ │ │ │ -72 return GeometryTypes::simplex(dim); │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -75 private: │ │ │ │ │ -76 _H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ -77 │ │ │ │ │ -78 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e coefficients; │ │ │ │ │ -79 │ │ │ │ │ -80 │ │ │ │ │ -_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> │ │ │ │ │ -> interpolation; │ │ │ │ │ -81 }; │ │ │ │ │ -82 │ │ │ │ │ -83} │ │ │ │ │ -84 │ │ │ │ │ -85#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_h_i_e_r_a_r_c_h_i_c_a_l_s_i_m_p_l_e_x_p_2_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -Hierarchical p2 shape functions for the simplex. │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e │ │ │ │ │ +15{ │ │ │ │ │ +16 │ │ │ │ │ +24 template │ │ │ │ │ +_2_5 class _R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +26 { │ │ │ │ │ +27 // 2 to the k-th power │ │ │ │ │ +28 constexpr static int N = 1< localKeys_; │ │ │ │ │ +53 │ │ │ │ │ +54 }; │ │ │ │ │ +55 │ │ │ │ │ +56} │ │ │ │ │ +57 │ │ │ │ │ +58#endif │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -HierarchicalP2LocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< HierarchicalSimplexP2LocalBasis< D, R, dim >, │ │ │ │ │ -typename LagrangeSimplexLocalFiniteElement< D, R, dim, 2 >::Traits:: │ │ │ │ │ -LocalCoefficientsType, HierarchicalSimplexP2LocalInterpolation< │ │ │ │ │ -HierarchicalSimplexP2LocalBasis< D, R, dim > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:57 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_2_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -static constexpr GeometryType type() │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalp2.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localbasis.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_S_i_m_p_l_e_x_P_2_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn hierarchicalsimplexp2localinterpolation.hh:17 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for RefinedP0 elements. │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localcoefficients.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +RefinedP0LocalCoefficients() │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localcoefficients.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localcoefficients.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_0_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn refinedp0localcoefficients.hh:46 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp1withelementbubble.hh File Reference │ │ │ │ +dune-localfunctions: refinedsimplexlocalbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -Namespaces | │ │ │ │ -Typedefs
│ │ │ │ -
hierarchicalp1withelementbubble.hh File Reference
│ │ │ │ +Classes | │ │ │ │ +Namespaces
│ │ │ │ +
refinedsimplexlocalbasis.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │ -
#include <dune/localfunctions/enriched/simplexp1bubble.hh>
│ │ │ │ + │ │ │ │ +

Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ +More...

│ │ │ │ +
#include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/exceptions.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +

│ │ │ │ +Classes

class  Dune::RefinedSimplexLocalBasis< D, dim >
 
class  Dune::RefinedSimplexLocalBasis< D, 1 >
 Base class for LocalBasis classes based on uniform refinement in 1D; provides numbering and local coordinates of subelements. More...
 
class  Dune::RefinedSimplexLocalBasis< D, 2 >
 Base class for LocalBasis classes based on uniform refinement in 2D; provides numbering and local coordinates of subelements. More...
 
class  Dune::RefinedSimplexLocalBasis< D, 3 >
 Base class for LocalBasis classes based on uniform refinement in 3D; provides numbering and local coordinates of subelements. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │

│ │ │ │ -Typedefs

template<class D , class R , int dim>
using Dune::HierarchicalP1WithElementBubbleLocalFiniteElement = SimplexP1BubbleLocalFiniteElement< D, R, dim >
 Linear Lagrange functions enriched with an element bubble function.
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Contains a base class for LocalBasis classes based on uniform refinement.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,38 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -_N_a_m_e_s_p_a_c_e_s | _T_y_p_e_d_e_f_s │ │ │ │ │ -hierarchicalp1withelementbubble.hh File Reference │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +_C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ +refinedsimplexlocalbasis.hh File Reference │ │ │ │ │ +Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ +_M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ +CCllaasssseess │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _> │ │ │ │ │ +  Base class for LocalBasis classes based on uniform refinement in 1D; │ │ │ │ │ + provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _> │ │ │ │ │ +  Base class for LocalBasis classes based on uniform refinement in 2D; │ │ │ │ │ + provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _> │ │ │ │ │ +  Base class for LocalBasis classes based on uniform refinement in 3D; │ │ │ │ │ + provides numbering and local coordinates of subelements. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ -TTyyppeeddeeffss │ │ │ │ │ -template │ │ │ │ │ -using  _D_u_n_e_:_:_H_i_e_r_a_r_c_h_i_c_a_l_P_1_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t = │ │ │ │ │ - _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t< D, R, dim > │ │ │ │ │ -  Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ -  │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00545_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: hierarchicalp1withelementbubble.hh Source File │ │ │ │ +dune-localfunctions: refinedsimplexlocalbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,41 +70,291 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
hierarchicalp1withelementbubble.hh
│ │ │ │ +
refinedsimplexlocalbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ - │ │ │ │ -
9
│ │ │ │ -
10namespace Dune
│ │ │ │ -
11{
│ │ │ │ -
16 template<class D, class R, int dim>
│ │ │ │ - │ │ │ │ - │ │ │ │ -
19}
│ │ │ │ -
20
│ │ │ │ -
21#endif // DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13#include <dune/common/exceptions.hh>
│ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18 template<class D, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
20 {
│ │ │ │ +
21 protected:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
23 {
│ │ │ │ +
24 DUNE_THROW(Dune::NotImplemented,"RefinedSimplexLocalBasis not implemented for dim > 3.");
│ │ │ │ +
25 }
│ │ │ │ +
│ │ │ │ +
26 };
│ │ │ │ +
│ │ │ │ +
27
│ │ │ │ +
36 template<class D>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
38 {
│ │ │ │ +
39 protected:
│ │ │ │ +
40
│ │ │ │ + │ │ │ │ +
43
│ │ │ │ +
│ │ │ │ +
54 static int getSubElement(const FieldVector<D,1>& global)
│ │ │ │ +
55 {
│ │ │ │ +
56 if (global[0] <= 0.5)
│ │ │ │ +
57 return 0;
│ │ │ │ +
58 else if (global[0] <= 1.0)
│ │ │ │ +
59 return 1;
│ │ │ │ +
60
│ │ │ │ +
61 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ +
62 }
│ │ │ │ +
│ │ │ │ +
63
│ │ │ │ +
│ │ │ │ +
70 static void getSubElement(const FieldVector<D,1>& global,
│ │ │ │ +
71 int& subElement,
│ │ │ │ +
72 FieldVector<D,1>& local)
│ │ │ │ +
73 {
│ │ │ │ +
74 if (global[0] <= 0.5) {
│ │ │ │ +
75 subElement = 0;
│ │ │ │ +
76 local[0] = 2.0 * global[0];
│ │ │ │ +
77 return;
│ │ │ │ +
78 }
│ │ │ │ +
79
│ │ │ │ +
80 subElement = 1;
│ │ │ │ +
81 local[0] = 2.0 * global[0] - 1.0;
│ │ │ │ +
82 }
│ │ │ │ +
│ │ │ │ +
83
│ │ │ │ +
84 };
│ │ │ │ +
│ │ │ │ +
85
│ │ │ │ +
86
│ │ │ │ +
98 template<class D>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
100 {
│ │ │ │ +
101 protected:
│ │ │ │ +
102
│ │ │ │ + │ │ │ │ +
105
│ │ │ │ +
│ │ │ │ +
121 static int getSubElement(const FieldVector<D,2>& global)
│ │ │ │ +
122 {
│ │ │ │ +
123 if (global[0] + global[1] <= 0.5)
│ │ │ │ +
124 return 0;
│ │ │ │ +
125 else if (global[0] >= 0.5)
│ │ │ │ +
126 return 1;
│ │ │ │ +
127 else if (global[1] >= 0.5)
│ │ │ │ +
128 return 2;
│ │ │ │ +
129
│ │ │ │ +
130 return 3;
│ │ │ │ +
131 }
│ │ │ │ +
│ │ │ │ +
132
│ │ │ │ +
│ │ │ │ +
139 static void getSubElement(const FieldVector<D,2>& global,
│ │ │ │ +
140 int& subElement,
│ │ │ │ +
141 FieldVector<D,2>& local)
│ │ │ │ +
142 {
│ │ │ │ +
143 if (global[0] + global[1] <= 0.5) {
│ │ │ │ +
144 subElement = 0;
│ │ │ │ +
145 local[0] = 2*global[0];
│ │ │ │ +
146 local[1] = 2*global[1];
│ │ │ │ +
147 return;
│ │ │ │ +
148 } else if (global[0] >= 0.5) {
│ │ │ │ +
149 subElement = 1;
│ │ │ │ +
150 local[0] = 2*global[0]-1;
│ │ │ │ +
151 local[1] = 2*global[1];
│ │ │ │ +
152 return;
│ │ │ │ +
153 } else if (global[1] >= 0.5) {
│ │ │ │ +
154 subElement = 2;
│ │ │ │ +
155 local[0] = 2*global[0];
│ │ │ │ +
156 local[1] = 2*global[1]-1;
│ │ │ │ +
157 return;
│ │ │ │ +
158 }
│ │ │ │ +
159
│ │ │ │ +
160 subElement = 3;
│ │ │ │ +
161 local[0] = -2 * global[0] + 1;
│ │ │ │ +
162 local[1] = -2 * global[1] + 1;
│ │ │ │ +
163
│ │ │ │ +
164 }
│ │ │ │ +
│ │ │ │ +
165
│ │ │ │ +
166
│ │ │ │ +
167 };
│ │ │ │ +
│ │ │ │ +
168
│ │ │ │ +
180 template<class D>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
182 {
│ │ │ │ +
183 protected:
│ │ │ │ +
184
│ │ │ │ + │ │ │ │ +
187
│ │ │ │ +
│ │ │ │ +
218 static int getSubElement(const FieldVector<D,3>& global)
│ │ │ │ +
219 {
│ │ │ │ +
220 if (global[0] + global[1] + global[2] <= 0.5)
│ │ │ │ +
221 return 0;
│ │ │ │ +
222 else if (global[0] >= 0.5)
│ │ │ │ +
223 return 1;
│ │ │ │ +
224 else if (global[1] >= 0.5)
│ │ │ │ +
225 return 2;
│ │ │ │ +
226 else if (global[2] >= 0.5)
│ │ │ │ +
227 return 3;
│ │ │ │ +
228 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5))
│ │ │ │ +
229 return 4;
│ │ │ │ +
230 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5))
│ │ │ │ +
231 return 5;
│ │ │ │ +
232 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5))
│ │ │ │ +
233 return 6;
│ │ │ │ +
234 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5))
│ │ │ │ +
235 return 7;
│ │ │ │ +
236
│ │ │ │ +
237 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ +
238
│ │ │ │ +
239 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
246 static void getSubElement(const FieldVector<D,3>& global,
│ │ │ │ +
247 int& subElement,
│ │ │ │ +
248 FieldVector<D,3>& local)
│ │ │ │ +
249 {
│ │ │ │ +
250 if (global[0] + global[1] + global[2] <= 0.5) {
│ │ │ │ +
251 subElement = 0;
│ │ │ │ +
252 local = global;
│ │ │ │ +
253 local *= 2.0;
│ │ │ │ +
254 return;
│ │ │ │ +
255 } else if (global[0] >= 0.5) {
│ │ │ │ +
256 subElement = 1;
│ │ │ │ +
257 local = global;
│ │ │ │ +
258 local[0] -= 0.5;
│ │ │ │ +
259 local *= 2.0;
│ │ │ │ +
260 return;
│ │ │ │ +
261 } else if (global[1] >= 0.5) {
│ │ │ │ +
262 subElement = 2;
│ │ │ │ +
263 local = global;
│ │ │ │ +
264 local[1] -= 0.5;
│ │ │ │ +
265 local *= 2.0;
│ │ │ │ +
266 return;
│ │ │ │ +
267 } else if (global[2] >= 0.5) {
│ │ │ │ +
268 subElement = 3;
│ │ │ │ +
269 local = global;
│ │ │ │ +
270 local[2] -= 0.5;
│ │ │ │ +
271 local *= 2.0;
│ │ │ │ +
272 return;
│ │ │ │ +
273 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5)) {
│ │ │ │ +
274 subElement = 4;
│ │ │ │ +
275 local[0] = 2.0 * global[1];
│ │ │ │ +
276 local[1] = 2.0 * (0.5 - global[0] - global[1]);
│ │ │ │ +
277 local[2] = 2.0 * (-0.5 + global[0] + global[1] + global[2]);
│ │ │ │ +
278 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ +
279 // A[0][1] = 2.0;
│ │ │ │ +
280 // A[1][0] = -2.0;
│ │ │ │ +
281 // A[1][1] = -2.0;
│ │ │ │ +
282 // A[2][0] = 2.0;
│ │ │ │ +
283 // A[2][1] = 2.0;
│ │ │ │ +
284 // A[2][2] = 2.0;
│ │ │ │ +
285 // A.mv(global,local);
│ │ │ │ +
286 // local[1] += 1.0;
│ │ │ │ +
287 // local[2] -= 1.0;
│ │ │ │ +
288 return;
│ │ │ │ +
289 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5)) {
│ │ │ │ +
290 subElement = 5;
│ │ │ │ +
291 local[0] = 2.0 * (0.5 - global[0]);
│ │ │ │ +
292 local[1] = 2.0 * (0.5 - global[1] - global[2]);
│ │ │ │ +
293 local[2] = 2.0 * global[2];
│ │ │ │ +
294 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ +
295 // A[0][0] = -2.0;
│ │ │ │ +
296 // A[1][1] = -2.0;
│ │ │ │ +
297 // A[1][2] = -2.0;
│ │ │ │ +
298 // A[2][2] = 2.0;
│ │ │ │ +
299 // A.mv(global,local);
│ │ │ │ +
300 // local[0] += 1.0;
│ │ │ │ +
301 // local[1] += 1.0;
│ │ │ │ +
302 return;
│ │ │ │ +
303 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5)) {
│ │ │ │ +
304 subElement = 6;
│ │ │ │ +
305 local[0] = 2.0 * (0.5 - global[0] - global[1]);
│ │ │ │ +
306 local[1] = 2.0 * global[0];
│ │ │ │ +
307 local[2] = 2.0 * (-0.5 + global[1] + global[2]);
│ │ │ │ +
308 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ +
309 // A[0][0] = -2.0;
│ │ │ │ +
310 // A[0][1] = -2.0;
│ │ │ │ +
311 // A[1][0] = 2.0;
│ │ │ │ +
312 // A[2][1] = 2.0;
│ │ │ │ +
313 // A[2][2] = 2.0;
│ │ │ │ +
314 // A.mv(global,local);
│ │ │ │ +
315 // local[0] += 1.0;
│ │ │ │ +
316 // local[2] -= 1.0;
│ │ │ │ +
317 return;
│ │ │ │ +
318 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5)) {
│ │ │ │ +
319 subElement = 7;
│ │ │ │ +
320 local[0] = 2.0 * (-0.5 + global[1] + global[2]);
│ │ │ │ +
321 local[1] = 2.0 * (0.5 - global[1]);
│ │ │ │ +
322 local[2] = 2.0 * (-0.5 + global[0] + global[1]);
│ │ │ │ +
323 // Dune::FieldMatrix<double,3,3> A(0.0);
│ │ │ │ +
324 // A[0][1] = 2.0;
│ │ │ │ +
325 // A[0][2] = 2.0;
│ │ │ │ +
326 // A[1][1] = -2.0;
│ │ │ │ +
327 // A[2][0] = 2.0;
│ │ │ │ +
328 // A[2][1] = 2.0;
│ │ │ │ +
329 // A.mv(global,local);
│ │ │ │ +
330 // local[0] -= 1.0;
│ │ │ │ +
331 // local[1] += 1.0;
│ │ │ │ +
332 // local[2] -= 1.0;
│ │ │ │ +
333 return;
│ │ │ │ +
334 }
│ │ │ │ +
335
│ │ │ │ +
336 DUNE_THROW(InvalidStateException, "no subelement defined");
│ │ │ │ +
337
│ │ │ │ +
338 }
│ │ │ │ +
│ │ │ │ +
339
│ │ │ │ +
340 };
│ │ │ │ +
│ │ │ │ +
341
│ │ │ │ +
342
│ │ │ │ +
343}
│ │ │ │ +
344
│ │ │ │ +
345#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Linear Lagrange functions enriched with an element bubble function.
Definition simplexp1bubble.hh:45
│ │ │ │ +
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ +
RefinedSimplexLocalBasis()
Definition refinedsimplexlocalbasis.hh:22
│ │ │ │ +
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:42
│ │ │ │ +
static void getSubElement(const FieldVector< D, 1 > &global, int &subElement, FieldVector< D, 1 > &local)
Get local coordinates in the subelement.
Definition refinedsimplexlocalbasis.hh:70
│ │ │ │ +
static int getSubElement(const FieldVector< D, 1 > &global)
Get the number of the subelement containing a given point.
Definition refinedsimplexlocalbasis.hh:54
│ │ │ │ +
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:104
│ │ │ │ +
static int getSubElement(const FieldVector< D, 2 > &global)
Get the number of the subtriangle containing a given point.
Definition refinedsimplexlocalbasis.hh:121
│ │ │ │ +
static void getSubElement(const FieldVector< D, 2 > &global, int &subElement, FieldVector< D, 2 > &local)
Get local coordinates in the subtriangle.
Definition refinedsimplexlocalbasis.hh:139
│ │ │ │ +
static void getSubElement(const FieldVector< D, 3 > &global, int &subElement, FieldVector< D, 3 > &local)
Get local coordinates in the subsimplex.
Definition refinedsimplexlocalbasis.hh:246
│ │ │ │ +
RefinedSimplexLocalBasis()
Protected default constructor so this class can only be instantiated as a base class.
Definition refinedsimplexlocalbasis.hh:186
│ │ │ │ +
static int getSubElement(const FieldVector< D, 3 > &global)
Get the number of the subsimplex containing a given point in the reference element.
Definition refinedsimplexlocalbasis.hh:218
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,35 +1,304 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _h_i_e_r_a_r_c_h_i_c_a_l │ │ │ │ │ -hierarchicalp1withelementbubble.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +refinedsimplexlocalbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_SIMPLEX_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_e_n_r_i_c_h_e_d_/_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h> │ │ │ │ │ -9 │ │ │ │ │ -10namespace _D_u_n_e │ │ │ │ │ -11{ │ │ │ │ │ -16 template │ │ │ │ │ -_1_7 using _H_i_e_r_a_r_c_h_i_c_a_l_P_1_W_i_t_h_E_l_e_m_e_n_t_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -18 = _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_D_,_R_,_d_i_m_>; │ │ │ │ │ -19} │ │ │ │ │ -20 │ │ │ │ │ -21#endif // DUNE_HIERARCHICAL_P1_WITH_ELEMENTBUBBLE_LOCALFINITEELEMENT_HH │ │ │ │ │ -_s_i_m_p_l_e_x_p_1_b_u_b_b_l_e_._h_h │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 template │ │ │ │ │ +_1_9 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +20 { │ │ │ │ │ +21 protected: │ │ │ │ │ +_2_2 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +23 { │ │ │ │ │ +24 DUNE_THROW(Dune::NotImplemented,"RefinedSimplexLocalBasis not implemented │ │ │ │ │ +for dim > 3."); │ │ │ │ │ +25 } │ │ │ │ │ +26 }; │ │ │ │ │ +27 │ │ │ │ │ +36 template │ │ │ │ │ +_3_7 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +38 { │ │ │ │ │ +39 protected: │ │ │ │ │ +40 │ │ │ │ │ +_4_2 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ +43 │ │ │ │ │ +_5_4 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ +55 { │ │ │ │ │ +56 if (global[0] <= 0.5) │ │ │ │ │ +57 return 0; │ │ │ │ │ +58 else if (global[0] <= 1.0) │ │ │ │ │ +59 return 1; │ │ │ │ │ +60 │ │ │ │ │ +61 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ +62 } │ │ │ │ │ +63 │ │ │ │ │ +_7_0 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ +71 int& subElement, │ │ │ │ │ +72 FieldVector& local) │ │ │ │ │ +73 { │ │ │ │ │ +74 if (global[0] <= 0.5) { │ │ │ │ │ +75 subElement = 0; │ │ │ │ │ +76 local[0] = 2.0 * global[0]; │ │ │ │ │ +77 return; │ │ │ │ │ +78 } │ │ │ │ │ +79 │ │ │ │ │ +80 subElement = 1; │ │ │ │ │ +81 local[0] = 2.0 * global[0] - 1.0; │ │ │ │ │ +82 } │ │ │ │ │ +83 │ │ │ │ │ +84 }; │ │ │ │ │ +85 │ │ │ │ │ +86 │ │ │ │ │ +98 template │ │ │ │ │ +_9_9 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +100 { │ │ │ │ │ +101 protected: │ │ │ │ │ +102 │ │ │ │ │ +_1_0_4 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ +105 │ │ │ │ │ +_1_2_1 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ +122 { │ │ │ │ │ +123 if (global[0] + global[1] <= 0.5) │ │ │ │ │ +124 return 0; │ │ │ │ │ +125 else if (global[0] >= 0.5) │ │ │ │ │ +126 return 1; │ │ │ │ │ +127 else if (global[1] >= 0.5) │ │ │ │ │ +128 return 2; │ │ │ │ │ +129 │ │ │ │ │ +130 return 3; │ │ │ │ │ +131 } │ │ │ │ │ +132 │ │ │ │ │ +_1_3_9 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ +140 int& subElement, │ │ │ │ │ +141 FieldVector& local) │ │ │ │ │ +142 { │ │ │ │ │ +143 if (global[0] + global[1] <= 0.5) { │ │ │ │ │ +144 subElement = 0; │ │ │ │ │ +145 local[0] = 2*global[0]; │ │ │ │ │ +146 local[1] = 2*global[1]; │ │ │ │ │ +147 return; │ │ │ │ │ +148 } else if (global[0] >= 0.5) { │ │ │ │ │ +149 subElement = 1; │ │ │ │ │ +150 local[0] = 2*global[0]-1; │ │ │ │ │ +151 local[1] = 2*global[1]; │ │ │ │ │ +152 return; │ │ │ │ │ +153 } else if (global[1] >= 0.5) { │ │ │ │ │ +154 subElement = 2; │ │ │ │ │ +155 local[0] = 2*global[0]; │ │ │ │ │ +156 local[1] = 2*global[1]-1; │ │ │ │ │ +157 return; │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +160 subElement = 3; │ │ │ │ │ +161 local[0] = -2 * global[0] + 1; │ │ │ │ │ +162 local[1] = -2 * global[1] + 1; │ │ │ │ │ +163 │ │ │ │ │ +164 } │ │ │ │ │ +165 │ │ │ │ │ +166 │ │ │ │ │ +167 }; │ │ │ │ │ +168 │ │ │ │ │ +180 template │ │ │ │ │ +_1_8_1 class _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +182 { │ │ │ │ │ +183 protected: │ │ │ │ │ +184 │ │ │ │ │ +_1_8_6 _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s() {} │ │ │ │ │ +187 │ │ │ │ │ +_2_1_8 static int _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global) │ │ │ │ │ +219 { │ │ │ │ │ +220 if (global[0] + global[1] + global[2] <= 0.5) │ │ │ │ │ +221 return 0; │ │ │ │ │ +222 else if (global[0] >= 0.5) │ │ │ │ │ +223 return 1; │ │ │ │ │ +224 else if (global[1] >= 0.5) │ │ │ │ │ +225 return 2; │ │ │ │ │ +226 else if (global[2] >= 0.5) │ │ │ │ │ +227 return 3; │ │ │ │ │ +228 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= 0.5)) │ │ │ │ │ +229 return 4; │ │ │ │ │ +230 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= 0.5)) │ │ │ │ │ +231 return 5; │ │ │ │ │ +232 else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= 0.5)) │ │ │ │ │ +233 return 6; │ │ │ │ │ +234 else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= 0.5)) │ │ │ │ │ +235 return 7; │ │ │ │ │ +236 │ │ │ │ │ +237 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ +238 │ │ │ │ │ +239 } │ │ │ │ │ +_2_4_6 static void _g_e_t_S_u_b_E_l_e_m_e_n_t(const FieldVector& global, │ │ │ │ │ +247 int& subElement, │ │ │ │ │ +248 FieldVector& local) │ │ │ │ │ +249 { │ │ │ │ │ +250 if (global[0] + global[1] + global[2] <= 0.5) { │ │ │ │ │ +251 subElement = 0; │ │ │ │ │ +252 local = global; │ │ │ │ │ +253 local *= 2.0; │ │ │ │ │ +254 return; │ │ │ │ │ +255 } else if (global[0] >= 0.5) { │ │ │ │ │ +256 subElement = 1; │ │ │ │ │ +257 local = global; │ │ │ │ │ +258 local[0] -= 0.5; │ │ │ │ │ +259 local *= 2.0; │ │ │ │ │ +260 return; │ │ │ │ │ +261 } else if (global[1] >= 0.5) { │ │ │ │ │ +262 subElement = 2; │ │ │ │ │ +263 local = global; │ │ │ │ │ +264 local[1] -= 0.5; │ │ │ │ │ +265 local *= 2.0; │ │ │ │ │ +266 return; │ │ │ │ │ +267 } else if (global[2] >= 0.5) { │ │ │ │ │ +268 subElement = 3; │ │ │ │ │ +269 local = global; │ │ │ │ │ +270 local[2] -= 0.5; │ │ │ │ │ +271 local *= 2.0; │ │ │ │ │ +272 return; │ │ │ │ │ +273 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] <= │ │ │ │ │ +0.5)) { │ │ │ │ │ +274 subElement = 4; │ │ │ │ │ +275 local[0] = 2.0 * global[1]; │ │ │ │ │ +276 local[1] = 2.0 * (0.5 - global[0] - global[1]); │ │ │ │ │ +277 local[2] = 2.0 * (-0.5 + global[0] + global[1] + global[2]); │ │ │ │ │ +278 // Dune::FieldMatrix A(0.0); │ │ │ │ │ +279 // A[0][1] = 2.0; │ │ │ │ │ +280 // A[1][0] = -2.0; │ │ │ │ │ +281 // A[1][1] = -2.0; │ │ │ │ │ +282 // A[2][0] = 2.0; │ │ │ │ │ +283 // A[2][1] = 2.0; │ │ │ │ │ +284 // A[2][2] = 2.0; │ │ │ │ │ +285 // A.mv(global,local); │ │ │ │ │ +286 // local[1] += 1.0; │ │ │ │ │ +287 // local[2] -= 1.0; │ │ │ │ │ +288 return; │ │ │ │ │ +289 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] <= │ │ │ │ │ +0.5)) { │ │ │ │ │ +290 subElement = 5; │ │ │ │ │ +291 local[0] = 2.0 * (0.5 - global[0]); │ │ │ │ │ +292 local[1] = 2.0 * (0.5 - global[1] - global[2]); │ │ │ │ │ +293 local[2] = 2.0 * global[2]; │ │ │ │ │ +294 // Dune::FieldMatrix A(0.0); │ │ │ │ │ +295 // A[0][0] = -2.0; │ │ │ │ │ +296 // A[1][1] = -2.0; │ │ │ │ │ +297 // A[1][2] = -2.0; │ │ │ │ │ +298 // A[2][2] = 2.0; │ │ │ │ │ +299 // A.mv(global,local); │ │ │ │ │ +300 // local[0] += 1.0; │ │ │ │ │ +301 // local[1] += 1.0; │ │ │ │ │ +302 return; │ │ │ │ │ +303 } else if ((global[0] + global[1] <= 0.5)and (global[1] + global[2] >= │ │ │ │ │ +0.5)) { │ │ │ │ │ +304 subElement = 6; │ │ │ │ │ +305 local[0] = 2.0 * (0.5 - global[0] - global[1]); │ │ │ │ │ +306 local[1] = 2.0 * global[0]; │ │ │ │ │ +307 local[2] = 2.0 * (-0.5 + global[1] + global[2]); │ │ │ │ │ +308 // Dune::FieldMatrix A(0.0); │ │ │ │ │ +309 // A[0][0] = -2.0; │ │ │ │ │ +310 // A[0][1] = -2.0; │ │ │ │ │ +311 // A[1][0] = 2.0; │ │ │ │ │ +312 // A[2][1] = 2.0; │ │ │ │ │ +313 // A[2][2] = 2.0; │ │ │ │ │ +314 // A.mv(global,local); │ │ │ │ │ +315 // local[0] += 1.0; │ │ │ │ │ +316 // local[2] -= 1.0; │ │ │ │ │ +317 return; │ │ │ │ │ +318 } else if ((global[0] + global[1] >= 0.5)and (global[1] + global[2] >= │ │ │ │ │ +0.5)) { │ │ │ │ │ +319 subElement = 7; │ │ │ │ │ +320 local[0] = 2.0 * (-0.5 + global[1] + global[2]); │ │ │ │ │ +321 local[1] = 2.0 * (0.5 - global[1]); │ │ │ │ │ +322 local[2] = 2.0 * (-0.5 + global[0] + global[1]); │ │ │ │ │ +323 // Dune::FieldMatrix A(0.0); │ │ │ │ │ +324 // A[0][1] = 2.0; │ │ │ │ │ +325 // A[0][2] = 2.0; │ │ │ │ │ +326 // A[1][1] = -2.0; │ │ │ │ │ +327 // A[2][0] = 2.0; │ │ │ │ │ +328 // A[2][1] = 2.0; │ │ │ │ │ +329 // A.mv(global,local); │ │ │ │ │ +330 // local[0] -= 1.0; │ │ │ │ │ +331 // local[1] += 1.0; │ │ │ │ │ +332 // local[2] -= 1.0; │ │ │ │ │ +333 return; │ │ │ │ │ +334 } │ │ │ │ │ +335 │ │ │ │ │ +336 DUNE_THROW(InvalidStateException, "no subelement defined"); │ │ │ │ │ +337 │ │ │ │ │ +338 } │ │ │ │ │ +339 │ │ │ │ │ +340 }; │ │ │ │ │ +341 │ │ │ │ │ +342 │ │ │ │ │ +343} │ │ │ │ │ +344 │ │ │ │ │ +345#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Linear Lagrange functions enriched with an element bubble function. │ │ │ │ │ -DDeeffiinniittiioonn simplexp1bubble.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RefinedSimplexLocalBasis() │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:22 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RefinedSimplexLocalBasis() │ │ │ │ │ +Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ +class. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static void getSubElement(const FieldVector< D, 1 > &global, int &subElement, │ │ │ │ │ +FieldVector< D, 1 > &local) │ │ │ │ │ +Get local coordinates in the subelement. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _1_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static int getSubElement(const FieldVector< D, 1 > &global) │ │ │ │ │ +Get the number of the subelement containing a given point. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RefinedSimplexLocalBasis() │ │ │ │ │ +Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ +class. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:104 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static int getSubElement(const FieldVector< D, 2 > &global) │ │ │ │ │ +Get the number of the subtriangle containing a given point. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:121 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _2_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static void getSubElement(const FieldVector< D, 2 > &global, int &subElement, │ │ │ │ │ +FieldVector< D, 2 > &local) │ │ │ │ │ +Get local coordinates in the subtriangle. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:139 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static void getSubElement(const FieldVector< D, 3 > &global, int &subElement, │ │ │ │ │ +FieldVector< D, 3 > &local) │ │ │ │ │ +Get local coordinates in the subsimplex. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:246 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RefinedSimplexLocalBasis() │ │ │ │ │ +Protected default constructor so this class can only be instantiated as a base │ │ │ │ │ +class. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:186 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _3_ _>_:_:_g_e_t_S_u_b_E_l_e_m_e_n_t │ │ │ │ │ +static int getSubElement(const FieldVector< D, 3 > &global) │ │ │ │ │ +Get the number of the subsimplex containing a given point in the reference │ │ │ │ │ +element. │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:218 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimetic.hh File Reference │ │ │ │ +dune-localfunctions: refinedp1localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,40 +65,54 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
mimetic.hh File Reference
│ │ │ │ +
refinedp1localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include "common/localfiniteelementtraits.hh"
│ │ │ │ -#include "mimetic/mimeticall.hh"
│ │ │ │ + │ │ │ │ +

Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ +More...

│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::MimeticLocalFiniteElement< D, R, dim >
class  Dune::RefinedP1LocalBasis< D, R, dim >
 
class  Dune::RefinedP1LocalBasis< D, R, 1 >
 Uniformly refined linear Lagrange shape functions in 1D. More...
 
class  Dune::RefinedP1LocalBasis< D, R, 2 >
 Uniformly refined linear Lagrange shape functions on the triangle. More...
 
class  Dune::RefinedP1LocalBasis< D, R, 3 >
 Uniformly refined linear Lagrange shape functions on the 3D-simplex (tetrahedron). More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ -
│ │ │ │ +

Detailed Description

│ │ │ │ +

Linear Lagrange shape functions on a uniformly refined reference element.

│ │ │ │ +
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,20 +1,37 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_1 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -mimetic.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -#include "_m_i_m_e_t_i_c_/_m_i_m_e_t_i_c_a_l_l_._h_h" │ │ │ │ │ +refinedp1localbasis.hh File Reference │ │ │ │ │ +Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ +_M_o_r_e_._._. │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _> │ │ │ │ │ +  Uniformly refined linear Lagrange shape functions in 1D. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _> │ │ │ │ │ +  Uniformly refined linear Lagrange shape functions on the triangle. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _> │ │ │ │ │ +  Uniformly refined linear Lagrange shape functions on the 3D-simplex │ │ │ │ │ + (tetrahedron). _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ +********** DDeettaaiilleedd DDeessccrriippttiioonn ********** │ │ │ │ │ +Linear Lagrange shape functions on a uniformly refined reference element. │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a00548_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: mimetic.hh Source File │ │ │ │ +dune-localfunctions: refinedp1localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,112 +70,831 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
mimetic.hh
│ │ │ │ +
refinedp1localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_MIMETICLOCALFINITEELEMENT_HH
│ │ │ │ +
5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_REFINED_P1_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11#include "mimetic/mimeticall.hh"
│ │ │ │ -
12
│ │ │ │ -
13namespace Dune
│ │ │ │ -
14{
│ │ │ │ -
22 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25 Dune::GeometryType gt;
│ │ │ │ - │ │ │ │ -
27 MimeticLocalCoefficients coefficients;
│ │ │ │ - │ │ │ │ -
29
│ │ │ │ -
30 public:
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
34
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
36 {}
│ │ │ │ -
│ │ │ │ -
37
│ │ │ │ -
│ │ │ │ -
38 MimeticLocalFiniteElement (Dune::GeometryType::BasicType basicType)
│ │ │ │ -
39 : gt(basicType,dim)
│ │ │ │ -
40 {}
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
│ │ │ │ -
42 MimeticLocalFiniteElement (Dune::GeometryType::BasicType basicType, unsigned int variant)
│ │ │ │ -
43 : gt(basicType,dim), basis(variant), coefficients(variant)
│ │ │ │ -
44 {}
│ │ │ │ -
│ │ │ │ -
45
│ │ │ │ -
│ │ │ │ -
46 const typename Traits::LocalBasisType& localBasis () const
│ │ │ │ -
47 {
│ │ │ │ -
48 return basis;
│ │ │ │ -
49 }
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
52 {
│ │ │ │ -
53 return coefficients;
│ │ │ │ -
54 }
│ │ │ │ -
│ │ │ │ -
55
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
57 {
│ │ │ │ -
58 return interpolation;
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
61 Dune::GeometryType type () const { return gt; }
│ │ │ │ -
62 };
│ │ │ │ -
│ │ │ │ -
63}
│ │ │ │ -
64
│ │ │ │ -
65#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ +
12#include <numeric>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/common/fmatrix.hh>
│ │ │ │ +
15
│ │ │ │ + │ │ │ │ +
17
│ │ │ │ +
18namespace Dune
│ │ │ │ +
19{
│ │ │ │ +
20 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
22 : public RefinedSimplexLocalBasis<D,dim>
│ │ │ │ +
23 {
│ │ │ │ +
24 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
26 {
│ │ │ │ +
27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim > 3.");
│ │ │ │ +
28 }
│ │ │ │ +
│ │ │ │ +
29 };
│ │ │ │ +
│ │ │ │ +
30
│ │ │ │ +
53 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
55 : public RefinedSimplexLocalBasis<D,1>
│ │ │ │ +
56 {
│ │ │ │ +
57 public:
│ │ │ │ +
59 typedef LocalBasisTraits<D,1,Dune::FieldVector<D,1>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
60 Dune::FieldMatrix<R,1,1> > Traits;
│ │ │ │ +
61
│ │ │ │ +
│ │ │ │ +
63 static constexpr unsigned int size ()
│ │ │ │ +
64 {
│ │ │ │ +
65 return 3;
│ │ │ │ +
66 }
│ │ │ │ +
│ │ │ │ +
67
│ │ │ │ +
│ │ │ │ +
69 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
70 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
71 {
│ │ │ │ +
72 out.resize(3);
│ │ │ │ +
73
│ │ │ │ +
74 int subElement;
│ │ │ │ +
75 typename Traits::DomainType local;
│ │ │ │ +
76 this->getSubElement(in, subElement, local);
│ │ │ │ +
77
│ │ │ │ +
78 switch (subElement) {
│ │ │ │ +
79 case 0 :
│ │ │ │ +
80
│ │ │ │ +
81 out[0] = 1 - local[0];
│ │ │ │ +
82 out[1] = local[0];
│ │ │ │ +
83 out[2] = 0;
│ │ │ │ +
84 break;
│ │ │ │ +
85
│ │ │ │ +
86 case 1 :
│ │ │ │ +
87
│ │ │ │ +
88 out[0] = 0;
│ │ │ │ +
89 out[1] = 1 - local[0];
│ │ │ │ +
90 out[2] = local[0];
│ │ │ │ +
91 break;
│ │ │ │ +
92
│ │ │ │ +
93 }
│ │ │ │ +
94
│ │ │ │ +
95 }
│ │ │ │ +
│ │ │ │ +
96
│ │ │ │ +
98 inline void
│ │ │ │ +
│ │ │ │ +
99 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
100 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
101 {
│ │ │ │ +
102 out.resize(3);
│ │ │ │ +
103
│ │ │ │ +
104 int subElement;
│ │ │ │ +
105 typename Traits::DomainType local;
│ │ │ │ +
106 this->getSubElement(in, subElement, local);
│ │ │ │ +
107
│ │ │ │ +
108 switch (subElement) {
│ │ │ │ +
109 case 0 :
│ │ │ │ +
110
│ │ │ │ +
111 out[0][0][0] = -2;
│ │ │ │ +
112 out[1][0][0] = 2;
│ │ │ │ +
113 out[2][0][0] = 0;
│ │ │ │ +
114 break;
│ │ │ │ +
115
│ │ │ │ +
116 case 1 :
│ │ │ │ +
117
│ │ │ │ +
118 out[0][0][0] = 0;
│ │ │ │ +
119 out[1][0][0] = -2;
│ │ │ │ +
120 out[2][0][0] = 2;
│ │ │ │ +
121 break;
│ │ │ │ +
122
│ │ │ │ +
123 }
│ │ │ │ +
124 }
│ │ │ │ +
│ │ │ │ +
125
│ │ │ │ +
│ │ │ │ +
127 void partial (const std::array<unsigned int, 1>& order,
│ │ │ │ +
128 const typename Traits::DomainType& in, // position
│ │ │ │ +
129 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
130 {
│ │ │ │ +
131 auto totalOrder = order[0];
│ │ │ │ +
132 if (totalOrder == 0) {
│ │ │ │ +
133 evaluateFunction(in, out);
│ │ │ │ +
134 } else if (totalOrder == 1)
│ │ │ │ +
135 {
│ │ │ │ +
136 out.resize(3);
│ │ │ │ +
137
│ │ │ │ +
138 int subElement;
│ │ │ │ +
139 typename Traits::DomainType local;
│ │ │ │ +
140 this->getSubElement(in, subElement, local);
│ │ │ │ +
141
│ │ │ │ +
142 switch (subElement) {
│ │ │ │ +
143 case 0:
│ │ │ │ +
144 out[0] = -2;
│ │ │ │ +
145 out[1] = 2;
│ │ │ │ +
146 out[2] = 0;
│ │ │ │ +
147 break;
│ │ │ │ +
148 case 1:
│ │ │ │ +
149 out[0] = 0;
│ │ │ │ +
150 out[1] = -2;
│ │ │ │ +
151 out[2] = 2;
│ │ │ │ +
152 break;
│ │ │ │ +
153 }
│ │ │ │ +
154 } else {
│ │ │ │ +
155 out.resize(3);
│ │ │ │ +
156 out[0] = out[1] = out[2] = 0;
│ │ │ │ +
157 }
│ │ │ │ +
158 }
│ │ │ │ +
│ │ │ │ +
159
│ │ │ │ +
│ │ │ │ +
163 static constexpr unsigned int order ()
│ │ │ │ +
164 {
│ │ │ │ +
165 return 1;
│ │ │ │ +
166 }
│ │ │ │ +
│ │ │ │ +
167
│ │ │ │ +
168 };
│ │ │ │ +
│ │ │ │ +
169
│ │ │ │ +
195 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
197 : public RefinedSimplexLocalBasis<D,2>
│ │ │ │ +
198 {
│ │ │ │ +
199 public:
│ │ │ │ +
201 typedef LocalBasisTraits<D,2,Dune::FieldVector<D,2>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
202 Dune::FieldMatrix<R,1,2> > Traits;
│ │ │ │ +
203
│ │ │ │ +
│ │ │ │ +
205 static constexpr unsigned int size ()
│ │ │ │ +
206 {
│ │ │ │ +
207 return 6;
│ │ │ │ +
208 }
│ │ │ │ +
│ │ │ │ +
209
│ │ │ │ +
│ │ │ │ +
211 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
212 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
213 {
│ │ │ │ +
214 out.resize(6);
│ │ │ │ +
215
│ │ │ │ +
216 int subElement;
│ │ │ │ +
217 typename Traits::DomainType local;
│ │ │ │ +
218 this->getSubElement(in, subElement, local);
│ │ │ │ +
219
│ │ │ │ +
220 switch (subElement) {
│ │ │ │ +
221 case 0 :
│ │ │ │ +
222
│ │ │ │ +
223 out[0] = 1 - local[0] - local[1];
│ │ │ │ +
224 out[1] = local[0];
│ │ │ │ +
225 out[2] = 0;
│ │ │ │ +
226 out[3] = local[1];
│ │ │ │ +
227 out[4] = 0;
│ │ │ │ +
228 out[5] = 0;
│ │ │ │ +
229 break;
│ │ │ │ +
230
│ │ │ │ +
231 case 1 :
│ │ │ │ +
232
│ │ │ │ +
233 out[0] = 0;
│ │ │ │ +
234 out[1] = 1 - local[0] - local[1];
│ │ │ │ +
235 out[2] = local[0];
│ │ │ │ +
236 out[3] = 0;
│ │ │ │ +
237 out[4] = local[1];
│ │ │ │ +
238 out[5] = 0;
│ │ │ │ +
239 break;
│ │ │ │ +
240
│ │ │ │ +
241 case 2 :
│ │ │ │ +
242
│ │ │ │ +
243 out[0] = 0;
│ │ │ │ +
244 out[1] = 0;
│ │ │ │ +
245 out[2] = 0;
│ │ │ │ +
246 out[3] = 1 - local[0] - local[1];
│ │ │ │ +
247 out[4] = local[0];
│ │ │ │ +
248 out[5] = local[1];
│ │ │ │ +
249 break;
│ │ │ │ +
250 case 3 :
│ │ │ │ +
251
│ │ │ │ +
252 out[0] = 0;
│ │ │ │ +
253 out[1] = local[1];
│ │ │ │ +
254 out[2] = 0;
│ │ │ │ +
255 out[3] = local[0];
│ │ │ │ +
256 out[4] = 1 - local[0] - local[1];
│ │ │ │ +
257 out[5] = 0;
│ │ │ │ +
258 }
│ │ │ │ +
259
│ │ │ │ +
260 }
│ │ │ │ +
│ │ │ │ +
261
│ │ │ │ +
263 inline void
│ │ │ │ +
│ │ │ │ +
264 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
265 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
266 {
│ │ │ │ +
267 out.resize(6);
│ │ │ │ +
268
│ │ │ │ +
269 int subElement;
│ │ │ │ +
270 typename Traits::DomainType local;
│ │ │ │ +
271 this->getSubElement(in, subElement, local);
│ │ │ │ +
272
│ │ │ │ +
273 switch (subElement) {
│ │ │ │ +
274 case 0 :
│ │ │ │ +
275
│ │ │ │ +
276 out[0][0][0] = -2; out[0][0][1] = -2;
│ │ │ │ +
277 out[1][0][0] = 2; out[1][0][1] = 0;
│ │ │ │ +
278 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ +
279 out[3][0][0] = 0; out[3][0][1] = 2;
│ │ │ │ +
280 out[4][0][0] = 0; out[4][0][1] = 0;
│ │ │ │ +
281 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ +
282 break;
│ │ │ │ +
283
│ │ │ │ +
284 case 1 :
│ │ │ │ +
285
│ │ │ │ +
286 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ +
287 out[1][0][0] = -2; out[1][0][1] = -2;
│ │ │ │ +
288 out[2][0][0] = 2; out[2][0][1] = 0;
│ │ │ │ +
289 out[3][0][0] = 0; out[3][0][1] = 0;
│ │ │ │ +
290 out[4][0][0] = 0; out[4][0][1] = 2;
│ │ │ │ +
291 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ +
292 break;
│ │ │ │ +
293
│ │ │ │ +
294 case 2 :
│ │ │ │ +
295
│ │ │ │ +
296 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ +
297 out[1][0][0] = 0; out[1][0][1] = 0;
│ │ │ │ +
298 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ +
299 out[3][0][0] = -2; out[3][0][1] = -2;
│ │ │ │ +
300 out[4][0][0] = 2; out[4][0][1] = 0;
│ │ │ │ +
301 out[5][0][0] = 0; out[5][0][1] = 2;
│ │ │ │ +
302 break;
│ │ │ │ +
303 case 3 :
│ │ │ │ +
304
│ │ │ │ +
305 out[0][0][0] = 0; out[0][0][1] = 0;
│ │ │ │ +
306 out[1][0][0] = 0; out[1][0][1] = -2;
│ │ │ │ +
307 out[2][0][0] = 0; out[2][0][1] = 0;
│ │ │ │ +
308 out[3][0][0] = -2; out[3][0][1] = 0;
│ │ │ │ +
309 out[4][0][0] = 2; out[4][0][1] = 2;
│ │ │ │ +
310 out[5][0][0] = 0; out[5][0][1] = 0;
│ │ │ │ +
311 }
│ │ │ │ +
312 }
│ │ │ │ +
│ │ │ │ +
313
│ │ │ │ +
│ │ │ │ +
315 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
316 const typename Traits::DomainType& in, // position
│ │ │ │ +
317 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
318 {
│ │ │ │ +
319 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
320 if (totalOrder == 0) {
│ │ │ │ +
321 evaluateFunction(in, out);
│ │ │ │ +
322 } else if (totalOrder == 1) {
│ │ │ │ +
323 int subElement;
│ │ │ │ +
324 typename Traits::DomainType local;
│ │ │ │ +
325 this->getSubElement(in, subElement, local);
│ │ │ │ +
326
│ │ │ │ +
327 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
328 out.resize(size());
│ │ │ │ +
329
│ │ │ │ +
330 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
331 out[i] = 0;
│ │ │ │ +
332
│ │ │ │ +
333 switch (direction) {
│ │ │ │ +
334 case 0: // direction == 0
│ │ │ │ +
335
│ │ │ │ +
336 switch (subElement) {
│ │ │ │ +
337 case 0 :
│ │ │ │ +
338 out[0] = -2;
│ │ │ │ +
339 out[1] = 2;
│ │ │ │ +
340 break;
│ │ │ │ +
341 case 1 :
│ │ │ │ +
342 out[1] = -2;
│ │ │ │ +
343 out[2] = 2;
│ │ │ │ +
344 break;
│ │ │ │ +
345 case 2 :
│ │ │ │ +
346 out[3] = -2;
│ │ │ │ +
347 out[4] = 2;
│ │ │ │ +
348 break;
│ │ │ │ +
349 case 3 :
│ │ │ │ +
350 out[3] = -2;
│ │ │ │ +
351 out[4] = 2;
│ │ │ │ +
352 }
│ │ │ │ +
353 break;
│ │ │ │ +
354
│ │ │ │ +
355 case 1: // direction == 1
│ │ │ │ +
356
│ │ │ │ +
357 switch (subElement) {
│ │ │ │ +
358 case 0 :
│ │ │ │ +
359 out[0] = -2;
│ │ │ │ +
360 out[3] = 2;
│ │ │ │ +
361 break;
│ │ │ │ +
362 case 1 :
│ │ │ │ +
363 out[1] = -2;
│ │ │ │ +
364 out[4] = 2;
│ │ │ │ +
365 break;
│ │ │ │ +
366 case 2 :
│ │ │ │ +
367 out[3] = -2;
│ │ │ │ +
368 out[5] = 2;
│ │ │ │ +
369 break;
│ │ │ │ +
370 case 3 :
│ │ │ │ +
371 out[1] = -2;
│ │ │ │ +
372 out[4] = 2;
│ │ │ │ +
373 }
│ │ │ │ +
374 break;
│ │ │ │ +
375
│ │ │ │ +
376 default:
│ │ │ │ +
377 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
378 }
│ │ │ │ +
379 } else {
│ │ │ │ +
380 out.resize(size());
│ │ │ │ +
381 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
382 out[i] = 0;
│ │ │ │ +
383 }
│ │ │ │ +
384 }
│ │ │ │ +
│ │ │ │ +
385
│ │ │ │ +
│ │ │ │ +
389 static constexpr unsigned int order ()
│ │ │ │ +
390 {
│ │ │ │ +
391 return 1;
│ │ │ │ +
392 }
│ │ │ │ +
│ │ │ │ +
393
│ │ │ │ +
394 };
│ │ │ │ +
│ │ │ │ +
395
│ │ │ │ +
425 template<class D, class R>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
427 : public RefinedSimplexLocalBasis<D,3>
│ │ │ │ +
428 {
│ │ │ │ +
429 public:
│ │ │ │ +
431 typedef LocalBasisTraits<D,3,Dune::FieldVector<D,3>,R,1,Dune::FieldVector<R,1>,
│ │ │ │ +
432 Dune::FieldMatrix<R,1,3> > Traits;
│ │ │ │ +
433
│ │ │ │ +
│ │ │ │ +
435 static constexpr unsigned int size ()
│ │ │ │ +
436 {
│ │ │ │ +
437 return 10;
│ │ │ │ +
438 }
│ │ │ │ +
│ │ │ │ +
439
│ │ │ │ +
│ │ │ │ +
441 inline void evaluateFunction (const typename Traits::DomainType& in,
│ │ │ │ +
442 std::vector<typename Traits::RangeType>& out) const
│ │ │ │ +
443 {
│ │ │ │ +
444 out.resize(10);
│ │ │ │ +
445
│ │ │ │ +
446 int subElement;
│ │ │ │ +
447 typename Traits::DomainType local;
│ │ │ │ +
448 this->getSubElement(in, subElement, local);
│ │ │ │ +
449
│ │ │ │ +
450 switch (subElement) {
│ │ │ │ +
451 case 0 :
│ │ │ │ +
452
│ │ │ │ +
453 out[0] = 1 - local[0] - local[1] - local[2];
│ │ │ │ +
454 out[1] = local[0];
│ │ │ │ +
455 out[2] = 0;
│ │ │ │ +
456 out[3] = local[1];
│ │ │ │ +
457 out[4] = 0;
│ │ │ │ +
458 out[5] = 0;
│ │ │ │ +
459 out[6] = local[2];
│ │ │ │ +
460 out[7] = 0;
│ │ │ │ +
461 out[8] = 0;
│ │ │ │ +
462 out[9] = 0;
│ │ │ │ +
463 break;
│ │ │ │ +
464
│ │ │ │ +
465 case 1 :
│ │ │ │ +
466
│ │ │ │ +
467 out[0] = 0;
│ │ │ │ +
468 out[1] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
469 out[2] = local[0];
│ │ │ │ +
470 out[3] = 0;
│ │ │ │ +
471 out[4] = local[1];
│ │ │ │ +
472 out[5] = 0;
│ │ │ │ +
473 out[6] = 0;
│ │ │ │ +
474 out[7] = local[2];
│ │ │ │ +
475 out[8] = 0;
│ │ │ │ +
476 out[9] = 0;
│ │ │ │ +
477 break;
│ │ │ │ +
478
│ │ │ │ +
479 case 2 :
│ │ │ │ +
480
│ │ │ │ +
481 out[0] = 0;
│ │ │ │ +
482 out[1] = 0;
│ │ │ │ +
483 out[2] = 0;
│ │ │ │ +
484 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
485 out[4] = local[0];
│ │ │ │ +
486 out[5] = local[1];
│ │ │ │ +
487 out[6] = 0;
│ │ │ │ +
488 out[7] = 0;
│ │ │ │ +
489 out[8] = local[2];
│ │ │ │ +
490 out[9] = 0;
│ │ │ │ +
491 break;
│ │ │ │ +
492
│ │ │ │ +
493 case 3 :
│ │ │ │ +
494
│ │ │ │ +
495 out[0] = 0;
│ │ │ │ +
496 out[1] = 0;
│ │ │ │ +
497 out[2] = 0;
│ │ │ │ +
498 out[3] = 0;
│ │ │ │ +
499 out[4] = 0;
│ │ │ │ +
500 out[5] = 0;
│ │ │ │ +
501 out[6] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
502 out[7] = local[0];
│ │ │ │ +
503 out[8] = local[1];
│ │ │ │ +
504 out[9] = local[2];
│ │ │ │ +
505 break;
│ │ │ │ +
506
│ │ │ │ +
507 case 4 :
│ │ │ │ +
508
│ │ │ │ +
509 out[0] = 0;
│ │ │ │ +
510 out[1] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
511 out[2] = 0;
│ │ │ │ +
512 out[3] = local[0];
│ │ │ │ +
513 out[4] = 0;
│ │ │ │ +
514 out[5] = 0;
│ │ │ │ +
515 out[6] = local[1];
│ │ │ │ +
516 out[7] = local[2];
│ │ │ │ +
517 out[8] = 0;
│ │ │ │ +
518 out[9] = 0;
│ │ │ │ +
519 break;
│ │ │ │ +
520
│ │ │ │ +
521 case 5 :
│ │ │ │ +
522
│ │ │ │ +
523 out[0] = 0;
│ │ │ │ +
524 out[1] = local[1];
│ │ │ │ +
525 out[2] = 0;
│ │ │ │ +
526 out[3] = local[0];
│ │ │ │ +
527 out[4] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
528 out[5] = 0;
│ │ │ │ +
529 out[6] = 0;
│ │ │ │ +
530 out[7] = local[2];
│ │ │ │ +
531 out[8] = 0;
│ │ │ │ +
532 out[9] = 0;
│ │ │ │ +
533 break;
│ │ │ │ +
534
│ │ │ │ +
535 case 6 :
│ │ │ │ +
536
│ │ │ │ +
537 out[0] = 0;
│ │ │ │ +
538 out[1] = 0;
│ │ │ │ +
539 out[2] = 0;
│ │ │ │ +
540 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
541 out[4] = 0;
│ │ │ │ +
542 out[5] = 0;
│ │ │ │ +
543 out[6] = local[0];
│ │ │ │ +
544 out[7] = local[1];
│ │ │ │ +
545 out[8] = local[2];
│ │ │ │ +
546 out[9] = 0;
│ │ │ │ +
547 break;
│ │ │ │ +
548
│ │ │ │ +
549 case 7 :
│ │ │ │ +
550
│ │ │ │ +
551 out[0] = 0;
│ │ │ │ +
552 out[1] = 0;
│ │ │ │ +
553 out[2] = 0;
│ │ │ │ +
554 out[3] = 1 - local[0] - local[1] -local[2];
│ │ │ │ +
555 out[4] = local[2];
│ │ │ │ +
556 out[5] = 0;
│ │ │ │ +
557 out[6] = 0;
│ │ │ │ +
558 out[7] = local[1];
│ │ │ │ +
559 out[8] = local[0];
│ │ │ │ +
560 out[9] = 0;
│ │ │ │ +
561 break;
│ │ │ │ +
562 }
│ │ │ │ +
563
│ │ │ │ +
564 }
│ │ │ │ +
│ │ │ │ +
565
│ │ │ │ +
567 inline void
│ │ │ │ +
│ │ │ │ +
568 evaluateJacobian (const typename Traits::DomainType& in, // position
│ │ │ │ +
569 std::vector<typename Traits::JacobianType>& out) const // return value
│ │ │ │ +
570 {
│ │ │ │ +
571 out.resize(10);
│ │ │ │ +
572
│ │ │ │ +
573 int subElement;
│ │ │ │ +
574 typename Traits::DomainType local;
│ │ │ │ +
575 this->getSubElement(in, subElement, local);
│ │ │ │ +
576
│ │ │ │ +
577 switch (subElement) {
│ │ │ │ +
578 case 0 :
│ │ │ │ +
579
│ │ │ │ +
580 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2;
│ │ │ │ +
581 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
582 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
583 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
│ │ │ │ +
584 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
585 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
586 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2;
│ │ │ │ +
587 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ +
588 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ +
589 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
590 break;
│ │ │ │ +
591
│ │ │ │ +
592 case 1 :
│ │ │ │ +
593
│ │ │ │ +
594 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
595 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ +
596 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
597 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ +
598 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ +
599 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
600 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ +
601 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
│ │ │ │ +
602 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ +
603 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
604 break;
│ │ │ │ +
605
│ │ │ │ +
606 case 2 :
│ │ │ │ +
607
│ │ │ │ +
608 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
609 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
610 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
611 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
│ │ │ │ +
612 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
613 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0;
│ │ │ │ +
614 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ +
615 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ +
616 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2;
│ │ │ │ +
617 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
618 break;
│ │ │ │ +
619
│ │ │ │ +
620 case 3 :
│ │ │ │ +
621
│ │ │ │ +
622 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
623 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
624 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
625 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ +
626 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
627 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
628 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2;
│ │ │ │ +
629 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ +
630 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0;
│ │ │ │ +
631 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2;
│ │ │ │ +
632 break;
│ │ │ │ +
633
│ │ │ │ +
634 case 4 :
│ │ │ │ +
635
│ │ │ │ +
636 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
637 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ +
638 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
639 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0;
│ │ │ │ +
640 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
641 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
642 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
│ │ │ │ +
643 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2;
│ │ │ │ +
644 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ +
645 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
646 break;
│ │ │ │ +
647
│ │ │ │ +
648 case 5 :
│ │ │ │ +
649
│ │ │ │ +
650 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
651 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2;
│ │ │ │ +
652 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
653 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0;
│ │ │ │ +
654 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ +
655 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
656 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ +
657 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2;
│ │ │ │ +
658 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0;
│ │ │ │ +
659 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
660 break;
│ │ │ │ +
661
│ │ │ │ +
662 case 6 :
│ │ │ │ +
663
│ │ │ │ +
664 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
665 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
666 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
667 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2;
│ │ │ │ +
668 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0;
│ │ │ │ +
669 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
670 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0;
│ │ │ │ +
671 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0;
│ │ │ │ +
672 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
│ │ │ │ +
673 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
674 break;
│ │ │ │ +
675
│ │ │ │ +
676 case 7 :
│ │ │ │ +
677
│ │ │ │ +
678 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0;
│ │ │ │ +
679 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0;
│ │ │ │ +
680 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0;
│ │ │ │ +
681 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2;
│ │ │ │ +
682 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0;
│ │ │ │ +
683 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0;
│ │ │ │ +
684 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0;
│ │ │ │ +
685 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0;
│ │ │ │ +
686 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2;
│ │ │ │ +
687 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0;
│ │ │ │ +
688 break;
│ │ │ │ +
689 }
│ │ │ │ +
690 }
│ │ │ │ +
│ │ │ │ +
691
│ │ │ │ +
│ │ │ │ +
693 void partial (const std::array<unsigned int, 3>& order,
│ │ │ │ +
694 const typename Traits::DomainType& in, // position
│ │ │ │ +
695 std::vector<typename Traits::RangeType>& out) const // return value
│ │ │ │ +
696 {
│ │ │ │ +
697 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
698 if (totalOrder == 0) {
│ │ │ │ +
699 evaluateFunction(in, out);
│ │ │ │ +
700 } else if (totalOrder == 1) {
│ │ │ │ +
701 int subElement;
│ │ │ │ +
702 typename Traits::DomainType local;
│ │ │ │ +
703 this->getSubElement(in, subElement, local);
│ │ │ │ +
704
│ │ │ │ +
705 auto const direction = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
706 out.resize(size());
│ │ │ │ +
707
│ │ │ │ +
708 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
709 out[i] = 0;
│ │ │ │ +
710
│ │ │ │ +
711 switch (direction) {
│ │ │ │ +
712 case 0: // direction == 0
│ │ │ │ +
713
│ │ │ │ +
714 switch (subElement) {
│ │ │ │ +
715 case 0 :
│ │ │ │ +
716 out[0] = -2;
│ │ │ │ +
717 out[1] = 2;
│ │ │ │ +
718 break;
│ │ │ │ +
719 case 1 :
│ │ │ │ +
720 out[1] = -2;
│ │ │ │ +
721 out[2] = 2;
│ │ │ │ +
722 break;
│ │ │ │ +
723 case 2 :
│ │ │ │ +
724 out[3] = -2;
│ │ │ │ +
725 out[4] = 2;
│ │ │ │ +
726 break;
│ │ │ │ +
727 case 3 :
│ │ │ │ +
728 out[6] = -2;
│ │ │ │ +
729 out[7] = 2;
│ │ │ │ +
730 break;
│ │ │ │ +
731 case 4 :
│ │ │ │ +
732 out[6] = -2;
│ │ │ │ +
733 out[7] = 2;
│ │ │ │ +
734 break;
│ │ │ │ +
735 case 5 :
│ │ │ │ +
736 out[3] = -2;
│ │ │ │ +
737 out[4] = 2;
│ │ │ │ +
738 break;
│ │ │ │ +
739 case 6 :
│ │ │ │ +
740 out[6] = -2;
│ │ │ │ +
741 out[7] = 2;
│ │ │ │ +
742 break;
│ │ │ │ +
743 case 7 :
│ │ │ │ +
744 out[3] = -2;
│ │ │ │ +
745 out[4] = 2;
│ │ │ │ +
746 break;
│ │ │ │ +
747 }
│ │ │ │ +
748 break;
│ │ │ │ +
749
│ │ │ │ +
750 case 1: // direction == 1
│ │ │ │ +
751
│ │ │ │ +
752 switch (subElement) {
│ │ │ │ +
753 case 0 :
│ │ │ │ +
754 out[0] = -2;
│ │ │ │ +
755 out[3] = 2;
│ │ │ │ +
756 break;
│ │ │ │ +
757 case 1 :
│ │ │ │ +
758 out[1] = -2;
│ │ │ │ +
759 out[4] = 2;
│ │ │ │ +
760 break;
│ │ │ │ +
761 case 2 :
│ │ │ │ +
762 out[3] = -2;
│ │ │ │ +
763 out[5] = 2;
│ │ │ │ +
764 break;
│ │ │ │ +
765 case 3 :
│ │ │ │ +
766 out[6] = -2;
│ │ │ │ +
767 out[8] = 2;
│ │ │ │ +
768 break;
│ │ │ │ +
769 case 4 :
│ │ │ │ +
770 out[1] = -2;
│ │ │ │ +
771 out[3] = 2;
│ │ │ │ +
772 out[6] = -2;
│ │ │ │ +
773 break;
│ │ │ │ +
774 case 5 :
│ │ │ │ +
775 out[1] = -2;
│ │ │ │ +
776 out[4] = 2;
│ │ │ │ +
777 break;
│ │ │ │ +
778 case 6 :
│ │ │ │ +
779 out[6] = -2;
│ │ │ │ +
780 out[8] = 2;
│ │ │ │ +
781 break;
│ │ │ │ +
782 case 7 :
│ │ │ │ +
783 out[3] = -2;
│ │ │ │ +
784 out[4] = 2;
│ │ │ │ +
785 out[7] = -2;
│ │ │ │ +
786 out[8] = 2;
│ │ │ │ +
787 break;
│ │ │ │ +
788 }
│ │ │ │ +
789 break;
│ │ │ │ +
790
│ │ │ │ +
791 case 2: // direction == 2
│ │ │ │ +
792
│ │ │ │ +
793 switch (subElement) {
│ │ │ │ +
794 case 0 :
│ │ │ │ +
795 out[0] = -2;
│ │ │ │ +
796 out[6] = 2;
│ │ │ │ +
797 break;
│ │ │ │ +
798 case 1 :
│ │ │ │ +
799 out[1] = -2;
│ │ │ │ +
800 out[7] = 2;
│ │ │ │ +
801 break;
│ │ │ │ +
802 case 2 :
│ │ │ │ +
803 out[3] = -2;
│ │ │ │ +
804 out[8] = 2;
│ │ │ │ +
805 break;
│ │ │ │ +
806 case 3 :
│ │ │ │ +
807 out[6] = -2;
│ │ │ │ +
808 out[9] = 2;
│ │ │ │ +
809 break;
│ │ │ │ +
810 case 4 :
│ │ │ │ +
811 out[1] = -2;
│ │ │ │ +
812 out[7] = 2;
│ │ │ │ +
813 break;
│ │ │ │ +
814 case 5 :
│ │ │ │ +
815 out[1] = -2;
│ │ │ │ +
816 out[7] = 2;
│ │ │ │ +
817 break;
│ │ │ │ +
818 case 6 :
│ │ │ │ +
819 out[3] = -2;
│ │ │ │ +
820 out[8] = 2;
│ │ │ │ +
821 break;
│ │ │ │ +
822 case 7 :
│ │ │ │ +
823 out[3] = -2;
│ │ │ │ +
824 out[8] = 2;
│ │ │ │ +
825 break;
│ │ │ │ +
826 }
│ │ │ │ +
827 break;
│ │ │ │ +
828
│ │ │ │ +
829 default:
│ │ │ │ +
830 DUNE_THROW(RangeError, "Component out of range.");
│ │ │ │ +
831 }
│ │ │ │ +
832 } else {
│ │ │ │ +
833 out.resize(size());
│ │ │ │ +
834 for (std::size_t i = 0; i < size(); ++i)
│ │ │ │ +
835 out[i] = 0;
│ │ │ │ +
836 }
│ │ │ │ +
837 }
│ │ │ │ +
│ │ │ │ +
838
│ │ │ │ +
│ │ │ │ +
842 static constexpr unsigned int order ()
│ │ │ │ +
843 {
│ │ │ │ +
844 return 1;
│ │ │ │ +
845 }
│ │ │ │ +
│ │ │ │ +
846
│ │ │ │ +
847 };
│ │ │ │ +
│ │ │ │ +
848}
│ │ │ │ +
849#endif
│ │ │ │ +
Contains a base class for LocalBasis classes based on uniform refinement.
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Definition mimetic.hh:24
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
Definition mimetic.hh:56
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
Definition mimetic.hh:46
│ │ │ │ -
MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType, unsigned int variant)
Definition mimetic.hh:42
│ │ │ │ -
MimeticLocalFiniteElement()
Definition mimetic.hh:35
│ │ │ │ -
MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType)
Definition mimetic.hh:38
│ │ │ │ -
Dune::GeometryType type() const
Definition mimetic.hh:61
│ │ │ │ -
Dune::LocalFiniteElementTraits< MimeticLocalBasis< D, R, dim >, MimeticLocalCoefficients, MimeticLocalInterpolation< MimeticLocalBasis< D, R, dim > > > Traits
Definition mimetic.hh:33
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
Definition mimetic.hh:51
│ │ │ │ -
Definition mimeticall.hh:23
│ │ │ │ -
Definition mimeticall.hh:74
│ │ │ │ -
!
Definition mimeticall.hh:88
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
Definition refinedsimplexlocalbasis.hh:20
│ │ │ │ +
Definition refinedp1localbasis.hh:23
│ │ │ │ +
RefinedP1LocalBasis()
Definition refinedp1localbasis.hh:25
│ │ │ │ +
LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:60
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:99
│ │ │ │ +
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:163
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:69
│ │ │ │ +
void partial(const std::array< unsigned int, 1 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:127
│ │ │ │ +
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:63
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:264
│ │ │ │ +
LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:202
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:211
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:315
│ │ │ │ +
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:389
│ │ │ │ +
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:205
│ │ │ │ +
void partial(const std::array< unsigned int, 3 > &order, const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate partial derivatives of all shape functions.
Definition refinedp1localbasis.hh:693
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const
Evaluate all shape functions.
Definition refinedp1localbasis.hh:441
│ │ │ │ +
LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
export type traits for function signature
Definition refinedp1localbasis.hh:432
│ │ │ │ +
static constexpr unsigned int size()
number of shape functions
Definition refinedp1localbasis.hh:435
│ │ │ │ +
static constexpr unsigned int order()
Polynomial order of the shape functions Doesn't really apply: these shape functions are only piecewis...
Definition refinedp1localbasis.hh:842
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainType &in, std::vector< typename Traits::JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition refinedp1localbasis.hh:568
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,122 +1,869 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ -mimetic.hh │ │ │ │ │ + * _r_e_f_i_n_e_d │ │ │ │ │ + * _r_e_f_i_n_e_d_p_1 │ │ │ │ │ +refinedp1localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_MIMETICLOCALFINITEELEMENT_HH │ │ │ │ │ +5#ifndef DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_REFINED_P1_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include "_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h" │ │ │ │ │ -11#include "_m_i_m_e_t_i_c_/_m_i_m_e_t_i_c_a_l_l_._h_h" │ │ │ │ │ -12 │ │ │ │ │ -13namespace _D_u_n_e │ │ │ │ │ -14{ │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -24 { │ │ │ │ │ -25 Dune::GeometryType gt; │ │ │ │ │ -26 _M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> basis; │ │ │ │ │ -27 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s coefficients; │ │ │ │ │ -28 _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > interpolation; │ │ │ │ │ -29 │ │ │ │ │ -30 public: │ │ │ │ │ -31 typedef _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_>, │ │ │ │ │ -32 _M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s, │ │ │ │ │ -_3_3 _M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s_<_D_,_R_,_d_i_m_> > > _T_r_a_i_t_s; │ │ │ │ │ -34 │ │ │ │ │ -_3_5 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t () │ │ │ │ │ -36 {} │ │ │ │ │ -37 │ │ │ │ │ -_3_8 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (Dune::GeometryType::BasicType basicType) │ │ │ │ │ -39 : gt(basicType,dim) │ │ │ │ │ -40 {} │ │ │ │ │ -41 │ │ │ │ │ -_4_2 _M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t (Dune::GeometryType::BasicType basicType, unsigned │ │ │ │ │ -int variant) │ │ │ │ │ -43 : gt(basicType,dim), basis(variant), coefficients(variant) │ │ │ │ │ -44 {} │ │ │ │ │ -45 │ │ │ │ │ -_4_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e& _l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -47 { │ │ │ │ │ -48 return basis; │ │ │ │ │ -49 } │ │ │ │ │ -50 │ │ │ │ │ -_5_1 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e& _l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -52 { │ │ │ │ │ -53 return coefficients; │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -_5_6 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e& _l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return interpolation; │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_1 Dune::GeometryType _t_y_p_e () const { return gt; } │ │ │ │ │ -62 }; │ │ │ │ │ -63} │ │ │ │ │ -64 │ │ │ │ │ -65#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_m_i_m_e_t_i_c_a_l_l_._h_h │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_r_e_f_i_n_e_d_/_c_o_m_m_o_n_/_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +17 │ │ │ │ │ +18namespace _D_u_n_e │ │ │ │ │ +19{ │ │ │ │ │ +20 template │ │ │ │ │ +_2_1 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +22 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +23 { │ │ │ │ │ +24 public: │ │ │ │ │ +_2_5 _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s() │ │ │ │ │ +26 { │ │ │ │ │ +27 DUNE_THROW(Dune::NotImplemented,"RefinedP1LocalBasis not implemented for dim │ │ │ │ │ +> 3."); │ │ │ │ │ +28 } │ │ │ │ │ +29 }; │ │ │ │ │ +30 │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +55 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +56 { │ │ │ │ │ +57 public: │ │ │ │ │ +59 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_1_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_1_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_6_0 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +61 │ │ │ │ │ +_6_3 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +64 { │ │ │ │ │ +65 return 3; │ │ │ │ │ +66 } │ │ │ │ │ +67 │ │ │ │ │ +_6_9 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +70 std::vector& out) const │ │ │ │ │ +71 { │ │ │ │ │ +72 out.resize(3); │ │ │ │ │ +73 │ │ │ │ │ +74 int subElement; │ │ │ │ │ +75 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +76 this->getSubElement(in, subElement, local); │ │ │ │ │ +77 │ │ │ │ │ +78 switch (subElement) { │ │ │ │ │ +79 case 0 : │ │ │ │ │ +80 │ │ │ │ │ +81 out[0] = 1 - local[0]; │ │ │ │ │ +82 out[1] = local[0]; │ │ │ │ │ +83 out[2] = 0; │ │ │ │ │ +84 break; │ │ │ │ │ +85 │ │ │ │ │ +86 case 1 : │ │ │ │ │ +87 │ │ │ │ │ +88 out[0] = 0; │ │ │ │ │ +89 out[1] = 1 - local[0]; │ │ │ │ │ +90 out[2] = local[0]; │ │ │ │ │ +91 break; │ │ │ │ │ +92 │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +95 } │ │ │ │ │ +96 │ │ │ │ │ +98 inline void │ │ │ │ │ +_9_9 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +100 std::vector& out) const // return value │ │ │ │ │ +101 { │ │ │ │ │ +102 out.resize(3); │ │ │ │ │ +103 │ │ │ │ │ +104 int subElement; │ │ │ │ │ +105 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +106 this->getSubElement(in, subElement, local); │ │ │ │ │ +107 │ │ │ │ │ +108 switch (subElement) { │ │ │ │ │ +109 case 0 : │ │ │ │ │ +110 │ │ │ │ │ +111 out[0][0][0] = -2; │ │ │ │ │ +112 out[1][0][0] = 2; │ │ │ │ │ +113 out[2][0][0] = 0; │ │ │ │ │ +114 break; │ │ │ │ │ +115 │ │ │ │ │ +116 case 1 : │ │ │ │ │ +117 │ │ │ │ │ +118 out[0][0][0] = 0; │ │ │ │ │ +119 out[1][0][0] = -2; │ │ │ │ │ +120 out[2][0][0] = 2; │ │ │ │ │ +121 break; │ │ │ │ │ +122 │ │ │ │ │ +123 } │ │ │ │ │ +124 } │ │ │ │ │ +125 │ │ │ │ │ +_1_2_7 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +128 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +129 std::vector& out) const // return value │ │ │ │ │ +130 { │ │ │ │ │ +131 auto totalOrder = order[0]; │ │ │ │ │ +132 if (totalOrder == 0) { │ │ │ │ │ +133 evaluateFunction(in, out); │ │ │ │ │ +134 } else if (totalOrder == 1) │ │ │ │ │ +135 { │ │ │ │ │ +136 out.resize(3); │ │ │ │ │ +137 │ │ │ │ │ +138 int subElement; │ │ │ │ │ +139 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +140 this->getSubElement(in, subElement, local); │ │ │ │ │ +141 │ │ │ │ │ +142 switch (subElement) { │ │ │ │ │ +143 case 0: │ │ │ │ │ +144 out[0] = -2; │ │ │ │ │ +145 out[1] = 2; │ │ │ │ │ +146 out[2] = 0; │ │ │ │ │ +147 break; │ │ │ │ │ +148 case 1: │ │ │ │ │ +149 out[0] = 0; │ │ │ │ │ +150 out[1] = -2; │ │ │ │ │ +151 out[2] = 2; │ │ │ │ │ +152 break; │ │ │ │ │ +153 } │ │ │ │ │ +154 } else { │ │ │ │ │ +155 out.resize(3); │ │ │ │ │ +156 out[0] = out[1] = out[2] = 0; │ │ │ │ │ +157 } │ │ │ │ │ +158 } │ │ │ │ │ +159 │ │ │ │ │ +_1_6_3 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ +164 { │ │ │ │ │ +165 return 1; │ │ │ │ │ +166 } │ │ │ │ │ +167 │ │ │ │ │ +168 }; │ │ │ │ │ +169 │ │ │ │ │ +195 template │ │ │ │ │ +_1_9_6 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +197 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +198 { │ │ │ │ │ +199 public: │ │ │ │ │ +201 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_2_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_2_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_2_0_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +203 │ │ │ │ │ +_2_0_5 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +206 { │ │ │ │ │ +207 return 6; │ │ │ │ │ +208 } │ │ │ │ │ +209 │ │ │ │ │ +_2_1_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +212 std::vector& out) const │ │ │ │ │ +213 { │ │ │ │ │ +214 out.resize(6); │ │ │ │ │ +215 │ │ │ │ │ +216 int subElement; │ │ │ │ │ +217 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +218 this->getSubElement(in, subElement, local); │ │ │ │ │ +219 │ │ │ │ │ +220 switch (subElement) { │ │ │ │ │ +221 case 0 : │ │ │ │ │ +222 │ │ │ │ │ +223 out[0] = 1 - local[0] - local[1]; │ │ │ │ │ +224 out[1] = local[0]; │ │ │ │ │ +225 out[2] = 0; │ │ │ │ │ +226 out[3] = local[1]; │ │ │ │ │ +227 out[4] = 0; │ │ │ │ │ +228 out[5] = 0; │ │ │ │ │ +229 break; │ │ │ │ │ +230 │ │ │ │ │ +231 case 1 : │ │ │ │ │ +232 │ │ │ │ │ +233 out[0] = 0; │ │ │ │ │ +234 out[1] = 1 - local[0] - local[1]; │ │ │ │ │ +235 out[2] = local[0]; │ │ │ │ │ +236 out[3] = 0; │ │ │ │ │ +237 out[4] = local[1]; │ │ │ │ │ +238 out[5] = 0; │ │ │ │ │ +239 break; │ │ │ │ │ +240 │ │ │ │ │ +241 case 2 : │ │ │ │ │ +242 │ │ │ │ │ +243 out[0] = 0; │ │ │ │ │ +244 out[1] = 0; │ │ │ │ │ +245 out[2] = 0; │ │ │ │ │ +246 out[3] = 1 - local[0] - local[1]; │ │ │ │ │ +247 out[4] = local[0]; │ │ │ │ │ +248 out[5] = local[1]; │ │ │ │ │ +249 break; │ │ │ │ │ +250 case 3 : │ │ │ │ │ +251 │ │ │ │ │ +252 out[0] = 0; │ │ │ │ │ +253 out[1] = local[1]; │ │ │ │ │ +254 out[2] = 0; │ │ │ │ │ +255 out[3] = local[0]; │ │ │ │ │ +256 out[4] = 1 - local[0] - local[1]; │ │ │ │ │ +257 out[5] = 0; │ │ │ │ │ +258 } │ │ │ │ │ +259 │ │ │ │ │ +260 } │ │ │ │ │ +261 │ │ │ │ │ +263 inline void │ │ │ │ │ +_2_6_4 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +265 std::vector& out) const // return value │ │ │ │ │ +266 { │ │ │ │ │ +267 out.resize(6); │ │ │ │ │ +268 │ │ │ │ │ +269 int subElement; │ │ │ │ │ +270 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +271 this->getSubElement(in, subElement, local); │ │ │ │ │ +272 │ │ │ │ │ +273 switch (subElement) { │ │ │ │ │ +274 case 0 : │ │ │ │ │ +275 │ │ │ │ │ +276 out[0][0][0] = -2; out[0][0][1] = -2; │ │ │ │ │ +277 out[1][0][0] = 2; out[1][0][1] = 0; │ │ │ │ │ +278 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ +279 out[3][0][0] = 0; out[3][0][1] = 2; │ │ │ │ │ +280 out[4][0][0] = 0; out[4][0][1] = 0; │ │ │ │ │ +281 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ +282 break; │ │ │ │ │ +283 │ │ │ │ │ +284 case 1 : │ │ │ │ │ +285 │ │ │ │ │ +286 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ +287 out[1][0][0] = -2; out[1][0][1] = -2; │ │ │ │ │ +288 out[2][0][0] = 2; out[2][0][1] = 0; │ │ │ │ │ +289 out[3][0][0] = 0; out[3][0][1] = 0; │ │ │ │ │ +290 out[4][0][0] = 0; out[4][0][1] = 2; │ │ │ │ │ +291 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ +292 break; │ │ │ │ │ +293 │ │ │ │ │ +294 case 2 : │ │ │ │ │ +295 │ │ │ │ │ +296 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ +297 out[1][0][0] = 0; out[1][0][1] = 0; │ │ │ │ │ +298 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ +299 out[3][0][0] = -2; out[3][0][1] = -2; │ │ │ │ │ +300 out[4][0][0] = 2; out[4][0][1] = 0; │ │ │ │ │ +301 out[5][0][0] = 0; out[5][0][1] = 2; │ │ │ │ │ +302 break; │ │ │ │ │ +303 case 3 : │ │ │ │ │ +304 │ │ │ │ │ +305 out[0][0][0] = 0; out[0][0][1] = 0; │ │ │ │ │ +306 out[1][0][0] = 0; out[1][0][1] = -2; │ │ │ │ │ +307 out[2][0][0] = 0; out[2][0][1] = 0; │ │ │ │ │ +308 out[3][0][0] = -2; out[3][0][1] = 0; │ │ │ │ │ +309 out[4][0][0] = 2; out[4][0][1] = 2; │ │ │ │ │ +310 out[5][0][0] = 0; out[5][0][1] = 0; │ │ │ │ │ +311 } │ │ │ │ │ +312 } │ │ │ │ │ +313 │ │ │ │ │ +_3_1_5 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +316 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +317 std::vector& out) const // return value │ │ │ │ │ +318 { │ │ │ │ │ +319 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +320 if (totalOrder == 0) { │ │ │ │ │ +321 evaluateFunction(in, out); │ │ │ │ │ +322 } else if (totalOrder == 1) { │ │ │ │ │ +323 int subElement; │ │ │ │ │ +324 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +325 this->getSubElement(in, subElement, local); │ │ │ │ │ +326 │ │ │ │ │ +327 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +328 out.resize(size()); │ │ │ │ │ +329 │ │ │ │ │ +330 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +331 out[i] = 0; │ │ │ │ │ +332 │ │ │ │ │ +333 switch (direction) { │ │ │ │ │ +334 case 0: // direction == 0 │ │ │ │ │ +335 │ │ │ │ │ +336 switch (subElement) { │ │ │ │ │ +337 case 0 : │ │ │ │ │ +338 out[0] = -2; │ │ │ │ │ +339 out[1] = 2; │ │ │ │ │ +340 break; │ │ │ │ │ +341 case 1 : │ │ │ │ │ +342 out[1] = -2; │ │ │ │ │ +343 out[2] = 2; │ │ │ │ │ +344 break; │ │ │ │ │ +345 case 2 : │ │ │ │ │ +346 out[3] = -2; │ │ │ │ │ +347 out[4] = 2; │ │ │ │ │ +348 break; │ │ │ │ │ +349 case 3 : │ │ │ │ │ +350 out[3] = -2; │ │ │ │ │ +351 out[4] = 2; │ │ │ │ │ +352 } │ │ │ │ │ +353 break; │ │ │ │ │ +354 │ │ │ │ │ +355 case 1: // direction == 1 │ │ │ │ │ +356 │ │ │ │ │ +357 switch (subElement) { │ │ │ │ │ +358 case 0 : │ │ │ │ │ +359 out[0] = -2; │ │ │ │ │ +360 out[3] = 2; │ │ │ │ │ +361 break; │ │ │ │ │ +362 case 1 : │ │ │ │ │ +363 out[1] = -2; │ │ │ │ │ +364 out[4] = 2; │ │ │ │ │ +365 break; │ │ │ │ │ +366 case 2 : │ │ │ │ │ +367 out[3] = -2; │ │ │ │ │ +368 out[5] = 2; │ │ │ │ │ +369 break; │ │ │ │ │ +370 case 3 : │ │ │ │ │ +371 out[1] = -2; │ │ │ │ │ +372 out[4] = 2; │ │ │ │ │ +373 } │ │ │ │ │ +374 break; │ │ │ │ │ +375 │ │ │ │ │ +376 default: │ │ │ │ │ +377 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +378 } │ │ │ │ │ +379 } else { │ │ │ │ │ +380 out.resize(size()); │ │ │ │ │ +381 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +382 out[i] = 0; │ │ │ │ │ +383 } │ │ │ │ │ +384 } │ │ │ │ │ +385 │ │ │ │ │ +_3_8_9 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ +390 { │ │ │ │ │ +391 return 1; │ │ │ │ │ +392 } │ │ │ │ │ +393 │ │ │ │ │ +394 }; │ │ │ │ │ +395 │ │ │ │ │ +425 template │ │ │ │ │ +_4_2_6 class _R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +427 : public _R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +428 { │ │ │ │ │ +429 public: │ │ │ │ │ +431 typedef _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_3_,_D_u_n_e_:_:_F_i_e_l_d_V_e_c_t_o_r_<_D_,_3_>,R,1,Dune:: │ │ │ │ │ +FieldVector, │ │ │ │ │ +_4_3_2 Dune::FieldMatrix > _T_r_a_i_t_s; │ │ │ │ │ +433 │ │ │ │ │ +_4_3_5 static constexpr unsigned int _s_i_z_e () │ │ │ │ │ +436 { │ │ │ │ │ +437 return 10; │ │ │ │ │ +438 } │ │ │ │ │ +439 │ │ │ │ │ +_4_4_1 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, │ │ │ │ │ +442 std::vector& out) const │ │ │ │ │ +443 { │ │ │ │ │ +444 out.resize(10); │ │ │ │ │ +445 │ │ │ │ │ +446 int subElement; │ │ │ │ │ +447 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +448 this->getSubElement(in, subElement, local); │ │ │ │ │ +449 │ │ │ │ │ +450 switch (subElement) { │ │ │ │ │ +451 case 0 : │ │ │ │ │ +452 │ │ │ │ │ +453 out[0] = 1 - local[0] - local[1] - local[2]; │ │ │ │ │ +454 out[1] = local[0]; │ │ │ │ │ +455 out[2] = 0; │ │ │ │ │ +456 out[3] = local[1]; │ │ │ │ │ +457 out[4] = 0; │ │ │ │ │ +458 out[5] = 0; │ │ │ │ │ +459 out[6] = local[2]; │ │ │ │ │ +460 out[7] = 0; │ │ │ │ │ +461 out[8] = 0; │ │ │ │ │ +462 out[9] = 0; │ │ │ │ │ +463 break; │ │ │ │ │ +464 │ │ │ │ │ +465 case 1 : │ │ │ │ │ +466 │ │ │ │ │ +467 out[0] = 0; │ │ │ │ │ +468 out[1] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +469 out[2] = local[0]; │ │ │ │ │ +470 out[3] = 0; │ │ │ │ │ +471 out[4] = local[1]; │ │ │ │ │ +472 out[5] = 0; │ │ │ │ │ +473 out[6] = 0; │ │ │ │ │ +474 out[7] = local[2]; │ │ │ │ │ +475 out[8] = 0; │ │ │ │ │ +476 out[9] = 0; │ │ │ │ │ +477 break; │ │ │ │ │ +478 │ │ │ │ │ +479 case 2 : │ │ │ │ │ +480 │ │ │ │ │ +481 out[0] = 0; │ │ │ │ │ +482 out[1] = 0; │ │ │ │ │ +483 out[2] = 0; │ │ │ │ │ +484 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +485 out[4] = local[0]; │ │ │ │ │ +486 out[5] = local[1]; │ │ │ │ │ +487 out[6] = 0; │ │ │ │ │ +488 out[7] = 0; │ │ │ │ │ +489 out[8] = local[2]; │ │ │ │ │ +490 out[9] = 0; │ │ │ │ │ +491 break; │ │ │ │ │ +492 │ │ │ │ │ +493 case 3 : │ │ │ │ │ +494 │ │ │ │ │ +495 out[0] = 0; │ │ │ │ │ +496 out[1] = 0; │ │ │ │ │ +497 out[2] = 0; │ │ │ │ │ +498 out[3] = 0; │ │ │ │ │ +499 out[4] = 0; │ │ │ │ │ +500 out[5] = 0; │ │ │ │ │ +501 out[6] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +502 out[7] = local[0]; │ │ │ │ │ +503 out[8] = local[1]; │ │ │ │ │ +504 out[9] = local[2]; │ │ │ │ │ +505 break; │ │ │ │ │ +506 │ │ │ │ │ +507 case 4 : │ │ │ │ │ +508 │ │ │ │ │ +509 out[0] = 0; │ │ │ │ │ +510 out[1] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +511 out[2] = 0; │ │ │ │ │ +512 out[3] = local[0]; │ │ │ │ │ +513 out[4] = 0; │ │ │ │ │ +514 out[5] = 0; │ │ │ │ │ +515 out[6] = local[1]; │ │ │ │ │ +516 out[7] = local[2]; │ │ │ │ │ +517 out[8] = 0; │ │ │ │ │ +518 out[9] = 0; │ │ │ │ │ +519 break; │ │ │ │ │ +520 │ │ │ │ │ +521 case 5 : │ │ │ │ │ +522 │ │ │ │ │ +523 out[0] = 0; │ │ │ │ │ +524 out[1] = local[1]; │ │ │ │ │ +525 out[2] = 0; │ │ │ │ │ +526 out[3] = local[0]; │ │ │ │ │ +527 out[4] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +528 out[5] = 0; │ │ │ │ │ +529 out[6] = 0; │ │ │ │ │ +530 out[7] = local[2]; │ │ │ │ │ +531 out[8] = 0; │ │ │ │ │ +532 out[9] = 0; │ │ │ │ │ +533 break; │ │ │ │ │ +534 │ │ │ │ │ +535 case 6 : │ │ │ │ │ +536 │ │ │ │ │ +537 out[0] = 0; │ │ │ │ │ +538 out[1] = 0; │ │ │ │ │ +539 out[2] = 0; │ │ │ │ │ +540 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +541 out[4] = 0; │ │ │ │ │ +542 out[5] = 0; │ │ │ │ │ +543 out[6] = local[0]; │ │ │ │ │ +544 out[7] = local[1]; │ │ │ │ │ +545 out[8] = local[2]; │ │ │ │ │ +546 out[9] = 0; │ │ │ │ │ +547 break; │ │ │ │ │ +548 │ │ │ │ │ +549 case 7 : │ │ │ │ │ +550 │ │ │ │ │ +551 out[0] = 0; │ │ │ │ │ +552 out[1] = 0; │ │ │ │ │ +553 out[2] = 0; │ │ │ │ │ +554 out[3] = 1 - local[0] - local[1] -local[2]; │ │ │ │ │ +555 out[4] = local[2]; │ │ │ │ │ +556 out[5] = 0; │ │ │ │ │ +557 out[6] = 0; │ │ │ │ │ +558 out[7] = local[1]; │ │ │ │ │ +559 out[8] = local[0]; │ │ │ │ │ +560 out[9] = 0; │ │ │ │ │ +561 break; │ │ │ │ │ +562 } │ │ │ │ │ +563 │ │ │ │ │ +564 } │ │ │ │ │ +565 │ │ │ │ │ +567 inline void │ │ │ │ │ +_5_6_8 _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +569 std::vector& out) const // return value │ │ │ │ │ +570 { │ │ │ │ │ +571 out.resize(10); │ │ │ │ │ +572 │ │ │ │ │ +573 int subElement; │ │ │ │ │ +574 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +575 this->getSubElement(in, subElement, local); │ │ │ │ │ +576 │ │ │ │ │ +577 switch (subElement) { │ │ │ │ │ +578 case 0 : │ │ │ │ │ +579 │ │ │ │ │ +580 out[0][0][0] = -2; out[0][0][1] = -2; out[0][0][2] = -2; │ │ │ │ │ +581 out[1][0][0] = 2; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +582 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +583 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0; │ │ │ │ │ +584 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +585 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +586 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 2; │ │ │ │ │ +587 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ +588 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ +589 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +590 break; │ │ │ │ │ +591 │ │ │ │ │ +592 case 1 : │ │ │ │ │ +593 │ │ │ │ │ +594 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +595 out[1][0][0] = -2; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ +596 out[2][0][0] = 2; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +597 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ +598 out[4][0][0] = 0; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ +599 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +600 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ +601 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2; │ │ │ │ │ +602 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ +603 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +604 break; │ │ │ │ │ +605 │ │ │ │ │ +606 case 2 : │ │ │ │ │ +607 │ │ │ │ │ +608 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +609 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +610 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +611 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2; │ │ │ │ │ +612 out[4][0][0] = 2; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +613 out[5][0][0] = 0; out[5][0][1] = 2; out[5][0][2] = 0; │ │ │ │ │ +614 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ +615 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ +616 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 2; │ │ │ │ │ +617 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +618 break; │ │ │ │ │ +619 │ │ │ │ │ +620 case 3 : │ │ │ │ │ +621 │ │ │ │ │ +622 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +623 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +624 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +625 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ +626 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +627 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +628 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = -2; │ │ │ │ │ +629 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ +630 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 0; │ │ │ │ │ +631 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 2; │ │ │ │ │ +632 break; │ │ │ │ │ +633 │ │ │ │ │ +634 case 4 : │ │ │ │ │ +635 │ │ │ │ │ +636 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +637 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ +638 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +639 out[3][0][0] = 0; out[3][0][1] = 2; out[3][0][2] = 0; │ │ │ │ │ +640 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +641 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +642 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0; │ │ │ │ │ +643 out[7][0][0] = 2; out[7][0][1] = 2; out[7][0][2] = 2; │ │ │ │ │ +644 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ +645 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +646 break; │ │ │ │ │ +647 │ │ │ │ │ +648 case 5 : │ │ │ │ │ +649 │ │ │ │ │ +650 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +651 out[1][0][0] = 0; out[1][0][1] = -2; out[1][0][2] = -2; │ │ │ │ │ +652 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +653 out[3][0][0] = -2; out[3][0][1] = 0; out[3][0][2] = 0; │ │ │ │ │ +654 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ +655 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +656 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ +657 out[7][0][0] = 0; out[7][0][1] = 0; out[7][0][2] = 2; │ │ │ │ │ +658 out[8][0][0] = 0; out[8][0][1] = 0; out[8][0][2] = 0; │ │ │ │ │ +659 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +660 break; │ │ │ │ │ +661 │ │ │ │ │ +662 case 6 : │ │ │ │ │ +663 │ │ │ │ │ +664 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +665 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +666 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +667 out[3][0][0] = 0; out[3][0][1] = 0; out[3][0][2] = -2; │ │ │ │ │ +668 out[4][0][0] = 0; out[4][0][1] = 0; out[4][0][2] = 0; │ │ │ │ │ +669 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +670 out[6][0][0] = -2; out[6][0][1] = -2; out[6][0][2] = 0; │ │ │ │ │ +671 out[7][0][0] = 2; out[7][0][1] = 0; out[7][0][2] = 0; │ │ │ │ │ +672 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2; │ │ │ │ │ +673 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +674 break; │ │ │ │ │ +675 │ │ │ │ │ +676 case 7 : │ │ │ │ │ +677 │ │ │ │ │ +678 out[0][0][0] = 0; out[0][0][1] = 0; out[0][0][2] = 0; │ │ │ │ │ +679 out[1][0][0] = 0; out[1][0][1] = 0; out[1][0][2] = 0; │ │ │ │ │ +680 out[2][0][0] = 0; out[2][0][1] = 0; out[2][0][2] = 0; │ │ │ │ │ +681 out[3][0][0] = -2; out[3][0][1] = -2; out[3][0][2] = -2; │ │ │ │ │ +682 out[4][0][0] = 2; out[4][0][1] = 2; out[4][0][2] = 0; │ │ │ │ │ +683 out[5][0][0] = 0; out[5][0][1] = 0; out[5][0][2] = 0; │ │ │ │ │ +684 out[6][0][0] = 0; out[6][0][1] = 0; out[6][0][2] = 0; │ │ │ │ │ +685 out[7][0][0] = 0; out[7][0][1] = -2; out[7][0][2] = 0; │ │ │ │ │ +686 out[8][0][0] = 0; out[8][0][1] = 2; out[8][0][2] = 2; │ │ │ │ │ +687 out[9][0][0] = 0; out[9][0][1] = 0; out[9][0][2] = 0; │ │ │ │ │ +688 break; │ │ │ │ │ +689 } │ │ │ │ │ +690 } │ │ │ │ │ +691 │ │ │ │ │ +_6_9_3 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +694 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e& in, // position │ │ │ │ │ +695 std::vector& out) const // return value │ │ │ │ │ +696 { │ │ │ │ │ +697 auto totalOrder = std::accumulate(order.begin(), order.end(), 0); │ │ │ │ │ +698 if (totalOrder == 0) { │ │ │ │ │ +699 evaluateFunction(in, out); │ │ │ │ │ +700 } else if (totalOrder == 1) { │ │ │ │ │ +701 int subElement; │ │ │ │ │ +702 typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e local; │ │ │ │ │ +703 this->getSubElement(in, subElement, local); │ │ │ │ │ +704 │ │ │ │ │ +705 auto const direction = std::distance(order.begin(), std::find(order.begin │ │ │ │ │ +(), order.end(), 1)); │ │ │ │ │ +706 out.resize(size()); │ │ │ │ │ +707 │ │ │ │ │ +708 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +709 out[i] = 0; │ │ │ │ │ +710 │ │ │ │ │ +711 switch (direction) { │ │ │ │ │ +712 case 0: // direction == 0 │ │ │ │ │ +713 │ │ │ │ │ +714 switch (subElement) { │ │ │ │ │ +715 case 0 : │ │ │ │ │ +716 out[0] = -2; │ │ │ │ │ +717 out[1] = 2; │ │ │ │ │ +718 break; │ │ │ │ │ +719 case 1 : │ │ │ │ │ +720 out[1] = -2; │ │ │ │ │ +721 out[2] = 2; │ │ │ │ │ +722 break; │ │ │ │ │ +723 case 2 : │ │ │ │ │ +724 out[3] = -2; │ │ │ │ │ +725 out[4] = 2; │ │ │ │ │ +726 break; │ │ │ │ │ +727 case 3 : │ │ │ │ │ +728 out[6] = -2; │ │ │ │ │ +729 out[7] = 2; │ │ │ │ │ +730 break; │ │ │ │ │ +731 case 4 : │ │ │ │ │ +732 out[6] = -2; │ │ │ │ │ +733 out[7] = 2; │ │ │ │ │ +734 break; │ │ │ │ │ +735 case 5 : │ │ │ │ │ +736 out[3] = -2; │ │ │ │ │ +737 out[4] = 2; │ │ │ │ │ +738 break; │ │ │ │ │ +739 case 6 : │ │ │ │ │ +740 out[6] = -2; │ │ │ │ │ +741 out[7] = 2; │ │ │ │ │ +742 break; │ │ │ │ │ +743 case 7 : │ │ │ │ │ +744 out[3] = -2; │ │ │ │ │ +745 out[4] = 2; │ │ │ │ │ +746 break; │ │ │ │ │ +747 } │ │ │ │ │ +748 break; │ │ │ │ │ +749 │ │ │ │ │ +750 case 1: // direction == 1 │ │ │ │ │ +751 │ │ │ │ │ +752 switch (subElement) { │ │ │ │ │ +753 case 0 : │ │ │ │ │ +754 out[0] = -2; │ │ │ │ │ +755 out[3] = 2; │ │ │ │ │ +756 break; │ │ │ │ │ +757 case 1 : │ │ │ │ │ +758 out[1] = -2; │ │ │ │ │ +759 out[4] = 2; │ │ │ │ │ +760 break; │ │ │ │ │ +761 case 2 : │ │ │ │ │ +762 out[3] = -2; │ │ │ │ │ +763 out[5] = 2; │ │ │ │ │ +764 break; │ │ │ │ │ +765 case 3 : │ │ │ │ │ +766 out[6] = -2; │ │ │ │ │ +767 out[8] = 2; │ │ │ │ │ +768 break; │ │ │ │ │ +769 case 4 : │ │ │ │ │ +770 out[1] = -2; │ │ │ │ │ +771 out[3] = 2; │ │ │ │ │ +772 out[6] = -2; │ │ │ │ │ +773 break; │ │ │ │ │ +774 case 5 : │ │ │ │ │ +775 out[1] = -2; │ │ │ │ │ +776 out[4] = 2; │ │ │ │ │ +777 break; │ │ │ │ │ +778 case 6 : │ │ │ │ │ +779 out[6] = -2; │ │ │ │ │ +780 out[8] = 2; │ │ │ │ │ +781 break; │ │ │ │ │ +782 case 7 : │ │ │ │ │ +783 out[3] = -2; │ │ │ │ │ +784 out[4] = 2; │ │ │ │ │ +785 out[7] = -2; │ │ │ │ │ +786 out[8] = 2; │ │ │ │ │ +787 break; │ │ │ │ │ +788 } │ │ │ │ │ +789 break; │ │ │ │ │ +790 │ │ │ │ │ +791 case 2: // direction == 2 │ │ │ │ │ +792 │ │ │ │ │ +793 switch (subElement) { │ │ │ │ │ +794 case 0 : │ │ │ │ │ +795 out[0] = -2; │ │ │ │ │ +796 out[6] = 2; │ │ │ │ │ +797 break; │ │ │ │ │ +798 case 1 : │ │ │ │ │ +799 out[1] = -2; │ │ │ │ │ +800 out[7] = 2; │ │ │ │ │ +801 break; │ │ │ │ │ +802 case 2 : │ │ │ │ │ +803 out[3] = -2; │ │ │ │ │ +804 out[8] = 2; │ │ │ │ │ +805 break; │ │ │ │ │ +806 case 3 : │ │ │ │ │ +807 out[6] = -2; │ │ │ │ │ +808 out[9] = 2; │ │ │ │ │ +809 break; │ │ │ │ │ +810 case 4 : │ │ │ │ │ +811 out[1] = -2; │ │ │ │ │ +812 out[7] = 2; │ │ │ │ │ +813 break; │ │ │ │ │ +814 case 5 : │ │ │ │ │ +815 out[1] = -2; │ │ │ │ │ +816 out[7] = 2; │ │ │ │ │ +817 break; │ │ │ │ │ +818 case 6 : │ │ │ │ │ +819 out[3] = -2; │ │ │ │ │ +820 out[8] = 2; │ │ │ │ │ +821 break; │ │ │ │ │ +822 case 7 : │ │ │ │ │ +823 out[3] = -2; │ │ │ │ │ +824 out[8] = 2; │ │ │ │ │ +825 break; │ │ │ │ │ +826 } │ │ │ │ │ +827 break; │ │ │ │ │ +828 │ │ │ │ │ +829 default: │ │ │ │ │ +830 DUNE_THROW(RangeError, "Component out of range."); │ │ │ │ │ +831 } │ │ │ │ │ +832 } else { │ │ │ │ │ +833 out.resize(size()); │ │ │ │ │ +834 for (std::size_t i = 0; i < size(); ++i) │ │ │ │ │ +835 out[i] = 0; │ │ │ │ │ +836 } │ │ │ │ │ +837 } │ │ │ │ │ +838 │ │ │ │ │ +_8_4_2 static constexpr unsigned int _o_r_d_e_r () │ │ │ │ │ +843 { │ │ │ │ │ +844 return 1; │ │ │ │ │ +845 } │ │ │ │ │ +846 │ │ │ │ │ +847 }; │ │ │ │ │ +848} │ │ │ │ │ +849#endif │ │ │ │ │ +_r_e_f_i_n_e_d_s_i_m_p_l_e_x_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Contains a base class for LocalBasis classes based on uniform refinement. │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType, unsigned int │ │ │ │ │ -variant) │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -MimeticLocalFiniteElement() │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -MimeticLocalFiniteElement(Dune::GeometryType::BasicType basicType) │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -Dune::GeometryType type() const │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -Dune::LocalFiniteElementTraits< MimeticLocalBasis< D, R, dim >, │ │ │ │ │ -MimeticLocalCoefficients, MimeticLocalInterpolation< MimeticLocalBasis< D, R, │ │ │ │ │ -dim > > > Traits │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -DDeeffiinniittiioonn mimetic.hh:51 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:74 │ │ │ │ │ -_D_u_n_e_:_:_M_i_m_e_t_i_c_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -! │ │ │ │ │ -DDeeffiinniittiioonn mimeticall.hh:88 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_S_i_m_p_l_e_x_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn refinedsimplexlocalbasis.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +RefinedP1LocalBasis() │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 1 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:99 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ +static constexpr unsigned int order() │ │ │ │ │ +Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ +functions are only piecewis... │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:163 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 1 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:264 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 2 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:202 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:211 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:315 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ +static constexpr unsigned int order() │ │ │ │ │ +Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ +functions are only piecewis... │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:389 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:205 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 3 > &order, const typename │ │ │ │ │ +Traits::DomainType &in, std::vector< typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:693 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::RangeType > &out) const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:441 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, │ │ │ │ │ +1 >, Dune::FieldMatrix< R, 1, 3 > > Traits │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:432 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ +static constexpr unsigned int size() │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:435 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ +static constexpr unsigned int order() │ │ │ │ │ +Polynomial order of the shape functions Doesn't really apply: these shape │ │ │ │ │ +functions are only piecewis... │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:842 │ │ │ │ │ +_D_u_n_e_:_:_R_e_f_i_n_e_d_P_1_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainType &in, std::vector< │ │ │ │ │ +typename Traits::JacobianType > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn refinedp1localbasis.hh:568 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01398.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDFMCubeLocalFiniteElement< D, R, dim, order > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Fortin-Marini finite elements for cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/bdfmcube.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/bdfmcube.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< LocalBasis, LocalCoefficients, LocalInterpolation >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -350,15 +350,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01402.html │ │ │ │ @@ -76,29 +76,29 @@ │ │ │ │
Dune::BDFMCubeLocalBasis< D, R, dim, order > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │

Detailed Description

│ │ │ │
template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ class Dune::BDFMCubeLocalBasis< D, R, dim, order >

Brezzi-Douglas-Fortin-Marini shape functions on a reference cube.

│ │ │ │
Template Parameters
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
DType to represent the field in the domain.
RType to represent the field in the range.
dimdimension of the reference element, must be >= 2.
orderorder of the element, must be >= 1.
│ │ │ │
│ │ │ │
│ │ │ │

The documentation for this class was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01406.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDFMCubeLocalBasis< D, R, 2, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalBasisTraits< D, 2, DomainType, R, 2, RangeType, JacobianType >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -405,15 +405,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01410.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDFMCubeLocalBasis< D, R, 2, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalBasisTraits< D, 2, DomainType, R, 2, RangeType, JacobianType >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -405,15 +405,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01414.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDFMCubeLocalBasis< D, R, 2, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Third order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalBasisTraits< D, 2, DomainType, R, 2, RangeType, JacobianType >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -405,15 +405,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01418.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDFMCubeLocalCoefficients< D, R, dim, order > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasfortinmarini/cube/localcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDFMCubeLocalCoefficients< D, R, dim, order >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -243,15 +243,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01426.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDM1Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01430.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │

│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01438.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BDM1Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d/brezzidouglasmarini1cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01442.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDM1Cube3DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Cube3DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01446.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01450.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Brezzi-Douglas-Marini-1 elements on hexahedra. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Cube3DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01454.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BDM1Cube3DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d/brezzidouglasmarini1cube3dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Cube3DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01458.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDM1Simplex2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Simplex2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01462.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDM1Simplex2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01466.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Brezzi-Douglas-Marini-1 elements on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Simplex2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01470.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BDM1Simplex2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d/brezzidouglasmarini1simplex2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM1Simplex2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01474.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDM2Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01478.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01482.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Brezzi-Douglas-Marini-2 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01486.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BDM2Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d/brezzidouglasmarini2cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01490.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BDM2Simplex2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Simplex2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01494.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BDM2Simplex2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -404,15 +404,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01498.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Brezzi-Douglas-Marini-2 elements on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Simplex2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01502.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BDM2Simplex2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Brezzi-Douglas-Marini shape functions on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d/brezzidouglasmarini2simplex2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BDM2Simplex2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01506.html │ │ │ │ @@ -88,15 +88,15 @@ │ │ │ │ RNumber type to represent shape function values │ │ │ │ dimDimension of the reference elements, must be 2 or 3 │ │ │ │ orderPolynomial order of the element │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01510.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01514.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Marini local finite elements for cubes with dimension 2 and order 2. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 2, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01518.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 3, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Marini local finite elements for cubes with dimension 3 and order 1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinicube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BrezziDouglasMariniCubeLocalFiniteElement< D, R, 3, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01522.html │ │ │ │ @@ -88,15 +88,15 @@ │ │ │ │ RNumber type to represent shape function values │ │ │ │ dimDimension of the reference elements, currently only 2 is supported │ │ │ │ orderPolynomial order of the element │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01526.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01530.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Brezzi-Douglas-Marini local finite elements for simplices with dimension 2 and order 2. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>

│ │ │ │ +

#include <dune/localfunctions/brezzidouglasmarini/brezzidouglasmarinisimplex.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BrezziDouglasMariniSimplexLocalFiniteElement< D, R, 2, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01534.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::FiniteElementInterface Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Interface for global-valued finite elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::FiniteElementInterface:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -248,15 +248,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Extract geometry type of this finite element.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01538.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::FiniteElementInterface::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

types of component objects │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::FiniteElementInterface::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -168,15 +168,15 @@ │ │ │ │

type of the Interpolation

│ │ │ │

Should be an implementation of InterpolationInterface

│ │ │ │
Note
May be an inline class instead of a typedef.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01542.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::FiniteElementFactoryInterface< Geometry, VertexOrder > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory interface for global-valued finite elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::FiniteElementFactoryInterface< Geometry, VertexOrder >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -351,15 +351,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01546.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::BasisInterface Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Interface for global-valued shape functions. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisInterface:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -265,15 +265,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Number of shape functions.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01550.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::BasisInterface::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

types of domain and range │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisInterface::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -254,15 +254,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

dimension of the range

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01554.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::InterpolationInterface Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Interface for global-valued interpolation. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::InterpolationInterface:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -172,15 +172,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01558.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::CoefficientsInterface Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Interface for global-valued coefficients. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::CoefficientsInterface:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -146,15 +146,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of coefficients

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01562.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::FiniteElementInterfaceSwitch< FiniteElement, Dummy > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Switch for uniform treatment of finite element with either the local or the global interface. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interfaceswitch.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interfaceswitch.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -419,15 +419,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Store a finite element in the store.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01566.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::BasisInterfaceSwitch< Basis, Dummy > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Switch for uniform treatment of local and global basis classes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/interfaceswitch.hh>

│ │ │ │ +

#include <dune/localfunctions/common/interfaceswitch.hh>

│ │ │ │

│ │ │ │ Public Types

typedef FiniteElement::Traits::Basis Basis
 export the type of the basis
 
typedef FiniteElement::Traits::Interpolation Interpolation
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -318,15 +318,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

export dimension of the values

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01570.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalBasisTraits< DF, n, D, RF, m, R, J > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Type traits for LocalBasisVirtualInterface. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localbasis.hh>

│ │ │ │

│ │ │ │ Public Types

typedef Basis::Traits::DomainField DomainField
 export field types of the coordinates
 
typedef Basis::Traits::DomainLocal DomainLocal
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -277,15 +277,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

dimension of the range

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01574.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::LocalFiniteElementTraits< LB, LC, LI > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

traits helper struct │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localfiniteelementtraits.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localfiniteelementtraits.hh>

│ │ │ │

│ │ │ │ Public Types

typedef DF DomainFieldType
 Export type for domain field.
 
typedef D DomainType
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -146,15 +146,15 @@ │ │ │ │

│ │ │ │ Public Types

typedef LB LocalBasisType
 
typedef LC LocalCoefficientsType
 
│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01594.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalFiniteElementVariant< Implementations > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Type erasure class for wrapping LocalFiniteElement classes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localfiniteelementvariant.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localfiniteelementvariant.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalFiniteElementVariant< Implementations >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -632,15 +632,15 @@ │ │ │ │ │ │ │ │

Provide access to underlying std::variant.

│ │ │ │

This allows to use std::visit on a higher level which allows to avoid the indirection of the std::variant - polymorphism inside the visitor code. Notice that the provided std::variant contains std::monostate in its type list. Hence any visitor used to access the variant has to be std::monostate-aware.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01602.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LocalFiniteElementVariantCache< Base > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A cache storing a compile time selection of local finite element implementations. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localfiniteelementvariantcache.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalFiniteElementVariantCache< Base >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -351,15 +351,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Move assignment.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01622.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Describe position of one degree of freedom. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localkey.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localkey.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -361,15 +361,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Return number of associated subentity.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01626.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalToGlobalBasisAdaptorTraits< LocalBasisTraits, dimDomainGlobal_ > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Traits class for local-to-global basis adaptors. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalToGlobalBasisAdaptorTraits< LocalBasisTraits, dimDomainGlobal_ >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -435,15 +435,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

enum  { intersectionCodim =666 │ │ │ │ }
 Enumerate 'special values' for the codimension method. More...
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01630.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Convert a simple scalar local basis into a global basis. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -472,15 +472,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01634.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalToGlobalInterpolationAdaptor< LocalInterpolation, Traits_ > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Convert a local interpolation into a global interpolation. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalToGlobalInterpolationAdaptor< LocalInterpolation, Traits_ >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -268,15 +268,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01638.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Convert a simple scalar local finite element into a global finite element. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -281,15 +281,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01642.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::ScalarLocalToGlobalFiniteElementAdaptor< LocalFiniteElement, Geometry >::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -147,15 +147,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01646.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::ScalarLocalToGlobalFiniteElementAdaptorFactory< LocalFiniteElement, Geometry > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for ScalarLocalToGlobalFiniteElementAdaptor objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │ +

#include <dune/localfunctions/common/localtoglobaladaptors.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::ScalarLocalToGlobalFiniteElementAdaptorFactory< LocalFiniteElement, Geometry >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -436,15 +436,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01650.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalInterpolationVirtualInterface< DomainType, RangeType > Class Template Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

virtual base class for a local interpolation │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalInterpolationVirtualInterface< DomainType, RangeType >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -345,15 +345,15 @@ │ │ │ │

Implements Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType >.

│ │ │ │ │ │ │ │

Implemented in Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp >.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01654.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalBasisVirtualInterface< T > Class Template Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

virtual base class for a local basis │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalBasisVirtualInterface< T >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -384,15 +384,15 @@ │ │ │ │

Number of shape functions.

│ │ │ │ │ │ │ │

Implemented in Dune::LocalBasisVirtualImp< T, Imp >, and Dune::LocalBasisVirtualImp< LocalBasisTraits, typename Imp::Traits::LocalBasisType >.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01658.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType > Class Template Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

virtual base class for a local interpolation │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalInterpolationVirtualInterfaceBase< DomainType, RangeType >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -241,15 +241,15 @@ │ │ │ │ │ │ │ │ │ │ │ │

Implemented in Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp >, and Dune::LocalInterpolationVirtualInterface< DomainType, RangeType >.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01662.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::LocalCoefficientsVirtualInterface Class Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

virtual base class for local coefficients │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalCoefficientsVirtualInterface:
│ │ │ │ │ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01666.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::LocalFiniteElementVirtualInterface< T > Class Template Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

virtual base class for local finite elements with functions │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualinterface.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalFiniteElementVirtualInterface< T >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -339,15 +339,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01670.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LocalFiniteElementVirtualImp< Imp > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

class for wrapping a finite element using the virtual interface │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalFiniteElementVirtualImp< Imp >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -558,15 +558,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01674.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::LocalFiniteElementCloneFactoryHelper< Imp, IsInterface > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

static Imp * clone (const Imp &imp)
 
│ │ │ │

Member Function Documentation

│ │ │ │ @@ -113,15 +113,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01682.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LocalFiniteElementCloneFactory< Imp > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementVirtualInterface< typename Imp::Traits::LocalBasisType::Traits > Interface
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -165,15 +165,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01686.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::LocalBasisVirtualImp< T, Imp > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

class for wrapping a basis using the virtual interface │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalBasisVirtualImp< T, Imp >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -426,15 +426,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01690.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

class for wrapping a local interpolation using the virtual interface │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalInterpolationVirtualImp< DomainType, RangeType, Imp >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -380,15 +380,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01694.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LocalCoefficientsVirtualImp< Imp > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

class for wrapping local coefficients using the virtual interface │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │ +

#include <dune/localfunctions/common/virtualwrappers.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalCoefficientsVirtualImp< Imp >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -304,15 +304,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01710.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::CrouzeixRaviartLocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Crouzeix-Raviart finite element. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/crouzeixraviart.hh>

│ │ │ │ +

#include <dune/localfunctions/crouzeixraviart.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::CrouzeixRaviartLocalBasis< D, R, dim >, Impl::CrouzeixRaviartLocalCoefficients< dim >, Impl::CrouzeixRaviartLocalInterpolation< Impl::CrouzeixRaviartLocalBasis< D, R, dim > > >
 Export number types, dimensions, etc.
 
│ │ │ │ @@ -287,15 +287,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The reference element that the local finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01714.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::DualP1LocalFiniteElement< D, R, dim, faceDual > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

The local dual p1 finite element on simplices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualp1.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualp1.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< DualP1LocalBasis< D, R, dim, faceDual >, DualP1LocalCoefficients< dim >, DualP1LocalInterpolation< dim, DualP1LocalBasis< D, R, dim, faceDual > > > Traits
 
│ │ │ │

│ │ │ │ @@ -310,15 +310,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01718.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::DualP1LocalBasis< D, R, dim, faceDualT > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Dual Lagrange shape functions on the simplex. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DualP1LocalBasis< D, R, dim, faceDualT >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -368,15 +368,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Determines if the basis is only biorthogonal on adjacent faces.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01722.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DualP1LocalCoefficients< dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Local coefficients for dual simplex P1 elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DualP1LocalCoefficients< dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -234,15 +234,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01726.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::DualP1LocalInterpolation< dim, LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualp1/dualp1localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DualP1LocalInterpolation< dim, LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -139,15 +139,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Local interpolation of a function.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01730.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Protected Types | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::DualPQ1LocalFiniteElementCache< D, R, dim, faceDual > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualpq1factory.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualpq1factory.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef FE FiniteElementType
 Type of the finite elements stored in this cache.
 
│ │ │ │ @@ -374,15 +374,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01734.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::DualQ1LocalFiniteElement< D, R, dim, faceDual > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

The local dual Q1 finite element on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualq1.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualq1.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< DualQ1LocalBasis< D, R, dim >, DualQ1LocalCoefficients< dim >, DualQ1LocalInterpolation< dim, DualQ1LocalBasis< D, R, dim > > > Traits
 
│ │ │ │

│ │ │ │ @@ -310,15 +310,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01738.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DualQ1LocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Dual Lagrange shape functions of order 1 on the reference cube. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -350,15 +350,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01742.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DualQ1LocalCoefficients< dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for dual Q1 elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DualQ1LocalCoefficients< dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -234,15 +234,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01746.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::DualQ1LocalInterpolation< dim, LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/dualmortarbasis/dualq1/dualq1localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DualQ1LocalInterpolation< dim, LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -172,15 +172,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01750.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::SimplexP1BubbleLocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Linear Lagrange functions enriched with an element bubble function. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/enriched/simplexp1bubble.hh>

│ │ │ │ +

#include <dune/localfunctions/enriched/simplexp1bubble.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -355,15 +355,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns the type of the geometry the finite-element is attached to.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01754.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::SimplexP1BubbleLocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/enriched/simplexp1bubble/localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/enriched/simplexp1bubble/localbasis.hh>

│ │ │ │

│ │ │ │ Public Types

using LocalBasisType = SimplexP1BubbleLocalBasis< D, R, dim >
 Type of the local basis.
 
using LocalCoefficientsType = SimplexP1BubbleLocalCoefficients< dim >
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalBasisTraits< D, dim, DomainType, R, 1, RangeType, JacobianType >
 Type traits for function signature.
 
│ │ │ │ @@ -322,15 +322,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns number of shape functions.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01758.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::SimplexP1BubbleLocalCoefficients< dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

The Local keys associated to the dim-d local basis functions. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/enriched/simplexp1bubble/localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/enriched/simplexp1bubble/localcoefficients.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -192,15 +192,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns number of coefficients.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01766.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::HierarchicalP2LocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2.hh>

│ │ │ │

│ │ │ │ Public Member Functions

 SimplexP1BubbleLocalCoefficients () noexcept
 Default constructor, initialized the local keys.
 
const LocalKeylocalKey (std::size_t i) const noexcept
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< HierarchicalSimplexP2LocalBasis< D, R, dim >, typename LagrangeSimplexLocalFiniteElement< D, R, dim, 2 >::Traits::LocalCoefficientsType, HierarchicalSimplexP2LocalInterpolation< HierarchicalSimplexP2LocalBasis< D, R, dim > > > Traits
 
│ │ │ │

│ │ │ │ @@ -297,15 +297,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01770.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::HierarchicalSimplexP2LocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 HierarchicalSimplexP2LocalBasis ()
 
│ │ │ │

Constructor & Destructor Documentation

│ │ │ │ @@ -112,15 +112,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01774.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::HierarchicalSimplexP2LocalBasis< D, R, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Hierarchical P2 basis in 1d. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 1, Dune::FieldVector< D, 1 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 1 > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -327,15 +327,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01778.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::HierarchicalSimplexP2LocalBasis< D, R, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Hierarchical P2 basis in 2d. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 2 > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -331,15 +331,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01782.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::HierarchicalSimplexP2LocalBasis< D, R, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Hierarchical P2 basis in 3d. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localbasis.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -335,15 +335,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01786.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::HierarchicalSimplexP2LocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2/hierarchicalsimplexp2localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::HierarchicalSimplexP2LocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -144,15 +144,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01790.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::HierarchicalP2WithElementBubbleLocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Linear Lagrange functions enriched with quadratic edge bubble functions and an element bubble function. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -352,15 +352,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns the type of the geometry the finite-element is attached to.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01794.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

P1 basis in dim-d enriched by quadratic edge bubble functions and an element bubble function of order dim+1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │

│ │ │ │ Public Types

using LocalBasisType = HierarchicalSimplexP2WithElementBubbleLocalBasis< D, R, dim >
 Type of the local basis.
 
using LocalCoefficientsType = HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim >
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalBasisTraits< D, dim, DomainType, R, 1, RangeType, JacobianType >
 Type traits for function signature.
 
│ │ │ │ @@ -323,15 +323,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns number of shape functions.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01798.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::HierarchicalSimplexP2WithElementBubbleLocalCoefficients< dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

The local keys of the hierarchical basis functions with element bubble. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -196,15 +196,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Returns number of coefficients.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01802.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LB, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalp2withelementbubble/hierarchicalsimplexp2withelementbubble.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::HierarchicalSimplexP2WithElementBubbleLocalInterpolation< LB, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -146,15 +146,15 @@ │ │ │ │

│ │ │ │ Public Member Functions

 HierarchicalSimplexP2WithElementBubbleLocalCoefficients () noexcept
 Default constructor, initializes the local keys.
 
const LocalKeylocalKey (std::size_t i) const noexcept
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01806.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::HierarchicalPrismP2LocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalprismp2.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalprismp2.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< HierarchicalPrismP2LocalBasis< D, R >, Impl::LagrangePrismLocalCoefficients< 2 >, HierarchicalPrismP2LocalInterpolation< HierarchicalPrismP2LocalBasis< D, R > > > Traits
 
│ │ │ │

│ │ │ │ @@ -297,15 +297,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01810.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::HierarchicalPrismP2LocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalprismp2/hierarchicalprismp2localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalprismp2/hierarchicalprismp2localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, 3 > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -308,15 +308,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01814.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::HierarchicalPrismP2LocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/hierarchical/hierarchicalprismp2/hierarchicalprismp2localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/hierarchical/hierarchicalprismp2/hierarchicalprismp2localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::HierarchicalPrismP2LocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -144,15 +144,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01818.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LagrangeLocalFiniteElement< LP, dimDomain, D, R, SF, CF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Lagrange local finite elements for a given set of interpolation points. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LagrangeLocalFiniteElement< LP, dimDomain, D, R, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -493,15 +493,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01822.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DynamicLagrangeLocalFiniteElementCache< Domain, Range, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A cache that stores Lagrange finite elements for the given dimension and order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using FiniteElementType = LagrangeLocalFiniteElement< EquidistantPointSet, dim, Domain, Range >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -190,15 +190,15 @@ │ │ │ │ │ │ │ │

Obtain the cached local finite-element.

│ │ │ │

This function might first construct the local finite-element to the polynomial order specified in the constructor of the cache, if it is not yet cached.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01826.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::StaticLagrangeLocalFiniteElementCache< id, Domain, Range, dim, order > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A cache that stores all available Pk/Qk like local finite elements for the given dimension and order for the case that the GeometryType is fixed and has the given Id. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using FiniteElementType = std::conditional_t< isSimplex, LagrangeSimplexLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isCube, LagrangeCubeLocalFiniteElement< Domain, Range, dim, order >, std::conditional_t< isPrism, LagrangePrismLocalFiniteElement< Domain, Range, order >, std::conditional_t< isPyramid, LagrangePyramidLocalFiniteElement< Domain, Range, order >, UnknownToplogy > > > >
 
│ │ │ │

│ │ │ │ @@ -191,15 +191,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Obtain the cached local finite-element.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01834.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::StaticLagrangeLocalFiniteElementCache< GeometryType::Id(~0u), Domain, Range, dim, order > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/cache.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::StaticLagrangeLocalFiniteElementCache< GeometryType::Id(~0u), Domain, Range, dim, order >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -189,15 +189,15 @@ │ │ │ │

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01838.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LagrangePoint< F, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/emptypoints.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/emptypoints.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef F Field
 
typedef FieldVector< Field, dimensionVector
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01842.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::EmptyPointSet< F, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/emptypoints.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/emptypoints.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EmptyPointSet< F, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -450,15 +450,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01846.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::EquidistantPointSet< F, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/equidistantpoints.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/equidistantpoints.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EquidistantPointSet< F, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -612,15 +612,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01850.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LagrangeInterpolationFactory< LP, dim, F > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/interpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -256,15 +256,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LagrangeCoefficientsFactory< LP, dim, F > LagrangePointSetFactory
 
typedef LagrangePointSetFactory::Object LagrangePointSet
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01854.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LocalLagrangeInterpolation< LP, dim, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/interpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -270,15 +270,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LP< F, dim > LagrangePointSet
 
typedef LagrangePointSet::Field Field
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01858.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LagrangeBasisFactory< LP, dim, SF, CF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangebasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LagrangeBasisFactory< LP, dim, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -500,15 +500,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01862.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LagrangeCoefficientsFactory< LP, dim, F > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangecoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangecoefficients.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef std::size_t Key
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -222,15 +222,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01878.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LagrangeCubeLocalFiniteElement< D, R, dim, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Lagrange finite element for cubes with arbitrary compile-time dimension and polynomial order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangecube.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangecube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LagrangeCubeLocalFiniteElement< D, R, dim, k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -298,15 +298,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The reference element that the local finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01914.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LagrangePrismLocalFiniteElement< D, R, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Lagrange finite element for 3d prisms with arbitrary compile-time polynomial order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangeprism.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangeprism.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::LagrangePrismLocalBasis< D, R, k >, Impl::LagrangePrismLocalCoefficients< k >, Impl::LagrangePrismLocalInterpolation< Impl::LagrangePrismLocalBasis< D, R, k > > >
 Export number types, dimensions, etc.
 
│ │ │ │ @@ -287,15 +287,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The reference element that the local finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01930.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LagrangePyramidLocalFiniteElement< D, R, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Lagrange finite element for 3d pyramids with compile-time polynomial order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangepyramid.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangepyramid.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::LagrangePyramidLocalBasis< D, R, k >, Impl::LagrangePyramidLocalCoefficients< k >, Impl::LagrangePyramidLocalInterpolation< Impl::LagrangePyramidLocalBasis< D, R, k > > >
 Export number types, dimensions, etc.
 
│ │ │ │ @@ -301,15 +301,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The reference element that the local finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01946.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LagrangeSimplexLocalFiniteElement< D, R, d, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Lagrange finite element for simplices with arbitrary compile-time dimension and polynomial order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/lagrangesimplex.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/lagrangesimplex.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::LagrangeSimplexLocalBasis< D, R, d, k >, Impl::LagrangeSimplexLocalCoefficients< d, k >, Impl::LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, d, k > > >
 Export number types, dimensions, etc.
 
│ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The reference element that the local finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01950.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::P0LocalFiniteElement< D, R, d > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

The local p0 finite element on all types of reference elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/p0.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/p0.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< P0LocalBasis< D, R, d >, P0LocalCoefficients, P0LocalInterpolation< P0LocalBasis< D, R, d > > > Traits
 
│ │ │ │

│ │ │ │ @@ -305,15 +305,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │ -
  • p0.hh
  • │ │ │ │ +
  • p0.hh
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01954.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::P0LocalBasis< D, R, d > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/p0/p0localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/p0/p0localbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -326,15 +326,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01958.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/p0/p0localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/p0/p0localcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::P0LocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01962.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::P0LocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/p0/p0localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/p0/p0localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::P0LocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

determine coefficients interpolating a given function

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01966.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Pk1DFiniteElement< Geometry, RF, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Langrange finite element of arbitrary order on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk1DFiniteElement< Geometry, RF, k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -284,15 +284,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01970.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::Pk1DFiniteElement< Geometry, RF, k >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk1DFiniteElement< Geometry, RF, k >::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -147,15 +147,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01974.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Pk1DFiniteElementFactory< Geometry, RF, k > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for Pk1DFiniteElement objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk1d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk1DFiniteElementFactory< Geometry, RF, k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -402,15 +402,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01978.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Pk2DFiniteElement< Geometry, RF, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Langrange finite element of arbitrary order on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk2DFiniteElement< Geometry, RF, k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -284,15 +284,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01982.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::Pk2DFiniteElement< Geometry, RF, k >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk2DFiniteElement< Geometry, RF, k >::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -147,15 +147,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01986.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Pk2DFiniteElementFactory< Geometry, RF, k > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for Pk2DFiniteElement objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pk2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Pk2DFiniteElementFactory< Geometry, RF, k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -402,15 +402,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01990.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::PQ22DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pq22d.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pq22d.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = typename LFEVariant::Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -325,15 +325,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01994.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, d, k > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory that only creates dimension specific local finite elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef P0LocalFiniteElement< D, R, d >::Traits::LocalBasisType::Traits T
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -146,15 +146,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create finite element for given GeometryType

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a01998.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::DimSpecificPQkLocalFiniteElementFactory< D, R, 3, k > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory that only creates dimension specific local finite elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -218,15 +218,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create finite element for given GeometryType

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02002.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::PQkLocalFiniteElementFactory< D, R, dim, k > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory to create any kind of Pk/Qk like element wrapped for the virtual interface. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │

│ │ │ │ Public Types

typedef P0LocalFiniteElement< D, R, 3 >::Traits::LocalBasisType::Traits T
 
using PrismP1 = LagrangePrismLocalFiniteElement< D, R, 1 >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -217,15 +217,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create finite element for given GeometryType

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02006.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::PQkLocalFiniteElementCache< D, R, dim, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A cache that stores all available Pk/Qk like local finite elements for the given dimension and order. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/pqkfactory.hh>

│ │ │ │

│ │ │ │ Public Types

typedef P0LocalFiniteElement< D, R, dim >::Traits::LocalBasisType::Traits T
 
typedef LocalFiniteElementVirtualInterface< TFiniteElementType
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef FE FiniteElementType
 Type of the finite elements stored in this cache.
 
│ │ │ │ @@ -366,15 +366,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02010.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Q1FiniteElementFactory< Geometry, RF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for global-valued Q1 elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/q1.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/q1.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Q1FiniteElementFactory< Geometry, RF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -428,15 +428,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │ -
  • q1.hh
  • │ │ │ │ +
  • q1.hh
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02014.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Q2FiniteElementFactory< Geometry, RF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for global-valued Q23D elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/lagrange/q2.hh>

│ │ │ │ +

#include <dune/localfunctions/lagrange/q2.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Q2FiniteElementFactory< Geometry, RF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -428,15 +428,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file:
    │ │ │ │ -
  • q2.hh
  • │ │ │ │ +
  • q2.hh
  • │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02018.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::PowerFiniteElement< Backend, dimR > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Meta-finite element turning a scalar finite element into vector-valued one. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Traits
 types of component objects More...
 
│ │ │ │ @@ -303,15 +303,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Extract geometry type of this finite element.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02022.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::PowerFiniteElement< Backend, dimR >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

types of component objects │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -152,15 +152,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

type of the Interpolation

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02026.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::PowerFiniteElementFactory< BackendFiniteElement, dimR > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for meta-finite elements turning scalar finite elements into vector-valued ones. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PowerFiniteElementFactory< BackendFiniteElement, dimR >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -200,15 +200,15 @@ │ │ │ │ │ │ │ │

create a finite element

│ │ │ │
Note
With this overload of make() ownership of the backend finite element is determined by the shared_ptr.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02030.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::PowerBasis< Backend, dimR > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Meta-basis turning a scalar basis into vector-valued basis. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power/basis.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power/basis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PowerBasis< Backend, dimR >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -352,15 +352,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Number of shape functions.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02034.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::PowerBasis< Backend, dimR >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

types of domain and range │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power/basis.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power/basis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PowerBasis< Backend, dimR >::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -176,15 +176,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Dimension of the range values.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02038.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::PowerCoefficients Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Meta-coefficients turning a scalar coefficients into vector-valued coefficients. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power/coefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power/coefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PowerCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -212,15 +212,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of coefficients

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02042.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::PowerInterpolation< Backend, BasisTraits > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Meta-interpolation turning a scalar interpolation into vector-valued interpolation. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/meta/power/interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/meta/power/interpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PowerInterpolation< Backend, BasisTraits >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │

│ │ │ │ Public Types

typedef PowerBasis< typename Backend::Traits::Basis, dimR > Basis
 type of the Basis
 
typedef PowerCoefficients Coefficients
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02050.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::MimeticLocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/mimetic.hh>

│ │ │ │ +

#include <dune/localfunctions/mimetic.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Dune::LocalFiniteElementTraits< MimeticLocalBasis< D, R, dim >, MimeticLocalCoefficients, MimeticLocalInterpolation< MimeticLocalBasis< D, R, dim > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -332,15 +332,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02054.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::MimeticLocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │ +

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Dune::LocalBasisTraits< D, dim, Dune::FieldVector< D, dim >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, dim > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -362,15 +362,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02058.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::MimeticLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │ +

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MimeticLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -139,15 +139,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Local interpolation of a function.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02062.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::MimeticLocalCoefficients Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

! │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │ +

#include <dune/localfunctions/mimetic/mimeticall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MimeticLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -252,15 +252,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02066.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::MonomialLocalFiniteElement< D, R, d, p > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Monomial basis for discontinuous Galerkin methods. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< MonomialLocalBasis< D, R, d, p >, MonomialLocalCoefficients< static_size >, MonomialLocalInterpolation< MonomialLocalBasis< D, R, d, p >, static_size > > Traits
 
│ │ │ │

│ │ │ │ @@ -309,15 +309,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02070.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::MonomialFiniteElementFactory< Geometry, RF, p > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for global-valued MonomFiniteElement objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialFiniteElementFactory< Geometry, RF, p >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -515,15 +515,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02074.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::MonomImp::EvalAccess< Traits > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Access output vector of evaluateFunction() and evaluate() │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -179,15 +179,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 EvalAccess (std::vector< typename Traits::RangeType > &out_)
 
 ~EvalAccess ()
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02078.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::MonomImp::JacobianAccess< Traits > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Access output vector of evaluateJacobian() │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -189,15 +189,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 JacobianAccess (std::vector< typename Traits::JacobianType > &out_, unsigned int row_)
 
 ~JacobianAccess ()
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02082.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomImp::Evaluate< Traits, c > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

template<typename Access >
static void eval (const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
 
│ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The next dimension to try for factors.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02086.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::MonomImp::Evaluate< Traits, 1 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

│ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

template<typename Access >
static void eval (const typename Traits::DomainType &in, const std::array< unsigned int, Traits::dimDomain > &derivatives, typename Traits::RangeFieldType prod, int bound, int &index, Access &access)
 
│ │ │ │ @@ -208,15 +208,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02090.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::MonomialLocalBasis< D, R, d, p > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, d, Dune::FieldVector< D, d >, R, 1, Dune::FieldVector< R, 1 >, Dune::FieldMatrix< R, 1, d > > Traits
 export type traits for function signature
 
│ │ │ │ @@ -336,15 +336,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Number of shape functions.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02094.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialLocalCoefficients< static_size > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialLocalCoefficients< static_size >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -233,15 +233,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02098.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::MonomialLocalInterpolation< LB, size > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/monomial/monomiallocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/monomial/monomiallocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialLocalInterpolation< LB, size >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -181,15 +181,15 @@ │ │ │ │ │ │ │ │

Determine coefficients interpolating a given function.

│ │ │ │

The method computes the coefficients for the L^2 projection with respect to the given GeometryType. Be careful: the implementation is unstable for higher polynomial degrees.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02114.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::Nedelec1stKindCubeLocalFiniteElement< D, R, dim, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Nédélec elements of the first kind for cube elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelec1stkindcube.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelec1stkindcube.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::Nedelec1stKindCubeLocalBasis< D, R, dim, k >, Impl::Nedelec1stKindCubeLocalCoefficients< dim, k >, Impl::Nedelec1stKindCubeLocalInterpolation< Impl::Nedelec1stKindCubeLocalBasis< D, R, dim, k > > >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -346,15 +346,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02130.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::Nedelec1stKindSimplexLocalFiniteElement< D, R, dim, k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Nédélec elements of the first kind for simplex elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelec1stkindsimplex.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelec1stkindsimplex.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using Traits = LocalFiniteElementTraits< Impl::Nedelec1stKindSimplexLocalBasis< D, R, dim, k >, Impl::Nedelec1stKindSimplexLocalCoefficients< dim, k >, Impl::Nedelec1stKindSimplexLocalInterpolation< Impl::Nedelec1stKindSimplexLocalBasis< D, R, dim, k > > >
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -346,15 +346,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02134.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::NedelecBasisFactory< dim, SF, CF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::NedelecBasisFactory< dim, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -511,15 +511,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02138.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::NedelecL2InterpolationFactory< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -256,15 +256,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef NedelecL2InterpolationBuilder< dim, Field > Builder
 
typedef const NedelecL2Interpolation< dim, Field > Object
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02142.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::LocalCoefficientsContainer Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -256,16 +256,16 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

template<class Setter >
 LocalCoefficientsContainer (const Setter &setter)
 
const LocalKeylocalKey (const unsigned int i) const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following files: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02146.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::NedelecCoefficientsFactory< dim > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -220,15 +220,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef std::size_t Key
 
typedef const LocalCoefficientsContainer Object
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02150.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::NedelecL2InterpolationBuilder< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::NedelecL2InterpolationBuilder< dim, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -768,15 +768,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02170.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::NedelecL2Interpolation< dimension, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

An L2-based interpolation for Nedelec. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::NedelecL2Interpolation< dimension, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -491,15 +491,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02174.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::NedelecVecMatrix< geometryId, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -400,15 +400,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MultiIndex< dim, Field > MI
 
typedef MonomialBasis< geometryId, MIMIBasis
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02178.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::NedelecPreBasisFactory< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  EvaluationBasisFactory
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -265,15 +265,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02182.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::NedelecPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/nedelec/nedelecsimplex/nedelecsimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisProvider< dd, FF > Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02186.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::OrthonormalLocalFiniteElement< dimDomain, D, R, SF, CF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A class providing orthonormal basis functions. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/orthonormal.hh>

│ │ │ │ +

#include <dune/localfunctions/orthonormal.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::OrthonormalLocalFiniteElement< dimDomain, D, R, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -488,15 +488,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02190.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::OrthonormalBasisFactory< dim, SF, CF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  EvaluationBasisFactory
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -376,15 +376,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02194.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::OrthonormalBasisFactory< dim, SF, CF >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/orthonormal/orthonormalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisProvider< dd, FF > Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02198.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
ONBCompute::Integral< geometryId > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>

│ │ │ │ +

#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -299,15 +299,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

template<int dim, class scalar_t >
static int compute (const Dune::MultiIndex< dim, scalar_t > &alpha, scalar_t &p, scalar_t &q)
 
template<int dim, class scalar_t , int ... ints>
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02202.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
ONBCompute::ONBMatrix< geometryId, scalar_t > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>

│ │ │ │ +

#include <dune/localfunctions/orthonormal/orthonormalcompute.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for ONBCompute::ONBMatrix< geometryId, scalar_t >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -208,15 +208,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02206.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RannacherTurekLocalFiniteElement< D, R, d > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Rannacher-Turek shape functions. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannacherturek.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannacherturek.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RannacherTurekLocalBasis< D, R, d >, RannacherTurekLocalCoefficients< d >, RannacherTurekLocalInterpolation< D, R, d > > Traits
 export traits class
 
│ │ │ │ @@ -283,15 +283,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

return geometry type

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02210.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RannacherTurek2DLocalBasis< D, R > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannacherturek2d/rannacherturek2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannacherturek2d/rannacherturek2dlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RannacherTurek2DLocalBasis< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -315,15 +315,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02214.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RannacherTurek3DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannacherturek3d/rannacherturek3dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannacherturek3d/rannacherturek3dlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RannacherTurek3DLocalBasis< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -315,15 +315,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02218.html │ │ │ │ @@ -87,15 +87,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
Dtype to represent the field in the domain.
Rtype to represent the field in the range.
ddomain dimension
│ │ │ │ │ │ │ │ │ │ │ │

The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02222.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RannacherTurekLocalBasis< D, R, 2 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannachertureklocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannachertureklocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RannacherTurekLocalBasis< D, R, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -323,15 +323,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02226.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RannacherTurekLocalBasis< D, R, 3 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannachertureklocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannachertureklocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RannacherTurekLocalBasis< D, R, 3 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -323,15 +323,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02230.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RannacherTurekLocalCoefficients< d > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

layout for Rannacher-Turek elements │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannachertureklocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannachertureklocalcoefficients.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -250,15 +250,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of coefficients

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02234.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RannacherTurekLocalInterpolation< D, R, d > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

please doc me │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/rannacherturek/rannachertureklocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/rannacherturek/rannachertureklocalinterpolation.hh>

│ │ │ │

│ │ │ │ Public Member Functions

 RannacherTurekLocalCoefficients ()
 
 RannacherTurekLocalCoefficients (const RannacherTurekLocalCoefficients &other)
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

template<class F , class C >
void interpolate (const F &f, std::vector< C > &out) const
 
│ │ │ │ @@ -140,15 +140,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02238.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT02DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Zero order Raviart-Thomas shape functions on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas02d.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RT02DLocalBasis< D, R >, RT02DLocalCoefficients, RT02DLocalInterpolation< RT02DLocalBasis< D, R > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -340,15 +340,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02242.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -345,15 +345,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02246.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT02DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02250.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RT02DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas02d/raviartthomas02dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT02DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02254.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT03DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Zero order Raviart-Thomas shape functions on tetrahedra. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas03d.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RT03DLocalBasis< D, R >, RT03DLocalCoefficients, RT03DLocalInterpolation< RT03DLocalBasis< D, R > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -340,15 +340,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02258.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -345,15 +345,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02262.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT03DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02266.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RT03DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas03d/raviartthomas03dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT03DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -139,15 +139,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02270.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT0Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Zero order Raviart-Thomas shape functions on rectangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -341,15 +341,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02274.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RT0Cube2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -347,15 +347,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02278.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RT0Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -177,15 +177,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02282.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube2d/raviartthomas0cube2dall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02286.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT0Cube3DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Zero order Raviart-Thomas shape functions on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube3DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -341,15 +341,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02290.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RT0Cube3DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -347,15 +347,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02294.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RT0Cube3DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube3DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -175,15 +175,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02298.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0cube3d/raviartthomas0cube3dall.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0Cube3DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -226,15 +226,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02302.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT0PrismLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on prisms. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0prism.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0prism.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RT0PrismLocalBasis< D, R >, RT0PrismLocalCoefficients, RT0PrismLocalInterpolation< RT0PrismLocalBasis< D, R > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -343,15 +343,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02306.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT0PrismLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02310.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-1 elements on prisms. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0PrismLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02314.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT0PrismLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference prism. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0prism/raviartthomas0prismlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0PrismLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02318.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT0PyramidLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on pyramids. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RT0PyramidLocalBasis< D, R >, RT0PyramidLocalCoefficients, RT0PyramidLocalInterpolation< RT0PyramidLocalBasis< D, R > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -343,15 +343,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02322.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT0PyramidLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference pyramid. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02326.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-1 elements on pyramids. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0PyramidLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02330.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT0PyramidLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas0pyramid/raviartthomas0pyramidlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT0PyramidLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02334.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT12DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on triangles. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas12d.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RT12DLocalBasis< D, R >, RT12DLocalCoefficients, RT12DLocalInterpolation< RT12DLocalBasis< D, R > > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -343,15 +343,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02338.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02342.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-1 elements on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas12d/raviartthomas12dlocalcoefficients.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -180,15 +180,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of coefficients

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02350.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT1Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 RT12DLocalCoefficients ()
 Standard constructor.
 
std::size_t size () const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02354.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT1Cube2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02358.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02362.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT1Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube2d/raviartthomas1cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02366.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT1Cube3DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube3DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02370.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT1Cube3DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 3, Dune::FieldVector< D, 3 >, R, 3, Dune::FieldVector< R, 3 >, Dune::FieldMatrix< R, 3, 3 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02374.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-1 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube3DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02378.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT1Cube3DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

First order Raviart-Thomas shape functions on the reference hexahedron. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas1cube3d/raviartthomas1cube3dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT1Cube3DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02382.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT2Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT2Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -353,15 +353,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02386.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT2Cube2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02390.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-2 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT2Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02394.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT2Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas2cube2d/raviartthomas2cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT2Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02398.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT3Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT3Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02402.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT3Cube2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02406.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-3 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT3Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02410.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT3Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas3cube2d/raviartthomas3cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT3Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02414.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RT4Cube2DLocalFiniteElement< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on cubes. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT4Cube2DLocalFiniteElement< D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -354,15 +354,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02418.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RT4Cube2DLocalBasis< D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference quadrilateral. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalBasisTraits< D, 2, Dune::FieldVector< D, 2 >, R, 2, Dune::FieldVector< R, 2 >, Dune::FieldMatrix< R, 2, 2 > > Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02422.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for Raviart-Thomas-4 elements on quadrilaterals. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT4Cube2DLocalCoefficients:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -227,15 +227,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02426.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RT4Cube2DLocalInterpolation< LB > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Second order Raviart-Thomas shape functions on the reference triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomas4cube2d/raviartthomas4cube2dlocalinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RT4Cube2DLocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02430.html │ │ │ │ @@ -89,15 +89,15 @@ │ │ │ │ Rtype to represent the field in the range. │ │ │ │ dimdimension of the reference elements, must be 2 or 3. │ │ │ │ orderorder of the element, depending on dim it can be 0, 1, or 2. │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02434.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 0 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 2 and order 0. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 0 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02438.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 2 and order 1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02442.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 2 and order 2. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02446.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 2 and order 3. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 3 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02450.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 4 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 2 and order 4. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 2, 4 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02454.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 0 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 3 and order 0. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 0 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02458.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements for cubes with dimension 3 and order 1. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomascube.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasCubeLocalFiniteElement< D, R, 3, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -342,15 +342,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02486.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasSimplexLocalFiniteElement< dimDomain, D, R, SF, CF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Raviart-Thomas local finite elements of arbitrary order for simplices of arbitrary dimension. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasSimplexLocalFiniteElement< dimDomain, D, R, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -488,15 +488,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02490.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::RaviartThomasBasisFactory< dim, SF, CF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasBasisFactory< dim, SF, CF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -500,15 +500,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02494.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RaviartThomasL2InterpolationFactory< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -256,15 +256,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef RTL2InterpolationBuilder< dim, Field > Builder
 
typedef const RaviartThomasL2Interpolation< dim, Field > Object
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02498.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RaviartThomasCoefficientsFactory< dim > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -220,15 +220,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef std::size_t Key
 
typedef const LocalCoefficientsContainer Object
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02502.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::RTL2InterpolationBuilder< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RTL2InterpolationBuilder< dim, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -548,15 +548,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02510.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RaviartThomasL2Interpolation< dimension, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

An L2-based interpolation for Raviart Thomas. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RaviartThomasL2Interpolation< dimension, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -414,15 +414,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02514.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::RTVecMatrix< geometryId, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -400,15 +400,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MultiIndex< dim, Field > MI
 
typedef MonomialBasis< geometryId, MIMIBasis
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02518.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::RTPreBasisFactory< dim, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  EvaluationBasisFactory
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -265,15 +265,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02522.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::RTPreBasisFactory< dim, Field >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ +

#include <dune/localfunctions/raviartthomas/raviartthomassimplex/raviartthomassimplexprebasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisProvider< dd, FF > Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02526.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Protected Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RefinedSimplexLocalBasis< D, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedSimplexLocalBasis< D, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -133,15 +133,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02530.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RefinedSimplexLocalBasis< D, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Base class for LocalBasis classes based on uniform refinement in 1D; provides numbering and local coordinates of subelements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedSimplexLocalBasis< D, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -241,15 +241,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02534.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RefinedSimplexLocalBasis< D, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Base class for LocalBasis classes based on uniform refinement in 2D; provides numbering and local coordinates of subelements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedSimplexLocalBasis< D, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -246,15 +246,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02538.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RefinedSimplexLocalBasis< D, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Base class for LocalBasis classes based on uniform refinement in 3D; provides numbering and local coordinates of subelements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/common/refinedsimplexlocalbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedSimplexLocalBasis< D, 3 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -245,15 +245,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02542.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::RefinedP0LocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Local finite element that is piecewise P0 on a once uniformly refined reference geometry. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef P0LocalFiniteElement< D, R, dim >::Traits Traits
 
│ │ │ │

Detailed Description

│ │ │ │ @@ -107,15 +107,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02546.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RefinedP0LocalFiniteElement< D, R, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Local finite element that is piecewise P0 on a once uniformly refined reference geometry. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 1 >, RefinedP0LocalCoefficients< 1 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > > > Traits
 
│ │ │ │

│ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02550.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RefinedP0LocalFiniteElement< D, R, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Local finite element that is piecewise P0 on a once uniformly refined reference geometry. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 2 >, RefinedP0LocalCoefficients< 2 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > > > Traits
 
│ │ │ │

│ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02554.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RefinedP0LocalFiniteElement< D, R, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Local finite element that is piecewise P0 on a once uniformly refined reference geometry. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RefinedP0LocalBasis< D, R, 3 >, RefinedP0LocalCoefficients< 3 >, RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > > > Traits
 
│ │ │ │

│ │ │ │ @@ -300,15 +300,15 @@ │ │ │ │

│ │ │ │
│ │ │ │
Todo:
Please doc me !
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02558.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RefinedP0LocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Uniformly refined constant shape functions on a unit simplex in R^dim. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP0LocalBasis< D, R, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -339,15 +339,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02562.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::RefinedP0LocalCoefficients< k > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Layout map for RefinedP0 elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localcoefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP0LocalCoefficients< k >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -237,15 +237,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02566.html │ │ │ │ @@ -73,15 +73,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
Dune::RefinedP0LocalInterpolation< LB > Class Template Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP0LocalInterpolation< LB >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -89,15 +89,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02570.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 1 > > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -156,15 +156,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 RefinedP0LocalInterpolation ()
 
template<typename F , typename C >
void interpolate (const F &f, std::vector< C > &out) const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02574.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 2 > > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -156,15 +156,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 RefinedP0LocalInterpolation ()
 
template<typename F , typename C >
void interpolate (const F &f, std::vector< C > &out) const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02578.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RefinedP0LocalInterpolation< RefinedP0LocalBasis< D, R, 3 > > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp0/refinedp0localinterpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -156,15 +156,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 RefinedP0LocalInterpolation ()
 
template<typename F , typename C >
void interpolate (const F &f, std::vector< C > &out) const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02582.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::RefinedP1LocalFiniteElement< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Piecewise linear continuous Lagrange functions on a uniformly refined simplex element. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp1.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp1.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef LocalFiniteElementTraits< RefinedP1LocalBasis< D, R, dim >, Impl::LagrangeSimplexLocalCoefficients< dim, 2 >, Impl::LagrangeSimplexLocalInterpolation< Impl::LagrangeSimplexLocalBasis< D, R, dim, 2 > > > Traits
 Export all types used by this implementation.
 
│ │ │ │ @@ -320,15 +320,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

The element type that this finite element is defined on.

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02586.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::RefinedP1LocalBasis< D, R, dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP1LocalBasis< D, R, dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -122,15 +122,15 @@ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02590.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::RefinedP1LocalBasis< D, R, 1 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Uniformly refined linear Lagrange shape functions in 1D. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP1LocalBasis< D, R, 1 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -442,15 +442,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02594.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::RefinedP1LocalBasis< D, R, 2 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Uniformly refined linear Lagrange shape functions on the triangle. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP1LocalBasis< D, R, 2 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -446,15 +446,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02598.html │ │ │ │ @@ -82,15 +82,15 @@ │ │ │ │
Dune::RefinedP1LocalBasis< D, R, 3 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Uniformly refined linear Lagrange shape functions on the 3D-simplex (tetrahedron). │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/refined/refinedp1/refinedp1localbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::RefinedP1LocalBasis< D, R, 3 >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -445,15 +445,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02602.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialEvaluator< B > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialEvaluator< B >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -485,15 +485,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02606.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialEvaluator< B >::BaseIterator< Deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -494,15 +494,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Deriv Derivatives
 
typedef Deriv::Field Field
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02610.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::MonomialEvaluator< B >::Iterator< deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -123,15 +123,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef BaseIterator< Derivatives< Field, dimension, dimRange, deriv, DerivativeLayoutNS::derivative > > All
 
typedef BaseIterator< Derivatives< Field, dimension, 1, 0, DerivativeLayoutNS::value > > Integrate
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02614.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::StandardEvaluator< B > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::StandardEvaluator< B >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -505,15 +505,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02618.html │ │ │ │ @@ -73,27 +73,27 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
Dune::StandardEvaluator< B >::Iterator< deriv > Struct Template Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basisevaluator.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::StandardEvaluator< B >::Iterator< deriv >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02622.html │ │ │ │ @@ -73,15 +73,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
Dune::BasisMatrix< PreBasis, Interpolation, Field > Struct Template Reference
│ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02626.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::BasisMatrixBase< PreBasis, Interpolation, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisMatrixBase< PreBasis, Interpolation, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -231,15 +231,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02630.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisMatrix< const MonomialBasis< geometryId, F >, Interpolation, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -295,15 +295,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02634.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisMatrix< const Dune::VirtualMonomialBasis< dim, F >, Interpolation, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -295,15 +295,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02638.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::BasisMatrix< const PolynomialBasis< Eval, CM, D, R >, Interpolation, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisMatrix< const PolynomialBasis< Eval, CM, D, R >, Interpolation, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -297,15 +297,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02642.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::BasisMatrix< const PolynomialBasisWithMatrix< Eval, CM >, Interpolation, Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/basismatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::BasisMatrix< const PolynomialBasisWithMatrix< Eval, CM >, Interpolation, Field >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -299,15 +299,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02646.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::Mult< Field, Field2 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Field2 BasisEntry
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -152,15 +152,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02650.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::Mult< Field, FieldVector< Field2, dimRange > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef FieldVector< Field2, dimRange > BasisEntry
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -152,15 +152,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02654.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::SparseCoeffMatrix< F, bSize > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/coeffmatrix.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::SparseCoeffMatrix< F, bSize >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -509,15 +509,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02658.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::Identity Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

template<class T >
static T apply (const T &t)
 
│ │ │ │ @@ -114,15 +114,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02662.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -453,15 +453,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02666.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::DefaultBasisFactory< PreBFactory, InterpolFactory, dim, dimR, SF, CF, PreBasisKeyExtractor >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/defaultbasisfactory.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef PreBasisFactory::template EvaluationBasisFactory< dd, FF >::Type Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02670.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::DGLocalCoefficients Class Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A class providing local coefficients for dg spaces. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/dglocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/dglocalcoefficients.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -175,15 +175,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 DGLocalCoefficients (const unsigned int n)
 construct local keys for n basis functions
 
const LocalKeylocalKey (const unsigned int i) const
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02674.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::DGLocalCoefficientsFactory< BasisFactory > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A factory class for the dg local coefficients. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/dglocalcoefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/dglocalcoefficients.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -224,15 +224,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef BasisFactory::Key Key
 
typedef const DGLocalCoefficients Object
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02678.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::Unity< Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A class representing the unit of a given Field. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 operator Field () const
 
│ │ │ │

Detailed Description

│ │ │ │ @@ -119,15 +119,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02682.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::Zero< Field > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A class representing the zero of a given Field. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 operator Field () const
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -152,15 +152,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02686.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldCast< F2, V > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef F2 type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -101,15 +101,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02690.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldCast< F2, Dune::FieldVector< F1, dim > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Dune::FieldVector< F2, dim > type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -101,15 +101,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02694.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldCast< F2, Dune::FieldMatrix< F1, dim1, dim2 > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Dune::FieldMatrix< F2, dim1, dim2 > type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -101,15 +101,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02698.html │ │ │ │ @@ -73,15 +73,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
Dune::Precision< Field > Struct Template Reference
│ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02702.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Attributes | │ │ │ │ List of all members
│ │ │ │
Dune::Precision< double > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

static const unsigned int value = 64
 
│ │ │ │

Member Data Documentation

│ │ │ │ @@ -107,15 +107,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02706.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Attributes | │ │ │ │ List of all members
│ │ │ │
Dune::Precision< long double > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

static const unsigned int value = 80
 
│ │ │ │

Member Data Documentation

│ │ │ │ @@ -107,15 +107,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02710.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Attributes | │ │ │ │ List of all members
│ │ │ │
Dune::Precision< float > Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

static const unsigned int value = 32
 
│ │ │ │

Member Data Documentation

│ │ │ │ @@ -107,15 +107,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02714.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::ComputeField< Field, sum > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/field.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Field Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -101,15 +101,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02718.html │ │ │ │ @@ -75,15 +75,15 @@ │ │ │ │
│ │ │ │
│ │ │ │ Classes
│ │ │ │
Dune::InterpolationHelper< F, dimension > Struct Template Reference
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::InterpolationHelper< F, dimension >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -99,15 +99,15 @@ │ │ │ │   │ │ │ │ struct  Helper< Basis, Matrix, false > │ │ │ │   │ │ │ │ struct  Helper< Func, Vector, true > │ │ │ │   │ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02722.html │ │ │ │ @@ -73,15 +73,15 @@ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
Dune::InterpolationHelper< F, dimension >::Helper< Func, Container, type > Struct Template Reference
│ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02726.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::InterpolationHelper< F, dimension >::Helper< Func, Vector, true > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef std::vector< Dune::FieldVector< F, d > > Result
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -434,15 +434,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02730.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::InterpolationHelper< F, dimension >::Helper< Basis, Matrix, false > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/interpolationhelper.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef std::vector< Dune::FieldVector< F, d > > Result
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -476,15 +476,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02734.html │ │ │ │ @@ -83,15 +83,15 @@ │ │ │ │
template<class B, class Q, bool onb>
│ │ │ │ struct Dune::LocalL2Interpolation< B, Q, onb >

A local L2 interpolation taking a test basis and a quadrature rule.

│ │ │ │

This class computes a local interpolation where the coefficients are of the form: c = M^{-1}b

    │ │ │ │
  • M is the mass matrix with respect to the given basis and
  • │ │ │ │
  • b = int f phi (where phi are the basis functions). Thus the resulting local function u=c.varphi is defined through the l2 interpolation int u phi = in f phi for all phi in the base function set. The third template argument can be used to specify that the mass matrix is the unit matrix (onb=true).
  • │ │ │ │
│ │ │ │

The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02738.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LocalL2InterpolationBase< B, Q > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalL2InterpolationBase< B, Q >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -372,15 +372,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02742.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LocalL2Interpolation< B, Q, true > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalL2Interpolation< B, Q, true >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -343,15 +343,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02746.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LocalL2Interpolation< B, Q, false > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::LocalL2Interpolation< B, Q, false >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -340,15 +340,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02750.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::LocalL2InterpolationFactory< BasisFactory, onb > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

A factory class for the local l2 interpolations taking a basis factory. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/l2interpolation.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -314,15 +314,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef BasisFactory::Key Key
 
typedef BasisFactory::Object Basis
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02754.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LFEMatrix< F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/lfematrix.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/lfematrix.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef F Field
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -474,15 +474,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02774.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasisSize< geometryId > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -339,15 +339,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 MonomialBasisSize ()
 
 ~MonomialBasisSize ()
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02778.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasis< geometryId, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialBasis< geometryId, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -837,15 +837,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02782.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasisHelper< mydim, dim, F > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -182,15 +182,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisSize< GeometryTypes::simplex(mydim).toId() > MySize
 
typedef MonomialBasisSize< GeometryTypes::simplex(dim).toId() > Size
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02786.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasisImpl< geometryId, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialBasisImpl< geometryId, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -201,15 +201,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02790.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::StandardMonomialBasis< dim, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::StandardMonomialBasis< dim, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -829,15 +829,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02794.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::StandardBiMonomialBasis< dim, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::StandardBiMonomialBasis< dim, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -829,15 +829,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02798.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::VirtualMonomialBasis< dim, F > Class Template Referenceabstract
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::VirtualMonomialBasis< dim, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -887,15 +887,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02802.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::VirtualMonomialBasisImpl< geometryId, F > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::VirtualMonomialBasisImpl< geometryId, F >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -706,15 +706,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02806.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasisFactory< dim, F > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  EvaluationBasisFactory
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -242,15 +242,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02810.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::MonomialBasisFactory< dim, F >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisFactory< dd, FF > Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02814.html │ │ │ │ @@ -78,15 +78,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MonomialBasisProvider< dim, SF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::MonomialBasisProvider< dim, SF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -148,15 +148,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02818.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::MonomialBasisProvider< dim, SF >::EvaluationBasisFactory< dd, FF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/monomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MonomialBasisProvider< dd, FF > Type
 
│ │ │ │

Member Typedef Documentation

│ │ │ │ @@ -103,15 +103,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02822.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Member Functions | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::MultiIndex< dim, Field > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1018,15 +1018,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Member Functions

 MultiIndex ()
 
template<class F >
 MultiIndex (const F &f)
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02826.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldTraits< MultiIndex< dim, Field > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -119,15 +119,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using field_type = Field
 
using real_type = typename FieldTraits< field_type >::real_type
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02830.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::Unity< MultiIndex< dim, F > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MultiIndex< dim, F > Field
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -195,15 +195,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02834.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::Zero< MultiIndex< dim, F > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/multiindex.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef MultiIndex< dim, F > Field
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -135,15 +135,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02838.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::PolynomialBasis< Eval, CM, D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PolynomialBasis< Eval, CM, D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1393,15 +1393,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02842.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DVector > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

static DomainVector apply (const DVector &x)
 
│ │ │ │

Member Function Documentation

│ │ │ │ @@ -115,15 +115,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02846.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::PolynomialBasis< Eval, CM, D, R >::Convert< dummy, DomainVector > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

static const DomainVectorapply (const DomainVector &x)
 
│ │ │ │

Member Function Documentation

│ │ │ │ @@ -115,15 +115,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02850.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::PolynomialBasisWithMatrix< Eval, CM, D, R > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/polynomialbasis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::PolynomialBasisWithMatrix< Eval, CM, D, R >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1385,15 +1385,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02854.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LFETensor< F, dimD, deriv > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -461,15 +461,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef F field_type
 
typedef Dune::FieldVector< F, sizeBlock
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02858.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldTraits< LFETensor< F, dimD, deriv > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -119,15 +119,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using field_type = F
 
using real_type = typename FieldTraits< field_type >::real_type
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02862.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Attributes | │ │ │ │ List of all members
│ │ │ │
Dune::LFETensor< F, 0, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

static const int size = 0
 
│ │ │ │

Member Data Documentation

│ │ │ │ @@ -109,15 +109,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02866.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Attributes | │ │ │ │ List of all members
│ │ │ │
Dune::LFETensor< F, 0, 0 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Attributes

static const int size = 1
 
│ │ │ │

Member Data Documentation

│ │ │ │ @@ -109,15 +109,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02870.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Public Attributes | │ │ │ │ Static Public Attributes | │ │ │ │ List of all members │ │ │ │
Dune::LFETensor< F, dimD, 0 > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -461,15 +461,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef F field_type
 
typedef Dune::FieldVector< F, sizeBlock
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02874.html │ │ │ │ @@ -85,15 +85,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02878.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::FieldTraits< Derivatives< F, dimD, dimR, deriv, layout > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -119,15 +119,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

using field_type = F
 
using real_type = typename FieldTraits< field_type >::real_type
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02882.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::value >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1230,15 +1230,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02886.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │ Protected Member Functions | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::value > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -1101,15 +1101,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F, dimD, dimR, 0, DerivativeLayoutNS::valueThis
 
typedef LFETensor< F, dimD, 0 > ThisLFETensor
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02890.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │ Static Public Attributes | │ │ │ │ Protected Attributes | │ │ │ │ List of all members │ │ │ │
Dune::Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivative > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -680,15 +680,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F, dimD, dimR, deriv, DerivativeLayoutNS::derivativeThis
 
typedef Derivatives< F, dimD, 1, deriv, DerivativeLayoutNS::valueScalarDeriv
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02894.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::LFETensorAxpy< Vec1, Vec2, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

template<class Field >
static void apply (unsigned int r, const Field &a, const Vec1 &x, Vec2 &y)
 
│ │ │ │ @@ -138,15 +138,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02898.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::value >, Vec2, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::valueVec1
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -161,15 +161,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02902.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LFETensorAxpy< Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivative >, Vec2, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, d, DerivativeLayoutNS::derivativeVec1
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -161,15 +161,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02906.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivative >, Vec2, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::derivativeVec1
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -161,15 +161,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02910.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::LFETensorAxpy< Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::value >, Vec2, deriv > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, d, DerivativeLayoutNS::valueVec1
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -161,15 +161,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02914.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Static Public Member Functions | │ │ │ │ List of all members
│ │ │ │
Dune::DerivativeAssign< Vec1, Vec2 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Static Public Member Functions

static void apply (unsigned int r, const Vec1 &vec1, Vec2 &vec2)
 
│ │ │ │

Member Function Documentation

│ │ │ │ @@ -129,15 +129,15 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02918.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, layout > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, deriv, layout > Vec1
 
typedef Derivatives< F2, dimD, dimR, deriv, layout > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02922.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::valueVec1
 
typedef Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivativeVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02926.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::valueVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02930.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::value > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, layout > Vec1
 
typedef Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::valueVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02934.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivative > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, layout > Vec1
 
typedef Derivatives< F2, dimD, dimR, deriv, DerivativeLayoutNS::derivativeVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02938.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::valueVec1
 
typedef Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::valueVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02942.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02946.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::value > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::valueVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02950.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivative > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::valueVec1
 
typedef Derivatives< F2, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02954.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, layout >, F2 > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, layout > Vec1
 
typedef F2 Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02958.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::valueVec1
 
typedef FieldVector< F2, dimR > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02962.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, dimR, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef FieldVector< F2, dimR > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02966.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, dimR > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::valueVec1
 
typedef FieldVector< F2, dimR > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02970.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, dimR > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef FieldVector< F2, dimR > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02974.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::value >, FieldVector< F2, 1 > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::valueVec1
 
typedef FieldVector< F2, 1 > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02978.html │ │ │ │ @@ -77,15 +77,15 @@ │ │ │ │ Public Types | │ │ │ │ Static Public Member Functions | │ │ │ │ List of all members │ │ │ │
Dune::DerivativeAssign< Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivative >, FieldVector< F2, 1 > > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ +

#include <dune/localfunctions/utility/tensor.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -170,15 +170,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Derivatives< F1, dimD, 1, deriv, DerivativeLayoutNS::derivativeVec1
 
typedef FieldVector< F2, 1 > Vec2
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02982.html │ │ │ │ @@ -81,15 +81,15 @@ │ │ │ │
Dune::EdgeS0_5FiniteElement< Geometry, RF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

FiniteElement for lowest order edge elements on simplices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Traits
 
│ │ │ │ │ │ │ │

│ │ │ │ @@ -296,15 +296,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

return geometry type of this element

│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02986.html │ │ │ │ @@ -76,15 +76,15 @@ │ │ │ │
│ │ │ │ Public Types | │ │ │ │ List of all members
│ │ │ │
Dune::EdgeS0_5FiniteElement< Geometry, RF >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5FiniteElement< Geometry, RF >::Traits:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -147,15 +147,15 @@ │ │ │ │

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02990.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::EdgeS0_5FiniteElementFactory< Geometry, RF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Factory for EdgeS0_5FiniteElement objects. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5FiniteElementFactory< Geometry, RF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -401,15 +401,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

create a finite element from a vertex ordering

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02994.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::EdgeS0_5Basis< Geometry, RF > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Basis for order 0.5 (lowest order) edge elements on simplices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5/basis.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5/basis.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5Basis< Geometry, RF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -368,15 +368,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of shape functions

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a02998.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::EdgeS0_5Basis< Geometry, RF >::Traits Struct Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

export type traits for function signature │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5/basis.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5/basis.hh>

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -280,15 +280,15 @@ │ │ │ │ │ │ │ │

│ │ │ │ Public Types

typedef Geometry::ctype DomainField
 
typedef FieldVector< DomainField, dimDomainLocalDomainLocal
 
│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03002.html │ │ │ │ @@ -79,15 +79,15 @@ │ │ │ │
Dune::EdgeS0_5Coefficients< dim > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Coefficients for lowest order edge elements on simplices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5/coefficients.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5/coefficients.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5Coefficients< dim >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -205,15 +205,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

number of coefficients

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03006.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::EdgeS0_5Common< dim, DF > Struct Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Common base class for edge elements. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5/common.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5/common.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5Common< dim, DF >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -181,15 +181,15 @@ │ │ │ │ │ │ │ │

The number of base functions.

│ │ │ │
Note
This is not a compile time constant, since the number of edges is extracted from the reference element.
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this struct was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a03010.html │ │ │ │ @@ -80,15 +80,15 @@ │ │ │ │
Dune::EdgeS0_5Interpolation< Geometry, Traits_ > Class Template Reference
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │

Interpolation for lowest order edge elements on simplices. │ │ │ │ More...

│ │ │ │ │ │ │ │ -

#include <dune/localfunctions/whitney/edges0.5/interpolation.hh>

│ │ │ │ +

#include <dune/localfunctions/whitney/edges0.5/interpolation.hh>

│ │ │ │
│ │ │ │ Inheritance diagram for Dune::EdgeS0_5Interpolation< Geometry, Traits_ >:
│ │ │ │
│ │ │ │
Inheritance graph
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -233,15 +233,15 @@ │ │ │ │
│ │ │ │ │ │ │ │

Interpolation of a function.

│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │
The documentation for this class was generated from the following file: │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,30 +72,44 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localcoefficients.hh File Reference
│ │ │ │ +
localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <algorithm>
│ │ │ │ +#include <array>
│ │ │ │ +#include <bitset>
│ │ │ │ +#include <numeric>
│ │ │ │ #include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │ #include <dune/common/math.hh>
│ │ │ │ #include <dune/common/rangeutilities.hh>
│ │ │ │ #include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDFMCubeLocalCoefficients< D, R, dim, order >
 Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. More...
class  Dune::BDFMCubeLocalBasis< D, R, dim, order >
 Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 1 >
 First order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 2 >
 Second order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 3 >
 Third order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,24 +3,42 @@ │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ * _c_u_b_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +localbasis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ -  Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ +  Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ + _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ +  First order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ + reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ +  Second order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ + reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _> │ │ │ │ │ +  Third order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ + reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04538_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,98 +74,385 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
brezzidouglasfortinmarini/cube/localcoefficients.hh
│ │ │ │ +
brezzidouglasfortinmarini/cube/localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ -Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ -
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
3#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ -
4#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ -
5
│ │ │ │ -
6#include <cstddef>
│ │ │ │ -
7#include <vector>
│ │ │ │ -
8
│ │ │ │ -
9#include <dune/common/math.hh>
│ │ │ │ -
10#include <dune/common/rangeutilities.hh>
│ │ │ │ -
11#include <dune/common/typetraits.hh>
│ │ │ │ -
12
│ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune
│ │ │ │ -
16{
│ │ │ │ -
17
│ │ │ │ -
31 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
33 {
│ │ │ │ -
34 static constexpr unsigned int interiorDofs = dim*binomial(dim+order-2, order-2);
│ │ │ │ -
35 static constexpr unsigned int faceDofs = binomial(dim+order-2, order-1);
│ │ │ │ -
36
│ │ │ │ -
37 static constexpr std::size_t numFaces = 2*dim;
│ │ │ │ -
38 static constexpr std::size_t numDofs = numFaces*faceDofs + interiorDofs;
│ │ │ │ -
39
│ │ │ │ -
40 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
43 {
│ │ │ │ -
44 for (auto j : range(numFaces))
│ │ │ │ -
45 for (auto i : range(faceDofs))
│ │ │ │ -
46 li[j*faceDofs + i] = LocalKey(j, 1, i);
│ │ │ │ -
47
│ │ │ │ -
48 for (auto i : range(interiorDofs))
│ │ │ │ -
49 li[numFaces*faceDofs + i] = LocalKey(0, 0, i);
│ │ │ │ -
50 }
│ │ │ │ +Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │ +
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │ +
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ +
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <algorithm>
│ │ │ │ +
9#include <array>
│ │ │ │ +
10#include <bitset>
│ │ │ │ +
11#include <numeric>
│ │ │ │ +
12#include <vector>
│ │ │ │ +
13
│ │ │ │ +
14#include <dune/common/fmatrix.hh>
│ │ │ │ +
15#include <dune/common/fvector.hh>
│ │ │ │ +
16#include <dune/common/math.hh>
│ │ │ │ +
17#include <dune/common/rangeutilities.hh>
│ │ │ │ +
18#include <dune/common/typetraits.hh>
│ │ │ │ +
19
│ │ │ │ + │ │ │ │ +
21
│ │ │ │ +
22namespace Dune
│ │ │ │ +
23{
│ │ │ │ +
35 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 {
│ │ │ │ +
38 static_assert( AlwaysFalse<D>::value,
│ │ │ │ +
39 "`BDFMCubeLocalBasis` not implemented for chosen `dim` and `order`." );
│ │ │ │ +
40 };
│ │ │ │
│ │ │ │ +
41
│ │ │ │ +
42
│ │ │ │ +
43#ifndef DOXYGEN
│ │ │ │ +
44 template<class D, class R, unsigned int dim>
│ │ │ │ +
45 class BDFMCubeLocalBasis<D, R, dim, 0>
│ │ │ │ +
46 {
│ │ │ │ +
47 static_assert( AlwaysFalse<D>::value,
│ │ │ │ +
48 "`BDFMCubeLocalBasis` not defined for order 0." );
│ │ │ │ +
49 };
│ │ │ │ +
50#endif // #ifndef DOXYGEN
│ │ │ │
51
│ │ │ │ -
53 std::size_t size () const { return numDofs; }
│ │ │ │ -
54
│ │ │ │ -
56 auto localKey (std::size_t i) const -> const LocalKey& { return li[i]; }
│ │ │ │ -
57
│ │ │ │ -
58 private:
│ │ │ │ -
59 std::vector<LocalKey> li;
│ │ │ │ -
60 };
│ │ │ │ -
│ │ │ │ -
61
│ │ │ │ -
62 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
63 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::interiorDofs;
│ │ │ │ +
52
│ │ │ │ +
58 template<class D, class R >
│ │ │ │ +
│ │ │ │ +
59 class BDFMCubeLocalBasis<D, R, 2, 1>
│ │ │ │ +
60 {
│ │ │ │ +
61 using DomainType = FieldVector<D, 2>;
│ │ │ │ +
62 using RangeType = FieldVector<R, 2>;
│ │ │ │ +
63 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │
64
│ │ │ │ -
65 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
66 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::faceDofs;
│ │ │ │ +
65 public:
│ │ │ │ + │ │ │ │
67
│ │ │ │ -
68 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
69 constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numFaces;
│ │ │ │ -
70
│ │ │ │ -
71 // template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
72 // constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numDofs;
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
70 {
│ │ │ │ +
71 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ +
72 }
│ │ │ │ +
│ │ │ │
73
│ │ │ │ -
74
│ │ │ │ -
75#ifndef DOXYGEN
│ │ │ │ -
76 template<class D, class R, unsigned int dim>
│ │ │ │ -
77 class BDFMCubeLocalCoefficients<D, R, dim, 0>
│ │ │ │ -
78 {
│ │ │ │ -
79 static_assert( AlwaysFalse<D>::value,
│ │ │ │ -
80 "`BDFMCubeLocalCoefficients` not defined for order 0." );
│ │ │ │ -
81 };
│ │ │ │ -
82#endif // #ifndef DOXYGEN
│ │ │ │ -
83
│ │ │ │ -
84} // namespace Dune
│ │ │ │ -
85
│ │ │ │ -
86#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
│ │ │ │ +
79 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ +
80 {
│ │ │ │ +
81 for (auto i : range(4))
│ │ │ │ +
82 s_[i] = s[i] ? -1 : 1;
│ │ │ │ +
83 }
│ │ │ │ +
│ │ │ │ +
84
│ │ │ │ +
86 unsigned int size () const { return 4; }
│ │ │ │ +
87
│ │ │ │ +
│ │ │ │ +
94 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ +
95 {
│ │ │ │ +
96 out.resize(4);
│ │ │ │ +
97
│ │ │ │ +
98 out[0] = {s_[0]*(in[0]-1), 0 };
│ │ │ │ +
99 out[1] = {s_[1]*(in[0]) , 0 };
│ │ │ │ +
100 out[2] = {0, s_[2]*(in[1]-1)};
│ │ │ │ +
101 out[3] = {0, s_[3]*(in[1]) };
│ │ │ │ +
102 }
│ │ │ │ +
│ │ │ │ +
103
│ │ │ │ +
│ │ │ │ +
110 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ +
111 {
│ │ │ │ +
112 out.resize(4);
│ │ │ │ +
113
│ │ │ │ +
114 out[0] = {{s_[0], 0}, {0, 0}};
│ │ │ │ +
115 out[1] = {{s_[1], 0}, {0, 0}};
│ │ │ │ +
116 out[2] = {{0, 0}, {0, s_[2]}};
│ │ │ │ +
117 out[3] = {{0, 0}, {0, s_[3]}};
│ │ │ │ +
118 }
│ │ │ │ +
│ │ │ │ +
119
│ │ │ │ +
│ │ │ │ +
127 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
128 const DomainType& in,
│ │ │ │ +
129 std::vector<RangeType>& out) const
│ │ │ │ +
130 {
│ │ │ │ +
131 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ +
132 evaluateFunction(in, out);
│ │ │ │ +
133 else
│ │ │ │ +
134 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
135 }
│ │ │ │ +
│ │ │ │ +
136
│ │ │ │ +
138 unsigned int order () const { return 1; }
│ │ │ │ +
139
│ │ │ │ +
140 private:
│ │ │ │ +
141 std::array<R, 4> s_;
│ │ │ │ +
142 };
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
144
│ │ │ │ +
150 template<class D, class R >
│ │ │ │ +
│ │ │ │ +
151 class BDFMCubeLocalBasis<D, R, 2, 2>
│ │ │ │ +
152 {
│ │ │ │ +
153 using DomainType = FieldVector<D, 2>;
│ │ │ │ +
154 using RangeType = FieldVector<R, 2>;
│ │ │ │ +
155 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │ +
156
│ │ │ │ +
157 public:
│ │ │ │ + │ │ │ │ +
159
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
162 {
│ │ │ │ +
163 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ +
164 }
│ │ │ │ +
│ │ │ │ +
165
│ │ │ │ +
│ │ │ │ +
171 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ +
172 {
│ │ │ │ +
173 for (auto i : range(4))
│ │ │ │ +
174 s_[i] = s[i] ? -1 : 1;
│ │ │ │ +
175 }
│ │ │ │ +
│ │ │ │ +
176
│ │ │ │ +
178 unsigned int size () const { return 10; }
│ │ │ │ +
179
│ │ │ │ +
│ │ │ │ +
186 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ +
187 {
│ │ │ │ +
188 out.resize(10);
│ │ │ │ +
189
│ │ │ │ +
190 const auto& x = in[0];
│ │ │ │ +
191 const auto& y = in[1];
│ │ │ │ +
192
│ │ │ │ +
193 auto pre = 1-x;
│ │ │ │ +
194 out[0] = {pre*s_[0]*(3*x-1), 0};
│ │ │ │ +
195 out[1] = { pre*3*(2*y-1), 0};
│ │ │ │ +
196
│ │ │ │ +
197 pre = x;
│ │ │ │ +
198 out[2] = {pre*s_[1]*(3*x-2), 0};
│ │ │ │ +
199 out[3] = {pre* 3*(2*y-1), 0};
│ │ │ │ +
200
│ │ │ │ +
201 pre = 1-y;
│ │ │ │ +
202 out[4] = {0, pre*s_[2]*(3*y-1)};
│ │ │ │ +
203 out[5] = {0, pre*3*(2*x-1)};
│ │ │ │ +
204
│ │ │ │ +
205 pre = y;
│ │ │ │ +
206 out[6] = {0, pre*s_[3]*(3*y-2)};
│ │ │ │ +
207 out[7] = {0, pre*3*(2*x-1)};
│ │ │ │ +
208
│ │ │ │ +
209 out[8] = {6*x*(1-x), 0};
│ │ │ │ +
210
│ │ │ │ +
211 out[9] = {0, 6*y*(1-y)};
│ │ │ │ +
212 }
│ │ │ │ +
│ │ │ │ +
213
│ │ │ │ +
│ │ │ │ +
220 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ +
221 {
│ │ │ │ +
222 out.resize(10);
│ │ │ │ +
223
│ │ │ │ +
224 const auto& x = in[0];
│ │ │ │ +
225 const auto& y = in[1];
│ │ │ │ +
226
│ │ │ │ +
227 out[0] = {{s_[0]*(4-6*x), 0}, {0, 0}};
│ │ │ │ +
228 out[1] = {{3-6*y, 6-6*x}, {0, 0}};
│ │ │ │ +
229
│ │ │ │ +
230 out[2] = {{s_[1]*(6*x-2), 0}, {0, 0}};
│ │ │ │ +
231 out[3] = {{6*y-3, 6*x}, {0, 0}};
│ │ │ │ +
232
│ │ │ │ +
233 out[4] = {{0, 0}, {0, s_[2]*(4-6*y)}};
│ │ │ │ +
234 out[5] = {{0, 0}, {6-6*y, 3-6*x}};
│ │ │ │ +
235
│ │ │ │ +
236 out[6] = {{0, 0}, {0, s_[3]*(6*y-2)}};
│ │ │ │ +
237 out[7] = {{0, 0}, {6*y, 6*x-3}};
│ │ │ │ +
238
│ │ │ │ +
239 out[8] = {{6-12*x, 0}, {0, 0}};
│ │ │ │ +
240
│ │ │ │ +
241 out[9] = {{0, 0}, {0, 6-12*y}};
│ │ │ │ +
242 }
│ │ │ │ +
│ │ │ │ +
243
│ │ │ │ +
│ │ │ │ +
251 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
252 const DomainType& in,
│ │ │ │ +
253 std::vector<RangeType>& out) const
│ │ │ │ +
254 {
│ │ │ │ +
255 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ +
256 evaluateFunction(in, out);
│ │ │ │ +
257 else
│ │ │ │ +
258 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
259 }
│ │ │ │ +
│ │ │ │ +
260
│ │ │ │ +
262 unsigned int order () const { return 2; }
│ │ │ │ +
263
│ │ │ │ +
264 private:
│ │ │ │ +
265 std::array<R, 4> s_;
│ │ │ │ +
266 };
│ │ │ │ +
│ │ │ │ +
267
│ │ │ │ +
268
│ │ │ │ +
274 template<class D, class R >
│ │ │ │ +
│ │ │ │ +
275 class BDFMCubeLocalBasis<D, R, 2, 3>
│ │ │ │ +
276 {
│ │ │ │ +
277 using DomainType = FieldVector<D, 2>;
│ │ │ │ +
278 using RangeType = FieldVector<R, 2>;
│ │ │ │ +
279 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │ +
280
│ │ │ │ +
281 public:
│ │ │ │ + │ │ │ │ +
283
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
286 {
│ │ │ │ +
287 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ +
288 }
│ │ │ │ +
│ │ │ │ +
289
│ │ │ │ +
│ │ │ │ +
295 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ +
296 {
│ │ │ │ +
297 for (auto i : range(4))
│ │ │ │ +
298 s_[i] = s[i] ? -1 : 1;
│ │ │ │ +
299 }
│ │ │ │ +
│ │ │ │ +
300
│ │ │ │ +
302 unsigned int size () const { return 18; }
│ │ │ │ +
303
│ │ │ │ +
│ │ │ │ +
310 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ +
311 {
│ │ │ │ +
312 out.resize(18);
│ │ │ │ +
313
│ │ │ │ +
314 const auto& x = in[0];
│ │ │ │ +
315 const auto& y = in[1];
│ │ │ │ +
316
│ │ │ │ +
317 auto pre = 1-x;
│ │ │ │ +
318 out[0] = {pre*s_[0]*-1*(10*x*x-8*x+1), 0};
│ │ │ │ +
319 out[1] = {pre* 3*(1-3*x)*(2*y-1), 0};
│ │ │ │ +
320 out[2] = {pre* s_[0]*-5*(6*y*y-6*y+1), 0};
│ │ │ │ +
321
│ │ │ │ +
322 pre = x;
│ │ │ │ +
323 out[3] = {pre*s_[1]*(10*x*x-12*x+3), 0};
│ │ │ │ +
324 out[4] = {pre* 3*(3*x-2)*(2*y-1), 0};
│ │ │ │ +
325 out[5] = {pre*s_[1]*5*(6*y*y-6*y+1), 0};
│ │ │ │ +
326
│ │ │ │ +
327 pre = 1-y;
│ │ │ │ +
328 out[6] = {0, pre*s_[2]*-1*(10*y*y-8*y+1)};
│ │ │ │ +
329 out[7] = {0, pre* 3*(1-3*y)*(2*x-1)};
│ │ │ │ +
330 out[8] = {0, pre*s_[2]*-5*( 6*x*x-6*x+1)};
│ │ │ │ +
331
│ │ │ │ +
332 pre = y;
│ │ │ │ +
333 out[9] = {0, pre*s_[3]*(10*y*y-12*y+3)};
│ │ │ │ +
334 out[10] = {0, pre* 3*(3*y-2)*(2*x-1)};
│ │ │ │ +
335 out[11] = {0, pre*s_[3]*5*(6*x*x-6*x+1)};
│ │ │ │ +
336
│ │ │ │ +
337 pre = x*(1-x);
│ │ │ │ +
338 out[12] = {pre* 6 , 0};
│ │ │ │ +
339 out[14] = {pre*30*(2*x-1), 0};
│ │ │ │ +
340 out[16] = {pre*18*(2*y-1), 0};
│ │ │ │ +
341
│ │ │ │ +
342 pre = y*(1-y);
│ │ │ │ +
343 out[13] = {0, pre* 6 };
│ │ │ │ +
344 out[15] = {0, pre*18*(2*x-1)};
│ │ │ │ +
345 out[17] = {0, pre*30*(2*y-1)};
│ │ │ │ +
346 }
│ │ │ │ +
│ │ │ │ +
347
│ │ │ │ +
│ │ │ │ +
354 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ +
355 {
│ │ │ │ +
356 out.resize(18);
│ │ │ │ +
357
│ │ │ │ +
358 const auto& x = in[0];
│ │ │ │ +
359 const auto& y = in[1];
│ │ │ │ +
360
│ │ │ │ +
361 out[0] = {{s_[0]*(30*x*x-36*x+9), 0}, {0, 0}};
│ │ │ │ +
362 out[1] = {{ 6*(6*x*y-3*x-4*y+2), 6*(3*x*x-4*x+1)}, {0, 0}};
│ │ │ │ +
363 out[2] = {{s_[0]*5*(6*y*y-6*y+1), s_[0]*30*(x-1)*(2*y-1)}, {0, 0}};
│ │ │ │ +
364
│ │ │ │ +
365 out[3] = {{ s_[1]*30*x*x-24*x+3, 0}, {0, 0}};
│ │ │ │ +
366 out[4] = {{ 6*(3*x-1)*(2*y-1), 6*x*(3*x-2)}, {0, 0}};
│ │ │ │ +
367 out[5] = {{s_[1]*5*(6*y*y-6*y+1), s_[1]*30*x*(2*y-1)}, {0, 0}};
│ │ │ │ +
368
│ │ │ │ +
369 out[6] = {{0, 0}, { 0, s_[2]*(30*y*y-36*y+9)}};
│ │ │ │ +
370 out[7] = {{0, 0}, { 6*(3*y*y-4*y+1), 6*(6*y*x-3*y-4*x+2)}};
│ │ │ │ +
371 out[8] = {{0, 0}, {s_[2]*30*(y-1)*(2*x-1), s_[2]*5*(6*x*x-6*x+1)}};
│ │ │ │ +
372
│ │ │ │ +
373 out[9] = {{0, 0}, { 0, s_[3]*30*y*y-24*y+3}};
│ │ │ │ +
374 out[10] = {{0, 0}, { 6*y*(3*y-2), 6*(3*y-1)*(2*x-1)}};
│ │ │ │ +
375 out[11] = {{0, 0}, {s_[3]*30*y*(2*x-1), s_[3]*5*(6*x*x-6*x+1)}};
│ │ │ │ +
376
│ │ │ │ +
377 out[12] = {{ -6*(2*x-1), 0}, {0, 0}};
│ │ │ │ +
378 out[14] = {{ -30*(6*x*x-6*x+1), 0}, {0, 0}};
│ │ │ │ +
379 out[16] = {{-18*(2*x-1)*(2*y-1), 36*x*(1-x)}, {0, 0}};
│ │ │ │ +
380
│ │ │ │ +
381 out[13] = {{0, 0}, { 0, -6*(2*y-1)}};
│ │ │ │ +
382 out[15] = {{0, 0}, {36*y*(1-y), -18*(2*y-1)*(2*x-1)}};
│ │ │ │ +
383 out[17] = {{0, 0}, { 0, -30*(6*y*y-6*y+1)}};
│ │ │ │ +
384 }
│ │ │ │ +
│ │ │ │ +
385
│ │ │ │ +
│ │ │ │ +
393 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ +
394 const DomainType& in,
│ │ │ │ +
395 std::vector<RangeType>& out) const
│ │ │ │ +
396 {
│ │ │ │ +
397 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ +
398 evaluateFunction(in, out);
│ │ │ │ +
399 else
│ │ │ │ +
400 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
401 }
│ │ │ │ +
│ │ │ │ +
402
│ │ │ │ +
404 unsigned int order () const { return 3; }
│ │ │ │ +
405
│ │ │ │ +
406 private:
│ │ │ │ +
407 std::array<R, 4> s_;
│ │ │ │ +
408 };
│ │ │ │ +
│ │ │ │ +
409
│ │ │ │ +
410} // namespace Dune
│ │ │ │ +
411
│ │ │ │ +
412#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:33
│ │ │ │ -
BDFMCubeLocalCoefficients()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:42
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:53
│ │ │ │ -
auto localKey(std::size_t i) const -> const LocalKey &
geth i'th index
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:56
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
Brezzi-Douglas-Fortin-Marini shape functions on a reference cube.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:37
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:86
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:138
│ │ │ │ +
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:94
│ │ │ │ +
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:69
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:127
│ │ │ │ +
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:110
│ │ │ │ +
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:79
│ │ │ │ +
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:186
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:251
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:178
│ │ │ │ +
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:161
│ │ │ │ +
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:220
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:262
│ │ │ │ +
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:171
│ │ │ │ +
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:285
│ │ │ │ +
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:354
│ │ │ │ +
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:295
│ │ │ │ +
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:302
│ │ │ │ +
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:404
│ │ │ │ +
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:310
│ │ │ │ +
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:393
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,110 +2,429 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ * _c_u_b_e │ │ │ │ │ -brezzidouglasfortinmarini/cube/localcoefficients.hh │ │ │ │ │ +brezzidouglasfortinmarini/cube/localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file │ │ │ │ │ +1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ +2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ +3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ -2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -3#ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -4#define │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -5 │ │ │ │ │ -6#include │ │ │ │ │ -7#include │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e │ │ │ │ │ -16{ │ │ │ │ │ -17 │ │ │ │ │ -31 template │ │ │ │ │ -_3_2 class _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -33 { │ │ │ │ │ -34 static constexpr unsigned int interiorDofs = dim*binomial(dim+order-2, │ │ │ │ │ -order-2); │ │ │ │ │ -35 static constexpr unsigned int faceDofs = binomial(dim+order-2, order-1); │ │ │ │ │ -36 │ │ │ │ │ -37 static constexpr std::size_t numFaces = 2*dim; │ │ │ │ │ -38 static constexpr std::size_t numDofs = numFaces*faceDofs + interiorDofs; │ │ │ │ │ -39 │ │ │ │ │ -40 public: │ │ │ │ │ -_4_2 _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(numDofs) │ │ │ │ │ -43 { │ │ │ │ │ -44 for (auto j : range(numFaces)) │ │ │ │ │ -45 for (auto i : range(faceDofs)) │ │ │ │ │ -46 li[j*faceDofs + i] = _L_o_c_a_l_K_e_y(j, 1, i); │ │ │ │ │ -47 │ │ │ │ │ -48 for (auto i : range(interiorDofs)) │ │ │ │ │ -49 li[numFaces*faceDofs + i] = _L_o_c_a_l_K_e_y(0, 0, i); │ │ │ │ │ -50 } │ │ │ │ │ +4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include │ │ │ │ │ +15#include │ │ │ │ │ +16#include │ │ │ │ │ +17#include │ │ │ │ │ +18#include │ │ │ │ │ +19 │ │ │ │ │ +20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +21 │ │ │ │ │ +22namespace _D_u_n_e │ │ │ │ │ +23{ │ │ │ │ │ +35 template │ │ │ │ │ +_3_6 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +37 { │ │ │ │ │ +38 static_assert( AlwaysFalse::value, │ │ │ │ │ +39 "`BDFMCubeLocalBasis` not implemented for chosen `dim` and `order`." ); │ │ │ │ │ +40 }; │ │ │ │ │ +41 │ │ │ │ │ +42 │ │ │ │ │ +43#ifndef DOXYGEN │ │ │ │ │ +44 template │ │ │ │ │ +45 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +46 { │ │ │ │ │ +47 static_assert( AlwaysFalse::value, │ │ │ │ │ +48 "`BDFMCubeLocalBasis` not defined for order 0." ); │ │ │ │ │ +49 }; │ │ │ │ │ +50#endif // #ifndef DOXYGEN │ │ │ │ │ 51 │ │ │ │ │ -_5_3 std::size_t _s_i_z_e () const { return numDofs; } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 auto _l_o_c_a_l_K_e_y (std::size_t i) const -> const _L_o_c_a_l_K_e_y& { return li[i]; } │ │ │ │ │ -57 │ │ │ │ │ -58 private: │ │ │ │ │ -59 std::vector li; │ │ │ │ │ -60 }; │ │ │ │ │ -61 │ │ │ │ │ -62 template │ │ │ │ │ -63 constexpr unsigned int BDFMCubeLocalCoefficients:: │ │ │ │ │ -interiorDofs; │ │ │ │ │ +52 │ │ │ │ │ +58 template │ │ │ │ │ +_5_9 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +60 { │ │ │ │ │ +61 using DomainType = FieldVector; │ │ │ │ │ +62 using RangeType = FieldVector; │ │ │ │ │ +63 using JacobianType = FieldMatrix; │ │ │ │ │ 64 │ │ │ │ │ -65 template │ │ │ │ │ -66 constexpr unsigned int BDFMCubeLocalCoefficients:: │ │ │ │ │ -faceDofs; │ │ │ │ │ +65 public: │ │ │ │ │ +_6_6 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ +_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ 67 │ │ │ │ │ -68 template │ │ │ │ │ -69 constexpr std::size_t BDFMCubeLocalCoefficients::numFaces; │ │ │ │ │ -70 │ │ │ │ │ -71 // template │ │ │ │ │ -72 // constexpr std::size_t BDFMCubeLocalCoefficients:: │ │ │ │ │ -numDofs; │ │ │ │ │ +_6_9 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ +70 { │ │ │ │ │ +71 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ +72 } │ │ │ │ │ 73 │ │ │ │ │ -74 │ │ │ │ │ -75#ifndef DOXYGEN │ │ │ │ │ -76 template │ │ │ │ │ -77 class BDFMCubeLocalCoefficients │ │ │ │ │ -78 { │ │ │ │ │ -79 static_assert( AlwaysFalse::value, │ │ │ │ │ -80 "`BDFMCubeLocalCoefficients` not defined for order 0." ); │ │ │ │ │ -81 }; │ │ │ │ │ -82#endif // #ifndef DOXYGEN │ │ │ │ │ -83 │ │ │ │ │ -84} // namespace Dune │ │ │ │ │ -85 │ │ │ │ │ -86#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_7_9 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ +80 { │ │ │ │ │ +81 for (auto i : range(4)) │ │ │ │ │ +82 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ +83 } │ │ │ │ │ +84 │ │ │ │ │ +_8_6 unsigned int _s_i_z_e () const { return 4; } │ │ │ │ │ +87 │ │ │ │ │ +_9_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ +out) const │ │ │ │ │ +95 { │ │ │ │ │ +96 out.resize(4); │ │ │ │ │ +97 │ │ │ │ │ +98 out[0] = {s_[0]*(in[0]-1), 0 }; │ │ │ │ │ +99 out[1] = {s_[1]*(in[0]) , 0 }; │ │ │ │ │ +100 out[2] = {0, s_[2]*(in[1]-1)}; │ │ │ │ │ +101 out[3] = {0, s_[3]*(in[1]) }; │ │ │ │ │ +102 } │ │ │ │ │ +103 │ │ │ │ │ +_1_1_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ +vector& out) const │ │ │ │ │ +111 { │ │ │ │ │ +112 out.resize(4); │ │ │ │ │ +113 │ │ │ │ │ +114 out[0] = {{s_[0], 0}, {0, 0}}; │ │ │ │ │ +115 out[1] = {{s_[1], 0}, {0, 0}}; │ │ │ │ │ +116 out[2] = {{0, 0}, {0, s_[2]}}; │ │ │ │ │ +117 out[3] = {{0, 0}, {0, s_[3]}}; │ │ │ │ │ +118 } │ │ │ │ │ +119 │ │ │ │ │ +_1_2_7 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +128 const DomainType& in, │ │ │ │ │ +129 std::vector& out) const │ │ │ │ │ +130 { │ │ │ │ │ +131 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ +132 evaluateFunction(in, out); │ │ │ │ │ +133 else │ │ │ │ │ +134 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +135 } │ │ │ │ │ +136 │ │ │ │ │ +_1_3_8 unsigned int _o_r_d_e_r () const { return 1; } │ │ │ │ │ +139 │ │ │ │ │ +140 private: │ │ │ │ │ +141 std::array s_; │ │ │ │ │ +142 }; │ │ │ │ │ +143 │ │ │ │ │ +144 │ │ │ │ │ +150 template │ │ │ │ │ +_1_5_1 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +152 { │ │ │ │ │ +153 using DomainType = FieldVector; │ │ │ │ │ +154 using RangeType = FieldVector; │ │ │ │ │ +155 using JacobianType = FieldMatrix; │ │ │ │ │ +156 │ │ │ │ │ +157 public: │ │ │ │ │ +_1_5_8 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ +_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ +159 │ │ │ │ │ +_1_6_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ +162 { │ │ │ │ │ +163 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ +164 } │ │ │ │ │ +165 │ │ │ │ │ +_1_7_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ +172 { │ │ │ │ │ +173 for (auto i : range(4)) │ │ │ │ │ +174 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ +175 } │ │ │ │ │ +176 │ │ │ │ │ +_1_7_8 unsigned int _s_i_z_e () const { return 10; } │ │ │ │ │ +179 │ │ │ │ │ +_1_8_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ +out) const │ │ │ │ │ +187 { │ │ │ │ │ +188 out.resize(10); │ │ │ │ │ +189 │ │ │ │ │ +190 const auto& x = in[0]; │ │ │ │ │ +191 const auto& y = in[1]; │ │ │ │ │ +192 │ │ │ │ │ +193 auto pre = 1-x; │ │ │ │ │ +194 out[0] = {pre*s_[0]*(3*x-1), 0}; │ │ │ │ │ +195 out[1] = { pre*3*(2*y-1), 0}; │ │ │ │ │ +196 │ │ │ │ │ +197 pre = x; │ │ │ │ │ +198 out[2] = {pre*s_[1]*(3*x-2), 0}; │ │ │ │ │ +199 out[3] = {pre* 3*(2*y-1), 0}; │ │ │ │ │ +200 │ │ │ │ │ +201 pre = 1-y; │ │ │ │ │ +202 out[4] = {0, pre*s_[2]*(3*y-1)}; │ │ │ │ │ +203 out[5] = {0, pre*3*(2*x-1)}; │ │ │ │ │ +204 │ │ │ │ │ +205 pre = y; │ │ │ │ │ +206 out[6] = {0, pre*s_[3]*(3*y-2)}; │ │ │ │ │ +207 out[7] = {0, pre*3*(2*x-1)}; │ │ │ │ │ +208 │ │ │ │ │ +209 out[8] = {6*x*(1-x), 0}; │ │ │ │ │ +210 │ │ │ │ │ +211 out[9] = {0, 6*y*(1-y)}; │ │ │ │ │ +212 } │ │ │ │ │ +213 │ │ │ │ │ +_2_2_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ +vector& out) const │ │ │ │ │ +221 { │ │ │ │ │ +222 out.resize(10); │ │ │ │ │ +223 │ │ │ │ │ +224 const auto& x = in[0]; │ │ │ │ │ +225 const auto& y = in[1]; │ │ │ │ │ +226 │ │ │ │ │ +227 out[0] = {{s_[0]*(4-6*x), 0}, {0, 0}}; │ │ │ │ │ +228 out[1] = {{3-6*y, 6-6*x}, {0, 0}}; │ │ │ │ │ +229 │ │ │ │ │ +230 out[2] = {{s_[1]*(6*x-2), 0}, {0, 0}}; │ │ │ │ │ +231 out[3] = {{6*y-3, 6*x}, {0, 0}}; │ │ │ │ │ +232 │ │ │ │ │ +233 out[4] = {{0, 0}, {0, s_[2]*(4-6*y)}}; │ │ │ │ │ +234 out[5] = {{0, 0}, {6-6*y, 3-6*x}}; │ │ │ │ │ +235 │ │ │ │ │ +236 out[6] = {{0, 0}, {0, s_[3]*(6*y-2)}}; │ │ │ │ │ +237 out[7] = {{0, 0}, {6*y, 6*x-3}}; │ │ │ │ │ +238 │ │ │ │ │ +239 out[8] = {{6-12*x, 0}, {0, 0}}; │ │ │ │ │ +240 │ │ │ │ │ +241 out[9] = {{0, 0}, {0, 6-12*y}}; │ │ │ │ │ +242 } │ │ │ │ │ +243 │ │ │ │ │ +_2_5_1 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +252 const DomainType& in, │ │ │ │ │ +253 std::vector& out) const │ │ │ │ │ +254 { │ │ │ │ │ +255 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ +256 evaluateFunction(in, out); │ │ │ │ │ +257 else │ │ │ │ │ +258 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +259 } │ │ │ │ │ +260 │ │ │ │ │ +_2_6_2 unsigned int _o_r_d_e_r () const { return 2; } │ │ │ │ │ +263 │ │ │ │ │ +264 private: │ │ │ │ │ +265 std::array s_; │ │ │ │ │ +266 }; │ │ │ │ │ +267 │ │ │ │ │ +268 │ │ │ │ │ +274 template │ │ │ │ │ +_2_7_5 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +276 { │ │ │ │ │ +277 using DomainType = FieldVector; │ │ │ │ │ +278 using RangeType = FieldVector; │ │ │ │ │ +279 using JacobianType = FieldMatrix; │ │ │ │ │ +280 │ │ │ │ │ +281 public: │ │ │ │ │ +_2_8_2 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ +_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ +283 │ │ │ │ │ +_2_8_5 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ +286 { │ │ │ │ │ +287 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ +288 } │ │ │ │ │ +289 │ │ │ │ │ +_2_9_5 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ +296 { │ │ │ │ │ +297 for (auto i : range(4)) │ │ │ │ │ +298 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ +299 } │ │ │ │ │ +300 │ │ │ │ │ +_3_0_2 unsigned int _s_i_z_e () const { return 18; } │ │ │ │ │ +303 │ │ │ │ │ +_3_1_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ +out) const │ │ │ │ │ +311 { │ │ │ │ │ +312 out.resize(18); │ │ │ │ │ +313 │ │ │ │ │ +314 const auto& x = in[0]; │ │ │ │ │ +315 const auto& y = in[1]; │ │ │ │ │ +316 │ │ │ │ │ +317 auto pre = 1-x; │ │ │ │ │ +318 out[0] = {pre*s_[0]*-1*(10*x*x-8*x+1), 0}; │ │ │ │ │ +319 out[1] = {pre* 3*(1-3*x)*(2*y-1), 0}; │ │ │ │ │ +320 out[2] = {pre* s_[0]*-5*(6*y*y-6*y+1), 0}; │ │ │ │ │ +321 │ │ │ │ │ +322 pre = x; │ │ │ │ │ +323 out[3] = {pre*s_[1]*(10*x*x-12*x+3), 0}; │ │ │ │ │ +324 out[4] = {pre* 3*(3*x-2)*(2*y-1), 0}; │ │ │ │ │ +325 out[5] = {pre*s_[1]*5*(6*y*y-6*y+1), 0}; │ │ │ │ │ +326 │ │ │ │ │ +327 pre = 1-y; │ │ │ │ │ +328 out[6] = {0, pre*s_[2]*-1*(10*y*y-8*y+1)}; │ │ │ │ │ +329 out[7] = {0, pre* 3*(1-3*y)*(2*x-1)}; │ │ │ │ │ +330 out[8] = {0, pre*s_[2]*-5*( 6*x*x-6*x+1)}; │ │ │ │ │ +331 │ │ │ │ │ +332 pre = y; │ │ │ │ │ +333 out[9] = {0, pre*s_[3]*(10*y*y-12*y+3)}; │ │ │ │ │ +334 out[10] = {0, pre* 3*(3*y-2)*(2*x-1)}; │ │ │ │ │ +335 out[11] = {0, pre*s_[3]*5*(6*x*x-6*x+1)}; │ │ │ │ │ +336 │ │ │ │ │ +337 pre = x*(1-x); │ │ │ │ │ +338 out[12] = {pre* 6 , 0}; │ │ │ │ │ +339 out[14] = {pre*30*(2*x-1), 0}; │ │ │ │ │ +340 out[16] = {pre*18*(2*y-1), 0}; │ │ │ │ │ +341 │ │ │ │ │ +342 pre = y*(1-y); │ │ │ │ │ +343 out[13] = {0, pre* 6 }; │ │ │ │ │ +344 out[15] = {0, pre*18*(2*x-1)}; │ │ │ │ │ +345 out[17] = {0, pre*30*(2*y-1)}; │ │ │ │ │ +346 } │ │ │ │ │ +347 │ │ │ │ │ +_3_5_4 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ +vector& out) const │ │ │ │ │ +355 { │ │ │ │ │ +356 out.resize(18); │ │ │ │ │ +357 │ │ │ │ │ +358 const auto& x = in[0]; │ │ │ │ │ +359 const auto& y = in[1]; │ │ │ │ │ +360 │ │ │ │ │ +361 out[0] = {{s_[0]*(30*x*x-36*x+9), 0}, {0, 0}}; │ │ │ │ │ +362 out[1] = {{ 6*(6*x*y-3*x-4*y+2), 6*(3*x*x-4*x+1)}, {0, 0}}; │ │ │ │ │ +363 out[2] = {{s_[0]*5*(6*y*y-6*y+1), s_[0]*30*(x-1)*(2*y-1)}, {0, 0}}; │ │ │ │ │ +364 │ │ │ │ │ +365 out[3] = {{ s_[1]*30*x*x-24*x+3, 0}, {0, 0}}; │ │ │ │ │ +366 out[4] = {{ 6*(3*x-1)*(2*y-1), 6*x*(3*x-2)}, {0, 0}}; │ │ │ │ │ +367 out[5] = {{s_[1]*5*(6*y*y-6*y+1), s_[1]*30*x*(2*y-1)}, {0, 0}}; │ │ │ │ │ +368 │ │ │ │ │ +369 out[6] = {{0, 0}, { 0, s_[2]*(30*y*y-36*y+9)}}; │ │ │ │ │ +370 out[7] = {{0, 0}, { 6*(3*y*y-4*y+1), 6*(6*y*x-3*y-4*x+2)}}; │ │ │ │ │ +371 out[8] = {{0, 0}, {s_[2]*30*(y-1)*(2*x-1), s_[2]*5*(6*x*x-6*x+1)}}; │ │ │ │ │ +372 │ │ │ │ │ +373 out[9] = {{0, 0}, { 0, s_[3]*30*y*y-24*y+3}}; │ │ │ │ │ +374 out[10] = {{0, 0}, { 6*y*(3*y-2), 6*(3*y-1)*(2*x-1)}}; │ │ │ │ │ +375 out[11] = {{0, 0}, {s_[3]*30*y*(2*x-1), s_[3]*5*(6*x*x-6*x+1)}}; │ │ │ │ │ +376 │ │ │ │ │ +377 out[12] = {{ -6*(2*x-1), 0}, {0, 0}}; │ │ │ │ │ +378 out[14] = {{ -30*(6*x*x-6*x+1), 0}, {0, 0}}; │ │ │ │ │ +379 out[16] = {{-18*(2*x-1)*(2*y-1), 36*x*(1-x)}, {0, 0}}; │ │ │ │ │ +380 │ │ │ │ │ +381 out[13] = {{0, 0}, { 0, -6*(2*y-1)}}; │ │ │ │ │ +382 out[15] = {{0, 0}, {36*y*(1-y), -18*(2*y-1)*(2*x-1)}}; │ │ │ │ │ +383 out[17] = {{0, 0}, { 0, -30*(6*y*y-6*y+1)}}; │ │ │ │ │ +384 } │ │ │ │ │ +385 │ │ │ │ │ +_3_9_3 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ +394 const DomainType& in, │ │ │ │ │ +395 std::vector& out) const │ │ │ │ │ +396 { │ │ │ │ │ +397 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ +398 evaluateFunction(in, out); │ │ │ │ │ +399 else │ │ │ │ │ +400 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +401 } │ │ │ │ │ +402 │ │ │ │ │ +_4_0_4 unsigned int _o_r_d_e_r () const { return 3; } │ │ │ │ │ +405 │ │ │ │ │ +406 private: │ │ │ │ │ +407 std::array s_; │ │ │ │ │ +408 }; │ │ │ │ │ +409 │ │ │ │ │ +410} // namespace Dune │ │ │ │ │ +411 │ │ │ │ │ +412#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -BDFMCubeLocalCoefficients() │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:86 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:138 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:94 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis() │ │ │ │ │ Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:53 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -auto localKey(std::size_t i) const -> const LocalKey & │ │ │ │ │ -geth i'th index │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:69 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ +std::vector< RangeType > &out) const │ │ │ │ │ +Evaluate all partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:127 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:110 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ +Make set number s, where 0<= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:186 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ +std::vector< RangeType > &out) const │ │ │ │ │ +Evaluate all partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:251 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:178 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:161 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:220 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:262 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ +Make set number s, where 0<= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:171 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:285 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:354 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ +Make set number s, where 0<= s < 16. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:295 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:302 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ +unsigned int order() const │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:404 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ +const │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:310 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ +std::vector< RangeType > &out) const │ │ │ │ │ +Evaluate all partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:393 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ +dune-localfunctions: localbasis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,33 +65,31 @@ │ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localcoefficients.hh File Reference
│ │ │ │ +
localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <array>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -
│ │ │ │ + │ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::SimplexP1BubbleLocalCoefficients< dim >
 The Local keys associated to the dim-d local basis functions. More...
struct  Dune::LocalBasisTraits< DF, n, D, RF, m, R, J >
 Type traits for LocalBasisVirtualInterface. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,22 +1,19 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ - * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localcoefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +localbasis.hh File Reference │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ -  The Local keys associated to the dim-d local basis functions. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_F_,_ _n_,_ _D_,_ _R_F_,_ _m_,_ _R_,_ _J_ _> │ │ │ │ │ +  Type traits for _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04541_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localcoefficients.hh Source File │ │ │ │ +dune-localfunctions: localbasis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,79 +70,62 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
enriched/simplexp1bubble/localcoefficients.hh
│ │ │ │ +
common/localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <array>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11
│ │ │ │ -
12namespace Dune
│ │ │ │ -
13{
│ │ │ │ -
22 template <int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 {
│ │ │ │ -
25 static const int numVertices = dim+1;
│ │ │ │ -
26
│ │ │ │ -
27 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ -
31 for (int i = 0; i <= dim; ++i)
│ │ │ │ -
32 li_[i] = LocalKey(i,dim,0); // Vertex
│ │ │ │ -
33 li_[numVertices] = LocalKey(0,0,0); // Element
│ │ │ │ -
34 }
│ │ │ │ -
│ │ │ │ -
35
│ │ │ │ -
│ │ │ │ -
37 static constexpr std::size_t size () noexcept
│ │ │ │ -
38 {
│ │ │ │ -
39 return numVertices + 1;
│ │ │ │ -
40 }
│ │ │ │ -
│ │ │ │ +
8namespace Dune
│ │ │ │ +
9{
│ │ │ │ +
10
│ │ │ │ +
33 template<class DF, int n, class D, class RF, int m, class R, class J>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
37 typedef DF DomainFieldType;
│ │ │ │ +
38
│ │ │ │ +
40 constexpr static int dimDomain = n;
│ │ │ │
41
│ │ │ │ -
│ │ │ │ -
43 const LocalKey& localKey (std::size_t i) const noexcept
│ │ │ │ -
44 {
│ │ │ │ -
45 return li_[i];
│ │ │ │ -
46 }
│ │ │ │ -
│ │ │ │ +
43 typedef D DomainType;
│ │ │ │ +
44
│ │ │ │ +
46 typedef RF RangeFieldType;
│ │ │ │
47
│ │ │ │ -
48 private:
│ │ │ │ -
49 std::array<LocalKey, numVertices+1> li_;
│ │ │ │ -
50 };
│ │ │ │ -
│ │ │ │ -
51
│ │ │ │ -
52} // end namespace Dune
│ │ │ │ +
49 constexpr static int dimRange = m;
│ │ │ │ +
50
│ │ │ │ +
52 typedef R RangeType;
│ │ │ │
53
│ │ │ │ -
54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
60 typedef J JacobianType;
│ │ │ │ +
61 };
│ │ │ │ +
│ │ │ │ +
62
│ │ │ │ +
63}
│ │ │ │ +
64#endif
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
The Local keys associated to the dim-d local basis functions.
Definition enriched/simplexp1bubble/localcoefficients.hh:24
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const noexcept
Returns the i'th local key.
Definition enriched/simplexp1bubble/localcoefficients.hh:43
│ │ │ │ -
SimplexP1BubbleLocalCoefficients() noexcept
Default constructor, initialized the local keys.
Definition enriched/simplexp1bubble/localcoefficients.hh:29
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of coefficients.
Definition enriched/simplexp1bubble/localcoefficients.hh:37
│ │ │ │ +
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ +
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ +
J JacobianType
Type to represent derivative.
Definition common/localbasis.hh:60
│ │ │ │ +
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ +
static constexpr int dimRange
dimension of the range
Definition common/localbasis.hh:49
│ │ │ │ +
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ +
static constexpr int dimDomain
dimension of the domain
Definition common/localbasis.hh:40
│ │ │ │ +
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,77 +1,75 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _e_n_r_i_c_h_e_d │ │ │ │ │ - * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ -enriched/simplexp1bubble/localcoefficients.hh │ │ │ │ │ + * _c_o_m_m_o_n │ │ │ │ │ +common/localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -11 │ │ │ │ │ -12namespace _D_u_n_e │ │ │ │ │ -13{ │ │ │ │ │ -22 template │ │ │ │ │ -_2_3 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -24 { │ │ │ │ │ -25 static const int numVertices = dim+1; │ │ │ │ │ -26 │ │ │ │ │ -27 public: │ │ │ │ │ -_2_9 _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () noexcept │ │ │ │ │ -30 { │ │ │ │ │ -31 for (int i = 0; i <= dim; ++i) │ │ │ │ │ -32 li_[i] = _L_o_c_a_l_K_e_y(i,dim,0); // Vertex │ │ │ │ │ -33 li_[numVertices] = _L_o_c_a_l_K_e_y(0,0,0); // Element │ │ │ │ │ -34 } │ │ │ │ │ -35 │ │ │ │ │ -_3_7 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -38 { │ │ │ │ │ -39 return numVertices + 1; │ │ │ │ │ -40 } │ │ │ │ │ +8namespace _D_u_n_e │ │ │ │ │ +9{ │ │ │ │ │ +10 │ │ │ │ │ +33 template │ │ │ │ │ +_3_4 struct _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +35 { │ │ │ │ │ +_3_7 typedef DF _D_o_m_a_i_n_F_i_e_l_d_T_y_p_e; │ │ │ │ │ +38 │ │ │ │ │ +_4_0 constexpr static int _d_i_m_D_o_m_a_i_n = n; │ │ │ │ │ 41 │ │ │ │ │ -_4_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const noexcept │ │ │ │ │ -44 { │ │ │ │ │ -45 return li_[i]; │ │ │ │ │ -46 } │ │ │ │ │ +_4_3 typedef D _D_o_m_a_i_n_T_y_p_e; │ │ │ │ │ +44 │ │ │ │ │ +_4_6 typedef RF _R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ 47 │ │ │ │ │ -48 private: │ │ │ │ │ -49 std::array li_; │ │ │ │ │ -50 }; │ │ │ │ │ -51 │ │ │ │ │ -52} // end namespace Dune │ │ │ │ │ +_4_9 constexpr static int _d_i_m_R_a_n_g_e = m; │ │ │ │ │ +50 │ │ │ │ │ +_5_2 typedef R _R_a_n_g_e_T_y_p_e; │ │ │ │ │ 53 │ │ │ │ │ -54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +_6_0 typedef J _J_a_c_o_b_i_a_n_T_y_p_e; │ │ │ │ │ +61 }; │ │ │ │ │ +62 │ │ │ │ │ +63} │ │ │ │ │ +64#endif │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -The Local keys associated to the dim-d local basis functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const noexcept │ │ │ │ │ -Returns the i'th local key. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -SimplexP1BubbleLocalCoefficients() noexcept │ │ │ │ │ -Default constructor, initialized the local keys. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:29 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of coefficients. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ +Type traits for LocalBasisVirtualInterface. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ +D DomainType │ │ │ │ │ +domain type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n_T_y_p_e │ │ │ │ │ +J JacobianType │ │ │ │ │ +Type to represent derivative. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:60 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ +RF RangeFieldType │ │ │ │ │ +Export type for range field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static constexpr int dimRange │ │ │ │ │ +dimension of the range │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ +DF DomainFieldType │ │ │ │ │ +Export type for domain field. │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ +static constexpr int dimDomain │ │ │ │ │ +dimension of the domain │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ +R RangeType │ │ │ │ │ +range type │ │ │ │ │ +DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544.html │ │ │ │ @@ -65,51 +65,38 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
localbasis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <algorithm>
│ │ │ │ -#include <array>
│ │ │ │ -#include <bitset>
│ │ │ │ -#include <numeric>
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <stdexcept>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/common/math.hh>
│ │ │ │ -#include <dune/common/rangeutilities.hh>
│ │ │ │ -#include <dune/common/typetraits.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::BDFMCubeLocalBasis< D, R, dim, order >
 Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 1 >
 First order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 2 >
 Second order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
 
class  Dune::BDFMCubeLocalBasis< D, R, 2, 3 >
 Third order Brezzi-Douglas-Fortin-Marini shape functions on the reference quadrialteral. More...
class  Dune::SimplexP1BubbleLocalBasis< D, R, dim >
 P1 basis in dim-d enriched by an (order dim+1) element bubble function. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,44 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ - * _c_u_b_e │ │ │ │ │ + * _e_n_r_i_c_h_e_d │ │ │ │ │ + * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ -  Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ +class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ +  P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _> │ │ │ │ │ -  First order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ - reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _> │ │ │ │ │ -  Second order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ - reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _> │ │ │ │ │ -  Third order Brezzi-Douglas-Fortin-Marini shape functions on the │ │ │ │ │ - reference quadrialteral. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04544_source.html │ │ │ │ @@ -70,389 +70,159 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
brezzidouglasfortinmarini/cube/localbasis.hh
│ │ │ │ +
enriched/simplexp1bubble/localbasis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │
7
│ │ │ │ -
8#include <algorithm>
│ │ │ │ -
9#include <array>
│ │ │ │ -
10#include <bitset>
│ │ │ │ -
11#include <numeric>
│ │ │ │ -
12#include <vector>
│ │ │ │ -
13
│ │ │ │ -
14#include <dune/common/fmatrix.hh>
│ │ │ │ -
15#include <dune/common/fvector.hh>
│ │ │ │ -
16#include <dune/common/math.hh>
│ │ │ │ -
17#include <dune/common/rangeutilities.hh>
│ │ │ │ -
18#include <dune/common/typetraits.hh>
│ │ │ │ -
19
│ │ │ │ - │ │ │ │ -
21
│ │ │ │ -
22namespace Dune
│ │ │ │ -
23{
│ │ │ │ -
35 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 {
│ │ │ │ -
38 static_assert( AlwaysFalse<D>::value,
│ │ │ │ -
39 "`BDFMCubeLocalBasis` not implemented for chosen `dim` and `order`." );
│ │ │ │ -
40 };
│ │ │ │ -
│ │ │ │ -
41
│ │ │ │ -
42
│ │ │ │ -
43#ifndef DOXYGEN
│ │ │ │ -
44 template<class D, class R, unsigned int dim>
│ │ │ │ -
45 class BDFMCubeLocalBasis<D, R, dim, 0>
│ │ │ │ -
46 {
│ │ │ │ -
47 static_assert( AlwaysFalse<D>::value,
│ │ │ │ -
48 "`BDFMCubeLocalBasis` not defined for order 0." );
│ │ │ │ -
49 };
│ │ │ │ -
50#endif // #ifndef DOXYGEN
│ │ │ │ -
51
│ │ │ │ -
52
│ │ │ │ -
58 template<class D, class R >
│ │ │ │ -
│ │ │ │ -
59 class BDFMCubeLocalBasis<D, R, 2, 1>
│ │ │ │ -
60 {
│ │ │ │ -
61 using DomainType = FieldVector<D, 2>;
│ │ │ │ -
62 using RangeType = FieldVector<R, 2>;
│ │ │ │ -
63 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │ -
64
│ │ │ │ -
65 public:
│ │ │ │ - │ │ │ │ -
67
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
70 {
│ │ │ │ -
71 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ -
72 }
│ │ │ │ -
│ │ │ │ -
73
│ │ │ │ -
│ │ │ │ -
79 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ -
80 {
│ │ │ │ -
81 for (auto i : range(4))
│ │ │ │ -
82 s_[i] = s[i] ? -1 : 1;
│ │ │ │ -
83 }
│ │ │ │ -
│ │ │ │ -
84
│ │ │ │ -
86 unsigned int size () const { return 4; }
│ │ │ │ +
8#include <numeric>
│ │ │ │ +
9#include <stdexcept>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fvector.hh>
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14#include <dune/common/math.hh>
│ │ │ │ +
15
│ │ │ │ + │ │ │ │ +
17
│ │ │ │ +
18namespace Dune
│ │ │ │ +
19{
│ │ │ │ +
33 template<class D, class R, int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
35 {
│ │ │ │ +
36 template<class> friend class SimplexP1BubbleLocalInterpolation;
│ │ │ │ +
37
│ │ │ │ +
39 using DomainType = FieldVector<D,dim>;
│ │ │ │ +
40
│ │ │ │ +
42 using RangeType = FieldVector<R,1>;
│ │ │ │ +
43
│ │ │ │ +
45 using JacobianType = FieldMatrix<R,1,dim>;
│ │ │ │ +
46
│ │ │ │ +
47 static constexpr int dimension = dim;
│ │ │ │ +
48 static constexpr int numVertices = dim+1;
│ │ │ │ +
49
│ │ │ │ +
50 public:
│ │ │ │ + │ │ │ │ +
53
│ │ │ │ +
│ │ │ │ +
55 static constexpr std::size_t size () noexcept
│ │ │ │ +
56 {
│ │ │ │ +
57 return numVertices+1;
│ │ │ │ +
58 }
│ │ │ │ +
│ │ │ │ +
59
│ │ │ │ +
│ │ │ │ +
61 static constexpr void evaluateFunction (const DomainType& in,
│ │ │ │ +
62 std::vector<RangeType>& out)
│ │ │ │ +
63 {
│ │ │ │ +
64 out.resize(size());
│ │ │ │ +
65 out[0] = 1;
│ │ │ │ +
66 out.back() = power(dim+1, dim+1); // normalization of the bubble function
│ │ │ │ +
67 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
68 out[0] -= in[i];
│ │ │ │ +
69 out[i+1] = in[i];
│ │ │ │ +
70 out.back() *= in[i];
│ │ │ │ +
71 }
│ │ │ │ +
72 out.back() *= out[0];
│ │ │ │ +
73 }
│ │ │ │ +
│ │ │ │ +
74
│ │ │ │ +
│ │ │ │ +
76 static constexpr void evaluateJacobian (const DomainType& in,
│ │ │ │ +
77 std::vector<JacobianType>& out)
│ │ │ │ +
78 {
│ │ │ │ +
79 out.resize(size());
│ │ │ │ +
80 RangeType tmp = 1;
│ │ │ │ +
81 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
82 out[0][0][i] = -1;
│ │ │ │ +
83 for (int j = 0; j < dim; ++j)
│ │ │ │ +
84 out[j+1][0][i] = (i == j);
│ │ │ │ +
85 tmp -= in[i];
│ │ │ │ +
86 }
│ │ │ │
87
│ │ │ │ -
│ │ │ │ -
94 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ -
95 {
│ │ │ │ -
96 out.resize(4);
│ │ │ │ -
97
│ │ │ │ -
98 out[0] = {s_[0]*(in[0]-1), 0 };
│ │ │ │ -
99 out[1] = {s_[1]*(in[0]) , 0 };
│ │ │ │ -
100 out[2] = {0, s_[2]*(in[1]-1)};
│ │ │ │ -
101 out[3] = {0, s_[3]*(in[1]) };
│ │ │ │ -
102 }
│ │ │ │ -
│ │ │ │ +
88 for (int i = 0; i < dim; ++i) {
│ │ │ │ +
89 out.back()[0][i] = power(dim+1, dim+1) * (tmp - in[i]);
│ │ │ │ +
90 for (int j = i+1; j < dim+i; ++j)
│ │ │ │ +
91 out.back()[0][i] *= in[j % dim];
│ │ │ │ +
92 }
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94
│ │ │ │ +
│ │ │ │ +
96 static constexpr void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
97 const DomainType& in,
│ │ │ │ +
98 std::vector<RangeType>& out)
│ │ │ │ +
99 {
│ │ │ │ +
100 unsigned int totalOrder = 0;
│ │ │ │ +
101 for (int i = 0; i < dim; ++i)
│ │ │ │ +
102 totalOrder += order[i];
│ │ │ │
103
│ │ │ │ -
│ │ │ │ -
110 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ -
111 {
│ │ │ │ -
112 out.resize(4);
│ │ │ │ +
104 switch (totalOrder) {
│ │ │ │ +
105 case 0:
│ │ │ │ +
106 evaluateFunction(in,out);
│ │ │ │ +
107 break;
│ │ │ │ +
108 case 1: {
│ │ │ │ +
109 out.resize(size());
│ │ │ │ +
110 int d = 0; // the direction of differentiation
│ │ │ │ +
111 for (int i = 0; i < dim; ++i)
│ │ │ │ +
112 d += i * order[i];
│ │ │ │
113
│ │ │ │ -
114 out[0] = {{s_[0], 0}, {0, 0}};
│ │ │ │ -
115 out[1] = {{s_[1], 0}, {0, 0}};
│ │ │ │ -
116 out[2] = {{0, 0}, {0, s_[2]}};
│ │ │ │ -
117 out[3] = {{0, 0}, {0, s_[3]}};
│ │ │ │ -
118 }
│ │ │ │ -
│ │ │ │ -
119
│ │ │ │ -
│ │ │ │ -
127 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
128 const DomainType& in,
│ │ │ │ -
129 std::vector<RangeType>& out) const
│ │ │ │ -
130 {
│ │ │ │ -
131 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ -
132 evaluateFunction(in, out);
│ │ │ │ -
133 else
│ │ │ │ -
134 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
135 }
│ │ │ │ -
│ │ │ │ -
136
│ │ │ │ -
138 unsigned int order () const { return 1; }
│ │ │ │ -
139
│ │ │ │ -
140 private:
│ │ │ │ -
141 std::array<R, 4> s_;
│ │ │ │ -
142 };
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
144
│ │ │ │ -
150 template<class D, class R >
│ │ │ │ -
│ │ │ │ -
151 class BDFMCubeLocalBasis<D, R, 2, 2>
│ │ │ │ -
152 {
│ │ │ │ -
153 using DomainType = FieldVector<D, 2>;
│ │ │ │ -
154 using RangeType = FieldVector<R, 2>;
│ │ │ │ -
155 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │ -
156
│ │ │ │ -
157 public:
│ │ │ │ - │ │ │ │ -
159
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
162 {
│ │ │ │ -
163 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ -
164 }
│ │ │ │ -
│ │ │ │ -
165
│ │ │ │ -
│ │ │ │ -
171 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ -
172 {
│ │ │ │ -
173 for (auto i : range(4))
│ │ │ │ -
174 s_[i] = s[i] ? -1 : 1;
│ │ │ │ -
175 }
│ │ │ │ -
│ │ │ │ -
176
│ │ │ │ -
178 unsigned int size () const { return 10; }
│ │ │ │ -
179
│ │ │ │ -
│ │ │ │ -
186 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ -
187 {
│ │ │ │ -
188 out.resize(10);
│ │ │ │ -
189
│ │ │ │ -
190 const auto& x = in[0];
│ │ │ │ -
191 const auto& y = in[1];
│ │ │ │ -
192
│ │ │ │ -
193 auto pre = 1-x;
│ │ │ │ -
194 out[0] = {pre*s_[0]*(3*x-1), 0};
│ │ │ │ -
195 out[1] = { pre*3*(2*y-1), 0};
│ │ │ │ -
196
│ │ │ │ -
197 pre = x;
│ │ │ │ -
198 out[2] = {pre*s_[1]*(3*x-2), 0};
│ │ │ │ -
199 out[3] = {pre* 3*(2*y-1), 0};
│ │ │ │ -
200
│ │ │ │ -
201 pre = 1-y;
│ │ │ │ -
202 out[4] = {0, pre*s_[2]*(3*y-1)};
│ │ │ │ -
203 out[5] = {0, pre*3*(2*x-1)};
│ │ │ │ -
204
│ │ │ │ -
205 pre = y;
│ │ │ │ -
206 out[6] = {0, pre*s_[3]*(3*y-2)};
│ │ │ │ -
207 out[7] = {0, pre*3*(2*x-1)};
│ │ │ │ -
208
│ │ │ │ -
209 out[8] = {6*x*(1-x), 0};
│ │ │ │ -
210
│ │ │ │ -
211 out[9] = {0, 6*y*(1-y)};
│ │ │ │ -
212 }
│ │ │ │ -
│ │ │ │ -
213
│ │ │ │ -
│ │ │ │ -
220 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ -
221 {
│ │ │ │ -
222 out.resize(10);
│ │ │ │ -
223
│ │ │ │ -
224 const auto& x = in[0];
│ │ │ │ -
225 const auto& y = in[1];
│ │ │ │ -
226
│ │ │ │ -
227 out[0] = {{s_[0]*(4-6*x), 0}, {0, 0}};
│ │ │ │ -
228 out[1] = {{3-6*y, 6-6*x}, {0, 0}};
│ │ │ │ -
229
│ │ │ │ -
230 out[2] = {{s_[1]*(6*x-2), 0}, {0, 0}};
│ │ │ │ -
231 out[3] = {{6*y-3, 6*x}, {0, 0}};
│ │ │ │ -
232
│ │ │ │ -
233 out[4] = {{0, 0}, {0, s_[2]*(4-6*y)}};
│ │ │ │ -
234 out[5] = {{0, 0}, {6-6*y, 3-6*x}};
│ │ │ │ -
235
│ │ │ │ -
236 out[6] = {{0, 0}, {0, s_[3]*(6*y-2)}};
│ │ │ │ -
237 out[7] = {{0, 0}, {6*y, 6*x-3}};
│ │ │ │ -
238
│ │ │ │ -
239 out[8] = {{6-12*x, 0}, {0, 0}};
│ │ │ │ -
240
│ │ │ │ -
241 out[9] = {{0, 0}, {0, 6-12*y}};
│ │ │ │ -
242 }
│ │ │ │ -
│ │ │ │ -
243
│ │ │ │ -
│ │ │ │ -
251 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
252 const DomainType& in,
│ │ │ │ -
253 std::vector<RangeType>& out) const
│ │ │ │ -
254 {
│ │ │ │ -
255 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ -
256 evaluateFunction(in, out);
│ │ │ │ -
257 else
│ │ │ │ -
258 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
259 }
│ │ │ │ -
│ │ │ │ -
260
│ │ │ │ -
262 unsigned int order () const { return 2; }
│ │ │ │ -
263
│ │ │ │ -
264 private:
│ │ │ │ -
265 std::array<R, 4> s_;
│ │ │ │ -
266 };
│ │ │ │ -
│ │ │ │ -
267
│ │ │ │ -
268
│ │ │ │ -
274 template<class D, class R >
│ │ │ │ -
│ │ │ │ -
275 class BDFMCubeLocalBasis<D, R, 2, 3>
│ │ │ │ -
276 {
│ │ │ │ -
277 using DomainType = FieldVector<D, 2>;
│ │ │ │ -
278 using RangeType = FieldVector<R, 2>;
│ │ │ │ -
279 using JacobianType = FieldMatrix<R, 2, 2>;
│ │ │ │ -
280
│ │ │ │ -
281 public:
│ │ │ │ - │ │ │ │ -
283
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
286 {
│ │ │ │ -
287 std::fill(s_.begin(), s_.end(), 1);
│ │ │ │ -
288 }
│ │ │ │ -
│ │ │ │ -
289
│ │ │ │ -
│ │ │ │ -
295 BDFMCubeLocalBasis (std::bitset<4> s)
│ │ │ │ -
296 {
│ │ │ │ -
297 for (auto i : range(4))
│ │ │ │ -
298 s_[i] = s[i] ? -1 : 1;
│ │ │ │ -
299 }
│ │ │ │ -
│ │ │ │ -
300
│ │ │ │ -
302 unsigned int size () const { return 18; }
│ │ │ │ -
303
│ │ │ │ -
│ │ │ │ -
310 inline void evaluateFunction (const DomainType& in, std::vector<RangeType>& out) const
│ │ │ │ -
311 {
│ │ │ │ -
312 out.resize(18);
│ │ │ │ -
313
│ │ │ │ -
314 const auto& x = in[0];
│ │ │ │ -
315 const auto& y = in[1];
│ │ │ │ -
316
│ │ │ │ -
317 auto pre = 1-x;
│ │ │ │ -
318 out[0] = {pre*s_[0]*-1*(10*x*x-8*x+1), 0};
│ │ │ │ -
319 out[1] = {pre* 3*(1-3*x)*(2*y-1), 0};
│ │ │ │ -
320 out[2] = {pre* s_[0]*-5*(6*y*y-6*y+1), 0};
│ │ │ │ -
321
│ │ │ │ -
322 pre = x;
│ │ │ │ -
323 out[3] = {pre*s_[1]*(10*x*x-12*x+3), 0};
│ │ │ │ -
324 out[4] = {pre* 3*(3*x-2)*(2*y-1), 0};
│ │ │ │ -
325 out[5] = {pre*s_[1]*5*(6*y*y-6*y+1), 0};
│ │ │ │ -
326
│ │ │ │ -
327 pre = 1-y;
│ │ │ │ -
328 out[6] = {0, pre*s_[2]*-1*(10*y*y-8*y+1)};
│ │ │ │ -
329 out[7] = {0, pre* 3*(1-3*y)*(2*x-1)};
│ │ │ │ -
330 out[8] = {0, pre*s_[2]*-5*( 6*x*x-6*x+1)};
│ │ │ │ -
331
│ │ │ │ -
332 pre = y;
│ │ │ │ -
333 out[9] = {0, pre*s_[3]*(10*y*y-12*y+3)};
│ │ │ │ -
334 out[10] = {0, pre* 3*(3*y-2)*(2*x-1)};
│ │ │ │ -
335 out[11] = {0, pre*s_[3]*5*(6*x*x-6*x+1)};
│ │ │ │ -
336
│ │ │ │ -
337 pre = x*(1-x);
│ │ │ │ -
338 out[12] = {pre* 6 , 0};
│ │ │ │ -
339 out[14] = {pre*30*(2*x-1), 0};
│ │ │ │ -
340 out[16] = {pre*18*(2*y-1), 0};
│ │ │ │ -
341
│ │ │ │ -
342 pre = y*(1-y);
│ │ │ │ -
343 out[13] = {0, pre* 6 };
│ │ │ │ -
344 out[15] = {0, pre*18*(2*x-1)};
│ │ │ │ -
345 out[17] = {0, pre*30*(2*y-1)};
│ │ │ │ -
346 }
│ │ │ │ -
│ │ │ │ -
347
│ │ │ │ -
│ │ │ │ -
354 inline void evaluateJacobian (const DomainType& in, std::vector<JacobianType>& out) const
│ │ │ │ -
355 {
│ │ │ │ -
356 out.resize(18);
│ │ │ │ -
357
│ │ │ │ -
358 const auto& x = in[0];
│ │ │ │ -
359 const auto& y = in[1];
│ │ │ │ -
360
│ │ │ │ -
361 out[0] = {{s_[0]*(30*x*x-36*x+9), 0}, {0, 0}};
│ │ │ │ -
362 out[1] = {{ 6*(6*x*y-3*x-4*y+2), 6*(3*x*x-4*x+1)}, {0, 0}};
│ │ │ │ -
363 out[2] = {{s_[0]*5*(6*y*y-6*y+1), s_[0]*30*(x-1)*(2*y-1)}, {0, 0}};
│ │ │ │ -
364
│ │ │ │ -
365 out[3] = {{ s_[1]*30*x*x-24*x+3, 0}, {0, 0}};
│ │ │ │ -
366 out[4] = {{ 6*(3*x-1)*(2*y-1), 6*x*(3*x-2)}, {0, 0}};
│ │ │ │ -
367 out[5] = {{s_[1]*5*(6*y*y-6*y+1), s_[1]*30*x*(2*y-1)}, {0, 0}};
│ │ │ │ -
368
│ │ │ │ -
369 out[6] = {{0, 0}, { 0, s_[2]*(30*y*y-36*y+9)}};
│ │ │ │ -
370 out[7] = {{0, 0}, { 6*(3*y*y-4*y+1), 6*(6*y*x-3*y-4*x+2)}};
│ │ │ │ -
371 out[8] = {{0, 0}, {s_[2]*30*(y-1)*(2*x-1), s_[2]*5*(6*x*x-6*x+1)}};
│ │ │ │ -
372
│ │ │ │ -
373 out[9] = {{0, 0}, { 0, s_[3]*30*y*y-24*y+3}};
│ │ │ │ -
374 out[10] = {{0, 0}, { 6*y*(3*y-2), 6*(3*y-1)*(2*x-1)}};
│ │ │ │ -
375 out[11] = {{0, 0}, {s_[3]*30*y*(2*x-1), s_[3]*5*(6*x*x-6*x+1)}};
│ │ │ │ -
376
│ │ │ │ -
377 out[12] = {{ -6*(2*x-1), 0}, {0, 0}};
│ │ │ │ -
378 out[14] = {{ -30*(6*x*x-6*x+1), 0}, {0, 0}};
│ │ │ │ -
379 out[16] = {{-18*(2*x-1)*(2*y-1), 36*x*(1-x)}, {0, 0}};
│ │ │ │ -
380
│ │ │ │ -
381 out[13] = {{0, 0}, { 0, -6*(2*y-1)}};
│ │ │ │ -
382 out[15] = {{0, 0}, {36*y*(1-y), -18*(2*y-1)*(2*x-1)}};
│ │ │ │ -
383 out[17] = {{0, 0}, { 0, -30*(6*y*y-6*y+1)}};
│ │ │ │ -
384 }
│ │ │ │ -
│ │ │ │ -
385
│ │ │ │ -
│ │ │ │ -
393 void partial (const std::array<unsigned int, 2>& order,
│ │ │ │ -
394 const DomainType& in,
│ │ │ │ -
395 std::vector<RangeType>& out) const
│ │ │ │ -
396 {
│ │ │ │ -
397 if (std::accumulate(order.begin(), order.end(), 0) == 0)
│ │ │ │ -
398 evaluateFunction(in, out);
│ │ │ │ -
399 else
│ │ │ │ -
400 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
401 }
│ │ │ │ -
│ │ │ │ -
402
│ │ │ │ -
404 unsigned int order () const { return 3; }
│ │ │ │ -
405
│ │ │ │ -
406 private:
│ │ │ │ -
407 std::array<R, 4> s_;
│ │ │ │ -
408 };
│ │ │ │ -
│ │ │ │ -
409
│ │ │ │ -
410} // namespace Dune
│ │ │ │ -
411
│ │ │ │ -
412#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH
│ │ │ │ +
114 out[0] = -1;
│ │ │ │ +
115 RangeType tmp = 1;
│ │ │ │ +
116 for (int j = 0; j < dim; ++j) {
│ │ │ │ +
117 out[j+1] = (d == j);
│ │ │ │ +
118 tmp -= in[j];
│ │ │ │ +
119 }
│ │ │ │ +
120 out.back() = power(dim+1, dim+1) * (tmp - in[d]);
│ │ │ │ +
121 for (int j = d+1; j < dim+d; ++j)
│ │ │ │ +
122 out.back() *= in[j % dim];
│ │ │ │ +
123 } break;
│ │ │ │ +
124 default:
│ │ │ │ +
125 throw std::runtime_error("Desired derivative order is not implemented");
│ │ │ │ +
126 }
│ │ │ │ +
127 }
│ │ │ │ +
│ │ │ │ +
128
│ │ │ │ +
│ │ │ │ +
130 static constexpr unsigned int order () noexcept
│ │ │ │ +
131 {
│ │ │ │ +
132 return dim+1;
│ │ │ │ +
133 }
│ │ │ │ +
│ │ │ │ +
134 };
│ │ │ │ +
│ │ │ │ +
135
│ │ │ │ +
136} // end namespace Dune
│ │ │ │ +
137
│ │ │ │ +
138#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Brezzi-Douglas-Fortin-Marini shape functions on a reference cube.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:37
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:86
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:138
│ │ │ │ -
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:94
│ │ │ │ -
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:69
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:127
│ │ │ │ -
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:110
│ │ │ │ -
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:79
│ │ │ │ -
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:186
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:251
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:178
│ │ │ │ -
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:161
│ │ │ │ -
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:220
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:262
│ │ │ │ -
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:171
│ │ │ │ -
BDFMCubeLocalBasis()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:285
│ │ │ │ -
void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) const
Evaluate Jacobian of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:354
│ │ │ │ -
BDFMCubeLocalBasis(std::bitset< 4 > s)
Make set number s, where 0<= s < 16.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:295
│ │ │ │ -
unsigned int size() const
number of shape functions
Definition brezzidouglasfortinmarini/cube/localbasis.hh:302
│ │ │ │ -
unsigned int order() const
Polynomial order of the shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:404
│ │ │ │ -
void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) const
Evaluate all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:310
│ │ │ │ -
void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, std::vector< RangeType > &out) const
Evaluate all partial derivatives of all shape functions.
Definition brezzidouglasfortinmarini/cube/localbasis.hh:393
│ │ │ │
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ - │ │ │ │ +
P1 basis in dim-d enriched by an (order dim+1) element bubble function.
Definition enriched/simplexp1bubble/localbasis.hh:35
│ │ │ │ +
static constexpr void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out)
Evaluate Jacobian of all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:76
│ │ │ │ +
static constexpr void evaluateFunction(const DomainType &in, std::vector< RangeType > &out)
Evaluate all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:61
│ │ │ │ +
static constexpr void partial(const std::array< unsigned int, dim > &order, const DomainType &in, std::vector< RangeType > &out)
Evaluate partial derivatives of all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:96
│ │ │ │ +
static constexpr unsigned int order() noexcept
Returns maximal polynomial order of the basis functions.
Definition enriched/simplexp1bubble/localbasis.hh:130
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:55
│ │ │ │ +
Interpolation into the SimplexP1BubbleLocalBasis.
Definition enriched/simplexp1bubble/localinterpolation.hh:34
│ │ │ │ + │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,430 +1,165 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ - * _c_u_b_e │ │ │ │ │ -brezzidouglasfortinmarini/cube/localbasis.hh │ │ │ │ │ + * _e_n_r_i_c_h_e_d │ │ │ │ │ + * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ +enriched/simplexp1bubble/localbasis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ -13 │ │ │ │ │ -14#include │ │ │ │ │ -15#include │ │ │ │ │ -16#include │ │ │ │ │ -17#include │ │ │ │ │ -18#include │ │ │ │ │ -19 │ │ │ │ │ -20#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -21 │ │ │ │ │ -22namespace _D_u_n_e │ │ │ │ │ -23{ │ │ │ │ │ -35 template │ │ │ │ │ -_3_6 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -37 { │ │ │ │ │ -38 static_assert( AlwaysFalse::value, │ │ │ │ │ -39 "`BDFMCubeLocalBasis` not implemented for chosen `dim` and `order`." ); │ │ │ │ │ -40 }; │ │ │ │ │ -41 │ │ │ │ │ -42 │ │ │ │ │ -43#ifndef DOXYGEN │ │ │ │ │ -44 template │ │ │ │ │ -45 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -46 { │ │ │ │ │ -47 static_assert( AlwaysFalse::value, │ │ │ │ │ -48 "`BDFMCubeLocalBasis` not defined for order 0." ); │ │ │ │ │ -49 }; │ │ │ │ │ -50#endif // #ifndef DOXYGEN │ │ │ │ │ -51 │ │ │ │ │ -52 │ │ │ │ │ -58 template │ │ │ │ │ -_5_9 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -60 { │ │ │ │ │ -61 using DomainType = FieldVector; │ │ │ │ │ -62 using RangeType = FieldVector; │ │ │ │ │ -63 using JacobianType = FieldMatrix; │ │ │ │ │ -64 │ │ │ │ │ -65 public: │ │ │ │ │ -_6_6 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ -_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ -67 │ │ │ │ │ -_6_9 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -70 { │ │ │ │ │ -71 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ -72 } │ │ │ │ │ -73 │ │ │ │ │ -_7_9 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ -80 { │ │ │ │ │ -81 for (auto i : range(4)) │ │ │ │ │ -82 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ -83 } │ │ │ │ │ -84 │ │ │ │ │ -_8_6 unsigned int _s_i_z_e () const { return 4; } │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ +15 │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +17 │ │ │ │ │ +18namespace _D_u_n_e │ │ │ │ │ +19{ │ │ │ │ │ +33 template │ │ │ │ │ +_3_4 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +35 { │ │ │ │ │ +_3_6 template friend class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ +37 │ │ │ │ │ +39 using DomainType = FieldVector; │ │ │ │ │ +40 │ │ │ │ │ +42 using RangeType = FieldVector; │ │ │ │ │ +43 │ │ │ │ │ +45 using JacobianType = FieldMatrix; │ │ │ │ │ +46 │ │ │ │ │ +47 static constexpr int dimension = dim; │ │ │ │ │ +48 static constexpr int numVertices = dim+1; │ │ │ │ │ +49 │ │ │ │ │ +50 public: │ │ │ │ │ +_5_2 using _T_r_a_i_t_s = │ │ │ │ │ +_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_o_m_a_i_n_T_y_p_e_,_R_,_1_,_R_a_n_g_e_T_y_p_e_,_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ +53 │ │ │ │ │ +_5_5 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +56 { │ │ │ │ │ +57 return numVertices+1; │ │ │ │ │ +58 } │ │ │ │ │ +59 │ │ │ │ │ +_6_1 static constexpr void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, │ │ │ │ │ +62 std::vector& out) │ │ │ │ │ +63 { │ │ │ │ │ +64 out.resize(_s_i_z_e()); │ │ │ │ │ +65 out[0] = 1; │ │ │ │ │ +66 out.back() = power(dim+1, dim+1); // normalization of the bubble function │ │ │ │ │ +67 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +68 out[0] -= in[i]; │ │ │ │ │ +69 out[i+1] = in[i]; │ │ │ │ │ +70 out.back() *= in[i]; │ │ │ │ │ +71 } │ │ │ │ │ +72 out.back() *= out[0]; │ │ │ │ │ +73 } │ │ │ │ │ +74 │ │ │ │ │ +_7_6 static constexpr void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, │ │ │ │ │ +77 std::vector& out) │ │ │ │ │ +78 { │ │ │ │ │ +79 out.resize(_s_i_z_e()); │ │ │ │ │ +80 RangeType tmp = 1; │ │ │ │ │ +81 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +82 out[0][0][i] = -1; │ │ │ │ │ +83 for (int j = 0; j < dim; ++j) │ │ │ │ │ +84 out[j+1][0][i] = (i == j); │ │ │ │ │ +85 tmp -= in[i]; │ │ │ │ │ +86 } │ │ │ │ │ 87 │ │ │ │ │ -_9_4 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ -out) const │ │ │ │ │ -95 { │ │ │ │ │ -96 out.resize(4); │ │ │ │ │ -97 │ │ │ │ │ -98 out[0] = {s_[0]*(in[0]-1), 0 }; │ │ │ │ │ -99 out[1] = {s_[1]*(in[0]) , 0 }; │ │ │ │ │ -100 out[2] = {0, s_[2]*(in[1]-1)}; │ │ │ │ │ -101 out[3] = {0, s_[3]*(in[1]) }; │ │ │ │ │ -102 } │ │ │ │ │ +88 for (int i = 0; i < dim; ++i) { │ │ │ │ │ +89 out.back()[0][i] = power(dim+1, dim+1) * (tmp - in[i]); │ │ │ │ │ +90 for (int j = i+1; j < dim+i; ++j) │ │ │ │ │ +91 out.back()[0][i] *= in[j % dim]; │ │ │ │ │ +92 } │ │ │ │ │ +93 } │ │ │ │ │ +94 │ │ │ │ │ +_9_6 static constexpr void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +97 const DomainType& in, │ │ │ │ │ +98 std::vector& out) │ │ │ │ │ +99 { │ │ │ │ │ +100 unsigned int totalOrder = 0; │ │ │ │ │ +101 for (int i = 0; i < dim; ++i) │ │ │ │ │ +102 totalOrder += _o_r_d_e_r[i]; │ │ │ │ │ 103 │ │ │ │ │ -_1_1_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ -vector& out) const │ │ │ │ │ -111 { │ │ │ │ │ -112 out.resize(4); │ │ │ │ │ +104 switch (totalOrder) { │ │ │ │ │ +105 case 0: │ │ │ │ │ +106 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in,out); │ │ │ │ │ +107 break; │ │ │ │ │ +108 case 1: { │ │ │ │ │ +109 out.resize(_s_i_z_e()); │ │ │ │ │ +110 int d = 0; // the direction of differentiation │ │ │ │ │ +111 for (int i = 0; i < dim; ++i) │ │ │ │ │ +112 d += i * _o_r_d_e_r[i]; │ │ │ │ │ 113 │ │ │ │ │ -114 out[0] = {{s_[0], 0}, {0, 0}}; │ │ │ │ │ -115 out[1] = {{s_[1], 0}, {0, 0}}; │ │ │ │ │ -116 out[2] = {{0, 0}, {0, s_[2]}}; │ │ │ │ │ -117 out[3] = {{0, 0}, {0, s_[3]}}; │ │ │ │ │ -118 } │ │ │ │ │ -119 │ │ │ │ │ -_1_2_7 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -128 const DomainType& in, │ │ │ │ │ -129 std::vector& out) const │ │ │ │ │ -130 { │ │ │ │ │ -131 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ -132 evaluateFunction(in, out); │ │ │ │ │ -133 else │ │ │ │ │ -134 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -135 } │ │ │ │ │ -136 │ │ │ │ │ -_1_3_8 unsigned int _o_r_d_e_r () const { return 1; } │ │ │ │ │ -139 │ │ │ │ │ -140 private: │ │ │ │ │ -141 std::array s_; │ │ │ │ │ -142 }; │ │ │ │ │ -143 │ │ │ │ │ -144 │ │ │ │ │ -150 template │ │ │ │ │ -_1_5_1 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -152 { │ │ │ │ │ -153 using DomainType = FieldVector; │ │ │ │ │ -154 using RangeType = FieldVector; │ │ │ │ │ -155 using JacobianType = FieldMatrix; │ │ │ │ │ -156 │ │ │ │ │ -157 public: │ │ │ │ │ -_1_5_8 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ -_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ -159 │ │ │ │ │ -_1_6_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -162 { │ │ │ │ │ -163 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ -164 } │ │ │ │ │ -165 │ │ │ │ │ -_1_7_1 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ -172 { │ │ │ │ │ -173 for (auto i : range(4)) │ │ │ │ │ -174 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ -175 } │ │ │ │ │ -176 │ │ │ │ │ -_1_7_8 unsigned int _s_i_z_e () const { return 10; } │ │ │ │ │ -179 │ │ │ │ │ -_1_8_6 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ -out) const │ │ │ │ │ -187 { │ │ │ │ │ -188 out.resize(10); │ │ │ │ │ -189 │ │ │ │ │ -190 const auto& x = in[0]; │ │ │ │ │ -191 const auto& y = in[1]; │ │ │ │ │ -192 │ │ │ │ │ -193 auto pre = 1-x; │ │ │ │ │ -194 out[0] = {pre*s_[0]*(3*x-1), 0}; │ │ │ │ │ -195 out[1] = { pre*3*(2*y-1), 0}; │ │ │ │ │ -196 │ │ │ │ │ -197 pre = x; │ │ │ │ │ -198 out[2] = {pre*s_[1]*(3*x-2), 0}; │ │ │ │ │ -199 out[3] = {pre* 3*(2*y-1), 0}; │ │ │ │ │ -200 │ │ │ │ │ -201 pre = 1-y; │ │ │ │ │ -202 out[4] = {0, pre*s_[2]*(3*y-1)}; │ │ │ │ │ -203 out[5] = {0, pre*3*(2*x-1)}; │ │ │ │ │ -204 │ │ │ │ │ -205 pre = y; │ │ │ │ │ -206 out[6] = {0, pre*s_[3]*(3*y-2)}; │ │ │ │ │ -207 out[7] = {0, pre*3*(2*x-1)}; │ │ │ │ │ -208 │ │ │ │ │ -209 out[8] = {6*x*(1-x), 0}; │ │ │ │ │ -210 │ │ │ │ │ -211 out[9] = {0, 6*y*(1-y)}; │ │ │ │ │ -212 } │ │ │ │ │ -213 │ │ │ │ │ -_2_2_0 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ -vector& out) const │ │ │ │ │ -221 { │ │ │ │ │ -222 out.resize(10); │ │ │ │ │ -223 │ │ │ │ │ -224 const auto& x = in[0]; │ │ │ │ │ -225 const auto& y = in[1]; │ │ │ │ │ -226 │ │ │ │ │ -227 out[0] = {{s_[0]*(4-6*x), 0}, {0, 0}}; │ │ │ │ │ -228 out[1] = {{3-6*y, 6-6*x}, {0, 0}}; │ │ │ │ │ -229 │ │ │ │ │ -230 out[2] = {{s_[1]*(6*x-2), 0}, {0, 0}}; │ │ │ │ │ -231 out[3] = {{6*y-3, 6*x}, {0, 0}}; │ │ │ │ │ -232 │ │ │ │ │ -233 out[4] = {{0, 0}, {0, s_[2]*(4-6*y)}}; │ │ │ │ │ -234 out[5] = {{0, 0}, {6-6*y, 3-6*x}}; │ │ │ │ │ -235 │ │ │ │ │ -236 out[6] = {{0, 0}, {0, s_[3]*(6*y-2)}}; │ │ │ │ │ -237 out[7] = {{0, 0}, {6*y, 6*x-3}}; │ │ │ │ │ -238 │ │ │ │ │ -239 out[8] = {{6-12*x, 0}, {0, 0}}; │ │ │ │ │ -240 │ │ │ │ │ -241 out[9] = {{0, 0}, {0, 6-12*y}}; │ │ │ │ │ -242 } │ │ │ │ │ -243 │ │ │ │ │ -_2_5_1 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -252 const DomainType& in, │ │ │ │ │ -253 std::vector& out) const │ │ │ │ │ -254 { │ │ │ │ │ -255 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ -256 evaluateFunction(in, out); │ │ │ │ │ -257 else │ │ │ │ │ -258 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -259 } │ │ │ │ │ -260 │ │ │ │ │ -_2_6_2 unsigned int _o_r_d_e_r () const { return 2; } │ │ │ │ │ -263 │ │ │ │ │ -264 private: │ │ │ │ │ -265 std::array s_; │ │ │ │ │ -266 }; │ │ │ │ │ -267 │ │ │ │ │ -268 │ │ │ │ │ -274 template │ │ │ │ │ -_2_7_5 class _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -276 { │ │ │ │ │ -277 using DomainType = FieldVector; │ │ │ │ │ -278 using RangeType = FieldVector; │ │ │ │ │ -279 using JacobianType = FieldMatrix; │ │ │ │ │ -280 │ │ │ │ │ -281 public: │ │ │ │ │ -_2_8_2 using _T_r_a_i_t_s = _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_ _2_,_ _D_o_m_a_i_n_T_y_p_e_,_ _R_,_ _2_,_ _R_a_n_g_e_T_y_p_e_, │ │ │ │ │ -_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ -283 │ │ │ │ │ -_2_8_5 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s () │ │ │ │ │ -286 { │ │ │ │ │ -287 std::fill(s_.begin(), s_.end(), 1); │ │ │ │ │ -288 } │ │ │ │ │ -289 │ │ │ │ │ -_2_9_5 _B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s (std::bitset<4> s) │ │ │ │ │ -296 { │ │ │ │ │ -297 for (auto i : range(4)) │ │ │ │ │ -298 s_[i] = s[i] ? -1 : 1; │ │ │ │ │ -299 } │ │ │ │ │ -300 │ │ │ │ │ -_3_0_2 unsigned int _s_i_z_e () const { return 18; } │ │ │ │ │ -303 │ │ │ │ │ -_3_1_0 inline void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, std::vector& │ │ │ │ │ -out) const │ │ │ │ │ -311 { │ │ │ │ │ -312 out.resize(18); │ │ │ │ │ -313 │ │ │ │ │ -314 const auto& x = in[0]; │ │ │ │ │ -315 const auto& y = in[1]; │ │ │ │ │ -316 │ │ │ │ │ -317 auto pre = 1-x; │ │ │ │ │ -318 out[0] = {pre*s_[0]*-1*(10*x*x-8*x+1), 0}; │ │ │ │ │ -319 out[1] = {pre* 3*(1-3*x)*(2*y-1), 0}; │ │ │ │ │ -320 out[2] = {pre* s_[0]*-5*(6*y*y-6*y+1), 0}; │ │ │ │ │ -321 │ │ │ │ │ -322 pre = x; │ │ │ │ │ -323 out[3] = {pre*s_[1]*(10*x*x-12*x+3), 0}; │ │ │ │ │ -324 out[4] = {pre* 3*(3*x-2)*(2*y-1), 0}; │ │ │ │ │ -325 out[5] = {pre*s_[1]*5*(6*y*y-6*y+1), 0}; │ │ │ │ │ -326 │ │ │ │ │ -327 pre = 1-y; │ │ │ │ │ -328 out[6] = {0, pre*s_[2]*-1*(10*y*y-8*y+1)}; │ │ │ │ │ -329 out[7] = {0, pre* 3*(1-3*y)*(2*x-1)}; │ │ │ │ │ -330 out[8] = {0, pre*s_[2]*-5*( 6*x*x-6*x+1)}; │ │ │ │ │ -331 │ │ │ │ │ -332 pre = y; │ │ │ │ │ -333 out[9] = {0, pre*s_[3]*(10*y*y-12*y+3)}; │ │ │ │ │ -334 out[10] = {0, pre* 3*(3*y-2)*(2*x-1)}; │ │ │ │ │ -335 out[11] = {0, pre*s_[3]*5*(6*x*x-6*x+1)}; │ │ │ │ │ -336 │ │ │ │ │ -337 pre = x*(1-x); │ │ │ │ │ -338 out[12] = {pre* 6 , 0}; │ │ │ │ │ -339 out[14] = {pre*30*(2*x-1), 0}; │ │ │ │ │ -340 out[16] = {pre*18*(2*y-1), 0}; │ │ │ │ │ -341 │ │ │ │ │ -342 pre = y*(1-y); │ │ │ │ │ -343 out[13] = {0, pre* 6 }; │ │ │ │ │ -344 out[15] = {0, pre*18*(2*x-1)}; │ │ │ │ │ -345 out[17] = {0, pre*30*(2*y-1)}; │ │ │ │ │ -346 } │ │ │ │ │ -347 │ │ │ │ │ -_3_5_4 inline void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, std:: │ │ │ │ │ -vector& out) const │ │ │ │ │ -355 { │ │ │ │ │ -356 out.resize(18); │ │ │ │ │ -357 │ │ │ │ │ -358 const auto& x = in[0]; │ │ │ │ │ -359 const auto& y = in[1]; │ │ │ │ │ -360 │ │ │ │ │ -361 out[0] = {{s_[0]*(30*x*x-36*x+9), 0}, {0, 0}}; │ │ │ │ │ -362 out[1] = {{ 6*(6*x*y-3*x-4*y+2), 6*(3*x*x-4*x+1)}, {0, 0}}; │ │ │ │ │ -363 out[2] = {{s_[0]*5*(6*y*y-6*y+1), s_[0]*30*(x-1)*(2*y-1)}, {0, 0}}; │ │ │ │ │ -364 │ │ │ │ │ -365 out[3] = {{ s_[1]*30*x*x-24*x+3, 0}, {0, 0}}; │ │ │ │ │ -366 out[4] = {{ 6*(3*x-1)*(2*y-1), 6*x*(3*x-2)}, {0, 0}}; │ │ │ │ │ -367 out[5] = {{s_[1]*5*(6*y*y-6*y+1), s_[1]*30*x*(2*y-1)}, {0, 0}}; │ │ │ │ │ -368 │ │ │ │ │ -369 out[6] = {{0, 0}, { 0, s_[2]*(30*y*y-36*y+9)}}; │ │ │ │ │ -370 out[7] = {{0, 0}, { 6*(3*y*y-4*y+1), 6*(6*y*x-3*y-4*x+2)}}; │ │ │ │ │ -371 out[8] = {{0, 0}, {s_[2]*30*(y-1)*(2*x-1), s_[2]*5*(6*x*x-6*x+1)}}; │ │ │ │ │ -372 │ │ │ │ │ -373 out[9] = {{0, 0}, { 0, s_[3]*30*y*y-24*y+3}}; │ │ │ │ │ -374 out[10] = {{0, 0}, { 6*y*(3*y-2), 6*(3*y-1)*(2*x-1)}}; │ │ │ │ │ -375 out[11] = {{0, 0}, {s_[3]*30*y*(2*x-1), s_[3]*5*(6*x*x-6*x+1)}}; │ │ │ │ │ -376 │ │ │ │ │ -377 out[12] = {{ -6*(2*x-1), 0}, {0, 0}}; │ │ │ │ │ -378 out[14] = {{ -30*(6*x*x-6*x+1), 0}, {0, 0}}; │ │ │ │ │ -379 out[16] = {{-18*(2*x-1)*(2*y-1), 36*x*(1-x)}, {0, 0}}; │ │ │ │ │ -380 │ │ │ │ │ -381 out[13] = {{0, 0}, { 0, -6*(2*y-1)}}; │ │ │ │ │ -382 out[15] = {{0, 0}, {36*y*(1-y), -18*(2*y-1)*(2*x-1)}}; │ │ │ │ │ -383 out[17] = {{0, 0}, { 0, -30*(6*y*y-6*y+1)}}; │ │ │ │ │ -384 } │ │ │ │ │ -385 │ │ │ │ │ -_3_9_3 void _p_a_r_t_i_a_l (const std::array& order, │ │ │ │ │ -394 const DomainType& in, │ │ │ │ │ -395 std::vector& out) const │ │ │ │ │ -396 { │ │ │ │ │ -397 if (std::accumulate(order.begin(), order.end(), 0) == 0) │ │ │ │ │ -398 evaluateFunction(in, out); │ │ │ │ │ -399 else │ │ │ │ │ -400 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -401 } │ │ │ │ │ -402 │ │ │ │ │ -_4_0_4 unsigned int _o_r_d_e_r () const { return 3; } │ │ │ │ │ -405 │ │ │ │ │ -406 private: │ │ │ │ │ -407 std::array s_; │ │ │ │ │ -408 }; │ │ │ │ │ -409 │ │ │ │ │ -410} // namespace Dune │ │ │ │ │ -411 │ │ │ │ │ -412#endif // #ifndef │ │ │ │ │ -DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALBASIS_HH │ │ │ │ │ +114 out[0] = -1; │ │ │ │ │ +115 RangeType tmp = 1; │ │ │ │ │ +116 for (int j = 0; j < dim; ++j) { │ │ │ │ │ +117 out[j+1] = (d == j); │ │ │ │ │ +118 tmp -= in[j]; │ │ │ │ │ +119 } │ │ │ │ │ +120 out.back() = power(dim+1, dim+1) * (tmp - in[d]); │ │ │ │ │ +121 for (int j = d+1; j < dim+d; ++j) │ │ │ │ │ +122 out.back() *= in[j % dim]; │ │ │ │ │ +123 } break; │ │ │ │ │ +124 default: │ │ │ │ │ +125 throw std::runtime_error("Desired derivative order is not implemented"); │ │ │ │ │ +126 } │ │ │ │ │ +127 } │ │ │ │ │ +128 │ │ │ │ │ +_1_3_0 static constexpr unsigned int _o_r_d_e_r () noexcept │ │ │ │ │ +131 { │ │ │ │ │ +132 return dim+1; │ │ │ │ │ +133 } │ │ │ │ │ +134 }; │ │ │ │ │ +135 │ │ │ │ │ +136} // end namespace Dune │ │ │ │ │ +137 │ │ │ │ │ +138#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -Brezzi-Douglas-Fortin-Marini shape functions on a reference cube. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:86 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:138 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:94 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:69 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ -std::vector< RangeType > &out) const │ │ │ │ │ -Evaluate all partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:127 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:110 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _1_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ -Make set number s, where 0<= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:186 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ -std::vector< RangeType > &out) const │ │ │ │ │ -Evaluate all partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:251 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:178 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:161 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:220 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:262 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _2_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ -Make set number s, where 0<= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:171 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:285 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:354 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -BDFMCubeLocalBasis(std::bitset< 4 > s) │ │ │ │ │ -Make set number s, where 0<= s < 16. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:295 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:302 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_o_r_d_e_r │ │ │ │ │ -unsigned int order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:404 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ -const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:310 │ │ │ │ │ -_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _2_,_ _3_ _>_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, 2 > &order, const DomainType &in, │ │ │ │ │ -std::vector< RangeType > &out) const │ │ │ │ │ -Evaluate all partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localbasis.hh:393 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ Type traits for LocalBasisVirtualInterface. │ │ │ │ │ DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ +P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +static constexpr void evaluateJacobian(const DomainType &in, std::vector< │ │ │ │ │ +JacobianType > &out) │ │ │ │ │ +Evaluate Jacobian of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:76 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +static constexpr void evaluateFunction(const DomainType &in, std::vector< │ │ │ │ │ +RangeType > &out) │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +static constexpr void partial(const std::array< unsigned int, dim > &order, │ │ │ │ │ +const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:96 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +static constexpr unsigned int order() noexcept │ │ │ │ │ +Returns maximal polynomial order of the basis functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:130 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +static constexpr std::size_t size() noexcept │ │ │ │ │ +Returns number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:55 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Interpolation into the SimplexP1BubbleLocalBasis. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localinterpolation.hh:34 │ │ │ │ │ _l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh File Reference │ │ │ │ +dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,31 +65,37 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localbasis.hh File Reference
│ │ │ │ +
localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ - │ │ │ │ +
#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/math.hh>
│ │ │ │ +#include <dune/common/rangeutilities.hh>
│ │ │ │ +#include <dune/common/typetraits.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::LocalBasisTraits< DF, n, D, RF, m, R, J >
 Type traits for LocalBasisVirtualInterface. More...
class  Dune::BDFMCubeLocalCoefficients< D, R, dim, order >
 Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,19 +1,26 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ + * _c_u_b_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localbasis.hh File Reference │ │ │ │ │ +localcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_ _D_F_,_ _n_,_ _D_,_ _R_F_,_ _m_,_ _R_,_ _J_ _> │ │ │ │ │ -  Type traits for _L_o_c_a_l_B_a_s_i_s_V_i_r_t_u_a_l_I_n_t_e_r_f_a_c_e. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _D_,_ _R_,_ _d_i_m_,_ _o_r_d_e_r_ _> │ │ │ │ │ +  Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04547_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh Source File │ │ │ │ +dune-localfunctions: localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,62 +70,102 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
common/localbasis.hh
│ │ │ │ +
brezzidouglasfortinmarini/cube/localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ -Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │ -
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │ -
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ -
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH
│ │ │ │ -
7
│ │ │ │ -
8namespace Dune
│ │ │ │ -
9{
│ │ │ │ -
10
│ │ │ │ -
33 template<class DF, int n, class D, class RF, int m, class R, class J>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {
│ │ │ │ -
37 typedef DF DomainFieldType;
│ │ │ │ -
38
│ │ │ │ -
40 constexpr static int dimDomain = n;
│ │ │ │ -
41
│ │ │ │ -
43 typedef D DomainType;
│ │ │ │ -
44
│ │ │ │ -
46 typedef RF RangeFieldType;
│ │ │ │ +Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │ +
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ +
3#ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
4#define DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
5
│ │ │ │ +
6#include <cstddef>
│ │ │ │ +
7#include <vector>
│ │ │ │ +
8
│ │ │ │ +
9#include <dune/common/math.hh>
│ │ │ │ +
10#include <dune/common/rangeutilities.hh>
│ │ │ │ +
11#include <dune/common/typetraits.hh>
│ │ │ │ +
12
│ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune
│ │ │ │ +
16{
│ │ │ │ +
17
│ │ │ │ +
31 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
33 {
│ │ │ │ +
34 static constexpr unsigned int interiorDofs = dim*binomial(dim+order-2, order-2);
│ │ │ │ +
35 static constexpr unsigned int faceDofs = binomial(dim+order-2, order-1);
│ │ │ │ +
36
│ │ │ │ +
37 static constexpr std::size_t numFaces = 2*dim;
│ │ │ │ +
38 static constexpr std::size_t numDofs = numFaces*faceDofs + interiorDofs;
│ │ │ │ +
39
│ │ │ │ +
40 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
43 {
│ │ │ │ +
44 for (auto j : range(numFaces))
│ │ │ │ +
45 for (auto i : range(faceDofs))
│ │ │ │ +
46 li[j*faceDofs + i] = LocalKey(j, 1, i);
│ │ │ │
47
│ │ │ │ -
49 constexpr static int dimRange = m;
│ │ │ │ -
50
│ │ │ │ -
52 typedef R RangeType;
│ │ │ │ -
53
│ │ │ │ -
60 typedef J JacobianType;
│ │ │ │ -
61 };
│ │ │ │ -
│ │ │ │ -
62
│ │ │ │ -
63}
│ │ │ │ -
64#endif
│ │ │ │ +
48 for (auto i : range(interiorDofs))
│ │ │ │ +
49 li[numFaces*faceDofs + i] = LocalKey(0, 0, i);
│ │ │ │ +
50 }
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
53 std::size_t size () const { return numDofs; }
│ │ │ │ +
54
│ │ │ │ +
56 auto localKey (std::size_t i) const -> const LocalKey& { return li[i]; }
│ │ │ │ +
57
│ │ │ │ +
58 private:
│ │ │ │ +
59 std::vector<LocalKey> li;
│ │ │ │ +
60 };
│ │ │ │ +
│ │ │ │ +
61
│ │ │ │ +
62 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
63 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::interiorDofs;
│ │ │ │ +
64
│ │ │ │ +
65 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
66 constexpr unsigned int BDFMCubeLocalCoefficients<D, R, dim, order>::faceDofs;
│ │ │ │ +
67
│ │ │ │ +
68 template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
69 constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numFaces;
│ │ │ │ +
70
│ │ │ │ +
71 // template<class D, class R, unsigned int dim, unsigned int order>
│ │ │ │ +
72 // constexpr std::size_t BDFMCubeLocalCoefficients<D, R, dim, order>::numDofs;
│ │ │ │ +
73
│ │ │ │ +
74
│ │ │ │ +
75#ifndef DOXYGEN
│ │ │ │ +
76 template<class D, class R, unsigned int dim>
│ │ │ │ +
77 class BDFMCubeLocalCoefficients<D, R, dim, 0>
│ │ │ │ +
78 {
│ │ │ │ +
79 static_assert( AlwaysFalse<D>::value,
│ │ │ │ +
80 "`BDFMCubeLocalCoefficients` not defined for order 0." );
│ │ │ │ +
81 };
│ │ │ │ +
82#endif // #ifndef DOXYGEN
│ │ │ │ +
83
│ │ │ │ +
84} // namespace Dune
│ │ │ │ +
85
│ │ │ │ +
86#endif // #ifndef DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
D DomainType
domain type
Definition common/localbasis.hh:43
│ │ │ │ -
J JacobianType
Type to represent derivative.
Definition common/localbasis.hh:60
│ │ │ │ -
RF RangeFieldType
Export type for range field.
Definition common/localbasis.hh:46
│ │ │ │ -
static constexpr int dimRange
dimension of the range
Definition common/localbasis.hh:49
│ │ │ │ -
DF DomainFieldType
Export type for domain field.
Definition common/localbasis.hh:37
│ │ │ │ -
static constexpr int dimDomain
dimension of the domain
Definition common/localbasis.hh:40
│ │ │ │ -
R RangeType
range type
Definition common/localbasis.hh:52
│ │ │ │ +
Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:33
│ │ │ │ +
BDFMCubeLocalCoefficients()
Standard constructor.
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:42
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:53
│ │ │ │ +
auto localKey(std::size_t i) const -> const LocalKey &
geth i'th index
Definition brezzidouglasfortinmarini/cube/localcoefficients.hh:56
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,75 +1,111 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _c_o_m_m_o_n │ │ │ │ │ -common/localbasis.hh │ │ │ │ │ + * _b_r_e_z_z_i_d_o_u_g_l_a_s_f_o_r_t_i_n_m_a_r_i_n_i │ │ │ │ │ + * _c_u_b_e │ │ │ │ │ +brezzidouglasfortinmarini/cube/localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ -1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ -2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ -3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ +1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ -4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_COMMON_LOCALBASIS_HH │ │ │ │ │ -7 │ │ │ │ │ -8namespace _D_u_n_e │ │ │ │ │ -9{ │ │ │ │ │ -10 │ │ │ │ │ -33 template │ │ │ │ │ -_3_4 struct _L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -35 { │ │ │ │ │ -_3_7 typedef DF _D_o_m_a_i_n_F_i_e_l_d_T_y_p_e; │ │ │ │ │ -38 │ │ │ │ │ -_4_0 constexpr static int _d_i_m_D_o_m_a_i_n = n; │ │ │ │ │ -41 │ │ │ │ │ -_4_3 typedef D _D_o_m_a_i_n_T_y_p_e; │ │ │ │ │ -44 │ │ │ │ │ -_4_6 typedef RF _R_a_n_g_e_F_i_e_l_d_T_y_p_e; │ │ │ │ │ +2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ +3#ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +4#define │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +5 │ │ │ │ │ +6#include │ │ │ │ │ +7#include │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e │ │ │ │ │ +16{ │ │ │ │ │ +17 │ │ │ │ │ +31 template │ │ │ │ │ +_3_2 class _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +33 { │ │ │ │ │ +34 static constexpr unsigned int interiorDofs = dim*binomial(dim+order-2, │ │ │ │ │ +order-2); │ │ │ │ │ +35 static constexpr unsigned int faceDofs = binomial(dim+order-2, order-1); │ │ │ │ │ +36 │ │ │ │ │ +37 static constexpr std::size_t numFaces = 2*dim; │ │ │ │ │ +38 static constexpr std::size_t numDofs = numFaces*faceDofs + interiorDofs; │ │ │ │ │ +39 │ │ │ │ │ +40 public: │ │ │ │ │ +_4_2 _B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () : li(numDofs) │ │ │ │ │ +43 { │ │ │ │ │ +44 for (auto j : range(numFaces)) │ │ │ │ │ +45 for (auto i : range(faceDofs)) │ │ │ │ │ +46 li[j*faceDofs + i] = _L_o_c_a_l_K_e_y(j, 1, i); │ │ │ │ │ 47 │ │ │ │ │ -_4_9 constexpr static int _d_i_m_R_a_n_g_e = m; │ │ │ │ │ -50 │ │ │ │ │ -_5_2 typedef R _R_a_n_g_e_T_y_p_e; │ │ │ │ │ -53 │ │ │ │ │ -_6_0 typedef J _J_a_c_o_b_i_a_n_T_y_p_e; │ │ │ │ │ -61 }; │ │ │ │ │ -62 │ │ │ │ │ -63} │ │ │ │ │ -64#endif │ │ │ │ │ +48 for (auto i : range(interiorDofs)) │ │ │ │ │ +49 li[numFaces*faceDofs + i] = _L_o_c_a_l_K_e_y(0, 0, i); │ │ │ │ │ +50 } │ │ │ │ │ +51 │ │ │ │ │ +_5_3 std::size_t _s_i_z_e () const { return numDofs; } │ │ │ │ │ +54 │ │ │ │ │ +_5_6 auto _l_o_c_a_l_K_e_y (std::size_t i) const -> const _L_o_c_a_l_K_e_y& { return li[i]; } │ │ │ │ │ +57 │ │ │ │ │ +58 private: │ │ │ │ │ +59 std::vector li; │ │ │ │ │ +60 }; │ │ │ │ │ +61 │ │ │ │ │ +62 template │ │ │ │ │ +63 constexpr unsigned int BDFMCubeLocalCoefficients:: │ │ │ │ │ +interiorDofs; │ │ │ │ │ +64 │ │ │ │ │ +65 template │ │ │ │ │ +66 constexpr unsigned int BDFMCubeLocalCoefficients:: │ │ │ │ │ +faceDofs; │ │ │ │ │ +67 │ │ │ │ │ +68 template │ │ │ │ │ +69 constexpr std::size_t BDFMCubeLocalCoefficients::numFaces; │ │ │ │ │ +70 │ │ │ │ │ +71 // template │ │ │ │ │ +72 // constexpr std::size_t BDFMCubeLocalCoefficients:: │ │ │ │ │ +numDofs; │ │ │ │ │ +73 │ │ │ │ │ +74 │ │ │ │ │ +75#ifndef DOXYGEN │ │ │ │ │ +76 template │ │ │ │ │ +77 class BDFMCubeLocalCoefficients │ │ │ │ │ +78 { │ │ │ │ │ +79 static_assert( AlwaysFalse::value, │ │ │ │ │ +80 "`BDFMCubeLocalCoefficients` not defined for order 0." ); │ │ │ │ │ +81 }; │ │ │ │ │ +82#endif // #ifndef DOXYGEN │ │ │ │ │ +83 │ │ │ │ │ +84} // namespace Dune │ │ │ │ │ +85 │ │ │ │ │ +86#endif // #ifndef │ │ │ │ │ +DUNE_LOCALFUNCTIONS_BREZZIDOUGLASFORTINMARINI_CUBE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_T_y_p_e │ │ │ │ │ -D DomainType │ │ │ │ │ -domain type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n_T_y_p_e │ │ │ │ │ -J JacobianType │ │ │ │ │ -Type to represent derivative. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:60 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d_T_y_p_e │ │ │ │ │ -RF RangeFieldType │ │ │ │ │ -Export type for range field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static constexpr int dimRange │ │ │ │ │ -dimension of the range │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_T_y_p_e │ │ │ │ │ -DF DomainFieldType │ │ │ │ │ -Export type for domain field. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n │ │ │ │ │ -static constexpr int dimDomain │ │ │ │ │ -dimension of the domain │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_:_:_R_a_n_g_e_T_y_p_e │ │ │ │ │ -R RangeType │ │ │ │ │ -range type │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Layout map for Brezzi-Douglas-Fortin-Marini elements on cubes. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +BDFMCubeLocalCoefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:53 │ │ │ │ │ +_D_u_n_e_:_:_B_D_F_M_C_u_b_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +auto localKey(std::size_t i) const -> const LocalKey & │ │ │ │ │ +geth i'th index │ │ │ │ │ +DDeeffiinniittiioonn brezzidouglasfortinmarini/cube/localcoefficients.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh File Reference │ │ │ │ +dune-localfunctions: localcoefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -72,31 +72,26 @@ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
localbasis.hh File Reference
│ │ │ │ +
localcoefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <stdexcept>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/math.hh>
│ │ │ │ -#include <dune/localfunctions/common/localbasis.hh>
│ │ │ │ +
#include <array>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::SimplexP1BubbleLocalBasis< D, R, dim >
 P1 basis in dim-d enriched by an (order dim+1) element bubble function. More...
class  Dune::SimplexP1BubbleLocalCoefficients< dim >
 The Local keys associated to the dim-d local basis functions. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3,26 +3,20 @@ │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _e_n_r_i_c_h_e_d │ │ │ │ │ * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -localbasis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ +localcoefficients.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_i_m_ _> │ │ │ │ │ -  P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ - _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ +  The Local keys associated to the dim-d local basis functions. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04550_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: localbasis.hh Source File │ │ │ │ +dune-localfunctions: localcoefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -74,155 +74,75 @@ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ -
enriched/simplexp1bubble/localbasis.hh
│ │ │ │ +
enriched/simplexp1bubble/localcoefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ -
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ +
5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ +
6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │
7
│ │ │ │ -
8#include <numeric>
│ │ │ │ -
9#include <stdexcept>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
8#include <array>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │
11
│ │ │ │ -
12#include <dune/common/fvector.hh>
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14#include <dune/common/math.hh>
│ │ │ │ -
15
│ │ │ │ - │ │ │ │ -
17
│ │ │ │ -
18namespace Dune
│ │ │ │ -
19{
│ │ │ │ -
33 template<class D, class R, int dim>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
35 {
│ │ │ │ -
36 template<class> friend class SimplexP1BubbleLocalInterpolation;
│ │ │ │ -
37
│ │ │ │ -
39 using DomainType = FieldVector<D,dim>;
│ │ │ │ -
40
│ │ │ │ -
42 using RangeType = FieldVector<R,1>;
│ │ │ │ -
43
│ │ │ │ -
45 using JacobianType = FieldMatrix<R,1,dim>;
│ │ │ │ -
46
│ │ │ │ -
47 static constexpr int dimension = dim;
│ │ │ │ -
48 static constexpr int numVertices = dim+1;
│ │ │ │ -
49
│ │ │ │ -
50 public:
│ │ │ │ - │ │ │ │ +
12namespace Dune
│ │ │ │ +
13{
│ │ │ │ +
22 template <int dim>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 {
│ │ │ │ +
25 static const int numVertices = dim+1;
│ │ │ │ +
26
│ │ │ │ +
27 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ +
31 for (int i = 0; i <= dim; ++i)
│ │ │ │ +
32 li_[i] = LocalKey(i,dim,0); // Vertex
│ │ │ │ +
33 li_[numVertices] = LocalKey(0,0,0); // Element
│ │ │ │ +
34 }
│ │ │ │ +
│ │ │ │ +
35
│ │ │ │ +
│ │ │ │ +
37 static constexpr std::size_t size () noexcept
│ │ │ │ +
38 {
│ │ │ │ +
39 return numVertices + 1;
│ │ │ │ +
40 }
│ │ │ │ +
│ │ │ │ +
41
│ │ │ │ +
│ │ │ │ +
43 const LocalKey& localKey (std::size_t i) const noexcept
│ │ │ │ +
44 {
│ │ │ │ +
45 return li_[i];
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
47
│ │ │ │ +
48 private:
│ │ │ │ +
49 std::array<LocalKey, numVertices+1> li_;
│ │ │ │ +
50 };
│ │ │ │ +
│ │ │ │ +
51
│ │ │ │ +
52} // end namespace Dune
│ │ │ │
53
│ │ │ │ -
│ │ │ │ -
55 static constexpr std::size_t size () noexcept
│ │ │ │ -
56 {
│ │ │ │ -
57 return numVertices+1;
│ │ │ │ -
58 }
│ │ │ │ -
│ │ │ │ -
59
│ │ │ │ -
│ │ │ │ -
61 static constexpr void evaluateFunction (const DomainType& in,
│ │ │ │ -
62 std::vector<RangeType>& out)
│ │ │ │ -
63 {
│ │ │ │ -
64 out.resize(size());
│ │ │ │ -
65 out[0] = 1;
│ │ │ │ -
66 out.back() = power(dim+1, dim+1); // normalization of the bubble function
│ │ │ │ -
67 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
68 out[0] -= in[i];
│ │ │ │ -
69 out[i+1] = in[i];
│ │ │ │ -
70 out.back() *= in[i];
│ │ │ │ -
71 }
│ │ │ │ -
72 out.back() *= out[0];
│ │ │ │ -
73 }
│ │ │ │ -
│ │ │ │ -
74
│ │ │ │ -
│ │ │ │ -
76 static constexpr void evaluateJacobian (const DomainType& in,
│ │ │ │ -
77 std::vector<JacobianType>& out)
│ │ │ │ -
78 {
│ │ │ │ -
79 out.resize(size());
│ │ │ │ -
80 RangeType tmp = 1;
│ │ │ │ -
81 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
82 out[0][0][i] = -1;
│ │ │ │ -
83 for (int j = 0; j < dim; ++j)
│ │ │ │ -
84 out[j+1][0][i] = (i == j);
│ │ │ │ -
85 tmp -= in[i];
│ │ │ │ -
86 }
│ │ │ │ -
87
│ │ │ │ -
88 for (int i = 0; i < dim; ++i) {
│ │ │ │ -
89 out.back()[0][i] = power(dim+1, dim+1) * (tmp - in[i]);
│ │ │ │ -
90 for (int j = i+1; j < dim+i; ++j)
│ │ │ │ -
91 out.back()[0][i] *= in[j % dim];
│ │ │ │ -
92 }
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ -
94
│ │ │ │ -
│ │ │ │ -
96 static constexpr void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
97 const DomainType& in,
│ │ │ │ -
98 std::vector<RangeType>& out)
│ │ │ │ -
99 {
│ │ │ │ -
100 unsigned int totalOrder = 0;
│ │ │ │ -
101 for (int i = 0; i < dim; ++i)
│ │ │ │ -
102 totalOrder += order[i];
│ │ │ │ -
103
│ │ │ │ -
104 switch (totalOrder) {
│ │ │ │ -
105 case 0:
│ │ │ │ -
106 evaluateFunction(in,out);
│ │ │ │ -
107 break;
│ │ │ │ -
108 case 1: {
│ │ │ │ -
109 out.resize(size());
│ │ │ │ -
110 int d = 0; // the direction of differentiation
│ │ │ │ -
111 for (int i = 0; i < dim; ++i)
│ │ │ │ -
112 d += i * order[i];
│ │ │ │ -
113
│ │ │ │ -
114 out[0] = -1;
│ │ │ │ -
115 RangeType tmp = 1;
│ │ │ │ -
116 for (int j = 0; j < dim; ++j) {
│ │ │ │ -
117 out[j+1] = (d == j);
│ │ │ │ -
118 tmp -= in[j];
│ │ │ │ -
119 }
│ │ │ │ -
120 out.back() = power(dim+1, dim+1) * (tmp - in[d]);
│ │ │ │ -
121 for (int j = d+1; j < dim+d; ++j)
│ │ │ │ -
122 out.back() *= in[j % dim];
│ │ │ │ -
123 } break;
│ │ │ │ -
124 default:
│ │ │ │ -
125 throw std::runtime_error("Desired derivative order is not implemented");
│ │ │ │ -
126 }
│ │ │ │ -
127 }
│ │ │ │ -
│ │ │ │ -
128
│ │ │ │ -
│ │ │ │ -
130 static constexpr unsigned int order () noexcept
│ │ │ │ -
131 {
│ │ │ │ -
132 return dim+1;
│ │ │ │ -
133 }
│ │ │ │ -
│ │ │ │ -
134 };
│ │ │ │ -
│ │ │ │ -
135
│ │ │ │ -
136} // end namespace Dune
│ │ │ │ -
137
│ │ │ │ -
138#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH
│ │ │ │ +
54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Type traits for LocalBasisVirtualInterface.
Definition common/localbasis.hh:35
│ │ │ │ -
P1 basis in dim-d enriched by an (order dim+1) element bubble function.
Definition enriched/simplexp1bubble/localbasis.hh:35
│ │ │ │ -
static constexpr void evaluateJacobian(const DomainType &in, std::vector< JacobianType > &out)
Evaluate Jacobian of all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:76
│ │ │ │ -
static constexpr void evaluateFunction(const DomainType &in, std::vector< RangeType > &out)
Evaluate all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:61
│ │ │ │ -
static constexpr void partial(const std::array< unsigned int, dim > &order, const DomainType &in, std::vector< RangeType > &out)
Evaluate partial derivatives of all shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:96
│ │ │ │ -
static constexpr unsigned int order() noexcept
Returns maximal polynomial order of the basis functions.
Definition enriched/simplexp1bubble/localbasis.hh:130
│ │ │ │ -
static constexpr std::size_t size() noexcept
Returns number of shape functions.
Definition enriched/simplexp1bubble/localbasis.hh:55
│ │ │ │ -
Interpolation into the SimplexP1BubbleLocalBasis.
Definition enriched/simplexp1bubble/localinterpolation.hh:34
│ │ │ │ - │ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
The Local keys associated to the dim-d local basis functions.
Definition enriched/simplexp1bubble/localcoefficients.hh:24
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const noexcept
Returns the i'th local key.
Definition enriched/simplexp1bubble/localcoefficients.hh:43
│ │ │ │ +
SimplexP1BubbleLocalCoefficients() noexcept
Default constructor, initialized the local keys.
Definition enriched/simplexp1bubble/localcoefficients.hh:29
│ │ │ │ +
static constexpr std::size_t size() noexcept
Returns number of coefficients.
Definition enriched/simplexp1bubble/localcoefficients.hh:37
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -2,164 +2,76 @@ │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ * _e_n_r_i_c_h_e_d │ │ │ │ │ * _s_i_m_p_l_e_x_p_1_b_u_b_b_l_e │ │ │ │ │ -enriched/simplexp1bubble/localbasis.hh │ │ │ │ │ +enriched/simplexp1bubble/localcoefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ -6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ +5#ifndef DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +6#define DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ 7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ 11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_b_a_s_i_s_._h_h> │ │ │ │ │ -17 │ │ │ │ │ -18namespace _D_u_n_e │ │ │ │ │ -19{ │ │ │ │ │ -33 template │ │ │ │ │ -_3_4 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -35 { │ │ │ │ │ -_3_6 template friend class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n; │ │ │ │ │ -37 │ │ │ │ │ -39 using DomainType = FieldVector; │ │ │ │ │ -40 │ │ │ │ │ -42 using RangeType = FieldVector; │ │ │ │ │ -43 │ │ │ │ │ -45 using JacobianType = FieldMatrix; │ │ │ │ │ -46 │ │ │ │ │ -47 static constexpr int dimension = dim; │ │ │ │ │ -48 static constexpr int numVertices = dim+1; │ │ │ │ │ -49 │ │ │ │ │ -50 public: │ │ │ │ │ -_5_2 using _T_r_a_i_t_s = │ │ │ │ │ -_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s_<_D_,_d_i_m_,_D_o_m_a_i_n_T_y_p_e_,_R_,_1_,_R_a_n_g_e_T_y_p_e_,_J_a_c_o_b_i_a_n_T_y_p_e_>; │ │ │ │ │ +12namespace _D_u_n_e │ │ │ │ │ +13{ │ │ │ │ │ +22 template │ │ │ │ │ +_2_3 class _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +24 { │ │ │ │ │ +25 static const int numVertices = dim+1; │ │ │ │ │ +26 │ │ │ │ │ +27 public: │ │ │ │ │ +_2_9 _S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () noexcept │ │ │ │ │ +30 { │ │ │ │ │ +31 for (int i = 0; i <= dim; ++i) │ │ │ │ │ +32 li_[i] = _L_o_c_a_l_K_e_y(i,dim,0); // Vertex │ │ │ │ │ +33 li_[numVertices] = _L_o_c_a_l_K_e_y(0,0,0); // Element │ │ │ │ │ +34 } │ │ │ │ │ +35 │ │ │ │ │ +_3_7 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ +38 { │ │ │ │ │ +39 return numVertices + 1; │ │ │ │ │ +40 } │ │ │ │ │ +41 │ │ │ │ │ +_4_3 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y (std::size_t i) const noexcept │ │ │ │ │ +44 { │ │ │ │ │ +45 return li_[i]; │ │ │ │ │ +46 } │ │ │ │ │ +47 │ │ │ │ │ +48 private: │ │ │ │ │ +49 std::array li_; │ │ │ │ │ +50 }; │ │ │ │ │ +51 │ │ │ │ │ +52} // end namespace Dune │ │ │ │ │ 53 │ │ │ │ │ -_5_5 static constexpr std::size_t _s_i_z_e () noexcept │ │ │ │ │ -56 { │ │ │ │ │ -57 return numVertices+1; │ │ │ │ │ -58 } │ │ │ │ │ -59 │ │ │ │ │ -_6_1 static constexpr void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n (const DomainType& in, │ │ │ │ │ -62 std::vector& out) │ │ │ │ │ -63 { │ │ │ │ │ -64 out.resize(_s_i_z_e()); │ │ │ │ │ -65 out[0] = 1; │ │ │ │ │ -66 out.back() = power(dim+1, dim+1); // normalization of the bubble function │ │ │ │ │ -67 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -68 out[0] -= in[i]; │ │ │ │ │ -69 out[i+1] = in[i]; │ │ │ │ │ -70 out.back() *= in[i]; │ │ │ │ │ -71 } │ │ │ │ │ -72 out.back() *= out[0]; │ │ │ │ │ -73 } │ │ │ │ │ -74 │ │ │ │ │ -_7_6 static constexpr void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n (const DomainType& in, │ │ │ │ │ -77 std::vector& out) │ │ │ │ │ -78 { │ │ │ │ │ -79 out.resize(_s_i_z_e()); │ │ │ │ │ -80 RangeType tmp = 1; │ │ │ │ │ -81 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -82 out[0][0][i] = -1; │ │ │ │ │ -83 for (int j = 0; j < dim; ++j) │ │ │ │ │ -84 out[j+1][0][i] = (i == j); │ │ │ │ │ -85 tmp -= in[i]; │ │ │ │ │ -86 } │ │ │ │ │ -87 │ │ │ │ │ -88 for (int i = 0; i < dim; ++i) { │ │ │ │ │ -89 out.back()[0][i] = power(dim+1, dim+1) * (tmp - in[i]); │ │ │ │ │ -90 for (int j = i+1; j < dim+i; ++j) │ │ │ │ │ -91 out.back()[0][i] *= in[j % dim]; │ │ │ │ │ -92 } │ │ │ │ │ -93 } │ │ │ │ │ -94 │ │ │ │ │ -_9_6 static constexpr void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -97 const DomainType& in, │ │ │ │ │ -98 std::vector& out) │ │ │ │ │ -99 { │ │ │ │ │ -100 unsigned int totalOrder = 0; │ │ │ │ │ -101 for (int i = 0; i < dim; ++i) │ │ │ │ │ -102 totalOrder += _o_r_d_e_r[i]; │ │ │ │ │ -103 │ │ │ │ │ -104 switch (totalOrder) { │ │ │ │ │ -105 case 0: │ │ │ │ │ -106 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in,out); │ │ │ │ │ -107 break; │ │ │ │ │ -108 case 1: { │ │ │ │ │ -109 out.resize(_s_i_z_e()); │ │ │ │ │ -110 int d = 0; // the direction of differentiation │ │ │ │ │ -111 for (int i = 0; i < dim; ++i) │ │ │ │ │ -112 d += i * _o_r_d_e_r[i]; │ │ │ │ │ -113 │ │ │ │ │ -114 out[0] = -1; │ │ │ │ │ -115 RangeType tmp = 1; │ │ │ │ │ -116 for (int j = 0; j < dim; ++j) { │ │ │ │ │ -117 out[j+1] = (d == j); │ │ │ │ │ -118 tmp -= in[j]; │ │ │ │ │ -119 } │ │ │ │ │ -120 out.back() = power(dim+1, dim+1) * (tmp - in[d]); │ │ │ │ │ -121 for (int j = d+1; j < dim+d; ++j) │ │ │ │ │ -122 out.back() *= in[j % dim]; │ │ │ │ │ -123 } break; │ │ │ │ │ -124 default: │ │ │ │ │ -125 throw std::runtime_error("Desired derivative order is not implemented"); │ │ │ │ │ -126 } │ │ │ │ │ -127 } │ │ │ │ │ -128 │ │ │ │ │ -_1_3_0 static constexpr unsigned int _o_r_d_e_r () noexcept │ │ │ │ │ -131 { │ │ │ │ │ -132 return dim+1; │ │ │ │ │ -133 } │ │ │ │ │ -134 }; │ │ │ │ │ -135 │ │ │ │ │ -136} // end namespace Dune │ │ │ │ │ -137 │ │ │ │ │ -138#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALBASIS_HH │ │ │ │ │ +54#endif // DUNE_LOCALFUNCTIONS_ENRICHED_SIMPLEXP1BUBBLE_LOCALCOEFFICIENTS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_B_a_s_i_s_T_r_a_i_t_s │ │ │ │ │ -Type traits for LocalBasisVirtualInterface. │ │ │ │ │ -DDeeffiinniittiioonn common/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s │ │ │ │ │ -P1 basis in dim-d enriched by an (order dim+1) element bubble function. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -static constexpr void evaluateJacobian(const DomainType &in, std::vector< │ │ │ │ │ -JacobianType > &out) │ │ │ │ │ -Evaluate Jacobian of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:76 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -static constexpr void evaluateFunction(const DomainType &in, std::vector< │ │ │ │ │ -RangeType > &out) │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -static constexpr void partial(const std::array< unsigned int, dim > &order, │ │ │ │ │ -const DomainType &in, std::vector< RangeType > &out) │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:96 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -static constexpr unsigned int order() noexcept │ │ │ │ │ -Returns maximal polynomial order of the basis functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:130 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +The Local keys associated to the dim-d local basis functions. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const noexcept │ │ │ │ │ +Returns the i'th local key. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +SimplexP1BubbleLocalCoefficients() noexcept │ │ │ │ │ +Default constructor, initialized the local keys. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:29 │ │ │ │ │ +_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ static constexpr std::size_t size() noexcept │ │ │ │ │ -Returns number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localbasis.hh:55 │ │ │ │ │ -_D_u_n_e_:_:_S_i_m_p_l_e_x_P_1_B_u_b_b_l_e_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Interpolation into the SimplexP1BubbleLocalBasis. │ │ │ │ │ -DDeeffiinniittiioonn enriched/simplexp1bubble/localinterpolation.hh:34 │ │ │ │ │ -_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +Returns number of coefficients. │ │ │ │ │ +DDeeffiinniittiioonn enriched/simplexp1bubble/localcoefficients.hh:37 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek.hh File Reference │ │ │ │ +dune-localfunctions: basis.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,36 +65,39 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
rannacherturek.hh File Reference
│ │ │ │ +
basis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <dune/geometry/type.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include "rannachertureklocalbasis.hh"
│ │ │ │ -#include "rannachertureklocalcoefficients.hh"
│ │ │ │ -#include "rannachertureklocalinterpolation.hh"
│ │ │ │ +
#include <numeric>
│ │ │ │ +#include <cstddef>
│ │ │ │ +#include <vector>
│ │ │ │ +#include <dune/common/fmatrix.hh>
│ │ │ │ +#include <dune/common/fvector.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

struct  Dune::RannacherTurekLocalFiniteElement< D, R, d >
 Rannacher-Turek shape functions. More...
class  Dune::PowerBasis< Backend, dimR >
 Meta-basis turning a scalar basis into vector-valued basis. More...
 
struct  Dune::PowerBasis< Backend, dimR >::Traits
 types of domain and range More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,28 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -rannacherturek.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +basis.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ -  Rannacher-Turek shape functions. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _> │ │ │ │ │ +  Meta-basis turning a scalar basis into vector-valued basis. _M_o_r_e_._._. │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  types of domain and range _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04562_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: rannacherturek.hh Source File │ │ │ │ +dune-localfunctions: basis.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,111 +70,124 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
rannacherturek/rannacherturek.hh
│ │ │ │ +
meta/power/basis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ -
6#define DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <dune/geometry/type.hh>
│ │ │ │ -
9
│ │ │ │ - │ │ │ │ -
11
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <numeric>
│ │ │ │ +
10#include <cstddef>
│ │ │ │ +
11#include <vector>
│ │ │ │ +
12
│ │ │ │ +
13#include <dune/common/fmatrix.hh>
│ │ │ │ +
14#include <dune/common/fvector.hh>
│ │ │ │
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │ -
18
│ │ │ │ -
28 template< class D, class R, unsigned int d >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
30 {
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ -
36
│ │ │ │ -
│ │ │ │ -
38 const typename Traits::LocalBasisType &localBasis () const
│ │ │ │ -
39 {
│ │ │ │ -
40 return localBasis_;
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
45 {
│ │ │ │ -
46 return localCoefficients_;
│ │ │ │ -
47 }
│ │ │ │ -
│ │ │ │ -
48
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
51 {
│ │ │ │ -
52 return localInterpolation_;
│ │ │ │ -
53 }
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
│ │ │ │ -
56 unsigned int size () const
│ │ │ │ -
57 {
│ │ │ │ -
58 return localBasis_.size();
│ │ │ │ -
59 }
│ │ │ │ -
│ │ │ │ -
60
│ │ │ │ -
│ │ │ │ -
62 GeometryType type () const
│ │ │ │ -
63 {
│ │ │ │ -
64 return GeometryTypes::cube(d);
│ │ │ │ -
65 }
│ │ │ │ -
│ │ │ │ -
66
│ │ │ │ -
67 private:
│ │ │ │ -
68 typename Traits::LocalBasisType localBasis_;
│ │ │ │ -
69 typename Traits::LocalCoefficientsType localCoefficients_;
│ │ │ │ -
70 typename Traits::LocalInterpolationType localInterpolation_;
│ │ │ │ -
71 };
│ │ │ │ -
│ │ │ │ -
72
│ │ │ │ -
73} // namespace Dune
│ │ │ │ -
74
│ │ │ │ -
75#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
16namespace Dune {
│ │ │ │ +
17
│ │ │ │ +
19
│ │ │ │ +
25 template<class Backend, std::size_t dimR>
│ │ │ │ +
│ │ │ │ +
26 class PowerBasis {
│ │ │ │ +
27 static_assert(Backend::Traits::dimRange == 1,
│ │ │ │ +
28 "PowerBasis works only with scalar backends");
│ │ │ │ +
29
│ │ │ │ +
30 // don't use a reference here so this class stays copyable
│ │ │ │ +
31 const Backend *backend;
│ │ │ │ +
32
│ │ │ │ +
33 public:
│ │ │ │ +
│ │ │ │ +
35 struct Traits : public Backend::Traits
│ │ │ │ +
36 {
│ │ │ │ +
38 static const std::size_t dimRange = dimR;
│ │ │ │ +
40 typedef FieldVector<typename Traits::RangeField, dimR> Range;
│ │ │ │ +
41
│ │ │ │ +
43
│ │ │ │ +
47 typedef FieldMatrix<typename Traits::RangeField, dimR,
│ │ │ │ +
48 Traits::dimDomainGlobal> Jacobian;
│ │ │ │ +
49 };
│ │ │ │ +
│ │ │ │ +
50
│ │ │ │ +
52
│ │ │ │ +
58 PowerBasis(const Backend &backend_) : backend(&backend_) { }
│ │ │ │ +
59
│ │ │ │ +
61 std::size_t size () const { return backend->size()*dimR; }
│ │ │ │ +
63 std::size_t order () const { return backend->order(); }
│ │ │ │ +
64
│ │ │ │ +
│ │ │ │ +
66 void evaluateFunction(const typename Traits::DomainLocal& in,
│ │ │ │ +
67 std::vector<typename Traits::Range>& out) const
│ │ │ │ +
68 {
│ │ │ │ +
69 std::vector<typename Backend::Traits::Range> backendValues;
│ │ │ │ +
70 backend->evaluateFunction(in, backendValues);
│ │ │ │ +
71 out.assign(size(), typename Traits::Range(0));
│ │ │ │ +
72 for(std::size_t d = 0; d < dimR; ++d)
│ │ │ │ +
73 for(std::size_t i = 0; i < backend->size(); ++i)
│ │ │ │ +
74 out[d*backend->size()+i][d] = backendValues[i][0];
│ │ │ │ +
75 }
│ │ │ │ +
│ │ │ │ +
76
│ │ │ │ +
│ │ │ │ +
78 void evaluateJacobian(const typename Traits::DomainLocal& in,
│ │ │ │ +
79 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ +
80 {
│ │ │ │ +
81 std::vector<typename Backend::Traits::Jacobian> backendValues;
│ │ │ │ +
82 backend->evaluateJacobian(in, backendValues);
│ │ │ │ +
83 out.assign(size(), typename Traits::Jacobian(0));
│ │ │ │ +
84 for(std::size_t d = 0; d < dimR; ++d)
│ │ │ │ +
85 for(std::size_t i = 0; i < backend->size(); ++i)
│ │ │ │ +
86 out[d*backend->size()+i][d] = backendValues[i][0];
│ │ │ │ +
87 }
│ │ │ │ +
│ │ │ │ +
88
│ │ │ │ +
│ │ │ │ +
90 void partial (const std::array<unsigned int, Backend::Traits::dimDomainGlobal>& order,
│ │ │ │ +
91 const typename Traits::DomainLocal& in, // position
│ │ │ │ +
92 std::vector<typename Traits::Range>& out) const // return value
│ │ │ │ +
93 {
│ │ │ │ +
94 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
95 if (totalOrder == 0) {
│ │ │ │ +
96 evaluateFunction(in, out);
│ │ │ │ +
97 } else {
│ │ │ │ +
98 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
99 }
│ │ │ │ +
100 }
│ │ │ │ +
│ │ │ │ +
101 };
│ │ │ │ +
│ │ │ │ +
102
│ │ │ │ +
103} // namespace Dune
│ │ │ │ +
104
│ │ │ │ +
105#endif // DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ -
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ -
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ -
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ -
Rannacher-Turek shape functions.
Definition rannacherturek/rannacherturek.hh:30
│ │ │ │ -
unsigned int size() const
Number of shape functions in this finite element.
Definition rannacherturek/rannacherturek.hh:56
│ │ │ │ -
const Traits::LocalInterpolationType & localInterpolation() const
return local interpolation
Definition rannacherturek/rannacherturek.hh:50
│ │ │ │ -
GeometryType type() const
return geometry type
Definition rannacherturek/rannacherturek.hh:62
│ │ │ │ -
const Traits::LocalBasisType & localBasis() const
return local basis
Definition rannacherturek/rannacherturek.hh:38
│ │ │ │ -
const Traits::LocalCoefficientsType & localCoefficients() const
return local coefficients
Definition rannacherturek/rannacherturek.hh:44
│ │ │ │ -
LocalFiniteElementTraits< RannacherTurekLocalBasis< D, R, d >, RannacherTurekLocalCoefficients< d >, RannacherTurekLocalInterpolation< D, R, d > > Traits
export traits class
Definition rannacherturek/rannacherturek.hh:35
│ │ │ │ -
layout for Rannacher-Turek elements
Definition rannachertureklocalcoefficients.hh:27
│ │ │ │ -
please doc me
Definition rannachertureklocalinterpolation.hh:31
│ │ │ │ +
Meta-basis turning a scalar basis into vector-valued basis.
Definition meta/power/basis.hh:26
│ │ │ │ +
PowerBasis(const Backend &backend_)
Construct a PowerBasis.
Definition meta/power/basis.hh:58
│ │ │ │ +
std::size_t size() const
Number of shape functions.
Definition meta/power/basis.hh:61
│ │ │ │ +
void partial(const std::array< unsigned int, Backend::Traits::dimDomainGlobal > &order, const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate partial derivatives of all shape functions.
Definition meta/power/basis.hh:90
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Evaluate Jacobian of all shape functions at given position.
Definition meta/power/basis.hh:78
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate all shape functions at given position.
Definition meta/power/basis.hh:66
│ │ │ │ +
std::size_t order() const
Polynomial order of the shape functions for quadrature.
Definition meta/power/basis.hh:63
│ │ │ │ +
types of domain and range
Definition meta/power/basis.hh:36
│ │ │ │ +
FieldMatrix< typename Traits::RangeField, dimR, Traits::dimDomainGlobal > Jacobian
Jacobian properties.
Definition meta/power/basis.hh:48
│ │ │ │ +
FieldVector< typename Traits::RangeField, dimR > Range
Type used for range values.
Definition meta/power/basis.hh:40
│ │ │ │ +
static const std::size_t dimRange
Dimension of the range values.
Definition meta/power/basis.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,125 +1,144 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ -rannacherturek/rannacherturek.hh │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ +meta/power/basis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ -6#define DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9 │ │ │ │ │ -10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ -11 │ │ │ │ │ -12#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ -13#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ -14#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12 │ │ │ │ │ +13#include │ │ │ │ │ +14#include │ │ │ │ │ 15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ -18 │ │ │ │ │ -28 template< class D, class R, unsigned int d > │ │ │ │ │ -_2_9 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -30 { │ │ │ │ │ -32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_ _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_ _>, │ │ │ │ │ -33 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_ _>, │ │ │ │ │ -34 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ -_3_5 > _T_r_a_i_t_s; │ │ │ │ │ -36 │ │ │ │ │ -_3_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e &_l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ -39 { │ │ │ │ │ -40 return localBasis_; │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e &_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ -45 { │ │ │ │ │ -46 return localCoefficients_; │ │ │ │ │ -47 } │ │ │ │ │ -48 │ │ │ │ │ -_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e &_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ -51 { │ │ │ │ │ -52 return localInterpolation_; │ │ │ │ │ -53 } │ │ │ │ │ -54 │ │ │ │ │ -_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ -57 { │ │ │ │ │ -58 return localBasis_.size(); │ │ │ │ │ -59 } │ │ │ │ │ -60 │ │ │ │ │ -_6_2 GeometryType _t_y_p_e () const │ │ │ │ │ -63 { │ │ │ │ │ -64 return GeometryTypes::cube(d); │ │ │ │ │ -65 } │ │ │ │ │ -66 │ │ │ │ │ -67 private: │ │ │ │ │ -68 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e localBasis_; │ │ │ │ │ -69 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e localCoefficients_; │ │ │ │ │ -70 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e localInterpolation_; │ │ │ │ │ -71 }; │ │ │ │ │ -72 │ │ │ │ │ -73} // namespace Dune │ │ │ │ │ -74 │ │ │ │ │ -75#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ -_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +16namespace _D_u_n_e { │ │ │ │ │ +17 │ │ │ │ │ +19 │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _P_o_w_e_r_B_a_s_i_s { │ │ │ │ │ +27 static_assert(Backend::Traits::dimRange == 1, │ │ │ │ │ +28 "PowerBasis works only with scalar backends"); │ │ │ │ │ +29 │ │ │ │ │ +30 // don't use a reference here so this class stays copyable │ │ │ │ │ +31 const Backend *backend; │ │ │ │ │ +32 │ │ │ │ │ +33 public: │ │ │ │ │ +_3_5 struct _T_r_a_i_t_s : public Backend::Traits │ │ │ │ │ +36 { │ │ │ │ │ +_3_8 static const std::size_t _d_i_m_R_a_n_g_e = dimR; │ │ │ │ │ +_4_0 typedef FieldVector _R_a_n_g_e; │ │ │ │ │ +41 │ │ │ │ │ +43 │ │ │ │ │ +47 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ +49 }; │ │ │ │ │ +50 │ │ │ │ │ +52 │ │ │ │ │ +_5_8 _P_o_w_e_r_B_a_s_i_s(const Backend &backend_) : backend(&backend_) { } │ │ │ │ │ +59 │ │ │ │ │ +_6_1 std::size_t _s_i_z_e () const { return backend->size()*dimR; } │ │ │ │ │ +_6_3 std::size_t _o_r_d_e_r () const { return backend->order(); } │ │ │ │ │ +64 │ │ │ │ │ +_6_6 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename Traits::DomainLocal& in, │ │ │ │ │ +67 std::vector& out) const │ │ │ │ │ +68 { │ │ │ │ │ +69 std::vector backendValues; │ │ │ │ │ +70 backend->evaluateFunction(in, backendValues); │ │ │ │ │ +71 out.assign(_s_i_z_e(), typename _T_r_a_i_t_s_:_:_R_a_n_g_e(0)); │ │ │ │ │ +72 for(std::size_t d = 0; d < dimR; ++d) │ │ │ │ │ +73 for(std::size_t i = 0; i < backend->size(); ++i) │ │ │ │ │ +74 out[d*backend->size()+i][d] = backendValues[i][0]; │ │ │ │ │ +75 } │ │ │ │ │ +76 │ │ │ │ │ +_7_8 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename Traits::DomainLocal& in, │ │ │ │ │ +79 std::vector& out) const │ │ │ │ │ +80 { │ │ │ │ │ +81 std::vector backendValues; │ │ │ │ │ +82 backend->evaluateJacobian(in, backendValues); │ │ │ │ │ +83 out.assign(_s_i_z_e(), typename _T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n(0)); │ │ │ │ │ +84 for(std::size_t d = 0; d < dimR; ++d) │ │ │ │ │ +85 for(std::size_t i = 0; i < backend->size(); ++i) │ │ │ │ │ +86 out[d*backend->size()+i][d] = backendValues[i][0]; │ │ │ │ │ +87 } │ │ │ │ │ +88 │ │ │ │ │ +_9_0 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +91 const typename Traits::DomainLocal& in, // position │ │ │ │ │ +92 std::vector& out) const // return value │ │ │ │ │ +93 { │ │ │ │ │ +94 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +95 if (totalOrder == 0) { │ │ │ │ │ +96 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +97 } else { │ │ │ │ │ +98 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +99 } │ │ │ │ │ +100 } │ │ │ │ │ +101 }; │ │ │ │ │ +102 │ │ │ │ │ +103} // namespace Dune │ │ │ │ │ +104 │ │ │ │ │ +105#endif // DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ -traits helper struct │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ -LB LocalBasisType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ -LC LocalCoefficientsType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ -LI LocalInterpolationType │ │ │ │ │ -DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ -Rannacher-Turek shape functions. │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ -unsigned int size() const │ │ │ │ │ -Number of shape functions in this finite element. │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ -return local interpolation │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ -GeometryType type() const │ │ │ │ │ -return geometry type │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:62 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ -const Traits::LocalBasisType & localBasis() const │ │ │ │ │ -return local basis │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ -return local coefficients │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ -LocalFiniteElementTraits< RannacherTurekLocalBasis< D, R, d >, │ │ │ │ │ -RannacherTurekLocalCoefficients< d >, RannacherTurekLocalInterpolation< D, R, d │ │ │ │ │ -> > Traits │ │ │ │ │ -export traits class │ │ │ │ │ -DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -layout for Rannacher-Turek elements │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:27 │ │ │ │ │ -_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -please doc me │ │ │ │ │ -DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ +Meta-basis turning a scalar basis into vector-valued basis. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ +PowerBasis(const Backend &backend_) │ │ │ │ │ +Construct a PowerBasis. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:58 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +Number of shape functions. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:61 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, Backend::Traits::dimDomainGlobal > │ │ │ │ │ +&order, const typename Traits::DomainLocal &in, std::vector< typename Traits:: │ │ │ │ │ +Range > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ +typename Traits::Jacobian > &out) const │ │ │ │ │ +Evaluate Jacobian of all shape functions at given position. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ +typename Traits::Range > &out) const │ │ │ │ │ +Evaluate all shape functions at given position. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:66 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +std::size_t order() const │ │ │ │ │ +Polynomial order of the shape functions for quadrature. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +types of domain and range │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:36 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ +FieldMatrix< typename Traits::RangeField, dimR, Traits::dimDomainGlobal > │ │ │ │ │ +Jacobian │ │ │ │ │ +Jacobian properties. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ +FieldVector< typename Traits::RangeField, dimR > Range │ │ │ │ │ +Type used for range values. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:40 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +static const std::size_t dimRange │ │ │ │ │ +Dimension of the range values. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/basis.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565.html │ │ │ │ @@ -65,39 +65,41 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
basis.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <numeric>
│ │ │ │ -#include <cstddef>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ #include <dune/common/fmatrix.hh>
│ │ │ │ #include <dune/common/fvector.hh>
│ │ │ │ +#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ +#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PowerBasis< Backend, dimR >
 Meta-basis turning a scalar basis into vector-valued basis. More...
class  Dune::EdgeS0_5Basis< Geometry, RF >
 Basis for order 0.5 (lowest order) edge elements on simplices. More...
 
struct  Dune::PowerBasis< Backend, dimR >::Traits
 types of domain and range More...
struct  Dune::EdgeS0_5Basis< Geometry, RF >::Traits
 export type traits for function signature More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,28 +1,30 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ basis.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _> │ │ │ │ │ -  Meta-basis turning a scalar basis into vector-valued basis. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ +  Basis for order 0.5 (lowest order) edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ -struct   _D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_<_ _B_a_c_k_e_n_d_,_ _d_i_m_R_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -  types of domain and range _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ +  export type traits for function signature _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04565_source.html │ │ │ │ @@ -70,124 +70,217 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
meta/power/basis.hh
│ │ │ │ +
whitney/edges0.5/basis.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │
8
│ │ │ │ -
9#include <numeric>
│ │ │ │ -
10#include <cstddef>
│ │ │ │ -
11#include <vector>
│ │ │ │ -
12
│ │ │ │ -
13#include <dune/common/fmatrix.hh>
│ │ │ │ -
14#include <dune/common/fvector.hh>
│ │ │ │ -
15
│ │ │ │ -
16namespace Dune {
│ │ │ │ -
17
│ │ │ │ -
19
│ │ │ │ -
25 template<class Backend, std::size_t dimR>
│ │ │ │ -
│ │ │ │ -
26 class PowerBasis {
│ │ │ │ -
27 static_assert(Backend::Traits::dimRange == 1,
│ │ │ │ -
28 "PowerBasis works only with scalar backends");
│ │ │ │ -
29
│ │ │ │ -
30 // don't use a reference here so this class stays copyable
│ │ │ │ -
31 const Backend *backend;
│ │ │ │ -
32
│ │ │ │ -
33 public:
│ │ │ │ -
│ │ │ │ -
35 struct Traits : public Backend::Traits
│ │ │ │ -
36 {
│ │ │ │ -
38 static const std::size_t dimRange = dimR;
│ │ │ │ -
40 typedef FieldVector<typename Traits::RangeField, dimR> Range;
│ │ │ │ -
41
│ │ │ │ -
43
│ │ │ │ -
47 typedef FieldMatrix<typename Traits::RangeField, dimR,
│ │ │ │ -
48 Traits::dimDomainGlobal> Jacobian;
│ │ │ │ -
49 };
│ │ │ │ -
│ │ │ │ -
50
│ │ │ │ -
52
│ │ │ │ -
58 PowerBasis(const Backend &backend_) : backend(&backend_) { }
│ │ │ │ -
59
│ │ │ │ -
61 std::size_t size () const { return backend->size()*dimR; }
│ │ │ │ -
63 std::size_t order () const { return backend->order(); }
│ │ │ │ -
64
│ │ │ │ -
│ │ │ │ -
66 void evaluateFunction(const typename Traits::DomainLocal& in,
│ │ │ │ -
67 std::vector<typename Traits::Range>& out) const
│ │ │ │ -
68 {
│ │ │ │ -
69 std::vector<typename Backend::Traits::Range> backendValues;
│ │ │ │ -
70 backend->evaluateFunction(in, backendValues);
│ │ │ │ -
71 out.assign(size(), typename Traits::Range(0));
│ │ │ │ -
72 for(std::size_t d = 0; d < dimR; ++d)
│ │ │ │ -
73 for(std::size_t i = 0; i < backend->size(); ++i)
│ │ │ │ -
74 out[d*backend->size()+i][d] = backendValues[i][0];
│ │ │ │ -
75 }
│ │ │ │ -
│ │ │ │ -
76
│ │ │ │ -
│ │ │ │ -
78 void evaluateJacobian(const typename Traits::DomainLocal& in,
│ │ │ │ -
79 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ -
80 {
│ │ │ │ -
81 std::vector<typename Backend::Traits::Jacobian> backendValues;
│ │ │ │ -
82 backend->evaluateJacobian(in, backendValues);
│ │ │ │ -
83 out.assign(size(), typename Traits::Jacobian(0));
│ │ │ │ -
84 for(std::size_t d = 0; d < dimR; ++d)
│ │ │ │ -
85 for(std::size_t i = 0; i < backend->size(); ++i)
│ │ │ │ -
86 out[d*backend->size()+i][d] = backendValues[i][0];
│ │ │ │ -
87 }
│ │ │ │ -
│ │ │ │ -
88
│ │ │ │ -
│ │ │ │ -
90 void partial (const std::array<unsigned int, Backend::Traits::dimDomainGlobal>& order,
│ │ │ │ -
91 const typename Traits::DomainLocal& in, // position
│ │ │ │ -
92 std::vector<typename Traits::Range>& out) const // return value
│ │ │ │ -
93 {
│ │ │ │ -
94 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
95 if (totalOrder == 0) {
│ │ │ │ -
96 evaluateFunction(in, out);
│ │ │ │ -
97 } else {
│ │ │ │ -
98 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
99 }
│ │ │ │ -
100 }
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ +
12#include <dune/common/fmatrix.hh>
│ │ │ │ +
13#include <dune/common/fvector.hh>
│ │ │ │ +
14
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ +
18
│ │ │ │ +
19namespace Dune {
│ │ │ │ +
20
│ │ │ │ +
22 //
│ │ │ │ +
23 // Basis
│ │ │ │ +
24 //
│ │ │ │ +
25
│ │ │ │ +
27
│ │ │ │ +
35 template<class Geometry, class RF>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
37 private EdgeS0_5Common<Geometry::mydimension, typename Geometry::ctype>
│ │ │ │ +
38 {
│ │ │ │ +
39 public:
│ │ │ │ +
│ │ │ │ +
41 struct Traits {
│ │ │ │ +
42 typedef typename Geometry::ctype DomainField;
│ │ │ │ +
43 static const std::size_t dimDomainLocal = Geometry::mydimension;
│ │ │ │ +
44 static const std::size_t dimDomainGlobal = Geometry::coorddimension;
│ │ │ │ +
45 typedef FieldVector<DomainField, dimDomainLocal> DomainLocal;
│ │ │ │ +
46 typedef FieldVector<DomainField, dimDomainGlobal> DomainGlobal;
│ │ │ │ +
47
│ │ │ │ +
48 typedef RF RangeField;
│ │ │ │ +
49 static const std::size_t dimRange = dimDomainLocal;
│ │ │ │ +
50 typedef FieldVector<RangeField, dimRange> Range;
│ │ │ │ +
51
│ │ │ │ +
52 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal> Jacobian;
│ │ │ │ +
53 };
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
55 private:
│ │ │ │ +
56 typedef Dune::Impl::LagrangeSimplexLocalBasis<typename Traits::DomainField,
│ │ │ │ +
57 typename Traits::RangeField,
│ │ │ │ + │ │ │ │ +
59 1 // Polynomial order
│ │ │ │ +
60 > P1LocalBasis;
│ │ │ │ + │ │ │ │ +
62
│ │ │ │ +
63 static const P1LocalBasis& p1LocalBasis;
│ │ │ │ +
64 static const std::size_t dim = Traits::dimDomainLocal;
│ │ │ │ +
65
│ │ │ │ + │ │ │ │ +
67 using Base::refelem;
│ │ │ │ +
68 using Base::s;
│ │ │ │ +
69
│ │ │ │ +
70 // global values of the Jacobians (gradients) of the p1 basis
│ │ │ │ +
71 std::vector<typename P1Basis::Traits::Jacobian> p1j;
│ │ │ │ +
72 // edge sizes and orientations
│ │ │ │ +
73 std::vector<typename Traits::DomainField> edgel;
│ │ │ │ +
74
│ │ │ │ +
75 public:
│ │ │ │ +
77
│ │ │ │ +
83 template<typename VertexOrder>
│ │ │ │ +
│ │ │ │ +
84 EdgeS0_5Basis(const Geometry& geo, const VertexOrder& vertexOrder) :
│ │ │ │ +
85 p1j(s, typename P1Basis::Traits::Jacobian(0)), edgel(s)
│ │ │ │ +
86 {
│ │ │ │ +
87 // use some arbitrary position to evaluate jacobians, they are constant
│ │ │ │ +
88 static const typename Traits::DomainLocal xl(0);
│ │ │ │ +
89
│ │ │ │ +
90 // precompute Jacobian (gradients) of the p1 element
│ │ │ │ +
91 P1Basis(p1LocalBasis, geo).evaluateJacobian(xl, p1j);
│ │ │ │ +
92
│ │ │ │ +
93 // calculate edge sizes and orientations
│ │ │ │ +
94 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ +
95 edgel[i] = (geo.corner(refelem.subEntity(i,dim-1,0,dim))-
│ │ │ │ +
96 geo.corner(refelem.subEntity(i,dim-1,1,dim))
│ │ │ │ +
97 ).two_norm();
│ │ │ │ +
98 const typename VertexOrder::iterator& edgeVertexOrder =
│ │ │ │ +
99 vertexOrder.begin(dim-1, i);
│ │ │ │ +
100 if(edgeVertexOrder[0] > edgeVertexOrder[1])
│ │ │ │ +
101 edgel[i] *= -1;
│ │ │ │ +
102 }
│ │ │ │ +
103 }
│ │ │ │
│ │ │ │ -
101 };
│ │ │ │ -
│ │ │ │ -
102
│ │ │ │ -
103} // namespace Dune
│ │ │ │
104
│ │ │ │ -
105#endif // DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH
│ │ │ │ +
106 std::size_t size () const { return s; }
│ │ │ │ +
107
│ │ │ │ +
│ │ │ │ +
109 void evaluateFunction(const typename Traits::DomainLocal& xl,
│ │ │ │ +
110 std::vector<typename Traits::Range>& out) const
│ │ │ │ +
111 {
│ │ │ │ +
112 out.assign(s, typename Traits::Range(0));
│ │ │ │ +
113
│ │ │ │ +
114 // compute p1 values -- use the local basis directly for that, local and
│ │ │ │ +
115 // global values are identical for scalars
│ │ │ │ +
116 std::vector<typename P1LocalBasis::Traits::RangeType> p1v;
│ │ │ │ +
117 p1LocalBasis.evaluateFunction(xl, p1v);
│ │ │ │ +
118
│ │ │ │ +
119 for(std::size_t i = 0; i < s; i++) {
│ │ │ │ +
120 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
121 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
122 out[i].axpy( p1v[i0], p1j[i1][0]);
│ │ │ │ +
123 out[i].axpy(-p1v[i1], p1j[i0][0]);
│ │ │ │ +
124 out[i] *= edgel[i];
│ │ │ │ +
125 }
│ │ │ │ +
126 }
│ │ │ │ +
│ │ │ │ +
127
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
130 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ +
131 {
│ │ │ │ +
132 out.resize(s);
│ │ │ │ +
133
│ │ │ │ +
134 for(std::size_t i = 0; i < s; i++) {
│ │ │ │ +
135 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
136 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
137 for(std::size_t j = 0; j < dim; j++)
│ │ │ │ +
138 for(std::size_t k = 0; k < dim; k++)
│ │ │ │ +
139 out[i][j][k] = edgel[i] *
│ │ │ │ +
140 (p1j[i0][0][k]*p1j[i1][0][j]-p1j[i1][0][k]*p1j[i0][0][j]);
│ │ │ │ +
141 }
│ │ │ │ +
142 }
│ │ │ │ +
│ │ │ │ +
143
│ │ │ │ +
│ │ │ │ +
145 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ +
146 const typename Traits::DomainLocal& in, // position
│ │ │ │ +
147 std::vector<typename Traits::Range>& out) const // return value
│ │ │ │ +
148 {
│ │ │ │ +
149 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ +
150 if (totalOrder == 0) {
│ │ │ │ +
151 evaluateFunction(in, out);
│ │ │ │ +
152 } else if (totalOrder==1) {
│ │ │ │ +
153 auto const k = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ +
154 out.resize(size());
│ │ │ │ +
155
│ │ │ │ +
156 for (std::size_t i = 0; i < s; i++)
│ │ │ │ +
157 {
│ │ │ │ +
158 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
159 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
160 for(std::size_t j = 0; j < dim; j++)
│ │ │ │ +
161 out[i][j] = edgel[i] *
│ │ │ │ +
162 (p1j[i0][0][k]*p1j[i1][0][j] - p1j[i1][0][k]*p1j[i0][0][j]);
│ │ │ │ +
163 }
│ │ │ │ +
164 } else {
│ │ │ │ +
165 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ +
166 }
│ │ │ │ +
167 }
│ │ │ │ +
│ │ │ │ +
168
│ │ │ │ +
170 std::size_t order () const { return 1; }
│ │ │ │ +
171 };
│ │ │ │ +
│ │ │ │ +
172
│ │ │ │ +
173 template<class Geometry, class RF>
│ │ │ │ +
174 const typename EdgeS0_5Basis<Geometry, RF>::P1LocalBasis&
│ │ │ │ +
175 EdgeS0_5Basis<Geometry, RF>::p1LocalBasis = P1LocalBasis();
│ │ │ │ +
176
│ │ │ │ +
177} // namespace Dune
│ │ │ │ +
178
│ │ │ │ +
179#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Meta-basis turning a scalar basis into vector-valued basis.
Definition meta/power/basis.hh:26
│ │ │ │ -
PowerBasis(const Backend &backend_)
Construct a PowerBasis.
Definition meta/power/basis.hh:58
│ │ │ │ -
std::size_t size() const
Number of shape functions.
Definition meta/power/basis.hh:61
│ │ │ │ -
void partial(const std::array< unsigned int, Backend::Traits::dimDomainGlobal > &order, const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate partial derivatives of all shape functions.
Definition meta/power/basis.hh:90
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Evaluate Jacobian of all shape functions at given position.
Definition meta/power/basis.hh:78
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate all shape functions at given position.
Definition meta/power/basis.hh:66
│ │ │ │ -
std::size_t order() const
Polynomial order of the shape functions for quadrature.
Definition meta/power/basis.hh:63
│ │ │ │ -
types of domain and range
Definition meta/power/basis.hh:36
│ │ │ │ -
FieldMatrix< typename Traits::RangeField, dimR, Traits::dimDomainGlobal > Jacobian
Jacobian properties.
Definition meta/power/basis.hh:48
│ │ │ │ -
FieldVector< typename Traits::RangeField, dimR > Range
Type used for range values.
Definition meta/power/basis.hh:40
│ │ │ │ -
static const std::size_t dimRange
Dimension of the range values.
Definition meta/power/basis.hh:38
│ │ │ │ +
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition localtoglobaladaptors.hh:125
│ │ │ │ +
Basis for order 0.5 (lowest order) edge elements on simplices.
Definition whitney/edges0.5/basis.hh:38
│ │ │ │ +
EdgeS0_5Basis(const Geometry &geo, const VertexOrder &vertexOrder)
Construct an EdgeS0_5Basis.
Definition whitney/edges0.5/basis.hh:84
│ │ │ │ +
void evaluateJacobian(const typename Traits::DomainLocal &, std::vector< typename Traits::Jacobian > &out) const
Evaluate all Jacobians.
Definition whitney/edges0.5/basis.hh:129
│ │ │ │ +
void evaluateFunction(const typename Traits::DomainLocal &xl, std::vector< typename Traits::Range > &out) const
Evaluate all shape functions.
Definition whitney/edges0.5/basis.hh:109
│ │ │ │ +
std::size_t size() const
number of shape functions
Definition whitney/edges0.5/basis.hh:106
│ │ │ │ +
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate partial derivatives of all shape functions.
Definition whitney/edges0.5/basis.hh:145
│ │ │ │ +
std::size_t order() const
Polynomial order of the shape functions.
Definition whitney/edges0.5/basis.hh:170
│ │ │ │ +
export type traits for function signature
Definition whitney/edges0.5/basis.hh:41
│ │ │ │ +
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition whitney/edges0.5/basis.hh:46
│ │ │ │ +
static const std::size_t dimRange
Definition whitney/edges0.5/basis.hh:49
│ │ │ │ +
static const std::size_t dimDomainLocal
Definition whitney/edges0.5/basis.hh:43
│ │ │ │ +
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition whitney/edges0.5/basis.hh:52
│ │ │ │ +
static const std::size_t dimDomainGlobal
Definition whitney/edges0.5/basis.hh:44
│ │ │ │ +
RF RangeField
Definition whitney/edges0.5/basis.hh:48
│ │ │ │ +
FieldVector< DomainField, dimDomainLocal > DomainLocal
Definition whitney/edges0.5/basis.hh:45
│ │ │ │ +
FieldVector< RangeField, dimRange > Range
Definition whitney/edges0.5/basis.hh:50
│ │ │ │ +
Geometry::ctype DomainField
Definition whitney/edges0.5/basis.hh:42
│ │ │ │ +
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ +
RefElem refelem
The reference element for this edge element.
Definition common.hh:30
│ │ │ │ +
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,144 +1,255 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ -meta/power/basis.hh │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ +whitney/edges0.5/basis.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ 5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ 8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12 │ │ │ │ │ -13#include │ │ │ │ │ -14#include │ │ │ │ │ -15 │ │ │ │ │ -16namespace _D_u_n_e { │ │ │ │ │ -17 │ │ │ │ │ -19 │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _P_o_w_e_r_B_a_s_i_s { │ │ │ │ │ -27 static_assert(Backend::Traits::dimRange == 1, │ │ │ │ │ -28 "PowerBasis works only with scalar backends"); │ │ │ │ │ -29 │ │ │ │ │ -30 // don't use a reference here so this class stays copyable │ │ │ │ │ -31 const Backend *backend; │ │ │ │ │ -32 │ │ │ │ │ -33 public: │ │ │ │ │ -_3_5 struct _T_r_a_i_t_s : public Backend::Traits │ │ │ │ │ -36 { │ │ │ │ │ -_3_8 static const std::size_t _d_i_m_R_a_n_g_e = dimR; │ │ │ │ │ -_4_0 typedef FieldVector _R_a_n_g_e; │ │ │ │ │ -41 │ │ │ │ │ -43 │ │ │ │ │ -47 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ -49 }; │ │ │ │ │ -50 │ │ │ │ │ -52 │ │ │ │ │ -_5_8 _P_o_w_e_r_B_a_s_i_s(const Backend &backend_) : backend(&backend_) { } │ │ │ │ │ -59 │ │ │ │ │ -_6_1 std::size_t _s_i_z_e () const { return backend->size()*dimR; } │ │ │ │ │ -_6_3 std::size_t _o_r_d_e_r () const { return backend->order(); } │ │ │ │ │ -64 │ │ │ │ │ -_6_6 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename Traits::DomainLocal& in, │ │ │ │ │ -67 std::vector& out) const │ │ │ │ │ -68 { │ │ │ │ │ -69 std::vector backendValues; │ │ │ │ │ -70 backend->evaluateFunction(in, backendValues); │ │ │ │ │ -71 out.assign(_s_i_z_e(), typename _T_r_a_i_t_s_:_:_R_a_n_g_e(0)); │ │ │ │ │ -72 for(std::size_t d = 0; d < dimR; ++d) │ │ │ │ │ -73 for(std::size_t i = 0; i < backend->size(); ++i) │ │ │ │ │ -74 out[d*backend->size()+i][d] = backendValues[i][0]; │ │ │ │ │ -75 } │ │ │ │ │ -76 │ │ │ │ │ -_7_8 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename Traits::DomainLocal& in, │ │ │ │ │ -79 std::vector& out) const │ │ │ │ │ -80 { │ │ │ │ │ -81 std::vector backendValues; │ │ │ │ │ -82 backend->evaluateJacobian(in, backendValues); │ │ │ │ │ -83 out.assign(_s_i_z_e(), typename _T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n(0)); │ │ │ │ │ -84 for(std::size_t d = 0; d < dimR; ++d) │ │ │ │ │ -85 for(std::size_t i = 0; i < backend->size(); ++i) │ │ │ │ │ -86 out[d*backend->size()+i][d] = backendValues[i][0]; │ │ │ │ │ -87 } │ │ │ │ │ -88 │ │ │ │ │ -_9_0 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -91 const typename Traits::DomainLocal& in, // position │ │ │ │ │ -92 std::vector& out) const // return value │ │ │ │ │ -93 { │ │ │ │ │ -94 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -95 if (totalOrder == 0) { │ │ │ │ │ -96 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -97 } else { │ │ │ │ │ -98 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -99 } │ │ │ │ │ -100 } │ │ │ │ │ -101 }; │ │ │ │ │ -102 │ │ │ │ │ -103} // namespace Dune │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include │ │ │ │ │ +13#include │ │ │ │ │ +14 │ │ │ │ │ +15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ +16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ +17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +18 │ │ │ │ │ +19namespace _D_u_n_e { │ │ │ │ │ +20 │ │ │ │ │ +22 // │ │ │ │ │ +23 // Basis │ │ │ │ │ +24 // │ │ │ │ │ +25 │ │ │ │ │ +27 │ │ │ │ │ +35 template │ │ │ │ │ +_3_6 class _E_d_g_e_S_0___5_B_a_s_i_s : │ │ │ │ │ +37 private _E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +38 { │ │ │ │ │ +39 public: │ │ │ │ │ +_4_1 struct _T_r_a_i_t_s { │ │ │ │ │ +_4_2 typedef typename Geometry::ctype _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ +_4_3 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Geometry::mydimension; │ │ │ │ │ +_4_4 static const std::size_t _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l = Geometry::coorddimension; │ │ │ │ │ +_4_5 typedef FieldVector _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +_4_6 typedef FieldVector _D_o_m_a_i_n_G_l_o_b_a_l; │ │ │ │ │ +47 │ │ │ │ │ +_4_8 typedef RF _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ +_4_9 static const std::size_t _d_i_m_R_a_n_g_e = _d_i_m_D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +_5_0 typedef FieldVector _R_a_n_g_e; │ │ │ │ │ +51 │ │ │ │ │ +_5_2 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ +53 }; │ │ │ │ │ +54 │ │ │ │ │ +55 private: │ │ │ │ │ +56 typedef Dune::Impl::LagrangeSimplexLocalBasis P1LocalBasis; │ │ │ │ │ +61 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_P_1_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _P_1_B_a_s_i_s; │ │ │ │ │ +62 │ │ │ │ │ +63 static const P1LocalBasis& p1LocalBasis; │ │ │ │ │ +64 static const std::size_t dim = _T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ +65 │ │ │ │ │ +66 typedef _E_d_g_e_S_0___5_C_o_m_m_o_n_<_d_i_m_,_ _t_y_p_e_n_a_m_e_ _G_e_o_m_e_t_r_y_:_:_c_t_y_p_e_> _B_a_s_e; │ │ │ │ │ +67 using _B_a_s_e_:_:_r_e_f_e_l_e_m; │ │ │ │ │ +68 using _B_a_s_e_:_:_s; │ │ │ │ │ +69 │ │ │ │ │ +70 // global values of the Jacobians (gradients) of the p1 basis │ │ │ │ │ +71 std::vector p1j; │ │ │ │ │ +72 // edge sizes and orientations │ │ │ │ │ +73 std::vector edgel; │ │ │ │ │ +74 │ │ │ │ │ +75 public: │ │ │ │ │ +77 │ │ │ │ │ +83 template │ │ │ │ │ +_8_4 _E_d_g_e_S_0___5_B_a_s_i_s(const Geometry& geo, const VertexOrder& vertexOrder) : │ │ │ │ │ +85 p1j(s, typename _P_1_B_a_s_i_s::_T_r_a_i_t_s::Jacobian(0)), edgel(s) │ │ │ │ │ +86 { │ │ │ │ │ +87 // use some arbitrary position to evaluate jacobians, they are constant │ │ │ │ │ +88 static const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l xl(0); │ │ │ │ │ +89 │ │ │ │ │ +90 // precompute Jacobian (gradients) of the p1 element │ │ │ │ │ +91 _P_1_B_a_s_i_s(p1LocalBasis, geo)._e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(xl, p1j); │ │ │ │ │ +92 │ │ │ │ │ +93 // calculate edge sizes and orientations │ │ │ │ │ +94 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ +95 edgel[i] = (geo.corner(refelem.subEntity(i,dim-1,0,dim))- │ │ │ │ │ +96 geo.corner(refelem.subEntity(i,dim-1,1,dim)) │ │ │ │ │ +97 ).two_norm(); │ │ │ │ │ +98 const typename VertexOrder::iterator& edgeVertexOrder = │ │ │ │ │ +99 vertexOrder.begin(dim-1, i); │ │ │ │ │ +100 if(edgeVertexOrder[0] > edgeVertexOrder[1]) │ │ │ │ │ +101 edgel[i] *= -1; │ │ │ │ │ +102 } │ │ │ │ │ +103 } │ │ │ │ │ 104 │ │ │ │ │ -105#endif // DUNE_LOCALFUNCTIONS_META_POWER_BASIS_HH │ │ │ │ │ +_1_0_6 std::size_t _s_i_z_e () const { return s; } │ │ │ │ │ +107 │ │ │ │ │ +_1_0_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ +110 std::vector& out) const │ │ │ │ │ +111 { │ │ │ │ │ +112 out.assign(s, typename _T_r_a_i_t_s_:_:_R_a_n_g_e(0)); │ │ │ │ │ +113 │ │ │ │ │ +114 // compute p1 values -- use the local basis directly for that, local and │ │ │ │ │ +115 // global values are identical for scalars │ │ │ │ │ +116 std::vector p1v; │ │ │ │ │ +117 p1LocalBasis.evaluateFunction(xl, p1v); │ │ │ │ │ +118 │ │ │ │ │ +119 for(std::size_t i = 0; i < s; i++) { │ │ │ │ │ +120 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +121 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +122 out[i].axpy( p1v[i0], p1j[i1][0]); │ │ │ │ │ +123 out[i].axpy(-p1v[i1], p1j[i0][0]); │ │ │ │ │ +124 out[i] *= edgel[i]; │ │ │ │ │ +125 } │ │ │ │ │ +126 } │ │ │ │ │ +127 │ │ │ │ │ +_1_2_9 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l&, │ │ │ │ │ +130 std::vector& out) const │ │ │ │ │ +131 { │ │ │ │ │ +132 out.resize(s); │ │ │ │ │ +133 │ │ │ │ │ +134 for(std::size_t i = 0; i < s; i++) { │ │ │ │ │ +135 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +136 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +137 for(std::size_t j = 0; j < dim; j++) │ │ │ │ │ +138 for(std::size_t k = 0; k < dim; k++) │ │ │ │ │ +139 out[i][j][k] = edgel[i] * │ │ │ │ │ +140 (p1j[i0][0][k]*p1j[i1][0][j]-p1j[i1][0][k]*p1j[i0][0][j]); │ │ │ │ │ +141 } │ │ │ │ │ +142 } │ │ │ │ │ +143 │ │ │ │ │ +_1_4_5 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ +146 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, // position │ │ │ │ │ +147 std::vector& out) const // return value │ │ │ │ │ +148 { │ │ │ │ │ +149 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ +150 if (totalOrder == 0) { │ │ │ │ │ +151 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ +152 } else if (totalOrder==1) { │ │ │ │ │ +153 auto const k = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ +_o_r_d_e_r.end(), 1)); │ │ │ │ │ +154 out.resize(_s_i_z_e()); │ │ │ │ │ +155 │ │ │ │ │ +156 for (std::size_t i = 0; i < s; i++) │ │ │ │ │ +157 { │ │ │ │ │ +158 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +159 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +160 for(std::size_t j = 0; j < dim; j++) │ │ │ │ │ +161 out[i][j] = edgel[i] * │ │ │ │ │ +162 (p1j[i0][0][k]*p1j[i1][0][j] - p1j[i1][0][k]*p1j[i0][0][j]); │ │ │ │ │ +163 } │ │ │ │ │ +164 } else { │ │ │ │ │ +165 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ +166 } │ │ │ │ │ +167 } │ │ │ │ │ +168 │ │ │ │ │ +_1_7_0 std::size_t _o_r_d_e_r () const { return 1; } │ │ │ │ │ +171 }; │ │ │ │ │ +172 │ │ │ │ │ +173 template │ │ │ │ │ +174 const typename EdgeS0_5Basis::P1LocalBasis& │ │ │ │ │ +175 EdgeS0_5Basis::p1LocalBasis = P1LocalBasis(); │ │ │ │ │ +176 │ │ │ │ │ +177} // namespace Dune │ │ │ │ │ +178 │ │ │ │ │ +179#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ +_c_o_m_m_o_n_._h_h │ │ │ │ │ +_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ -Meta-basis turning a scalar basis into vector-valued basis. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_P_o_w_e_r_B_a_s_i_s │ │ │ │ │ -PowerBasis(const Backend &backend_) │ │ │ │ │ -Construct a PowerBasis. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:58 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -Number of shape functions. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:61 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, Backend::Traits::dimDomainGlobal > │ │ │ │ │ -&order, const typename Traits::DomainLocal &in, std::vector< typename Traits:: │ │ │ │ │ -Range > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ +Convert a simple scalar local basis into a global basis. │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ +_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ typename Traits::Jacobian > &out) const │ │ │ │ │ -Evaluate Jacobian of all shape functions at given position. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ +DDeeffiinniittiioonn localtoglobaladaptors.hh:125 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ +Basis for order 0.5 (lowest order) edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ +EdgeS0_5Basis(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ +Construct an EdgeS0_5Basis. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:84 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ +void evaluateJacobian(const typename Traits::DomainLocal &, std::vector< │ │ │ │ │ +typename Traits::Jacobian > &out) const │ │ │ │ │ +Evaluate all Jacobians. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:129 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ +void evaluateFunction(const typename Traits::DomainLocal &xl, std::vector< │ │ │ │ │ typename Traits::Range > &out) const │ │ │ │ │ -Evaluate all shape functions at given position. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:66 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ +Evaluate all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:109 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of shape functions │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:106 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ +void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ +Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const │ │ │ │ │ +Evaluate partial derivatives of all shape functions. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:145 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ std::size_t order() const │ │ │ │ │ -Polynomial order of the shape functions for quadrature. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -types of domain and range │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:36 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ -FieldMatrix< typename Traits::RangeField, dimR, Traits::dimDomainGlobal > │ │ │ │ │ -Jacobian │ │ │ │ │ -Jacobian properties. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ -FieldVector< typename Traits::RangeField, dimR > Range │ │ │ │ │ -Type used for range values. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:40 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ +Polynomial order of the shape functions. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:170 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ +export type traits for function signature │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:41 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ +FieldVector< DomainField, dimDomainGlobal > DomainGlobal │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:46 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ static const std::size_t dimRange │ │ │ │ │ -Dimension of the range values. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/basis.hh:38 │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:49 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +static const std::size_t dimDomainLocal │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:43 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ +FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:52 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ +static const std::size_t dimDomainGlobal │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ +RF RangeField │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ +FieldVector< DomainField, dimDomainLocal > DomainLocal │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:45 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ +FieldVector< RangeField, dimRange > Range │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ +Geometry::ctype DomainField │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/basis.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +Common base class for edge elements. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_r_e_f_e_l_e_m │ │ │ │ │ +RefElem refelem │ │ │ │ │ +The reference element for this edge element. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ +std::size_t s │ │ │ │ │ +The number of base functions. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basis.hh File Reference │ │ │ │ +dune-localfunctions: coefficients.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,41 +65,34 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
basis.hh File Reference
│ │ │ │ +
coefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/fmatrix.hh>
│ │ │ │ -#include <dune/common/fvector.hh>
│ │ │ │ -#include <dune/localfunctions/common/localtoglobaladaptors.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangesimplex.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::EdgeS0_5Basis< Geometry, RF >
 Basis for order 0.5 (lowest order) edge elements on simplices. More...
 
struct  Dune::EdgeS0_5Basis< Geometry, RF >::Traits
 export type traits for function signature More...
class  Dune::PowerCoefficients
 Meta-coefficients turning a scalar coefficients into vector-valued coefficients. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,30 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -basis.hh File Reference │ │ │ │ │ +coefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _> │ │ │ │ │ -  Basis for order 0.5 (lowest order) edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_<_ _G_e_o_m_e_t_r_y_,_ _R_F_ _>_:_:_T_r_a_i_t_s │ │ │ │ │ -  export type traits for function signature _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +  Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ + coefficients. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04568_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: basis.hh Source File │ │ │ │ +dune-localfunctions: coefficients.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,217 +70,75 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
whitney/edges0.5/basis.hh
│ │ │ │ +
meta/power/coefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │
8
│ │ │ │
9#include <cstddef>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │ -
12#include <dune/common/fmatrix.hh>
│ │ │ │ -
13#include <dune/common/fvector.hh>
│ │ │ │ -
14
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ +
13
│ │ │ │ +
14namespace Dune {
│ │ │ │ +
15
│ │ │ │
18
│ │ │ │ -
19namespace Dune {
│ │ │ │ -
20
│ │ │ │ -
22 //
│ │ │ │ -
23 // Basis
│ │ │ │ -
24 //
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
24 std::vector<LocalKey> keys;
│ │ │ │
25
│ │ │ │ -
27
│ │ │ │ -
35 template<class Geometry, class RF>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
37 private EdgeS0_5Common<Geometry::mydimension, typename Geometry::ctype>
│ │ │ │ -
38 {
│ │ │ │ -
39 public:
│ │ │ │ -
│ │ │ │ -
41 struct Traits {
│ │ │ │ -
42 typedef typename Geometry::ctype DomainField;
│ │ │ │ -
43 static const std::size_t dimDomainLocal = Geometry::mydimension;
│ │ │ │ -
44 static const std::size_t dimDomainGlobal = Geometry::coorddimension;
│ │ │ │ -
45 typedef FieldVector<DomainField, dimDomainLocal> DomainLocal;
│ │ │ │ -
46 typedef FieldVector<DomainField, dimDomainGlobal> DomainGlobal;
│ │ │ │ -
47
│ │ │ │ -
48 typedef RF RangeField;
│ │ │ │ -
49 static const std::size_t dimRange = dimDomainLocal;
│ │ │ │ -
50 typedef FieldVector<RangeField, dimRange> Range;
│ │ │ │ -
51
│ │ │ │ -
52 typedef FieldMatrix<RangeField, dimRange, dimDomainGlobal> Jacobian;
│ │ │ │ -
53 };
│ │ │ │ -
│ │ │ │ -
54
│ │ │ │ -
55 private:
│ │ │ │ -
56 typedef Dune::Impl::LagrangeSimplexLocalBasis<typename Traits::DomainField,
│ │ │ │ -
57 typename Traits::RangeField,
│ │ │ │ - │ │ │ │ -
59 1 // Polynomial order
│ │ │ │ -
60 > P1LocalBasis;
│ │ │ │ - │ │ │ │ -
62
│ │ │ │ -
63 static const P1LocalBasis& p1LocalBasis;
│ │ │ │ -
64 static const std::size_t dim = Traits::dimDomainLocal;
│ │ │ │ -
65
│ │ │ │ - │ │ │ │ -
67 using Base::refelem;
│ │ │ │ -
68 using Base::s;
│ │ │ │ -
69
│ │ │ │ -
70 // global values of the Jacobians (gradients) of the p1 basis
│ │ │ │ -
71 std::vector<typename P1Basis::Traits::Jacobian> p1j;
│ │ │ │ -
72 // edge sizes and orientations
│ │ │ │ -
73 std::vector<typename Traits::DomainField> edgel;
│ │ │ │ -
74
│ │ │ │ -
75 public:
│ │ │ │ -
77
│ │ │ │ -
83 template<typename VertexOrder>
│ │ │ │ -
│ │ │ │ -
84 EdgeS0_5Basis(const Geometry& geo, const VertexOrder& vertexOrder) :
│ │ │ │ -
85 p1j(s, typename P1Basis::Traits::Jacobian(0)), edgel(s)
│ │ │ │ -
86 {
│ │ │ │ -
87 // use some arbitrary position to evaluate jacobians, they are constant
│ │ │ │ -
88 static const typename Traits::DomainLocal xl(0);
│ │ │ │ -
89
│ │ │ │ -
90 // precompute Jacobian (gradients) of the p1 element
│ │ │ │ -
91 P1Basis(p1LocalBasis, geo).evaluateJacobian(xl, p1j);
│ │ │ │ -
92
│ │ │ │ -
93 // calculate edge sizes and orientations
│ │ │ │ -
94 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ -
95 edgel[i] = (geo.corner(refelem.subEntity(i,dim-1,0,dim))-
│ │ │ │ -
96 geo.corner(refelem.subEntity(i,dim-1,1,dim))
│ │ │ │ -
97 ).two_norm();
│ │ │ │ -
98 const typename VertexOrder::iterator& edgeVertexOrder =
│ │ │ │ -
99 vertexOrder.begin(dim-1, i);
│ │ │ │ -
100 if(edgeVertexOrder[0] > edgeVertexOrder[1])
│ │ │ │ -
101 edgel[i] *= -1;
│ │ │ │ -
102 }
│ │ │ │ -
103 }
│ │ │ │ -
│ │ │ │ -
104
│ │ │ │ -
106 std::size_t size () const { return s; }
│ │ │ │ -
107
│ │ │ │ -
│ │ │ │ -
109 void evaluateFunction(const typename Traits::DomainLocal& xl,
│ │ │ │ -
110 std::vector<typename Traits::Range>& out) const
│ │ │ │ -
111 {
│ │ │ │ -
112 out.assign(s, typename Traits::Range(0));
│ │ │ │ -
113
│ │ │ │ -
114 // compute p1 values -- use the local basis directly for that, local and
│ │ │ │ -
115 // global values are identical for scalars
│ │ │ │ -
116 std::vector<typename P1LocalBasis::Traits::RangeType> p1v;
│ │ │ │ -
117 p1LocalBasis.evaluateFunction(xl, p1v);
│ │ │ │ -
118
│ │ │ │ -
119 for(std::size_t i = 0; i < s; i++) {
│ │ │ │ -
120 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
121 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
122 out[i].axpy( p1v[i0], p1j[i1][0]);
│ │ │ │ -
123 out[i].axpy(-p1v[i1], p1j[i0][0]);
│ │ │ │ -
124 out[i] *= edgel[i];
│ │ │ │ -
125 }
│ │ │ │ -
126 }
│ │ │ │ -
│ │ │ │ -
127
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
130 std::vector<typename Traits::Jacobian>& out) const
│ │ │ │ -
131 {
│ │ │ │ -
132 out.resize(s);
│ │ │ │ -
133
│ │ │ │ -
134 for(std::size_t i = 0; i < s; i++) {
│ │ │ │ -
135 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
136 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
137 for(std::size_t j = 0; j < dim; j++)
│ │ │ │ -
138 for(std::size_t k = 0; k < dim; k++)
│ │ │ │ -
139 out[i][j][k] = edgel[i] *
│ │ │ │ -
140 (p1j[i0][0][k]*p1j[i1][0][j]-p1j[i1][0][k]*p1j[i0][0][j]);
│ │ │ │ -
141 }
│ │ │ │ -
142 }
│ │ │ │ -
│ │ │ │ -
143
│ │ │ │ -
│ │ │ │ -
145 void partial (const std::array<unsigned int, dim>& order,
│ │ │ │ -
146 const typename Traits::DomainLocal& in, // position
│ │ │ │ -
147 std::vector<typename Traits::Range>& out) const // return value
│ │ │ │ -
148 {
│ │ │ │ -
149 auto totalOrder = std::accumulate(order.begin(), order.end(), 0);
│ │ │ │ -
150 if (totalOrder == 0) {
│ │ │ │ -
151 evaluateFunction(in, out);
│ │ │ │ -
152 } else if (totalOrder==1) {
│ │ │ │ -
153 auto const k = std::distance(order.begin(), std::find(order.begin(), order.end(), 1));
│ │ │ │ -
154 out.resize(size());
│ │ │ │ -
155
│ │ │ │ -
156 for (std::size_t i = 0; i < s; i++)
│ │ │ │ -
157 {
│ │ │ │ -
158 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
159 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
160 for(std::size_t j = 0; j < dim; j++)
│ │ │ │ -
161 out[i][j] = edgel[i] *
│ │ │ │ -
162 (p1j[i0][0][k]*p1j[i1][0][j] - p1j[i1][0][k]*p1j[i0][0][j]);
│ │ │ │ -
163 }
│ │ │ │ -
164 } else {
│ │ │ │ -
165 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented");
│ │ │ │ -
166 }
│ │ │ │ -
167 }
│ │ │ │ -
│ │ │ │ -
168
│ │ │ │ -
170 std::size_t order () const { return 1; }
│ │ │ │ -
171 };
│ │ │ │ -
│ │ │ │ -
172
│ │ │ │ -
173 template<class Geometry, class RF>
│ │ │ │ -
174 const typename EdgeS0_5Basis<Geometry, RF>::P1LocalBasis&
│ │ │ │ -
175 EdgeS0_5Basis<Geometry, RF>::p1LocalBasis = P1LocalBasis();
│ │ │ │ -
176
│ │ │ │ -
177} // namespace Dune
│ │ │ │ -
178
│ │ │ │ -
179#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ +
26 public:
│ │ │ │ +
28
│ │ │ │ +
36 template<class Backend>
│ │ │ │ +
│ │ │ │ +
37 PowerCoefficients(const Backend &backend, std::size_t power) :
│ │ │ │ +
38 keys(backend.size()*power)
│ │ │ │ +
39 {
│ │ │ │ +
40 for(std::size_t i = 0; i < backend.size(); ++i) {
│ │ │ │ +
41 const LocalKey &k = backend.localKey(i);
│ │ │ │ +
42 for(std::size_t d = 0; d < power; ++d)
│ │ │ │ +
43 keys[i+d*backend.size()] =
│ │ │ │ +
44 LocalKey(k.subEntity(), k.codim(), power*k.index() + d);
│ │ │ │ +
45 }
│ │ │ │ +
46 }
│ │ │ │ +
│ │ │ │ +
48 inline std::size_t size() const { return keys.size(); }
│ │ │ │ +
49
│ │ │ │ +
51 inline const LocalKey& localKey(std::size_t i) const { return keys[i]; }
│ │ │ │ +
52 };
│ │ │ │ +
│ │ │ │ +
53
│ │ │ │ +
54} // namespace Dune
│ │ │ │ +
55
│ │ │ │ +
56#endif // DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Convert a simple scalar local basis into a global basis.
Definition localtoglobaladaptors.hh:65
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< typename Traits::Jacobian > &out) const
Definition localtoglobaladaptors.hh:125
│ │ │ │ -
Basis for order 0.5 (lowest order) edge elements on simplices.
Definition whitney/edges0.5/basis.hh:38
│ │ │ │ -
EdgeS0_5Basis(const Geometry &geo, const VertexOrder &vertexOrder)
Construct an EdgeS0_5Basis.
Definition whitney/edges0.5/basis.hh:84
│ │ │ │ -
void evaluateJacobian(const typename Traits::DomainLocal &, std::vector< typename Traits::Jacobian > &out) const
Evaluate all Jacobians.
Definition whitney/edges0.5/basis.hh:129
│ │ │ │ -
void evaluateFunction(const typename Traits::DomainLocal &xl, std::vector< typename Traits::Range > &out) const
Evaluate all shape functions.
Definition whitney/edges0.5/basis.hh:109
│ │ │ │ -
std::size_t size() const
number of shape functions
Definition whitney/edges0.5/basis.hh:106
│ │ │ │ -
void partial(const std::array< unsigned int, dim > &order, const typename Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const
Evaluate partial derivatives of all shape functions.
Definition whitney/edges0.5/basis.hh:145
│ │ │ │ -
std::size_t order() const
Polynomial order of the shape functions.
Definition whitney/edges0.5/basis.hh:170
│ │ │ │ -
export type traits for function signature
Definition whitney/edges0.5/basis.hh:41
│ │ │ │ -
FieldVector< DomainField, dimDomainGlobal > DomainGlobal
Definition whitney/edges0.5/basis.hh:46
│ │ │ │ -
static const std::size_t dimRange
Definition whitney/edges0.5/basis.hh:49
│ │ │ │ -
static const std::size_t dimDomainLocal
Definition whitney/edges0.5/basis.hh:43
│ │ │ │ -
FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian
Definition whitney/edges0.5/basis.hh:52
│ │ │ │ -
static const std::size_t dimDomainGlobal
Definition whitney/edges0.5/basis.hh:44
│ │ │ │ -
RF RangeField
Definition whitney/edges0.5/basis.hh:48
│ │ │ │ -
FieldVector< DomainField, dimDomainLocal > DomainLocal
Definition whitney/edges0.5/basis.hh:45
│ │ │ │ -
FieldVector< RangeField, dimRange > Range
Definition whitney/edges0.5/basis.hh:50
│ │ │ │ -
Geometry::ctype DomainField
Definition whitney/edges0.5/basis.hh:42
│ │ │ │ -
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ -
RefElem refelem
The reference element for this edge element.
Definition common.hh:30
│ │ │ │ -
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │ +
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ +
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ +
constexpr unsigned int codim() const noexcept
Return codim of associated entity.
Definition localkey.hh:63
│ │ │ │ +
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ +
Meta-coefficients turning a scalar coefficients into vector-valued coefficients.
Definition meta/power/coefficients.hh:23
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition meta/power/coefficients.hh:48
│ │ │ │ +
PowerCoefficients(const Backend &backend, std::size_t power)
Construct a PowerCoefficients object.
Definition meta/power/coefficients.hh:37
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition meta/power/coefficients.hh:51
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,255 +1,87 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ -whitney/edges0.5/basis.hh │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ +meta/power/coefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ 5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ 8 │ │ │ │ │ 9#include │ │ │ │ │ 10#include │ │ │ │ │ 11 │ │ │ │ │ -12#include │ │ │ │ │ -13#include │ │ │ │ │ -14 │ │ │ │ │ -15#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h> │ │ │ │ │ -16#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h> │ │ │ │ │ -17#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +13 │ │ │ │ │ +14namespace _D_u_n_e { │ │ │ │ │ +15 │ │ │ │ │ 18 │ │ │ │ │ -19namespace _D_u_n_e { │ │ │ │ │ -20 │ │ │ │ │ -22 // │ │ │ │ │ -23 // Basis │ │ │ │ │ -24 // │ │ │ │ │ +_2_3 class _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s { │ │ │ │ │ +24 std::vector keys; │ │ │ │ │ 25 │ │ │ │ │ -27 │ │ │ │ │ -35 template │ │ │ │ │ -_3_6 class _E_d_g_e_S_0___5_B_a_s_i_s : │ │ │ │ │ -37 private _E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ -38 { │ │ │ │ │ -39 public: │ │ │ │ │ -_4_1 struct _T_r_a_i_t_s { │ │ │ │ │ -_4_2 typedef typename Geometry::ctype _D_o_m_a_i_n_F_i_e_l_d; │ │ │ │ │ -_4_3 static const std::size_t _d_i_m_D_o_m_a_i_n_L_o_c_a_l = Geometry::mydimension; │ │ │ │ │ -_4_4 static const std::size_t _d_i_m_D_o_m_a_i_n_G_l_o_b_a_l = Geometry::coorddimension; │ │ │ │ │ -_4_5 typedef FieldVector _D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -_4_6 typedef FieldVector _D_o_m_a_i_n_G_l_o_b_a_l; │ │ │ │ │ -47 │ │ │ │ │ -_4_8 typedef RF _R_a_n_g_e_F_i_e_l_d; │ │ │ │ │ -_4_9 static const std::size_t _d_i_m_R_a_n_g_e = _d_i_m_D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -_5_0 typedef FieldVector _R_a_n_g_e; │ │ │ │ │ -51 │ │ │ │ │ -_5_2 typedef FieldMatrix _J_a_c_o_b_i_a_n; │ │ │ │ │ -53 }; │ │ │ │ │ -54 │ │ │ │ │ -55 private: │ │ │ │ │ -56 typedef Dune::Impl::LagrangeSimplexLocalBasis P1LocalBasis; │ │ │ │ │ -61 typedef _S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_<_P_1_L_o_c_a_l_B_a_s_i_s_,_ _G_e_o_m_e_t_r_y_> _P_1_B_a_s_i_s; │ │ │ │ │ -62 │ │ │ │ │ -63 static const P1LocalBasis& p1LocalBasis; │ │ │ │ │ -64 static const std::size_t dim = _T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l; │ │ │ │ │ -65 │ │ │ │ │ -66 typedef _E_d_g_e_S_0___5_C_o_m_m_o_n_<_d_i_m_,_ _t_y_p_e_n_a_m_e_ _G_e_o_m_e_t_r_y_:_:_c_t_y_p_e_> _B_a_s_e; │ │ │ │ │ -67 using _B_a_s_e_:_:_r_e_f_e_l_e_m; │ │ │ │ │ -68 using _B_a_s_e_:_:_s; │ │ │ │ │ -69 │ │ │ │ │ -70 // global values of the Jacobians (gradients) of the p1 basis │ │ │ │ │ -71 std::vector p1j; │ │ │ │ │ -72 // edge sizes and orientations │ │ │ │ │ -73 std::vector edgel; │ │ │ │ │ -74 │ │ │ │ │ -75 public: │ │ │ │ │ -77 │ │ │ │ │ -83 template │ │ │ │ │ -_8_4 _E_d_g_e_S_0___5_B_a_s_i_s(const Geometry& geo, const VertexOrder& vertexOrder) : │ │ │ │ │ -85 p1j(s, typename _P_1_B_a_s_i_s::_T_r_a_i_t_s::Jacobian(0)), edgel(s) │ │ │ │ │ -86 { │ │ │ │ │ -87 // use some arbitrary position to evaluate jacobians, they are constant │ │ │ │ │ -88 static const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l xl(0); │ │ │ │ │ -89 │ │ │ │ │ -90 // precompute Jacobian (gradients) of the p1 element │ │ │ │ │ -91 _P_1_B_a_s_i_s(p1LocalBasis, geo)._e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(xl, p1j); │ │ │ │ │ -92 │ │ │ │ │ -93 // calculate edge sizes and orientations │ │ │ │ │ -94 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ -95 edgel[i] = (geo.corner(refelem.subEntity(i,dim-1,0,dim))- │ │ │ │ │ -96 geo.corner(refelem.subEntity(i,dim-1,1,dim)) │ │ │ │ │ -97 ).two_norm(); │ │ │ │ │ -98 const typename VertexOrder::iterator& edgeVertexOrder = │ │ │ │ │ -99 vertexOrder.begin(dim-1, i); │ │ │ │ │ -100 if(edgeVertexOrder[0] > edgeVertexOrder[1]) │ │ │ │ │ -101 edgel[i] *= -1; │ │ │ │ │ -102 } │ │ │ │ │ -103 } │ │ │ │ │ -104 │ │ │ │ │ -_1_0_6 std::size_t _s_i_z_e () const { return s; } │ │ │ │ │ -107 │ │ │ │ │ -_1_0_9 void _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& xl, │ │ │ │ │ -110 std::vector& out) const │ │ │ │ │ -111 { │ │ │ │ │ -112 out.assign(s, typename _T_r_a_i_t_s_:_:_R_a_n_g_e(0)); │ │ │ │ │ -113 │ │ │ │ │ -114 // compute p1 values -- use the local basis directly for that, local and │ │ │ │ │ -115 // global values are identical for scalars │ │ │ │ │ -116 std::vector p1v; │ │ │ │ │ -117 p1LocalBasis.evaluateFunction(xl, p1v); │ │ │ │ │ -118 │ │ │ │ │ -119 for(std::size_t i = 0; i < s; i++) { │ │ │ │ │ -120 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -121 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -122 out[i].axpy( p1v[i0], p1j[i1][0]); │ │ │ │ │ -123 out[i].axpy(-p1v[i1], p1j[i0][0]); │ │ │ │ │ -124 out[i] *= edgel[i]; │ │ │ │ │ -125 } │ │ │ │ │ -126 } │ │ │ │ │ -127 │ │ │ │ │ -_1_2_9 void _e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n(const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l&, │ │ │ │ │ -130 std::vector& out) const │ │ │ │ │ -131 { │ │ │ │ │ -132 out.resize(s); │ │ │ │ │ -133 │ │ │ │ │ -134 for(std::size_t i = 0; i < s; i++) { │ │ │ │ │ -135 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -136 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -137 for(std::size_t j = 0; j < dim; j++) │ │ │ │ │ -138 for(std::size_t k = 0; k < dim; k++) │ │ │ │ │ -139 out[i][j][k] = edgel[i] * │ │ │ │ │ -140 (p1j[i0][0][k]*p1j[i1][0][j]-p1j[i1][0][k]*p1j[i0][0][j]); │ │ │ │ │ -141 } │ │ │ │ │ -142 } │ │ │ │ │ -143 │ │ │ │ │ -_1_4_5 void _p_a_r_t_i_a_l (const std::array& _o_r_d_e_r, │ │ │ │ │ -146 const typename _T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l& in, // position │ │ │ │ │ -147 std::vector& out) const // return value │ │ │ │ │ -148 { │ │ │ │ │ -149 auto totalOrder = std::accumulate(_o_r_d_e_r.begin(), _o_r_d_e_r.end(), 0); │ │ │ │ │ -150 if (totalOrder == 0) { │ │ │ │ │ -151 _e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n(in, out); │ │ │ │ │ -152 } else if (totalOrder==1) { │ │ │ │ │ -153 auto const k = std::distance(_o_r_d_e_r.begin(), std::find(_o_r_d_e_r.begin(), │ │ │ │ │ -_o_r_d_e_r.end(), 1)); │ │ │ │ │ -154 out.resize(_s_i_z_e()); │ │ │ │ │ -155 │ │ │ │ │ -156 for (std::size_t i = 0; i < s; i++) │ │ │ │ │ -157 { │ │ │ │ │ -158 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -159 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -160 for(std::size_t j = 0; j < dim; j++) │ │ │ │ │ -161 out[i][j] = edgel[i] * │ │ │ │ │ -162 (p1j[i0][0][k]*p1j[i1][0][j] - p1j[i1][0][k]*p1j[i0][0][j]); │ │ │ │ │ -163 } │ │ │ │ │ -164 } else { │ │ │ │ │ -165 DUNE_THROW(NotImplemented, "Desired derivative order is not implemented"); │ │ │ │ │ -166 } │ │ │ │ │ -167 } │ │ │ │ │ -168 │ │ │ │ │ -_1_7_0 std::size_t _o_r_d_e_r () const { return 1; } │ │ │ │ │ -171 }; │ │ │ │ │ -172 │ │ │ │ │ -173 template │ │ │ │ │ -174 const typename EdgeS0_5Basis::P1LocalBasis& │ │ │ │ │ -175 EdgeS0_5Basis::p1LocalBasis = P1LocalBasis(); │ │ │ │ │ -176 │ │ │ │ │ -177} // namespace Dune │ │ │ │ │ -178 │ │ │ │ │ -179#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_BASIS_HH │ │ │ │ │ -_c_o_m_m_o_n_._h_h │ │ │ │ │ -_l_o_c_a_l_t_o_g_l_o_b_a_l_a_d_a_p_t_o_r_s_._h_h │ │ │ │ │ -_l_a_g_r_a_n_g_e_s_i_m_p_l_e_x_._h_h │ │ │ │ │ +26 public: │ │ │ │ │ +28 │ │ │ │ │ +36 template │ │ │ │ │ +_3_7 _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s(const Backend &backend, std::size_t power) : │ │ │ │ │ +38 keys(backend._s_i_z_e()*power) │ │ │ │ │ +39 { │ │ │ │ │ +40 for(std::size_t i = 0; i < backend.size(); ++i) { │ │ │ │ │ +41 const _L_o_c_a_l_K_e_y &k = backend.localKey(i); │ │ │ │ │ +42 for(std::size_t d = 0; d < power; ++d) │ │ │ │ │ +43 keys[i+d*backend.size()] = │ │ │ │ │ +44 _L_o_c_a_l_K_e_y(k._s_u_b_E_n_t_i_t_y(), k._c_o_d_i_m(), power*k._i_n_d_e_x() + d); │ │ │ │ │ +45 } │ │ │ │ │ +46 } │ │ │ │ │ +_4_8 inline std::size_t _s_i_z_e() const { return keys.size(); } │ │ │ │ │ +49 │ │ │ │ │ +_5_1 inline const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const { return keys[i]; } │ │ │ │ │ +52 }; │ │ │ │ │ +53 │ │ │ │ │ +54} // namespace Dune │ │ │ │ │ +55 │ │ │ │ │ +56#endif // DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r │ │ │ │ │ -Convert a simple scalar local basis into a global basis. │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:65 │ │ │ │ │ -_D_u_n_e_:_:_S_c_a_l_a_r_L_o_c_a_l_T_o_G_l_o_b_a_l_B_a_s_i_s_A_d_a_p_t_o_r_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainLocal &in, std::vector< │ │ │ │ │ -typename Traits::Jacobian > &out) const │ │ │ │ │ -DDeeffiinniittiioonn localtoglobaladaptors.hh:125 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ -Basis for order 0.5 (lowest order) edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_E_d_g_e_S_0___5_B_a_s_i_s │ │ │ │ │ -EdgeS0_5Basis(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ -Construct an EdgeS0_5Basis. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:84 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_J_a_c_o_b_i_a_n │ │ │ │ │ -void evaluateJacobian(const typename Traits::DomainLocal &, std::vector< │ │ │ │ │ -typename Traits::Jacobian > &out) const │ │ │ │ │ -Evaluate all Jacobians. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:129 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_e_v_a_l_u_a_t_e_F_u_n_c_t_i_o_n │ │ │ │ │ -void evaluateFunction(const typename Traits::DomainLocal &xl, std::vector< │ │ │ │ │ -typename Traits::Range > &out) const │ │ │ │ │ -Evaluate all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:109 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_s_i_z_e │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ +Describe position of one degree of freedom. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ +constexpr unsigned int index() const noexcept │ │ │ │ │ +Return offset within subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_c_o_d_i_m │ │ │ │ │ +constexpr unsigned int codim() const noexcept │ │ │ │ │ +Return codim of associated entity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:63 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ +constexpr unsigned int subEntity() const noexcept │ │ │ │ │ +Return number of associated subentity. │ │ │ │ │ +DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ +coefficients. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/coefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ std::size_t size() const │ │ │ │ │ -number of shape functions │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:106 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_p_a_r_t_i_a_l │ │ │ │ │ -void partial(const std::array< unsigned int, dim > &order, const typename │ │ │ │ │ -Traits::DomainLocal &in, std::vector< typename Traits::Range > &out) const │ │ │ │ │ -Evaluate partial derivatives of all shape functions. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:145 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_o_r_d_e_r │ │ │ │ │ -std::size_t order() const │ │ │ │ │ -Polynomial order of the shape functions. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:170 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s │ │ │ │ │ -export type traits for function signature │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:41 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ -FieldVector< DomainField, dimDomainGlobal > DomainGlobal │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:46 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_R_a_n_g_e │ │ │ │ │ -static const std::size_t dimRange │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:49 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -static const std::size_t dimDomainLocal │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:43 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_J_a_c_o_b_i_a_n │ │ │ │ │ -FieldMatrix< RangeField, dimRange, dimDomainGlobal > Jacobian │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:52 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_d_i_m_D_o_m_a_i_n_G_l_o_b_a_l │ │ │ │ │ -static const std::size_t dimDomainGlobal │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e_F_i_e_l_d │ │ │ │ │ -RF RangeField │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_L_o_c_a_l │ │ │ │ │ -FieldVector< DomainField, dimDomainLocal > DomainLocal │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:45 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_R_a_n_g_e │ │ │ │ │ -FieldVector< RangeField, dimRange > Range │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:50 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_B_a_s_i_s_:_:_T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d │ │ │ │ │ -Geometry::ctype DomainField │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/basis.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ -Common base class for edge elements. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_r_e_f_e_l_e_m │ │ │ │ │ -RefElem refelem │ │ │ │ │ -The reference element for this edge element. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ -std::size_t s │ │ │ │ │ -The number of base functions. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn meta/power/coefficients.hh:48 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +PowerCoefficients(const Backend &backend, std::size_t power) │ │ │ │ │ +Construct a PowerCoefficients object. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/coefficients.hh:37 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +const LocalKey & localKey(std::size_t i) const │ │ │ │ │ +get i'th index │ │ │ │ │ +DDeeffiinniittiioonn meta/power/coefficients.hh:51 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571.html │ │ │ │ @@ -65,34 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
coefficients.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PowerCoefficients
 Meta-coefficients turning a scalar coefficients into vector-valued coefficients. More...
class  Dune::EdgeS0_5Coefficients< dim >
 Coefficients for lowest order edge elements on simplices. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ coefficients.hh File Reference │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ #include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -  Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ - coefficients. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ +  Coefficients for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04571_source.html │ │ │ │ @@ -70,75 +70,76 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
meta/power/coefficients.hh
│ │ │ │ +
whitney/edges0.5/coefficients.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │
8
│ │ │ │
9#include <cstddef>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune {
│ │ │ │ -
15
│ │ │ │ -
18
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
24 std::vector<LocalKey> keys;
│ │ │ │ -
25
│ │ │ │ -
26 public:
│ │ │ │ -
28
│ │ │ │ -
36 template<class Backend>
│ │ │ │ -
│ │ │ │ -
37 PowerCoefficients(const Backend &backend, std::size_t power) :
│ │ │ │ -
38 keys(backend.size()*power)
│ │ │ │ -
39 {
│ │ │ │ -
40 for(std::size_t i = 0; i < backend.size(); ++i) {
│ │ │ │ -
41 const LocalKey &k = backend.localKey(i);
│ │ │ │ -
42 for(std::size_t d = 0; d < power; ++d)
│ │ │ │ -
43 keys[i+d*backend.size()] =
│ │ │ │ -
44 LocalKey(k.subEntity(), k.codim(), power*k.index() + d);
│ │ │ │ -
45 }
│ │ │ │ -
46 }
│ │ │ │ + │ │ │ │ + │ │ │ │ +
14
│ │ │ │ +
15namespace Dune {
│ │ │ │ +
16
│ │ │ │ +
18 //
│ │ │ │ +
19 // Coefficients
│ │ │ │ +
20 //
│ │ │ │ +
21
│ │ │ │ +
23
│ │ │ │ +
30 template<std::size_t dim>
│ │ │ │ +
│ │ │ │ +
31 class EdgeS0_5Coefficients : private EdgeS0_5Common<dim> {
│ │ │ │ +
32 using EdgeS0_5Common<dim>::s;
│ │ │ │ +
33
│ │ │ │ +
34 std::vector<LocalKey> li;
│ │ │ │ +
35
│ │ │ │ +
36 public:
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
39 for(std::size_t i = 0; i < s; i++)
│ │ │ │ +
40 li[i] = LocalKey(i, dim-1, 0);
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │ +
42
│ │ │ │ +
44 std::size_t size () const { return s; }
│ │ │ │ +
45
│ │ │ │ +
47 const LocalKey& localKey(std::size_t i) const { return li[i]; }
│ │ │ │ +
48 };
│ │ │ │
│ │ │ │ -
48 inline std::size_t size() const { return keys.size(); }
│ │ │ │
49
│ │ │ │ -
51 inline const LocalKey& localKey(std::size_t i) const { return keys[i]; }
│ │ │ │ -
52 };
│ │ │ │ -
│ │ │ │ -
53
│ │ │ │ -
54} // namespace Dune
│ │ │ │ -
55
│ │ │ │ -
56#endif // DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH
│ │ │ │ - │ │ │ │ +
50} // namespace Dune
│ │ │ │ +
51
│ │ │ │ +
52#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │ -
constexpr unsigned int codim() const noexcept
Return codim of associated entity.
Definition localkey.hh:63
│ │ │ │ -
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ -
Meta-coefficients turning a scalar coefficients into vector-valued coefficients.
Definition meta/power/coefficients.hh:23
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition meta/power/coefficients.hh:48
│ │ │ │ -
PowerCoefficients(const Backend &backend, std::size_t power)
Construct a PowerCoefficients object.
Definition meta/power/coefficients.hh:37
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition meta/power/coefficients.hh:51
│ │ │ │ +
Coefficients for lowest order edge elements on simplices.
Definition whitney/edges0.5/coefficients.hh:31
│ │ │ │ +
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition whitney/edges0.5/coefficients.hh:47
│ │ │ │ +
EdgeS0_5Coefficients()
Standard constructor.
Definition whitney/edges0.5/coefficients.hh:38
│ │ │ │ +
std::size_t size() const
number of coefficients
Definition whitney/edges0.5/coefficients.hh:44
│ │ │ │ +
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ +
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,87 +1,83 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ -meta/power/coefficients.hh │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ +whitney/edges0.5/coefficients.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ 5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ 8 │ │ │ │ │ 9#include │ │ │ │ │ 10#include │ │ │ │ │ 11 │ │ │ │ │ 12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e { │ │ │ │ │ -15 │ │ │ │ │ -18 │ │ │ │ │ -_2_3 class _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s { │ │ │ │ │ -24 std::vector keys; │ │ │ │ │ -25 │ │ │ │ │ -26 public: │ │ │ │ │ -28 │ │ │ │ │ -36 template │ │ │ │ │ -_3_7 _P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s(const Backend &backend, std::size_t power) : │ │ │ │ │ -38 keys(backend._s_i_z_e()*power) │ │ │ │ │ -39 { │ │ │ │ │ -40 for(std::size_t i = 0; i < backend.size(); ++i) { │ │ │ │ │ -41 const _L_o_c_a_l_K_e_y &k = backend.localKey(i); │ │ │ │ │ -42 for(std::size_t d = 0; d < power; ++d) │ │ │ │ │ -43 keys[i+d*backend.size()] = │ │ │ │ │ -44 _L_o_c_a_l_K_e_y(k._s_u_b_E_n_t_i_t_y(), k._c_o_d_i_m(), power*k._i_n_d_e_x() + d); │ │ │ │ │ -45 } │ │ │ │ │ -46 } │ │ │ │ │ -_4_8 inline std::size_t _s_i_z_e() const { return keys.size(); } │ │ │ │ │ +13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +14 │ │ │ │ │ +15namespace _D_u_n_e { │ │ │ │ │ +16 │ │ │ │ │ +18 // │ │ │ │ │ +19 // Coefficients │ │ │ │ │ +20 // │ │ │ │ │ +21 │ │ │ │ │ +23 │ │ │ │ │ +30 template │ │ │ │ │ +_3_1 class _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s : private _E_d_g_e_S_0___5_C_o_m_m_o_n { │ │ │ │ │ +32 using _E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s; │ │ │ │ │ +33 │ │ │ │ │ +34 std::vector li; │ │ │ │ │ +35 │ │ │ │ │ +36 public: │ │ │ │ │ +_3_8 _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s() : li(_s) { │ │ │ │ │ +39 for(std::size_t i = 0; i < _s; i++) │ │ │ │ │ +40 li[i] = _L_o_c_a_l_K_e_y(i, dim-1, 0); │ │ │ │ │ +41 } │ │ │ │ │ +42 │ │ │ │ │ +_4_4 std::size_t _s_i_z_e () const { return _s; } │ │ │ │ │ +45 │ │ │ │ │ +_4_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const { return li[i]; } │ │ │ │ │ +48 }; │ │ │ │ │ 49 │ │ │ │ │ -_5_1 inline const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const { return keys[i]; } │ │ │ │ │ -52 }; │ │ │ │ │ -53 │ │ │ │ │ -54} // namespace Dune │ │ │ │ │ -55 │ │ │ │ │ -56#endif // DUNE_LOCALFUNCTIONS_META_POWER_COEFFICIENTS_HH │ │ │ │ │ +50} // namespace Dune │ │ │ │ │ +51 │ │ │ │ │ +52#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ +_c_o_m_m_o_n_._h_h │ │ │ │ │ _l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ Describe position of one degree of freedom. │ │ │ │ │ DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_i_n_d_e_x │ │ │ │ │ -constexpr unsigned int index() const noexcept │ │ │ │ │ -Return offset within subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:70 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_c_o_d_i_m │ │ │ │ │ -constexpr unsigned int codim() const noexcept │ │ │ │ │ -Return codim of associated entity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:63 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y_:_:_s_u_b_E_n_t_i_t_y │ │ │ │ │ -constexpr unsigned int subEntity() const noexcept │ │ │ │ │ -Return number of associated subentity. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:56 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Meta-coefficients turning a scalar coefficients into vector-valued │ │ │ │ │ -coefficients. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/coefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn meta/power/coefficients.hh:48 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -PowerCoefficients(const Backend &backend, std::size_t power) │ │ │ │ │ -Construct a PowerCoefficients object. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/coefficients.hh:37 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +Coefficients for lowest order edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:31 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ const LocalKey & localKey(std::size_t i) const │ │ │ │ │ get i'th index │ │ │ │ │ -DDeeffiinniittiioonn meta/power/coefficients.hh:51 │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:47 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +EdgeS0_5Coefficients() │ │ │ │ │ +Standard constructor. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ +std::size_t size() const │ │ │ │ │ +number of coefficients │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +Common base class for edge elements. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ +std::size_t s │ │ │ │ │ +The number of base functions. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coefficients.hh File Reference │ │ │ │ +dune-localfunctions: interpolation.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,35 +65,37 @@ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
coefficients.hh File Reference
│ │ │ │ +
interpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ +
#include <type_traits>
│ │ │ │ +#include <utility>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │ +#include <dune/common/typeutilities.hh>
│ │ │ │ +#include <dune/localfunctions/lagrange/lagrangecoefficients.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::EdgeS0_5Coefficients< dim >
 Coefficients for lowest order edge elements on simplices. More...
class  Dune::LocalLagrangeInterpolation< LP, dim, F >
 
struct  Dune::LagrangeInterpolationFactory< LP, dim, F >
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,24 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -coefficients.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ +interpolation.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_i_m_ _> │ │ │ │ │ -  Coefficients for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │ + class   _D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ +  │ │ │ │ │ +struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04574_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: coefficients.hh Source File │ │ │ │ +dune-localfunctions: interpolation.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,76 +70,175 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
whitney/edges0.5/coefficients.hh
│ │ │ │ +
lagrange/interpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ +
5#ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ +
6#define DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <type_traits>
│ │ │ │ +
9#include <utility>
│ │ │ │
10#include <vector>
│ │ │ │
11
│ │ │ │ - │ │ │ │ - │ │ │ │ -
14
│ │ │ │ -
15namespace Dune {
│ │ │ │ -
16
│ │ │ │ -
18 //
│ │ │ │ -
19 // Coefficients
│ │ │ │ -
20 //
│ │ │ │ -
21
│ │ │ │ -
23
│ │ │ │ -
30 template<std::size_t dim>
│ │ │ │ -
│ │ │ │ -
31 class EdgeS0_5Coefficients : private EdgeS0_5Common<dim> {
│ │ │ │ -
32 using EdgeS0_5Common<dim>::s;
│ │ │ │ -
33
│ │ │ │ -
34 std::vector<LocalKey> li;
│ │ │ │ -
35
│ │ │ │ -
36 public:
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
39 for(std::size_t i = 0; i < s; i++)
│ │ │ │ -
40 li[i] = LocalKey(i, dim-1, 0);
│ │ │ │ -
41 }
│ │ │ │ -
│ │ │ │ -
42
│ │ │ │ -
44 std::size_t size () const { return s; }
│ │ │ │ -
45
│ │ │ │ -
47 const LocalKey& localKey(std::size_t i) const { return li[i]; }
│ │ │ │ -
48 };
│ │ │ │ -
│ │ │ │ -
49
│ │ │ │ -
50} // namespace Dune
│ │ │ │ -
51
│ │ │ │ -
52#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH
│ │ │ │ - │ │ │ │ - │ │ │ │ +
12#include <dune/common/typeutilities.hh>
│ │ │ │ +
13
│ │ │ │ + │ │ │ │ +
15
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
19 template< template <class,unsigned int> class LP,
│ │ │ │ +
20 unsigned int dim, class F >
│ │ │ │ +
21 struct LagrangeInterpolationFactory;
│ │ │ │ +
22
│ │ │ │ +
23 // LocalLagrangeInterpolation
│ │ │ │ +
24 // --------------------------
│ │ │ │ +
25
│ │ │ │ +
26 template< template <class,unsigned int> class LP, unsigned int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
28 {
│ │ │ │ + │ │ │ │ +
30
│ │ │ │ +
31 public:
│ │ │ │ +
32 typedef LP<F,dim> LagrangePointSet;
│ │ │ │ +
33 typedef typename LagrangePointSet::Field Field;
│ │ │ │ +
34
│ │ │ │ +
35 static const unsigned int dimension = LagrangePointSet::dimension;
│ │ │ │ +
36
│ │ │ │ +
37 private:
│ │ │ │ +
38 friend struct LagrangeInterpolationFactory<LP,dim,F>;
│ │ │ │ +
39 const LagrangePointSet &lagrangePoints_;
│ │ │ │ +
40
│ │ │ │ + │ │ │ │ +
42 : lagrangePoints_( lagrangePoints )
│ │ │ │ +
43 {}
│ │ │ │ +
44
│ │ │ │ +
45 const LagrangePointSet *points () const { return &lagrangePoints_; }
│ │ │ │ +
46
│ │ │ │ +
47 template< class Fn, class Vector >
│ │ │ │ +
48 auto interpolate ( const Fn &fn, Vector &coefficients, PriorityTag< 1 > ) const
│ │ │ │ +
49 -> std::enable_if_t< std::is_invocable_v< const Fn &, decltype( this->lagrangePoints_.begin()->point() ) > >
│ │ │ │ +
50 {
│ │ │ │ +
51 unsigned int index = 0;
│ │ │ │ +
52 for( const auto &lp : lagrangePoints_ )
│ │ │ │ +
53 field_cast( fn( lp.point() ), coefficients[ index++ ] );
│ │ │ │ +
54 }
│ │ │ │ +
55
│ │ │ │ +
56 public:
│ │ │ │ +
57 template< class Fn, class Vector,
│ │ │ │ +
58 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ +
59 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
60 void interpolate ( const Fn &fn, Vector &coefficients ) const
│ │ │ │ +
61 {
│ │ │ │ +
62 coefficients.resize( lagrangePoints_.size() );
│ │ │ │ +
63 interpolate( fn, coefficients, PriorityTag< 42 >() );
│ │ │ │ +
64 }
│ │ │ │ +
│ │ │ │ +
65
│ │ │ │ +
66 template< class Basis, class Matrix,
│ │ │ │ +
67 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ +
68 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ +
69 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ +
│ │ │ │ +
70 void interpolate ( const Basis &basis, Matrix &coefficients ) const
│ │ │ │ +
71 {
│ │ │ │ +
72 coefficients.resize( lagrangePoints_.size(), basis.size( ) );
│ │ │ │ +
73
│ │ │ │ +
74 unsigned int index = 0;
│ │ │ │ +
75 for( const auto &lp : lagrangePoints_ )
│ │ │ │ +
76 basis.template evaluate< 0 >( lp.point(), coefficients[index++] );
│ │ │ │ +
77 }
│ │ │ │ +
│ │ │ │ +
78
│ │ │ │ +
79 const LagrangePointSet &lagrangePoints () const { return lagrangePoints_; }
│ │ │ │ +
80 };
│ │ │ │ +
│ │ │ │ +
81
│ │ │ │ +
82
│ │ │ │ +
83
│ │ │ │ +
84 // LocalLagrangeInterpolationFactory
│ │ │ │ +
85 // ---------------------------------
│ │ │ │ +
86 template< template <class,unsigned int> class LP,
│ │ │ │ +
87 unsigned int dim, class F >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
89 {
│ │ │ │ + │ │ │ │ + │ │ │ │ +
92
│ │ │ │ + │ │ │ │ + │ │ │ │ +
95
│ │ │ │ +
96 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
97 static Object *create ( const Key &key )
│ │ │ │ +
98 {
│ │ │ │ +
99 const LagrangePointSet *lagrangeCoeff
│ │ │ │ +
100 = LagrangePointSetFactory::template create< geometryId >( key );
│ │ │ │ +
101 if ( lagrangeCoeff == 0 )
│ │ │ │ +
102 return 0;
│ │ │ │ +
103 else
│ │ │ │ +
104 return new Object( *lagrangeCoeff );
│ │ │ │ +
105 }
│ │ │ │ +
│ │ │ │ +
106 template< GeometryType::Id geometryId >
│ │ │ │ +
│ │ │ │ +
107 static bool supports ( const Key &key )
│ │ │ │ +
108 {
│ │ │ │ +
109 return true;
│ │ │ │ +
110 }
│ │ │ │ +
│ │ │ │ +
│ │ │ │ +
111 static void release( Object *object)
│ │ │ │ +
112 {
│ │ │ │ +
113 LagrangePointSetFactory::release( object->points() );
│ │ │ │ +
114 delete object;
│ │ │ │ +
115 }
│ │ │ │ +
│ │ │ │ +
116 };
│ │ │ │ +
│ │ │ │ +
117
│ │ │ │ +
118}
│ │ │ │ +
119
│ │ │ │ +
120#endif // #ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │ -
Coefficients for lowest order edge elements on simplices.
Definition whitney/edges0.5/coefficients.hh:31
│ │ │ │ -
const LocalKey & localKey(std::size_t i) const
get i'th index
Definition whitney/edges0.5/coefficients.hh:47
│ │ │ │ -
EdgeS0_5Coefficients()
Standard constructor.
Definition whitney/edges0.5/coefficients.hh:38
│ │ │ │ -
std::size_t size() const
number of coefficients
Definition whitney/edges0.5/coefficients.hh:44
│ │ │ │ -
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ -
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │ +
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ +
Definition lagrange/interpolation.hh:89
│ │ │ │ +
LagrangeCoefficientsFactory< LP, dim, F > LagrangePointSetFactory
Definition lagrange/interpolation.hh:90
│ │ │ │ +
LagrangePointSetFactory::Object LagrangePointSet
Definition lagrange/interpolation.hh:91
│ │ │ │ +
static bool supports(const Key &key)
Definition lagrange/interpolation.hh:107
│ │ │ │ +
LagrangePointSetFactory::Key Key
Definition lagrange/interpolation.hh:93
│ │ │ │ +
static Object * create(const Key &key)
Definition lagrange/interpolation.hh:97
│ │ │ │ +
static void release(Object *object)
Definition lagrange/interpolation.hh:111
│ │ │ │ +
const LocalLagrangeInterpolation< LP, dim, F > Object
Definition lagrange/interpolation.hh:94
│ │ │ │ +
Definition lagrange/interpolation.hh:28
│ │ │ │ +
LagrangePointSet::Field Field
Definition lagrange/interpolation.hh:33
│ │ │ │ +
const LagrangePointSet & lagrangePoints() const
Definition lagrange/interpolation.hh:79
│ │ │ │ +
static const unsigned int dimension
Definition lagrange/interpolation.hh:35
│ │ │ │ +
LP< F, dim > LagrangePointSet
Definition lagrange/interpolation.hh:32
│ │ │ │ +
Definition lagrangecoefficients.hh:23
│ │ │ │ +
static void release(Object *object)
Definition lagrangecoefficients.hh:42
│ │ │ │ +
const typedef LP< F, dim > Object
Definition lagrangecoefficients.hh:25
│ │ │ │ +
std::size_t Key
Definition lagrangecoefficients.hh:26
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,83 +1,191 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ -whitney/edges0.5/coefficients.hh │ │ │ │ │ + * _l_a_g_r_a_n_g_e │ │ │ │ │ +lagrange/interpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ +5#ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ +6#define DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9#include │ │ │ │ │ 10#include │ │ │ │ │ 11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_k_e_y_._h_h> │ │ │ │ │ -13#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ -14 │ │ │ │ │ -15namespace _D_u_n_e { │ │ │ │ │ -16 │ │ │ │ │ -18 // │ │ │ │ │ -19 // Coefficients │ │ │ │ │ -20 // │ │ │ │ │ -21 │ │ │ │ │ -23 │ │ │ │ │ -30 template │ │ │ │ │ -_3_1 class _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s : private _E_d_g_e_S_0___5_C_o_m_m_o_n { │ │ │ │ │ -32 using _E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s; │ │ │ │ │ -33 │ │ │ │ │ -34 std::vector li; │ │ │ │ │ -35 │ │ │ │ │ -36 public: │ │ │ │ │ -_3_8 _E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s() : li(_s) { │ │ │ │ │ -39 for(std::size_t i = 0; i < _s; i++) │ │ │ │ │ -40 li[i] = _L_o_c_a_l_K_e_y(i, dim-1, 0); │ │ │ │ │ -41 } │ │ │ │ │ -42 │ │ │ │ │ -_4_4 std::size_t _s_i_z_e () const { return _s; } │ │ │ │ │ -45 │ │ │ │ │ -_4_7 const _L_o_c_a_l_K_e_y& _l_o_c_a_l_K_e_y(std::size_t i) const { return li[i]; } │ │ │ │ │ -48 }; │ │ │ │ │ -49 │ │ │ │ │ -50} // namespace Dune │ │ │ │ │ -51 │ │ │ │ │ -52#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_COEFFICIENTS_HH │ │ │ │ │ -_c_o_m_m_o_n_._h_h │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ +12#include │ │ │ │ │ +13 │ │ │ │ │ +14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +15 │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +19 template< template class LP, │ │ │ │ │ +20 unsigned int dim, class F > │ │ │ │ │ +21 struct LagrangeInterpolationFactory; │ │ │ │ │ +22 │ │ │ │ │ +23 // LocalLagrangeInterpolation │ │ │ │ │ +24 // -------------------------- │ │ │ │ │ +25 │ │ │ │ │ +26 template< template class LP, unsigned int dim, class F │ │ │ │ │ +> │ │ │ │ │ +_2_7 class _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +28 { │ │ │ │ │ +29 typedef _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_d_i_m_,_F_ _> _T_h_i_s; │ │ │ │ │ +30 │ │ │ │ │ +31 public: │ │ │ │ │ +_3_2 typedef LP _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t; │ │ │ │ │ +_3_3 typedef typename LagrangePointSet::Field _F_i_e_l_d; │ │ │ │ │ +34 │ │ │ │ │ +_3_5 static const unsigned int _d_i_m_e_n_s_i_o_n = LagrangePointSet::dimension; │ │ │ │ │ +36 │ │ │ │ │ +37 private: │ │ │ │ │ +38 friend struct _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ +39 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &lagrangePoints_; │ │ │ │ │ +40 │ │ │ │ │ +41 explicit _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n ( const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &_l_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ +) │ │ │ │ │ +42 : lagrangePoints_( _l_a_g_r_a_n_g_e_P_o_i_n_t_s ) │ │ │ │ │ +43 {} │ │ │ │ │ +44 │ │ │ │ │ +45 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t *points () const { return &lagrangePoints_; } │ │ │ │ │ +46 │ │ │ │ │ +47 template< class Fn, class Vector > │ │ │ │ │ +48 auto interpolate ( const Fn &fn, Vector &coefficients, PriorityTag< 1 > ) │ │ │ │ │ +const │ │ │ │ │ +49 -> std::enable_if_t< std::is_invocable_v< const Fn &, decltype( this- │ │ │ │ │ +>lagrangePoints_.begin()->point() ) > > │ │ │ │ │ +50 { │ │ │ │ │ +51 unsigned int index = 0; │ │ │ │ │ +52 for( const auto &lp : lagrangePoints_ ) │ │ │ │ │ +53 _f_i_e_l_d___c_a_s_t( fn( lp.point() ), coefficients[ index++ ] ); │ │ │ │ │ +54 } │ │ │ │ │ +55 │ │ │ │ │ +56 public: │ │ │ │ │ +57 template< class Fn, class Vector, │ │ │ │ │ +58 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ +59 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ +_6_0 void interpolate ( const Fn &fn, Vector &coefficients ) const │ │ │ │ │ +61 { │ │ │ │ │ +62 coefficients.resize( lagrangePoints_.size() ); │ │ │ │ │ +63 interpolate( fn, coefficients, PriorityTag< 42 >() ); │ │ │ │ │ +64 } │ │ │ │ │ +65 │ │ │ │ │ +66 template< class Basis, class Matrix, │ │ │ │ │ +67 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ +68 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ +69 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ +_7_0 void interpolate ( const Basis &basis, Matrix &coefficients ) const │ │ │ │ │ +71 { │ │ │ │ │ +72 coefficients.resize( lagrangePoints_.size(), basis.size( ) ); │ │ │ │ │ +73 │ │ │ │ │ +74 unsigned int index = 0; │ │ │ │ │ +75 for( const auto &lp : lagrangePoints_ ) │ │ │ │ │ +76 basis.template evaluate< 0 >( lp.point(), coefficients[index++] ); │ │ │ │ │ +77 } │ │ │ │ │ +78 │ │ │ │ │ +_7_9 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &_l_a_g_r_a_n_g_e_P_o_i_n_t_s () const { return lagrangePoints_; } │ │ │ │ │ +80 }; │ │ │ │ │ +81 │ │ │ │ │ +82 │ │ │ │ │ +83 │ │ │ │ │ +84 // LocalLagrangeInterpolationFactory │ │ │ │ │ +85 // --------------------------------- │ │ │ │ │ +86 template< template class LP, │ │ │ │ │ +87 unsigned int dim, class F > │ │ │ │ │ +_8_8 struct _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +89 { │ │ │ │ │ +_9_0 typedef _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_L_P_,_d_i_m_,_F_> _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y; │ │ │ │ │ +_9_1 typedef typename _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t; │ │ │ │ │ +92 │ │ │ │ │ +_9_3 typedef typename _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_K_e_y _K_e_y; │ │ │ │ │ +_9_4 typedef const _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_d_i_m_,_F_ _> _O_b_j_e_c_t; │ │ │ │ │ +95 │ │ │ │ │ +96 template< GeometryType::Id geometryId > │ │ │ │ │ +_9_7 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ +98 { │ │ │ │ │ +99 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t *lagrangeCoeff │ │ │ │ │ +100 = LagrangePointSetFactory::template create< geometryId >( key ); │ │ │ │ │ +101 if ( lagrangeCoeff == 0 ) │ │ │ │ │ +102 return 0; │ │ │ │ │ +103 else │ │ │ │ │ +104 return new _O_b_j_e_c_t( *lagrangeCoeff ); │ │ │ │ │ +105 } │ │ │ │ │ +106 template< GeometryType::Id geometryId > │ │ │ │ │ +_1_0_7 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ +108 { │ │ │ │ │ +109 return true; │ │ │ │ │ +110 } │ │ │ │ │ +_1_1_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object) │ │ │ │ │ +112 { │ │ │ │ │ +113 _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( object->points() ); │ │ │ │ │ +114 delete object; │ │ │ │ │ +115 } │ │ │ │ │ +116 }; │ │ │ │ │ +117 │ │ │ │ │ +118} │ │ │ │ │ +119 │ │ │ │ │ +120#endif // #ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ +_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ │ │ -Describe position of one degree of freedom. │ │ │ │ │ -DDeeffiinniittiioonn localkey.hh:24 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -Coefficients for lowest order edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:31 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_l_o_c_a_l_K_e_y │ │ │ │ │ -const LocalKey & localKey(std::size_t i) const │ │ │ │ │ -get i'th index │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:47 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ -EdgeS0_5Coefficients() │ │ │ │ │ -Standard constructor. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_e_f_f_i_c_i_e_n_t_s_:_:_s_i_z_e │ │ │ │ │ -std::size_t size() const │ │ │ │ │ -number of coefficients │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/coefficients.hh:44 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ -Common base class for edge elements. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ -std::size_t s │ │ │ │ │ -The number of base functions. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ +void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ +a helper class to cast from one field to another │ │ │ │ │ +DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:89 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y │ │ │ │ │ +LagrangeCoefficientsFactory< LP, dim, F > LagrangePointSetFactory │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:90 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t │ │ │ │ │ +LagrangePointSetFactory::Object LagrangePointSet │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:91 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ +static bool supports(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:107 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +LagrangePointSetFactory::Key Key │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:93 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ +static Object * create(const Key &key) │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:97 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:111 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const LocalLagrangeInterpolation< LP, dim, F > Object │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:94 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:28 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ +LagrangePointSet::Field Field │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_l_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ +const LagrangePointSet & lagrangePoints() const │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:79 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ +static const unsigned int dimension │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t │ │ │ │ │ +LP< F, dim > LagrangePointSet │ │ │ │ │ +DDeeffiinniittiioonn lagrange/interpolation.hh:32 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ +static void release(Object *object) │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:42 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ +const typedef LP< F, dim > Object │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:25 │ │ │ │ │ +_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ +std::size_t Key │ │ │ │ │ +DDeeffiinniittiioonn lagrangecoefficients.hh:26 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577.html │ │ │ │ @@ -65,37 +65,35 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
interpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <type_traits>
│ │ │ │ -#include <utility>
│ │ │ │ +
#include <algorithm>
│ │ │ │ +#include <cassert>
│ │ │ │ +#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ -#include <dune/common/typeutilities.hh>
│ │ │ │ -#include <dune/localfunctions/lagrange/lagrangecoefficients.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::LocalLagrangeInterpolation< LP, dim, F >
 
struct  Dune::LagrangeInterpolationFactory< LP, dim, F >
class  Dune::PowerInterpolation< Backend, BasisTraits >
 Meta-interpolation turning a scalar interpolation into vector-valued interpolation. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,25 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ interpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ +#include │ │ │ │ │ #include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ - class   _D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ -  │ │ │ │ │ -struct   _D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_<_ _L_P_,_ _d_i_m_,_ _F_ _> │ │ │ │ │ +class   _D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_a_c_k_e_n_d_,_ _B_a_s_i_s_T_r_a_i_t_s_ _> │ │ │ │ │ +  Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ + interpolation. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04577_source.html │ │ │ │ @@ -70,175 +70,104 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
lagrange/interpolation.hh
│ │ │ │ +
meta/power/interpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5#ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ -
6#define DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ -
7
│ │ │ │ -
8#include <type_traits>
│ │ │ │ -
9#include <utility>
│ │ │ │ -
10#include <vector>
│ │ │ │ -
11
│ │ │ │ -
12#include <dune/common/typeutilities.hh>
│ │ │ │ +
5
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │ +
8
│ │ │ │ +
9#include <algorithm>
│ │ │ │ +
10#include <cassert>
│ │ │ │ +
11#include <cstddef>
│ │ │ │ +
12#include <vector>
│ │ │ │
13
│ │ │ │ - │ │ │ │ +
14namespace Dune {
│ │ │ │
15
│ │ │ │ -
16namespace Dune
│ │ │ │ -
17{
│ │ │ │
18
│ │ │ │ -
19 template< template <class,unsigned int> class LP,
│ │ │ │ -
20 unsigned int dim, class F >
│ │ │ │ -
21 struct LagrangeInterpolationFactory;
│ │ │ │ -
22
│ │ │ │ -
23 // LocalLagrangeInterpolation
│ │ │ │ -
24 // --------------------------
│ │ │ │ -
25
│ │ │ │ -
26 template< template <class,unsigned int> class LP, unsigned int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
28 {
│ │ │ │ - │ │ │ │ -
30
│ │ │ │ -
31 public:
│ │ │ │ -
32 typedef LP<F,dim> LagrangePointSet;
│ │ │ │ -
33 typedef typename LagrangePointSet::Field Field;
│ │ │ │ -
34
│ │ │ │ -
35 static const unsigned int dimension = LagrangePointSet::dimension;
│ │ │ │ -
36
│ │ │ │ -
37 private:
│ │ │ │ -
38 friend struct LagrangeInterpolationFactory<LP,dim,F>;
│ │ │ │ -
39 const LagrangePointSet &lagrangePoints_;
│ │ │ │ -
40
│ │ │ │ - │ │ │ │ -
42 : lagrangePoints_( lagrangePoints )
│ │ │ │ -
43 {}
│ │ │ │ +
25 template<class Backend, class BasisTraits>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
27 static_assert(Backend::Traits::dimRange == 1,
│ │ │ │ +
28 "PowerInterpolation works only with scalar backends");
│ │ │ │ +
29
│ │ │ │ +
30 const Backend *backend;
│ │ │ │ +
31
│ │ │ │ +
32 public:
│ │ │ │ +
34 typedef BasisTraits Traits;
│ │ │ │ +
35
│ │ │ │ +
37
│ │ │ │ +
43 PowerInterpolation(const Backend &backend_) : backend(&backend_) { }
│ │ │ │
44
│ │ │ │ -
45 const LagrangePointSet *points () const { return &lagrangePoints_; }
│ │ │ │ -
46
│ │ │ │ -
47 template< class Fn, class Vector >
│ │ │ │ -
48 auto interpolate ( const Fn &fn, Vector &coefficients, PriorityTag< 1 > ) const
│ │ │ │ -
49 -> std::enable_if_t< std::is_invocable_v< const Fn &, decltype( this->lagrangePoints_.begin()->point() ) > >
│ │ │ │ -
50 {
│ │ │ │ -
51 unsigned int index = 0;
│ │ │ │ -
52 for( const auto &lp : lagrangePoints_ )
│ │ │ │ -
53 field_cast( fn( lp.point() ), coefficients[ index++ ] );
│ │ │ │ -
54 }
│ │ │ │ -
55
│ │ │ │ -
56 public:
│ │ │ │ -
57 template< class Fn, class Vector,
│ │ │ │ -
58 decltype(std::declval<Vector>().size(),bool{}) = true,
│ │ │ │ -
59 decltype(std::declval<Vector>().resize(0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
60 void interpolate ( const Fn &fn, Vector &coefficients ) const
│ │ │ │ -
61 {
│ │ │ │ -
62 coefficients.resize( lagrangePoints_.size() );
│ │ │ │ -
63 interpolate( fn, coefficients, PriorityTag< 42 >() );
│ │ │ │ -
64 }
│ │ │ │ -
│ │ │ │ +
45 private:
│ │ │ │ +
46 template<class F>
│ │ │ │ +
47 class ComponentEvaluator
│ │ │ │ +
48 {
│ │ │ │ +
49 const F &f;
│ │ │ │ +
50 std::size_t comp;
│ │ │ │ +
51
│ │ │ │ +
52 public:
│ │ │ │ +
53 ComponentEvaluator(const F &f_, std::size_t comp_) :
│ │ │ │ +
54 f(f_), comp(comp_)
│ │ │ │ +
55 { }
│ │ │ │ +
56
│ │ │ │ +
57 typename Backend::Traits::Range operator()(const typename Backend::Traits::DomainLocal &x) const
│ │ │ │ +
58 {
│ │ │ │ +
59 typename Traits::Range fy = f(x);
│ │ │ │ +
60 typename Backend::Traits::Range y;
│ │ │ │ +
61 y[0] = fy[comp];
│ │ │ │ +
62 return y;
│ │ │ │ +
63 }
│ │ │ │ +
64 };
│ │ │ │
65
│ │ │ │ -
66 template< class Basis, class Matrix,
│ │ │ │ -
67 decltype(std::declval<Matrix>().rows(),bool{}) = true,
│ │ │ │ -
68 decltype(std::declval<Matrix>().cols(),bool{}) = true,
│ │ │ │ -
69 decltype(std::declval<Matrix>().resize(0u,0u),bool{}) = true>
│ │ │ │ -
│ │ │ │ -
70 void interpolate ( const Basis &basis, Matrix &coefficients ) const
│ │ │ │ -
71 {
│ │ │ │ -
72 coefficients.resize( lagrangePoints_.size(), basis.size( ) );
│ │ │ │ -
73
│ │ │ │ -
74 unsigned int index = 0;
│ │ │ │ -
75 for( const auto &lp : lagrangePoints_ )
│ │ │ │ -
76 basis.template evaluate< 0 >( lp.point(), coefficients[index++] );
│ │ │ │ -
77 }
│ │ │ │ -
│ │ │ │ -
78
│ │ │ │ -
79 const LagrangePointSet &lagrangePoints () const { return lagrangePoints_; }
│ │ │ │ -
80 };
│ │ │ │ -
│ │ │ │ -
81
│ │ │ │ -
82
│ │ │ │ -
83
│ │ │ │ -
84 // LocalLagrangeInterpolationFactory
│ │ │ │ -
85 // ---------------------------------
│ │ │ │ -
86 template< template <class,unsigned int> class LP,
│ │ │ │ -
87 unsigned int dim, class F >
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
89 {
│ │ │ │ - │ │ │ │ - │ │ │ │ -
92
│ │ │ │ - │ │ │ │ - │ │ │ │ +
66 public:
│ │ │ │ +
68
│ │ │ │ +
77 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
78 void interpolate(const F& f, std::vector<C>& out) const {
│ │ │ │ +
79 out.clear();
│ │ │ │ +
80 std::vector<C> cout;
│ │ │ │ +
81 for(std::size_t d = 0; d < Traits::dimRange; ++d) {
│ │ │ │ +
82 // When dropping support for `evaluate()` we can simply use a lambda
│ │ │ │ +
83 // instead of ComponentEvaluator. But changing this now would break
│ │ │ │ +
84 // PowerInterpolation for FE-implementation outside of dune-localfunctions
│ │ │ │ +
85 // which may not have been adjusted so far.
│ │ │ │ +
86 backend->interpolate(ComponentEvaluator<std::decay_t<decltype(f)>>(f, d), cout);
│ │ │ │ +
87 if(d == 0)
│ │ │ │ +
88 out.resize(cout.size()*Traits::dimRange);
│ │ │ │ +
89 // make sure the size of cout does not change surprisingly
│ │ │ │ +
90 assert(out.size() == cout.size()*Traits::dimRange);
│ │ │ │ +
91 std::copy(cout.begin(), cout.end(), out.begin() + d*cout.size());
│ │ │ │ +
92 }
│ │ │ │ +
93 }
│ │ │ │ +
│ │ │ │ +
94 };
│ │ │ │ +
│ │ │ │
95
│ │ │ │ -
96 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
97 static Object *create ( const Key &key )
│ │ │ │ -
98 {
│ │ │ │ -
99 const LagrangePointSet *lagrangeCoeff
│ │ │ │ -
100 = LagrangePointSetFactory::template create< geometryId >( key );
│ │ │ │ -
101 if ( lagrangeCoeff == 0 )
│ │ │ │ -
102 return 0;
│ │ │ │ -
103 else
│ │ │ │ -
104 return new Object( *lagrangeCoeff );
│ │ │ │ -
105 }
│ │ │ │ -
│ │ │ │ -
106 template< GeometryType::Id geometryId >
│ │ │ │ -
│ │ │ │ -
107 static bool supports ( const Key &key )
│ │ │ │ -
108 {
│ │ │ │ -
109 return true;
│ │ │ │ -
110 }
│ │ │ │ -
│ │ │ │ -
│ │ │ │ -
111 static void release( Object *object)
│ │ │ │ -
112 {
│ │ │ │ -
113 LagrangePointSetFactory::release( object->points() );
│ │ │ │ -
114 delete object;
│ │ │ │ -
115 }
│ │ │ │ -
│ │ │ │ -
116 };
│ │ │ │ -
│ │ │ │ -
117
│ │ │ │ -
118}
│ │ │ │ -
119
│ │ │ │ -
120#endif // #ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH
│ │ │ │ - │ │ │ │ +
96} // namespace Dune
│ │ │ │ +
97
│ │ │ │ +
98#endif // DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
void field_cast(const F1 &f1, F2 &f2)
a helper class to cast from one field to another
Definition field.hh:159
│ │ │ │ -
Definition lagrange/interpolation.hh:89
│ │ │ │ -
LagrangeCoefficientsFactory< LP, dim, F > LagrangePointSetFactory
Definition lagrange/interpolation.hh:90
│ │ │ │ -
LagrangePointSetFactory::Object LagrangePointSet
Definition lagrange/interpolation.hh:91
│ │ │ │ -
static bool supports(const Key &key)
Definition lagrange/interpolation.hh:107
│ │ │ │ -
LagrangePointSetFactory::Key Key
Definition lagrange/interpolation.hh:93
│ │ │ │ -
static Object * create(const Key &key)
Definition lagrange/interpolation.hh:97
│ │ │ │ -
static void release(Object *object)
Definition lagrange/interpolation.hh:111
│ │ │ │ -
const LocalLagrangeInterpolation< LP, dim, F > Object
Definition lagrange/interpolation.hh:94
│ │ │ │ -
Definition lagrange/interpolation.hh:28
│ │ │ │ -
LagrangePointSet::Field Field
Definition lagrange/interpolation.hh:33
│ │ │ │ -
const LagrangePointSet & lagrangePoints() const
Definition lagrange/interpolation.hh:79
│ │ │ │ -
static const unsigned int dimension
Definition lagrange/interpolation.hh:35
│ │ │ │ -
LP< F, dim > LagrangePointSet
Definition lagrange/interpolation.hh:32
│ │ │ │ -
Definition lagrangecoefficients.hh:23
│ │ │ │ -
static void release(Object *object)
Definition lagrangecoefficients.hh:42
│ │ │ │ -
const typedef LP< F, dim > Object
Definition lagrangecoefficients.hh:25
│ │ │ │ -
std::size_t Key
Definition lagrangecoefficients.hh:26
│ │ │ │ +
Meta-interpolation turning a scalar interpolation into vector-valued interpolation.
Definition meta/power/interpolation.hh:26
│ │ │ │ +
BasisTraits Traits
Export basis traits.
Definition meta/power/interpolation.hh:34
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
Definition meta/power/interpolation.hh:78
│ │ │ │ +
PowerInterpolation(const Backend &backend_)
Construct a PowerInterpolation.
Definition meta/power/interpolation.hh:43
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,191 +1,107 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _l_a_g_r_a_n_g_e │ │ │ │ │ -lagrange/interpolation.hh │ │ │ │ │ + * _m_e_t_a │ │ │ │ │ + * _p_o_w_e_r │ │ │ │ │ +meta/power/interpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5#ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ -6#define DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ -7 │ │ │ │ │ -8#include │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11 │ │ │ │ │ -12#include │ │ │ │ │ +5 │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ +8 │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11#include │ │ │ │ │ +12#include │ │ │ │ │ 13 │ │ │ │ │ -14#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_l_a_g_r_a_n_g_e_/_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h> │ │ │ │ │ +14namespace _D_u_n_e { │ │ │ │ │ 15 │ │ │ │ │ -16namespace _D_u_n_e │ │ │ │ │ -17{ │ │ │ │ │ 18 │ │ │ │ │ -19 template< template class LP, │ │ │ │ │ -20 unsigned int dim, class F > │ │ │ │ │ -21 struct LagrangeInterpolationFactory; │ │ │ │ │ -22 │ │ │ │ │ -23 // LocalLagrangeInterpolation │ │ │ │ │ -24 // -------------------------- │ │ │ │ │ -25 │ │ │ │ │ -26 template< template class LP, unsigned int dim, class F │ │ │ │ │ -> │ │ │ │ │ -_2_7 class _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -28 { │ │ │ │ │ -29 typedef _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_d_i_m_,_F_ _> _T_h_i_s; │ │ │ │ │ -30 │ │ │ │ │ -31 public: │ │ │ │ │ -_3_2 typedef LP _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t; │ │ │ │ │ -_3_3 typedef typename LagrangePointSet::Field _F_i_e_l_d; │ │ │ │ │ -34 │ │ │ │ │ -_3_5 static const unsigned int _d_i_m_e_n_s_i_o_n = LagrangePointSet::dimension; │ │ │ │ │ -36 │ │ │ │ │ -37 private: │ │ │ │ │ -38 friend struct _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y; │ │ │ │ │ -39 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &lagrangePoints_; │ │ │ │ │ -40 │ │ │ │ │ -41 explicit _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n ( const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &_l_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ -) │ │ │ │ │ -42 : lagrangePoints_( _l_a_g_r_a_n_g_e_P_o_i_n_t_s ) │ │ │ │ │ -43 {} │ │ │ │ │ +25 template │ │ │ │ │ +_2_6 class _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n { │ │ │ │ │ +27 static_assert(Backend::Traits::dimRange == 1, │ │ │ │ │ +28 "PowerInterpolation works only with scalar backends"); │ │ │ │ │ +29 │ │ │ │ │ +30 const Backend *backend; │ │ │ │ │ +31 │ │ │ │ │ +32 public: │ │ │ │ │ +_3_4 typedef BasisTraits _T_r_a_i_t_s; │ │ │ │ │ +35 │ │ │ │ │ +37 │ │ │ │ │ +_4_3 _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n(const Backend &backend_) : backend(&backend_) { } │ │ │ │ │ 44 │ │ │ │ │ -45 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t *points () const { return &lagrangePoints_; } │ │ │ │ │ -46 │ │ │ │ │ -47 template< class Fn, class Vector > │ │ │ │ │ -48 auto interpolate ( const Fn &fn, Vector &coefficients, PriorityTag< 1 > ) │ │ │ │ │ -const │ │ │ │ │ -49 -> std::enable_if_t< std::is_invocable_v< const Fn &, decltype( this- │ │ │ │ │ ->lagrangePoints_.begin()->point() ) > > │ │ │ │ │ -50 { │ │ │ │ │ -51 unsigned int index = 0; │ │ │ │ │ -52 for( const auto &lp : lagrangePoints_ ) │ │ │ │ │ -53 _f_i_e_l_d___c_a_s_t( fn( lp.point() ), coefficients[ index++ ] ); │ │ │ │ │ -54 } │ │ │ │ │ -55 │ │ │ │ │ -56 public: │ │ │ │ │ -57 template< class Fn, class Vector, │ │ │ │ │ -58 decltype(std::declval().size(),bool{}) = true, │ │ │ │ │ -59 decltype(std::declval().resize(0u),bool{}) = true> │ │ │ │ │ -_6_0 void interpolate ( const Fn &fn, Vector &coefficients ) const │ │ │ │ │ -61 { │ │ │ │ │ -62 coefficients.resize( lagrangePoints_.size() ); │ │ │ │ │ -63 interpolate( fn, coefficients, PriorityTag< 42 >() ); │ │ │ │ │ -64 } │ │ │ │ │ +45 private: │ │ │ │ │ +46 template │ │ │ │ │ +47 class ComponentEvaluator │ │ │ │ │ +48 { │ │ │ │ │ +49 const F &f; │ │ │ │ │ +50 std::size_t comp; │ │ │ │ │ +51 │ │ │ │ │ +52 public: │ │ │ │ │ +53 ComponentEvaluator(const F &f_, std::size_t comp_) : │ │ │ │ │ +54 f(f_), comp(comp_) │ │ │ │ │ +55 { } │ │ │ │ │ +56 │ │ │ │ │ +57 typename Backend::Traits::Range operator()(const typename Backend::Traits:: │ │ │ │ │ +DomainLocal &x) const │ │ │ │ │ +58 { │ │ │ │ │ +59 typename Traits::Range fy = f(x); │ │ │ │ │ +60 typename Backend::Traits::Range y; │ │ │ │ │ +61 y[0] = fy[comp]; │ │ │ │ │ +62 return y; │ │ │ │ │ +63 } │ │ │ │ │ +64 }; │ │ │ │ │ 65 │ │ │ │ │ -66 template< class Basis, class Matrix, │ │ │ │ │ -67 decltype(std::declval().rows(),bool{}) = true, │ │ │ │ │ -68 decltype(std::declval().cols(),bool{}) = true, │ │ │ │ │ -69 decltype(std::declval().resize(0u,0u),bool{}) = true> │ │ │ │ │ -_7_0 void interpolate ( const Basis &basis, Matrix &coefficients ) const │ │ │ │ │ -71 { │ │ │ │ │ -72 coefficients.resize( lagrangePoints_.size(), basis.size( ) ); │ │ │ │ │ -73 │ │ │ │ │ -74 unsigned int index = 0; │ │ │ │ │ -75 for( const auto &lp : lagrangePoints_ ) │ │ │ │ │ -76 basis.template evaluate< 0 >( lp.point(), coefficients[index++] ); │ │ │ │ │ -77 } │ │ │ │ │ -78 │ │ │ │ │ -_7_9 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t &_l_a_g_r_a_n_g_e_P_o_i_n_t_s () const { return lagrangePoints_; } │ │ │ │ │ -80 }; │ │ │ │ │ -81 │ │ │ │ │ -82 │ │ │ │ │ -83 │ │ │ │ │ -84 // LocalLagrangeInterpolationFactory │ │ │ │ │ -85 // --------------------------------- │ │ │ │ │ -86 template< template class LP, │ │ │ │ │ -87 unsigned int dim, class F > │ │ │ │ │ -_8_8 struct _L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -89 { │ │ │ │ │ -_9_0 typedef _L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_<_L_P_,_d_i_m_,_F_> _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y; │ │ │ │ │ -_9_1 typedef typename _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t; │ │ │ │ │ -92 │ │ │ │ │ -_9_3 typedef typename _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_K_e_y _K_e_y; │ │ │ │ │ -_9_4 typedef const _L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _L_P_,_d_i_m_,_F_ _> _O_b_j_e_c_t; │ │ │ │ │ +66 public: │ │ │ │ │ +68 │ │ │ │ │ +77 template │ │ │ │ │ +_7_8 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const { │ │ │ │ │ +79 out.clear(); │ │ │ │ │ +80 std::vector cout; │ │ │ │ │ +81 for(std::size_t d = 0; d < Traits::dimRange; ++d) { │ │ │ │ │ +82 // When dropping support for `evaluate()` we can simply use a lambda │ │ │ │ │ +83 // instead of ComponentEvaluator. But changing this now would break │ │ │ │ │ +84 // PowerInterpolation for FE-implementation outside of dune-localfunctions │ │ │ │ │ +85 // which may not have been adjusted so far. │ │ │ │ │ +86 backend->interpolate(ComponentEvaluator>(f, d), │ │ │ │ │ +cout); │ │ │ │ │ +87 if(d == 0) │ │ │ │ │ +88 out.resize(cout.size()*Traits::dimRange); │ │ │ │ │ +89 // make sure the size of cout does not change surprisingly │ │ │ │ │ +90 assert(out.size() == cout.size()*Traits::dimRange); │ │ │ │ │ +91 std::copy(cout.begin(), cout.end(), out.begin() + d*cout.size()); │ │ │ │ │ +92 } │ │ │ │ │ +93 } │ │ │ │ │ +94 }; │ │ │ │ │ 95 │ │ │ │ │ -96 template< GeometryType::Id geometryId > │ │ │ │ │ -_9_7 static _O_b_j_e_c_t *_c_r_e_a_t_e ( const _K_e_y &key ) │ │ │ │ │ -98 { │ │ │ │ │ -99 const _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t *lagrangeCoeff │ │ │ │ │ -100 = LagrangePointSetFactory::template create< geometryId >( key ); │ │ │ │ │ -101 if ( lagrangeCoeff == 0 ) │ │ │ │ │ -102 return 0; │ │ │ │ │ -103 else │ │ │ │ │ -104 return new _O_b_j_e_c_t( *lagrangeCoeff ); │ │ │ │ │ -105 } │ │ │ │ │ -106 template< GeometryType::Id geometryId > │ │ │ │ │ -_1_0_7 static bool _s_u_p_p_o_r_t_s ( const _K_e_y &key ) │ │ │ │ │ -108 { │ │ │ │ │ -109 return true; │ │ │ │ │ -110 } │ │ │ │ │ -_1_1_1 static void _r_e_l_e_a_s_e( _O_b_j_e_c_t *object) │ │ │ │ │ -112 { │ │ │ │ │ -113 _L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e( object->points() ); │ │ │ │ │ -114 delete object; │ │ │ │ │ -115 } │ │ │ │ │ -116 }; │ │ │ │ │ -117 │ │ │ │ │ -118} │ │ │ │ │ -119 │ │ │ │ │ -120#endif // #ifndef DUNE_LAGRANGEBASIS_INTERPOLATION_HH │ │ │ │ │ -_l_a_g_r_a_n_g_e_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +96} // namespace Dune │ │ │ │ │ +97 │ │ │ │ │ +98#endif // DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_f_i_e_l_d___c_a_s_t │ │ │ │ │ -void field_cast(const F1 &f1, F2 &f2) │ │ │ │ │ -a helper class to cast from one field to another │ │ │ │ │ -DDeeffiinniittiioonn field.hh:159 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:89 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t_F_a_c_t_o_r_y │ │ │ │ │ -LagrangeCoefficientsFactory< LP, dim, F > LagrangePointSetFactory │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:90 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t │ │ │ │ │ -LagrangePointSetFactory::Object LagrangePointSet │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:91 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_s_u_p_p_o_r_t_s │ │ │ │ │ -static bool supports(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:107 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -LagrangePointSetFactory::Key Key │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:93 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_c_r_e_a_t_e │ │ │ │ │ -static Object * create(const Key &key) │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:97 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:111 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const LocalLagrangeInterpolation< LP, dim, F > Object │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:94 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:28 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_F_i_e_l_d │ │ │ │ │ -LagrangePointSet::Field Field │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_l_a_g_r_a_n_g_e_P_o_i_n_t_s │ │ │ │ │ -const LagrangePointSet & lagrangePoints() const │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:79 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_d_i_m_e_n_s_i_o_n │ │ │ │ │ -static const unsigned int dimension │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_L_o_c_a_l_L_a_g_r_a_n_g_e_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_L_a_g_r_a_n_g_e_P_o_i_n_t_S_e_t │ │ │ │ │ -LP< F, dim > LagrangePointSet │ │ │ │ │ -DDeeffiinniittiioonn lagrange/interpolation.hh:32 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_r_e_l_e_a_s_e │ │ │ │ │ -static void release(Object *object) │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:42 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_O_b_j_e_c_t │ │ │ │ │ -const typedef LP< F, dim > Object │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:25 │ │ │ │ │ -_D_u_n_e_:_:_L_a_g_r_a_n_g_e_C_o_e_f_f_i_c_i_e_n_t_s_F_a_c_t_o_r_y_:_:_K_e_y │ │ │ │ │ -std::size_t Key │ │ │ │ │ -DDeeffiinniittiioonn lagrangecoefficients.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ +interpolation. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/interpolation.hh:26 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_T_r_a_i_t_s │ │ │ │ │ +BasisTraits Traits │ │ │ │ │ +Export basis traits. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/interpolation.hh:34 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ +Determine coefficients interpolating a given function. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/interpolation.hh:78 │ │ │ │ │ +_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +PowerInterpolation(const Backend &backend_) │ │ │ │ │ +Construct a PowerInterpolation. │ │ │ │ │ +DDeeffiinniittiioonn meta/power/interpolation.hh:43 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580.html │ │ │ │ @@ -65,35 +65,34 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
interpolation.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <algorithm>
│ │ │ │ -#include <cassert>
│ │ │ │ -#include <cstddef>
│ │ │ │ +
#include <cstddef>
│ │ │ │ #include <vector>
│ │ │ │ +#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::PowerInterpolation< Backend, BasisTraits >
 Meta-interpolation turning a scalar interpolation into vector-valued interpolation. More...
class  Dune::EdgeS0_5Interpolation< Geometry, Traits_ >
 Interpolation for lowest order edge elements on simplices. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,25 +1,23 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ interpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ #include │ │ │ │ │ #include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _B_a_c_k_e_n_d_,_ _B_a_s_i_s_T_r_a_i_t_s_ _> │ │ │ │ │ -  Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ - interpolation. _M_o_r_e_._._. │ │ │ │ │ +class   _D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _G_e_o_m_e_t_r_y_,_ _T_r_a_i_t_s___ _> │ │ │ │ │ +  Interpolation for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04580_source.html │ │ │ │ @@ -70,104 +70,111 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
meta/power/interpolation.hh
│ │ │ │ +
whitney/edges0.5/interpolation.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │ +
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │ +
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │
8
│ │ │ │ -
9#include <algorithm>
│ │ │ │ -
10#include <cassert>
│ │ │ │ -
11#include <cstddef>
│ │ │ │ -
12#include <vector>
│ │ │ │ +
9#include <cstddef>
│ │ │ │ +
10#include <vector>
│ │ │ │ +
11
│ │ │ │ + │ │ │ │
13
│ │ │ │
14namespace Dune {
│ │ │ │
15
│ │ │ │ -
18
│ │ │ │ -
25 template<class Backend, class BasisTraits>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
27 static_assert(Backend::Traits::dimRange == 1,
│ │ │ │ -
28 "PowerInterpolation works only with scalar backends");
│ │ │ │ -
29
│ │ │ │ -
30 const Backend *backend;
│ │ │ │ -
31
│ │ │ │ -
32 public:
│ │ │ │ -
34 typedef BasisTraits Traits;
│ │ │ │ -
35
│ │ │ │ -
37
│ │ │ │ -
43 PowerInterpolation(const Backend &backend_) : backend(&backend_) { }
│ │ │ │ +
17 //
│ │ │ │ +
18 // Interpolation
│ │ │ │ +
19 //
│ │ │ │ +
20
│ │ │ │ +
22
│ │ │ │ +
29 template<class Geometry, class Traits_>
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
31 private EdgeS0_5Common<Traits_::dimDomainLocal,
│ │ │ │ +
32 typename Traits_::DomainField>
│ │ │ │ +
33 {
│ │ │ │ +
34 public:
│ │ │ │ +
35 typedef Traits_ Traits;
│ │ │ │ +
36
│ │ │ │ +
37 private:
│ │ │ │ +
38 static const std::size_t dim = Traits::dimDomainLocal;
│ │ │ │ + │ │ │ │ +
40 using Base::refelem;
│ │ │ │ +
41 using Base::s;
│ │ │ │ +
42
│ │ │ │ +
43 std::vector<typename Traits::DomainGlobal> edgev;
│ │ │ │
44
│ │ │ │ -
45 private:
│ │ │ │ -
46 template<class F>
│ │ │ │ -
47 class ComponentEvaluator
│ │ │ │ -
48 {
│ │ │ │ -
49 const F &f;
│ │ │ │ -
50 std::size_t comp;
│ │ │ │ -
51
│ │ │ │ -
52 public:
│ │ │ │ -
53 ComponentEvaluator(const F &f_, std::size_t comp_) :
│ │ │ │ -
54 f(f_), comp(comp_)
│ │ │ │ -
55 { }
│ │ │ │ -
56
│ │ │ │ -
57 typename Backend::Traits::Range operator()(const typename Backend::Traits::DomainLocal &x) const
│ │ │ │ -
58 {
│ │ │ │ -
59 typename Traits::Range fy = f(x);
│ │ │ │ -
60 typename Backend::Traits::Range y;
│ │ │ │ -
61 y[0] = fy[comp];
│ │ │ │ -
62 return y;
│ │ │ │ -
63 }
│ │ │ │ -
64 };
│ │ │ │ +
45 public:
│ │ │ │ +
47
│ │ │ │ +
53 template<typename VertexOrder>
│ │ │ │ +
│ │ │ │ +
54 EdgeS0_5Interpolation(const Geometry& geo,
│ │ │ │ +
55 const VertexOrder& vertexOrder) :
│ │ │ │ +
56 edgev(s)
│ │ │ │ +
57 {
│ │ │ │ +
58 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ +
59 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ +
60 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ +
61
│ │ │ │ +
62 edgev[i] = geo.corner(i1);
│ │ │ │ +
63 edgev[i] -= geo.corner(i0);
│ │ │ │ +
64 edgev[i] /= edgev[i].two_norm();
│ │ │ │
65
│ │ │ │ -
66 public:
│ │ │ │ -
68
│ │ │ │ -
77 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
78 void interpolate(const F& f, std::vector<C>& out) const {
│ │ │ │ -
79 out.clear();
│ │ │ │ -
80 std::vector<C> cout;
│ │ │ │ -
81 for(std::size_t d = 0; d < Traits::dimRange; ++d) {
│ │ │ │ -
82 // When dropping support for `evaluate()` we can simply use a lambda
│ │ │ │ -
83 // instead of ComponentEvaluator. But changing this now would break
│ │ │ │ -
84 // PowerInterpolation for FE-implementation outside of dune-localfunctions
│ │ │ │ -
85 // which may not have been adjusted so far.
│ │ │ │ -
86 backend->interpolate(ComponentEvaluator<std::decay_t<decltype(f)>>(f, d), cout);
│ │ │ │ -
87 if(d == 0)
│ │ │ │ -
88 out.resize(cout.size()*Traits::dimRange);
│ │ │ │ -
89 // make sure the size of cout does not change surprisingly
│ │ │ │ -
90 assert(out.size() == cout.size()*Traits::dimRange);
│ │ │ │ -
91 std::copy(cout.begin(), cout.end(), out.begin() + d*cout.size());
│ │ │ │ -
92 }
│ │ │ │ -
93 }
│ │ │ │ -
│ │ │ │ -
94 };
│ │ │ │ -
│ │ │ │ -
95
│ │ │ │ -
96} // namespace Dune
│ │ │ │ -
97
│ │ │ │ -
98#endif // DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH
│ │ │ │ +
66 const typename VertexOrder::iterator& edgeVertexOrder =
│ │ │ │ +
67 vertexOrder.begin(dim-1, i);
│ │ │ │ +
68 if(edgeVertexOrder[0] > edgeVertexOrder[1])
│ │ │ │ +
69 edgev[i] *= -1;
│ │ │ │ +
70 }
│ │ │ │ +
71 }
│ │ │ │ +
│ │ │ │ +
72
│ │ │ │ +
74 template<typename F, typename C>
│ │ │ │ +
│ │ │ │ +
75 void interpolate(const F& f, std::vector<C>& out) const {
│ │ │ │ +
76 typename Traits::Range y;
│ │ │ │ +
77
│ │ │ │ +
78 out.resize(s);
│ │ │ │ +
79
│ │ │ │ +
80 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ +
81 y = f(refelem.position(i,dim-1));
│ │ │ │ +
82
│ │ │ │ +
83 out[i] = y * edgev[i];
│ │ │ │ +
84 }
│ │ │ │ +
85 }
│ │ │ │ +
│ │ │ │ +
86 };
│ │ │ │ +
│ │ │ │ +
87
│ │ │ │ +
88} // namespace Dune
│ │ │ │ +
89
│ │ │ │ +
90#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Meta-interpolation turning a scalar interpolation into vector-valued interpolation.
Definition meta/power/interpolation.hh:26
│ │ │ │ -
BasisTraits Traits
Export basis traits.
Definition meta/power/interpolation.hh:34
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Determine coefficients interpolating a given function.
Definition meta/power/interpolation.hh:78
│ │ │ │ -
PowerInterpolation(const Backend &backend_)
Construct a PowerInterpolation.
Definition meta/power/interpolation.hh:43
│ │ │ │ +
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ +
RefElem refelem
The reference element for this edge element.
Definition common.hh:30
│ │ │ │ +
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │ +
Interpolation for lowest order edge elements on simplices.
Definition whitney/edges0.5/interpolation.hh:33
│ │ │ │ +
void interpolate(const F &f, std::vector< C > &out) const
Interpolation of a function.
Definition whitney/edges0.5/interpolation.hh:75
│ │ │ │ +
Traits_ Traits
Definition whitney/edges0.5/interpolation.hh:35
│ │ │ │ +
EdgeS0_5Interpolation(const Geometry &geo, const VertexOrder &vertexOrder)
constructor
Definition whitney/edges0.5/interpolation.hh:54
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,107 +1,116 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _m_e_t_a │ │ │ │ │ - * _p_o_w_e_r │ │ │ │ │ -meta/power/interpolation.hh │ │ │ │ │ + * _w_h_i_t_n_e_y │ │ │ │ │ + * _e_d_g_e_s_0_._5 │ │ │ │ │ +whitney/edges0.5/interpolation.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ 5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ +6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ +7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ 8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ -11#include │ │ │ │ │ -12#include │ │ │ │ │ +9#include │ │ │ │ │ +10#include │ │ │ │ │ +11 │ │ │ │ │ +12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ 13 │ │ │ │ │ 14namespace _D_u_n_e { │ │ │ │ │ 15 │ │ │ │ │ -18 │ │ │ │ │ -25 template │ │ │ │ │ -_2_6 class _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n { │ │ │ │ │ -27 static_assert(Backend::Traits::dimRange == 1, │ │ │ │ │ -28 "PowerInterpolation works only with scalar backends"); │ │ │ │ │ -29 │ │ │ │ │ -30 const Backend *backend; │ │ │ │ │ -31 │ │ │ │ │ -32 public: │ │ │ │ │ -_3_4 typedef BasisTraits _T_r_a_i_t_s; │ │ │ │ │ -35 │ │ │ │ │ -37 │ │ │ │ │ -_4_3 _P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n(const Backend &backend_) : backend(&backend_) { } │ │ │ │ │ +17 // │ │ │ │ │ +18 // Interpolation │ │ │ │ │ +19 // │ │ │ │ │ +20 │ │ │ │ │ +22 │ │ │ │ │ +29 template │ │ │ │ │ +_3_0 class _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n : │ │ │ │ │ +31 private _E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +33 { │ │ │ │ │ +34 public: │ │ │ │ │ +_3_5 typedef Traits_ _T_r_a_i_t_s; │ │ │ │ │ +36 │ │ │ │ │ +37 private: │ │ │ │ │ +38 static const std::size_t dim = Traits::dimDomainLocal; │ │ │ │ │ +39 typedef _E_d_g_e_S_0___5_C_o_m_m_o_n_<_d_i_m_,_ _t_y_p_e_n_a_m_e_ _T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ +40 using _B_a_s_e_:_:_r_e_f_e_l_e_m; │ │ │ │ │ +41 using _B_a_s_e_:_:_s; │ │ │ │ │ +42 │ │ │ │ │ +43 std::vector edgev; │ │ │ │ │ 44 │ │ │ │ │ -45 private: │ │ │ │ │ -46 template │ │ │ │ │ -47 class ComponentEvaluator │ │ │ │ │ -48 { │ │ │ │ │ -49 const F &f; │ │ │ │ │ -50 std::size_t comp; │ │ │ │ │ -51 │ │ │ │ │ -52 public: │ │ │ │ │ -53 ComponentEvaluator(const F &f_, std::size_t comp_) : │ │ │ │ │ -54 f(f_), comp(comp_) │ │ │ │ │ -55 { } │ │ │ │ │ -56 │ │ │ │ │ -57 typename Backend::Traits::Range operator()(const typename Backend::Traits:: │ │ │ │ │ -DomainLocal &x) const │ │ │ │ │ -58 { │ │ │ │ │ -59 typename Traits::Range fy = f(x); │ │ │ │ │ -60 typename Backend::Traits::Range y; │ │ │ │ │ -61 y[0] = fy[comp]; │ │ │ │ │ -62 return y; │ │ │ │ │ -63 } │ │ │ │ │ -64 }; │ │ │ │ │ +45 public: │ │ │ │ │ +47 │ │ │ │ │ +53 template │ │ │ │ │ +_5_4 _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n(const Geometry& geo, │ │ │ │ │ +55 const VertexOrder& vertexOrder) : │ │ │ │ │ +56 edgev(s) │ │ │ │ │ +57 { │ │ │ │ │ +58 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ +59 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ +60 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ +61 │ │ │ │ │ +62 edgev[i] = geo.corner(i1); │ │ │ │ │ +63 edgev[i] -= geo.corner(i0); │ │ │ │ │ +64 edgev[i] /= edgev[i].two_norm(); │ │ │ │ │ 65 │ │ │ │ │ -66 public: │ │ │ │ │ -68 │ │ │ │ │ -77 template │ │ │ │ │ -_7_8 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const { │ │ │ │ │ -79 out.clear(); │ │ │ │ │ -80 std::vector cout; │ │ │ │ │ -81 for(std::size_t d = 0; d < Traits::dimRange; ++d) { │ │ │ │ │ -82 // When dropping support for `evaluate()` we can simply use a lambda │ │ │ │ │ -83 // instead of ComponentEvaluator. But changing this now would break │ │ │ │ │ -84 // PowerInterpolation for FE-implementation outside of dune-localfunctions │ │ │ │ │ -85 // which may not have been adjusted so far. │ │ │ │ │ -86 backend->interpolate(ComponentEvaluator>(f, d), │ │ │ │ │ -cout); │ │ │ │ │ -87 if(d == 0) │ │ │ │ │ -88 out.resize(cout.size()*Traits::dimRange); │ │ │ │ │ -89 // make sure the size of cout does not change surprisingly │ │ │ │ │ -90 assert(out.size() == cout.size()*Traits::dimRange); │ │ │ │ │ -91 std::copy(cout.begin(), cout.end(), out.begin() + d*cout.size()); │ │ │ │ │ -92 } │ │ │ │ │ -93 } │ │ │ │ │ -94 }; │ │ │ │ │ -95 │ │ │ │ │ -96} // namespace Dune │ │ │ │ │ -97 │ │ │ │ │ -98#endif // DUNE_LOCALFUNCTIONS_META_POWER_INTERPOLATION_HH │ │ │ │ │ +66 const typename VertexOrder::iterator& edgeVertexOrder = │ │ │ │ │ +67 vertexOrder.begin(dim-1, i); │ │ │ │ │ +68 if(edgeVertexOrder[0] > edgeVertexOrder[1]) │ │ │ │ │ +69 edgev[i] *= -1; │ │ │ │ │ +70 } │ │ │ │ │ +71 } │ │ │ │ │ +72 │ │ │ │ │ +74 template │ │ │ │ │ +_7_5 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const { │ │ │ │ │ +76 typename Traits::Range y; │ │ │ │ │ +77 │ │ │ │ │ +78 out.resize(s); │ │ │ │ │ +79 │ │ │ │ │ +80 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ +81 y = f(refelem.position(i,dim-1)); │ │ │ │ │ +82 │ │ │ │ │ +83 out[i] = y * edgev[i]; │ │ │ │ │ +84 } │ │ │ │ │ +85 } │ │ │ │ │ +86 }; │ │ │ │ │ +87 │ │ │ │ │ +88} // namespace Dune │ │ │ │ │ +89 │ │ │ │ │ +90#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ +_c_o_m_m_o_n_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Meta-interpolation turning a scalar interpolation into vector-valued │ │ │ │ │ -interpolation. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/interpolation.hh:26 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_T_r_a_i_t_s │ │ │ │ │ -BasisTraits Traits │ │ │ │ │ -Export basis traits. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/interpolation.hh:34 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ +Common base class for edge elements. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_r_e_f_e_l_e_m │ │ │ │ │ +RefElem refelem │ │ │ │ │ +The reference element for this edge element. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ +std::size_t s │ │ │ │ │ +The number of base functions. │ │ │ │ │ +DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +Interpolation for lowest order edge elements on simplices. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:33 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Determine coefficients interpolating a given function. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/interpolation.hh:78 │ │ │ │ │ -_D_u_n_e_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_P_o_w_e_r_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -PowerInterpolation(const Backend &backend_) │ │ │ │ │ -Construct a PowerInterpolation. │ │ │ │ │ -DDeeffiinniittiioonn meta/power/interpolation.hh:43 │ │ │ │ │ +Interpolation of a function. │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:75 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_T_r_a_i_t_s │ │ │ │ │ +Traits_ Traits │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +EdgeS0_5Interpolation(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ +constructor │ │ │ │ │ +DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:54 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interpolation.hh File Reference │ │ │ │ +dune-localfunctions: rannacherturek.hh File Reference │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -65,34 +65,36 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │ -
interpolation.hh File Reference
│ │ │ │ +
rannacherturek.hh File Reference
│ │ │ │
│ │ │ │
│ │ │ │ -
#include <cstddef>
│ │ │ │ -#include <vector>
│ │ │ │ -#include <dune/localfunctions/whitney/edges0.5/common.hh>
│ │ │ │ +
#include <dune/geometry/type.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include "rannachertureklocalbasis.hh"
│ │ │ │ +#include "rannachertureklocalcoefficients.hh"
│ │ │ │ +#include "rannachertureklocalinterpolation.hh"
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ │ │ │ │

│ │ │ │ Classes

class  Dune::EdgeS0_5Interpolation< Geometry, Traits_ >
 Interpolation for lowest order edge elements on simplices. More...
struct  Dune::RannacherTurekLocalFiniteElement< D, R, d >
 Rannacher-Turek shape functions. More...
 
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Namespaces

namespace  Dune
 
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,23 +1,24 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ _C_l_a_s_s_e_s | _N_a_m_e_s_p_a_c_e_s │ │ │ │ │ -interpolation.hh File Reference │ │ │ │ │ -#include │ │ │ │ │ -#include │ │ │ │ │ -#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ +rannacherturek.hh File Reference │ │ │ │ │ +#include │ │ │ │ │ +#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ +#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _s_o_u_r_c_e_ _c_o_d_e_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ CCllaasssseess │ │ │ │ │ -class   _D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _G_e_o_m_e_t_r_y_,_ _T_r_a_i_t_s___ _> │ │ │ │ │ -  Interpolation for lowest order edge elements on simplices. _M_o_r_e_._._. │ │ │ │ │ +struct   _D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ +  Rannacher-Turek shape functions. _M_o_r_e_._._. │ │ │ │ │   │ │ │ │ │ NNaammeessppaacceess │ │ │ │ │ namespace   _D_u_n_e │ │ │ │ │   │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04583_source.html │ │ │ │ @@ -1,15 +1,15 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -dune-localfunctions: interpolation.hh Source File │ │ │ │ +dune-localfunctions: rannacherturek.hh Source File │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ @@ -70,111 +70,111 @@ │ │ │ │
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -
whitney/edges0.5/interpolation.hh
│ │ │ │ +
rannacherturek/rannacherturek.hh
│ │ │ │
│ │ │ │
│ │ │ │ Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
│ │ │ │
2// vi: set et ts=4 sw=2 sts=2:
│ │ │ │
3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
│ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │ -
5
│ │ │ │ -
6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │ -
7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │ -
8
│ │ │ │ -
9#include <cstddef>
│ │ │ │ -
10#include <vector>
│ │ │ │ +
5#ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ +
6#define DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ +
7
│ │ │ │ +
8#include <dune/geometry/type.hh>
│ │ │ │ +
9
│ │ │ │ + │ │ │ │
11
│ │ │ │ - │ │ │ │ -
13
│ │ │ │ -
14namespace Dune {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
15
│ │ │ │ -
17 //
│ │ │ │ -
18 // Interpolation
│ │ │ │ -
19 //
│ │ │ │ -
20
│ │ │ │ -
22
│ │ │ │ -
29 template<class Geometry, class Traits_>
│ │ │ │ -
│ │ │ │ - │ │ │ │ -
31 private EdgeS0_5Common<Traits_::dimDomainLocal,
│ │ │ │ -
32 typename Traits_::DomainField>
│ │ │ │ -
33 {
│ │ │ │ -
34 public:
│ │ │ │ -
35 typedef Traits_ Traits;
│ │ │ │ +
16namespace Dune
│ │ │ │ +
17{
│ │ │ │ +
18
│ │ │ │ +
28 template< class D, class R, unsigned int d >
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
30 {
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
36
│ │ │ │ -
37 private:
│ │ │ │ -
38 static const std::size_t dim = Traits::dimDomainLocal;
│ │ │ │ - │ │ │ │ -
40 using Base::refelem;
│ │ │ │ -
41 using Base::s;
│ │ │ │ +
│ │ │ │ +
38 const typename Traits::LocalBasisType &localBasis () const
│ │ │ │ +
39 {
│ │ │ │ +
40 return localBasis_;
│ │ │ │ +
41 }
│ │ │ │ +
│ │ │ │
42
│ │ │ │ -
43 std::vector<typename Traits::DomainGlobal> edgev;
│ │ │ │ -
44
│ │ │ │ -
45 public:
│ │ │ │ -
47
│ │ │ │ -
53 template<typename VertexOrder>
│ │ │ │ -
│ │ │ │ -
54 EdgeS0_5Interpolation(const Geometry& geo,
│ │ │ │ -
55 const VertexOrder& vertexOrder) :
│ │ │ │ -
56 edgev(s)
│ │ │ │ -
57 {
│ │ │ │ -
58 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ -
59 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim);
│ │ │ │ -
60 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim);
│ │ │ │ -
61
│ │ │ │ -
62 edgev[i] = geo.corner(i1);
│ │ │ │ -
63 edgev[i] -= geo.corner(i0);
│ │ │ │ -
64 edgev[i] /= edgev[i].two_norm();
│ │ │ │ -
65
│ │ │ │ -
66 const typename VertexOrder::iterator& edgeVertexOrder =
│ │ │ │ -
67 vertexOrder.begin(dim-1, i);
│ │ │ │ -
68 if(edgeVertexOrder[0] > edgeVertexOrder[1])
│ │ │ │ -
69 edgev[i] *= -1;
│ │ │ │ -
70 }
│ │ │ │ -
71 }
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
45 {
│ │ │ │ +
46 return localCoefficients_;
│ │ │ │ +
47 }
│ │ │ │ +
│ │ │ │ +
48
│ │ │ │ +
│ │ │ │ + │ │ │ │ +
51 {
│ │ │ │ +
52 return localInterpolation_;
│ │ │ │ +
53 }
│ │ │ │ +
│ │ │ │ +
54
│ │ │ │ +
│ │ │ │ +
56 unsigned int size () const
│ │ │ │ +
57 {
│ │ │ │ +
58 return localBasis_.size();
│ │ │ │ +
59 }
│ │ │ │ +
│ │ │ │ +
60
│ │ │ │ +
│ │ │ │ +
62 GeometryType type () const
│ │ │ │ +
63 {
│ │ │ │ +
64 return GeometryTypes::cube(d);
│ │ │ │ +
65 }
│ │ │ │ +
│ │ │ │ +
66
│ │ │ │ +
67 private:
│ │ │ │ +
68 typename Traits::LocalBasisType localBasis_;
│ │ │ │ +
69 typename Traits::LocalCoefficientsType localCoefficients_;
│ │ │ │ +
70 typename Traits::LocalInterpolationType localInterpolation_;
│ │ │ │ +
71 };
│ │ │ │
│ │ │ │
72
│ │ │ │ -
74 template<typename F, typename C>
│ │ │ │ -
│ │ │ │ -
75 void interpolate(const F& f, std::vector<C>& out) const {
│ │ │ │ -
76 typename Traits::Range y;
│ │ │ │ -
77
│ │ │ │ -
78 out.resize(s);
│ │ │ │ -
79
│ │ │ │ -
80 for(std::size_t i = 0; i < s; ++i) {
│ │ │ │ -
81 y = f(refelem.position(i,dim-1));
│ │ │ │ -
82
│ │ │ │ -
83 out[i] = y * edgev[i];
│ │ │ │ -
84 }
│ │ │ │ -
85 }
│ │ │ │ -
│ │ │ │ -
86 };
│ │ │ │ -
│ │ │ │ -
87
│ │ │ │ -
88} // namespace Dune
│ │ │ │ -
89
│ │ │ │ -
90#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH
│ │ │ │ - │ │ │ │ +
73} // namespace Dune
│ │ │ │ +
74
│ │ │ │ +
75#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH
│ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │ -
Common base class for edge elements.
Definition common.hh:23
│ │ │ │ -
RefElem refelem
The reference element for this edge element.
Definition common.hh:30
│ │ │ │ -
std::size_t s
The number of base functions.
Definition common.hh:38
│ │ │ │ -
Interpolation for lowest order edge elements on simplices.
Definition whitney/edges0.5/interpolation.hh:33
│ │ │ │ -
void interpolate(const F &f, std::vector< C > &out) const
Interpolation of a function.
Definition whitney/edges0.5/interpolation.hh:75
│ │ │ │ -
Traits_ Traits
Definition whitney/edges0.5/interpolation.hh:35
│ │ │ │ -
EdgeS0_5Interpolation(const Geometry &geo, const VertexOrder &vertexOrder)
constructor
Definition whitney/edges0.5/interpolation.hh:54
│ │ │ │ +
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │ +
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │ +
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │ +
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │ +
Rannacher-Turek shape functions.
Definition rannacherturek/rannacherturek.hh:30
│ │ │ │ +
unsigned int size() const
Number of shape functions in this finite element.
Definition rannacherturek/rannacherturek.hh:56
│ │ │ │ +
const Traits::LocalInterpolationType & localInterpolation() const
return local interpolation
Definition rannacherturek/rannacherturek.hh:50
│ │ │ │ +
GeometryType type() const
return geometry type
Definition rannacherturek/rannacherturek.hh:62
│ │ │ │ +
const Traits::LocalBasisType & localBasis() const
return local basis
Definition rannacherturek/rannacherturek.hh:38
│ │ │ │ +
const Traits::LocalCoefficientsType & localCoefficients() const
return local coefficients
Definition rannacherturek/rannacherturek.hh:44
│ │ │ │ +
LocalFiniteElementTraits< RannacherTurekLocalBasis< D, R, d >, RannacherTurekLocalCoefficients< d >, RannacherTurekLocalInterpolation< D, R, d > > Traits
export traits class
Definition rannacherturek/rannacherturek.hh:35
│ │ │ │ +
layout for Rannacher-Turek elements
Definition rannachertureklocalcoefficients.hh:27
│ │ │ │ +
please doc me
Definition rannachertureklocalinterpolation.hh:31
│ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -1,116 +1,125 @@ │ │ │ │ │ dune-localfunctions 2.10 │ │ │ │ │ Loading... │ │ │ │ │ Searching... │ │ │ │ │ No Matches │ │ │ │ │ * _d_u_n_e │ │ │ │ │ * _l_o_c_a_l_f_u_n_c_t_i_o_n_s │ │ │ │ │ - * _w_h_i_t_n_e_y │ │ │ │ │ - * _e_d_g_e_s_0_._5 │ │ │ │ │ -whitney/edges0.5/interpolation.hh │ │ │ │ │ + * _r_a_n_n_a_c_h_e_r_t_u_r_e_k │ │ │ │ │ +rannacherturek/rannacherturek.hh │ │ │ │ │ _G_o_ _t_o_ _t_h_e_ _d_o_c_u_m_e_n_t_a_t_i_o_n_ _o_f_ _t_h_i_s_ _f_i_l_e_. │ │ │ │ │ 1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- │ │ │ │ │ 2// vi: set et ts=4 sw=2 sts=2: │ │ │ │ │ 3// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file │ │ │ │ │ LICENSE.md in module root │ │ │ │ │ 4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception │ │ │ │ │ -5 │ │ │ │ │ -6#ifndef DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ -7#define DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ -8 │ │ │ │ │ -9#include │ │ │ │ │ -10#include │ │ │ │ │ +5#ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ +6#define DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ +7 │ │ │ │ │ +8#include │ │ │ │ │ +9 │ │ │ │ │ +10#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_c_o_m_m_o_n_/_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h> │ │ │ │ │ 11 │ │ │ │ │ -12#include <_d_u_n_e_/_l_o_c_a_l_f_u_n_c_t_i_o_n_s_/_w_h_i_t_n_e_y_/_e_d_g_e_s_0_._5_/_c_o_m_m_o_n_._h_h> │ │ │ │ │ -13 │ │ │ │ │ -14namespace _D_u_n_e { │ │ │ │ │ +12#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h" │ │ │ │ │ +13#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h" │ │ │ │ │ +14#include "_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h" │ │ │ │ │ 15 │ │ │ │ │ -17 // │ │ │ │ │ -18 // Interpolation │ │ │ │ │ -19 // │ │ │ │ │ -20 │ │ │ │ │ -22 │ │ │ │ │ -29 template │ │ │ │ │ -_3_0 class _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n : │ │ │ │ │ -31 private _E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ -33 { │ │ │ │ │ -34 public: │ │ │ │ │ -_3_5 typedef Traits_ _T_r_a_i_t_s; │ │ │ │ │ +16namespace _D_u_n_e │ │ │ │ │ +17{ │ │ │ │ │ +18 │ │ │ │ │ +28 template< class D, class R, unsigned int d > │ │ │ │ │ +_2_9 struct _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +30 { │ │ │ │ │ +32 typedef _L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_<_ _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_B_a_s_i_s_<_ _D_,_ _R_,_ _d_ _>, │ │ │ │ │ +33 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_<_ _d_ _>, │ │ │ │ │ +34 _R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_<_ _D_,_ _R_,_ _d_ _> │ │ │ │ │ +_3_5 > _T_r_a_i_t_s; │ │ │ │ │ 36 │ │ │ │ │ -37 private: │ │ │ │ │ -38 static const std::size_t dim = Traits::dimDomainLocal; │ │ │ │ │ -39 typedef _E_d_g_e_S_0___5_C_o_m_m_o_n_<_d_i_m_,_ _t_y_p_e_n_a_m_e_ _T_r_a_i_t_s_:_:_D_o_m_a_i_n_F_i_e_l_d_> _B_a_s_e; │ │ │ │ │ -40 using _B_a_s_e_:_:_r_e_f_e_l_e_m; │ │ │ │ │ -41 using _B_a_s_e_:_:_s; │ │ │ │ │ +_3_8 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e &_l_o_c_a_l_B_a_s_i_s () const │ │ │ │ │ +39 { │ │ │ │ │ +40 return localBasis_; │ │ │ │ │ +41 } │ │ │ │ │ 42 │ │ │ │ │ -43 std::vector edgev; │ │ │ │ │ -44 │ │ │ │ │ -45 public: │ │ │ │ │ -47 │ │ │ │ │ -53 template │ │ │ │ │ -_5_4 _E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n(const Geometry& geo, │ │ │ │ │ -55 const VertexOrder& vertexOrder) : │ │ │ │ │ -56 edgev(s) │ │ │ │ │ +_4_4 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e &_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s () const │ │ │ │ │ +45 { │ │ │ │ │ +46 return localCoefficients_; │ │ │ │ │ +47 } │ │ │ │ │ +48 │ │ │ │ │ +_5_0 const typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e &_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n () const │ │ │ │ │ +51 { │ │ │ │ │ +52 return localInterpolation_; │ │ │ │ │ +53 } │ │ │ │ │ +54 │ │ │ │ │ +_5_6 unsigned int _s_i_z_e () const │ │ │ │ │ 57 { │ │ │ │ │ -58 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ -59 const std::size_t i0 = refelem.subEntity(i,dim-1,0,dim); │ │ │ │ │ -60 const std::size_t i1 = refelem.subEntity(i,dim-1,1,dim); │ │ │ │ │ -61 │ │ │ │ │ -62 edgev[i] = geo.corner(i1); │ │ │ │ │ -63 edgev[i] -= geo.corner(i0); │ │ │ │ │ -64 edgev[i] /= edgev[i].two_norm(); │ │ │ │ │ -65 │ │ │ │ │ -66 const typename VertexOrder::iterator& edgeVertexOrder = │ │ │ │ │ -67 vertexOrder.begin(dim-1, i); │ │ │ │ │ -68 if(edgeVertexOrder[0] > edgeVertexOrder[1]) │ │ │ │ │ -69 edgev[i] *= -1; │ │ │ │ │ -70 } │ │ │ │ │ -71 } │ │ │ │ │ +58 return localBasis_.size(); │ │ │ │ │ +59 } │ │ │ │ │ +60 │ │ │ │ │ +_6_2 GeometryType _t_y_p_e () const │ │ │ │ │ +63 { │ │ │ │ │ +64 return GeometryTypes::cube(d); │ │ │ │ │ +65 } │ │ │ │ │ +66 │ │ │ │ │ +67 private: │ │ │ │ │ +68 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e localBasis_; │ │ │ │ │ +69 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e localCoefficients_; │ │ │ │ │ +70 typename _T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e localInterpolation_; │ │ │ │ │ +71 }; │ │ │ │ │ 72 │ │ │ │ │ -74 template │ │ │ │ │ -_7_5 void _i_n_t_e_r_p_o_l_a_t_e(const F& f, std::vector& out) const { │ │ │ │ │ -76 typename Traits::Range y; │ │ │ │ │ -77 │ │ │ │ │ -78 out.resize(s); │ │ │ │ │ -79 │ │ │ │ │ -80 for(std::size_t i = 0; i < s; ++i) { │ │ │ │ │ -81 y = f(refelem.position(i,dim-1)); │ │ │ │ │ -82 │ │ │ │ │ -83 out[i] = y * edgev[i]; │ │ │ │ │ -84 } │ │ │ │ │ -85 } │ │ │ │ │ -86 }; │ │ │ │ │ -87 │ │ │ │ │ -88} // namespace Dune │ │ │ │ │ -89 │ │ │ │ │ -90#endif // DUNE_LOCALFUNCTIONS_WHITNEY_EDGES0_5_INTERPOLATION_HH │ │ │ │ │ -_c_o_m_m_o_n_._h_h │ │ │ │ │ +73} // namespace Dune │ │ │ │ │ +74 │ │ │ │ │ +75#endif // #ifndef DUNE_RANNACHER_TUREK_LOCALFINITEELEMENT_HH │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_b_a_s_i_s_._h_h │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_r_a_n_n_a_c_h_e_r_t_u_r_e_k_l_o_c_a_l_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n │ │ │ │ │ -Common base class for edge elements. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:23 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_r_e_f_e_l_e_m │ │ │ │ │ -RefElem refelem │ │ │ │ │ -The reference element for this edge element. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:30 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_C_o_m_m_o_n_:_:_s │ │ │ │ │ -std::size_t s │ │ │ │ │ -The number of base functions. │ │ │ │ │ -DDeeffiinniittiioonn common.hh:38 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -Interpolation for lowest order edge elements on simplices. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:33 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_i_n_t_e_r_p_o_l_a_t_e │ │ │ │ │ -void interpolate(const F &f, std::vector< C > &out) const │ │ │ │ │ -Interpolation of a function. │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:75 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_T_r_a_i_t_s │ │ │ │ │ -Traits_ Traits │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:35 │ │ │ │ │ -_D_u_n_e_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n_:_:_E_d_g_e_S_0___5_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ -EdgeS0_5Interpolation(const Geometry &geo, const VertexOrder &vertexOrder) │ │ │ │ │ -constructor │ │ │ │ │ -DDeeffiinniittiioonn whitney/edges0.5/interpolation.hh:54 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ +traits helper struct │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ +LB LocalBasisType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:16 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s_T_y_p_e │ │ │ │ │ +LC LocalCoefficientsType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:20 │ │ │ │ │ +_D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n_T_y_p_e │ │ │ │ │ +LI LocalInterpolationType │ │ │ │ │ +DDeeffiinniittiioonn localfiniteelementtraits.hh:24 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ +Rannacher-Turek shape functions. │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:30 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_s_i_z_e │ │ │ │ │ +unsigned int size() const │ │ │ │ │ +Number of shape functions in this finite element. │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:56 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +const Traits::LocalInterpolationType & localInterpolation() const │ │ │ │ │ +return local interpolation │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:50 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_t_y_p_e │ │ │ │ │ +GeometryType type() const │ │ │ │ │ +return geometry type │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:62 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_B_a_s_i_s │ │ │ │ │ +const Traits::LocalBasisType & localBasis() const │ │ │ │ │ +return local basis │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:38 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_l_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +const Traits::LocalCoefficientsType & localCoefficients() const │ │ │ │ │ +return local coefficients │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:44 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_:_:_T_r_a_i_t_s │ │ │ │ │ +LocalFiniteElementTraits< RannacherTurekLocalBasis< D, R, d >, │ │ │ │ │ +RannacherTurekLocalCoefficients< d >, RannacherTurekLocalInterpolation< D, R, d │ │ │ │ │ +> > Traits │ │ │ │ │ +export traits class │ │ │ │ │ +DDeeffiinniittiioonn rannacherturek/rannacherturek.hh:35 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_C_o_e_f_f_i_c_i_e_n_t_s │ │ │ │ │ +layout for Rannacher-Turek elements │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalcoefficients.hh:27 │ │ │ │ │ +_D_u_n_e_:_:_R_a_n_n_a_c_h_e_r_T_u_r_e_k_L_o_c_a_l_I_n_t_e_r_p_o_l_a_t_i_o_n │ │ │ │ │ +please doc me │ │ │ │ │ +DDeeffiinniittiioonn rannachertureklocalinterpolation.hh:31 │ │ │ │ │ =============================================================================== │ │ │ │ │ Generated by _[_d_o_x_y_g_e_n_] 1.9.8 │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04586.html │ │ │ │ @@ -77,17 +77,17 @@ │ │ │ │ Classes | │ │ │ │ Namespaces
│ │ │ │
localfiniteelement.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <dune/geometry/type.hh>
│ │ │ │ #include <dune/geometry/typeindex.hh>
│ │ │ │ -#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ -#include <dune/localfunctions/utility/l2interpolation.hh>
│ │ │ │ -#include <dune/localfunctions/utility/dglocalcoefficients.hh>
│ │ │ │ +#include <dune/localfunctions/common/localfiniteelementtraits.hh>
│ │ │ │ +#include <dune/localfunctions/utility/l2interpolation.hh>
│ │ │ │ +#include <dune/localfunctions/utility/dglocalcoefficients.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04586_source.html │ │ │ │ @@ -87,17 +87,17 @@ │ │ │ │
4// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
5#ifndef DUNE_GENERIC_LOCALFINITEELEMENT_HH
│ │ │ │
6#define DUNE_GENERIC_LOCALFINITEELEMENT_HH
│ │ │ │
7
│ │ │ │
8#include <dune/geometry/type.hh>
│ │ │ │
9#include <dune/geometry/typeindex.hh>
│ │ │ │
10
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
14
│ │ │ │
15namespace Dune
│ │ │ │
16{
│ │ │ │
23 template< class BasisF, class CoeffF, class InterpolF>
│ │ │ │
│ │ │ │ │ │ │ │
25 {
│ │ │ │ @@ -257,17 +257,17 @@ │ │ │ │
184 {}
│ │ │ │
│ │ │ │
185 };
│ │ │ │ │ │ │ │
186}
│ │ │ │
187
│ │ │ │
188#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
traits helper struct
Definition localfiniteelementtraits.hh:13
│ │ │ │
LB LocalBasisType
Definition localfiniteelementtraits.hh:16
│ │ │ │
LC LocalCoefficientsType
Definition localfiniteelementtraits.hh:20
│ │ │ │
LI LocalInterpolationType
Definition localfiniteelementtraits.hh:24
│ │ │ │
A factory class for the dg local coefficients.
Definition dglocalcoefficients.hh:59
│ │ │ │
A factory class for the local l2 interpolations taking a basis factory.
Definition l2interpolation.hh:163
│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -160,17 +160,17 @@ │ │ │ │ │ &key ) │ │ │ │ │ 183 : _B_a_s_e( gt, key ) │ │ │ │ │ 184 {} │ │ │ │ │ 185 }; │ │ │ │ │ 186} │ │ │ │ │ 187 │ │ │ │ │ 188#endif │ │ │ │ │ -_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ -_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ _l_2_i_n_t_e_r_p_o_l_a_t_i_o_n_._h_h │ │ │ │ │ +_d_g_l_o_c_a_l_c_o_e_f_f_i_c_i_e_n_t_s_._h_h │ │ │ │ │ +_l_o_c_a_l_f_i_n_i_t_e_e_l_e_m_e_n_t_t_r_a_i_t_s_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s │ │ │ │ │ traits helper struct │ │ │ │ │ DDeeffiinniittiioonn localfiniteelementtraits.hh:13 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t_T_r_a_i_t_s_:_:_L_o_c_a_l_B_a_s_i_s_T_y_p_e │ │ │ │ │ LB LocalBasisType │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04589.html │ │ │ │ @@ -77,16 +77,16 @@ │ │ │ │ Namespaces | │ │ │ │ Functions │ │ │ │
localfiniteelement.hh File Reference
│ │ │ │ │ │ │ │
│ │ │ │
#include <dune/python/pybind11/pybind11.h>
│ │ │ │ #include <dune/common/visibility.hh>
│ │ │ │ -#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ -#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │ +#include <dune/localfunctions/common/localkey.hh>
│ │ │ │ +#include <dune/localfunctions/common/virtualinterface.hh>
│ │ │ │
│ │ │ │

Go to the source code of this file.

│ │ │ │

│ │ │ │ Classes

struct  Dune::GenericLocalFiniteElement< BasisF, CoeffF, InterpolF >
 A LocalFiniteElement implementation based on three TopologyFactories providing the LocalBasis, LocalCoefficients, and LocalInterpolations. Note the key type for all three factories must coincide. More...
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/a04589_source.html │ │ │ │ @@ -85,16 +85,16 @@ │ │ │ │
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
│ │ │ │
3#ifndef DUNE_PYTHON_LOCALFUNCTIONS_LOCALFINITEELEMENT_HH
│ │ │ │
4#define DUNE_PYTHON_LOCALFUNCTIONS_LOCALFINITEELEMENT_HH
│ │ │ │
5
│ │ │ │
6#include <dune/python/pybind11/pybind11.h>
│ │ │ │
7
│ │ │ │
8#include <dune/common/visibility.hh>
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │
11
│ │ │ │
12namespace Dune {
│ │ │ │
│ │ │ │
13namespace Python {
│ │ │ │
14
│ │ │ │
15namespace detail {
│ │ │ │
16
│ │ │ │ @@ -157,16 +157,16 @@ │ │ │ │
71
│ │ │ │
72
│ │ │ │
73} /* namespace Python */
│ │ │ │
│ │ │ │
74} /* namespace Dune */
│ │ │ │
75
│ │ │ │
76#endif
│ │ │ │ - │ │ │ │ - │ │ │ │ + │ │ │ │ + │ │ │ │
Definition bdfmcube.hh:18
│ │ │ │
DUNE_EXPORT auto registerLocalFiniteElement(pybind11::handle scope, const char *name="LocalFiniteElement")
Definition python/localfunctions/localfiniteelement.hh:56
│ │ │ │
Describe position of one degree of freedom.
Definition localkey.hh:24
│ │ │ │
constexpr unsigned int index() const noexcept
Return offset within subentity.
Definition localkey.hh:70
│ │ │ │
constexpr unsigned int codim() const noexcept
Return codim of associated entity.
Definition localkey.hh:63
│ │ │ │
constexpr unsigned int subEntity() const noexcept
Return number of associated subentity.
Definition localkey.hh:56
│ │ │ │ │ │ │ │ ├── html2text {} │ │ │ │ │ @@ -88,16 +88,16 @@ │ │ │ │ │ 70} │ │ │ │ │ 71 │ │ │ │ │ 72 │ │ │ │ │ 73} /* namespace Python */ │ │ │ │ │ 74} /* namespace Dune */ │ │ │ │ │ 75 │ │ │ │ │ 76#endif │ │ │ │ │ -_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _v_i_r_t_u_a_l_i_n_t_e_r_f_a_c_e_._h_h │ │ │ │ │ +_l_o_c_a_l_k_e_y_._h_h │ │ │ │ │ _D_u_n_e │ │ │ │ │ DDeeffiinniittiioonn bdfmcube.hh:18 │ │ │ │ │ _D_u_n_e_:_:_P_y_t_h_o_n_:_:_r_e_g_i_s_t_e_r_L_o_c_a_l_F_i_n_i_t_e_E_l_e_m_e_n_t │ │ │ │ │ DUNE_EXPORT auto registerLocalFiniteElement(pybind11::handle scope, const char │ │ │ │ │ *name="LocalFiniteElement") │ │ │ │ │ DDeeffiinniittiioonn python/localfunctions/localfiniteelement.hh:56 │ │ │ │ │ _D_u_n_e_:_:_L_o_c_a_l_K_e_y │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000000_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasfortinmarini → common Relation

│ │ │ │ Namespaces

namespace  Dune
 
File in dune/localfunctions/brezzidouglasfortinmariniIncludes file in dune/localfunctions/common
bdfmcube.hhlocalfiniteelementtraits.hh
cube / brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
cube / brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasfortinmarini → common Relation

File in dune/localfunctions/brezzidouglasfortinmariniIncludes file in dune/localfunctions/common
bdfmcube.hhlocalfiniteelementtraits.hh
cube / brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
cube / brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000000_000009.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasfortinmarini → cube Relation

File in dune/localfunctions/brezzidouglasfortinmariniIncludes file in dune/localfunctions/brezzidouglasfortinmarini/cube
bdfmcube.hhbrezzidouglasfortinmarini/cube/localbasis.hh
bdfmcube.hhbrezzidouglasfortinmarini/cube/localcoefficients.hh
bdfmcube.hhbrezzidouglasfortinmarini/cube/localinterpolation.hh
│ │ │ │ +

brezzidouglasfortinmarini → cube Relation

File in dune/localfunctions/brezzidouglasfortinmariniIncludes file in dune/localfunctions/brezzidouglasfortinmarini/cube
bdfmcube.hhbrezzidouglasfortinmarini/cube/localbasis.hh
bdfmcube.hhbrezzidouglasfortinmarini/cube/localcoefficients.hh
bdfmcube.hhbrezzidouglasfortinmarini/cube/localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000002.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini → brezzidouglasmarini1cube2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalbasis.hh
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalcoefficients.hh
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalinterpolation.hh
│ │ │ │ +

brezzidouglasmarini → brezzidouglasmarini1cube2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2d
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalbasis.hh
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalcoefficients.hh
brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000003.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini → brezzidouglasmarini1cube3d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalbasis.hh
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalcoefficients.hh
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalinterpolation.hh
│ │ │ │ +

brezzidouglasmarini → brezzidouglasmarini1cube3d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3d
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalbasis.hh
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalcoefficients.hh
brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000004.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini → brezzidouglasmarini1simplex2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalbasis.hh
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalcoefficients.hh
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalinterpolation.hh
│ │ │ │ +

brezzidouglasmarini → brezzidouglasmarini1simplex2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2d
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalbasis.hh
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalcoefficients.hh
brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000005.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini → brezzidouglasmarini2cube2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalbasis.hh
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalcoefficients.hh
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalinterpolation.hh
│ │ │ │ +

brezzidouglasmarini → brezzidouglasmarini2cube2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2d
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalbasis.hh
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalcoefficients.hh
brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000006.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini → brezzidouglasmarini2simplex2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalbasis.hh
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalcoefficients.hh
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │ +

brezzidouglasmarini → brezzidouglasmarini2simplex2d Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2d
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalbasis.hh
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalcoefficients.hh
brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000001_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

brezzidouglasmarini → common Relation

File in dune/localfunctions/brezzidouglasmariniIncludes file in dune/localfunctions/common
brezzidouglasmarini1cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini1cube3d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini1simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini2cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini2simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000002_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini1cube2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2dIncludes file in dune/localfunctions/common
brezzidouglasmarini1cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasmarini1cube2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube2dIncludes file in dune/localfunctions/common
brezzidouglasmarini1cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000003_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini1cube3d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3dIncludes file in dune/localfunctions/common
brezzidouglasmarini1cube3dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube3dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasmarini1cube3d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1cube3dIncludes file in dune/localfunctions/common
brezzidouglasmarini1cube3dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1cube3dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000004_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini1simplex2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2dIncludes file in dune/localfunctions/common
brezzidouglasmarini1simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1simplex2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasmarini1simplex2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini1simplex2dIncludes file in dune/localfunctions/common
brezzidouglasmarini1simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini1simplex2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000005_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini2cube2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2dIncludes file in dune/localfunctions/common
brezzidouglasmarini2cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasmarini2cube2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2cube2dIncludes file in dune/localfunctions/common
brezzidouglasmarini2cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000006_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

brezzidouglasmarini2simplex2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2dIncludes file in dune/localfunctions/common
brezzidouglasmarini2simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2simplex2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

brezzidouglasmarini2simplex2d → common Relation

File in dune/localfunctions/brezzidouglasmarini/brezzidouglasmarini2simplex2dIncludes file in dune/localfunctions/common
brezzidouglasmarini2simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini2simplex2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000008_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

common → common Relation

File in dune/localfunctions/refined/commonIncludes file in dune/localfunctions/common
refinedsimplexlocalbasis.hhcommon/localbasis.hh
│ │ │ │ +

common → common Relation

File in dune/localfunctions/refined/commonIncludes file in dune/localfunctions/common
refinedsimplexlocalbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000009_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

cube → common Relation

File in dune/localfunctions/brezzidouglasfortinmarini/cubeIncludes file in dune/localfunctions/common
brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
│ │ │ │ +

cube → common Relation

File in dune/localfunctions/brezzidouglasfortinmarini/cubeIncludes file in dune/localfunctions/common
brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000012_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

dualmortarbasis → common Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/common
dualp1.hhlocalfiniteelementtraits.hh
dualpq1factory.hhvirtualinterface.hh
dualpq1factory.hhvirtualwrappers.hh
dualq1.hhlocalfiniteelementtraits.hh
dualp1 / dualp1localbasis.hhcommon/localbasis.hh
dualp1 / dualp1localcoefficients.hhlocalkey.hh
dualq1 / dualq1localbasis.hhcommon/localbasis.hh
dualq1 / dualq1localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000012_000013.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

dualmortarbasis → dualp1 Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/dualmortarbasis/dualp1
dualp1.hhdualp1localbasis.hh
dualp1.hhdualp1localcoefficients.hh
dualp1.hhdualp1localinterpolation.hh
│ │ │ │ +

dualmortarbasis → dualp1 Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/dualmortarbasis/dualp1
dualp1.hhdualp1localbasis.hh
dualp1.hhdualp1localcoefficients.hh
dualp1.hhdualp1localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000012_000014.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

dualmortarbasis → dualq1 Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/dualmortarbasis/dualq1
dualq1.hhdualq1localbasis.hh
dualq1.hhdualq1localcoefficients.hh
dualq1.hhdualq1localinterpolation.hh
│ │ │ │ +

dualmortarbasis → dualq1 Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/dualmortarbasis/dualq1
dualq1.hhdualq1localbasis.hh
dualq1.hhdualq1localcoefficients.hh
dualq1.hhdualq1localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000012_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

dualmortarbasis → lagrange Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/lagrange
dualq1.hhlagrangecube.hh
│ │ │ │ +

dualmortarbasis → lagrange Relation

File in dune/localfunctions/dualmortarbasisIncludes file in dune/localfunctions/lagrange
dualq1.hhlagrangecube.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000013_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

dualp1 → common Relation

File in dune/localfunctions/dualmortarbasis/dualp1Includes file in dune/localfunctions/common
dualp1localbasis.hhcommon/localbasis.hh
dualp1localcoefficients.hhlocalkey.hh
│ │ │ │ +

dualp1 → common Relation

File in dune/localfunctions/dualmortarbasis/dualp1Includes file in dune/localfunctions/common
dualp1localbasis.hhcommon/localbasis.hh
dualp1localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000014_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

dualq1 → common Relation

File in dune/localfunctions/dualmortarbasis/dualq1Includes file in dune/localfunctions/common
dualq1localbasis.hhcommon/localbasis.hh
dualq1localcoefficients.hhlocalkey.hh
│ │ │ │ +

dualq1 → common Relation

File in dune/localfunctions/dualmortarbasis/dualq1Includes file in dune/localfunctions/common
dualq1localbasis.hhcommon/localbasis.hh
dualq1localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000016_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

edges0.5 → common Relation

File in dune/localfunctions/whitney/edges0.5Includes file in dune/localfunctions/common
whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
whitney/edges0.5/coefficients.hhlocalkey.hh
│ │ │ │ +

edges0.5 → common Relation

File in dune/localfunctions/whitney/edges0.5Includes file in dune/localfunctions/common
whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
whitney/edges0.5/coefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000016_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

edges0.5 → lagrange Relation

File in dune/localfunctions/whitney/edges0.5Includes file in dune/localfunctions/lagrange
whitney/edges0.5/basis.hhlagrangesimplex.hh
│ │ │ │ +

edges0.5 → lagrange Relation

File in dune/localfunctions/whitney/edges0.5Includes file in dune/localfunctions/lagrange
whitney/edges0.5/basis.hhlagrangesimplex.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000017_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

enriched → common Relation

File in dune/localfunctions/enrichedIncludes file in dune/localfunctions/common
simplexp1bubble.hhlocalfiniteelementtraits.hh
simplexp1bubble / enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
simplexp1bubble / enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
│ │ │ │ +

enriched → common Relation

File in dune/localfunctions/enrichedIncludes file in dune/localfunctions/common
simplexp1bubble.hhlocalfiniteelementtraits.hh
simplexp1bubble / enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
simplexp1bubble / enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000017_000054.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

enriched → simplexp1bubble Relation

File in dune/localfunctions/enrichedIncludes file in dune/localfunctions/enriched/simplexp1bubble
simplexp1bubble.hhenriched/simplexp1bubble/localbasis.hh
simplexp1bubble.hhenriched/simplexp1bubble/localcoefficients.hh
simplexp1bubble.hhenriched/simplexp1bubble/localinterpolation.hh
│ │ │ │ +

enriched → simplexp1bubble Relation

File in dune/localfunctions/enrichedIncludes file in dune/localfunctions/enriched/simplexp1bubble
simplexp1bubble.hhenriched/simplexp1bubble/localbasis.hh
simplexp1bubble.hhenriched/simplexp1bubble/localcoefficients.hh
simplexp1bubble.hhenriched/simplexp1bubble/localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

hierarchical → common Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/common
hierarchicalp2.hhlocalfiniteelementtraits.hh
hierarchicalp2withelementbubble.hhlocalfiniteelementtraits.hh
hierarchicalprismp2.hhlocalfiniteelementtraits.hh
hierarchicalp2 / hierarchicalsimplexp2localbasis.hhcommon/localbasis.hh
hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhcommon/localbasis.hh
hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhlocalkey.hh
hierarchicalprismp2 / hierarchicalprismp2localbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000017.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchical → enriched Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/enriched
hierarchicalp1withelementbubble.hhsimplexp1bubble.hh
│ │ │ │ +

hierarchical → enriched Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/enriched
hierarchicalp1withelementbubble.hhsimplexp1bubble.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000019.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchical → hierarchicalp2 Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalp2
hierarchicalp2.hhhierarchicalsimplexp2localbasis.hh
hierarchicalp2.hhhierarchicalsimplexp2localinterpolation.hh
│ │ │ │ +

hierarchical → hierarchicalp2 Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalp2
hierarchicalp2.hhhierarchicalsimplexp2localbasis.hh
hierarchicalp2.hhhierarchicalsimplexp2localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000020.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchical → hierarchicalp2withelementbubble Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalp2withelementbubble
hierarchicalp2withelementbubble.hhhierarchicalsimplexp2withelementbubble.hh
│ │ │ │ +

hierarchical → hierarchicalp2withelementbubble Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalp2withelementbubble
hierarchicalp2withelementbubble.hhhierarchicalsimplexp2withelementbubble.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000021.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchical → hierarchicalprismp2 Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalprismp2
hierarchicalprismp2.hhhierarchicalprismp2localbasis.hh
hierarchicalprismp2.hhhierarchicalprismp2localinterpolation.hh
│ │ │ │ +

hierarchical → hierarchicalprismp2 Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/hierarchical/hierarchicalprismp2
hierarchicalprismp2.hhhierarchicalprismp2localbasis.hh
hierarchicalprismp2.hhhierarchicalprismp2localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000018_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchical → lagrange Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/lagrange
hierarchicalp2.hhlagrangesimplex.hh
hierarchicalprismp2.hhlagrangeprism.hh
│ │ │ │ +

hierarchical → lagrange Relation

File in dune/localfunctions/hierarchicalIncludes file in dune/localfunctions/lagrange
hierarchicalp2.hhlagrangesimplex.hh
hierarchicalprismp2.hhlagrangeprism.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000019_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchicalp2 → common Relation

File in dune/localfunctions/hierarchical/hierarchicalp2Includes file in dune/localfunctions/common
hierarchicalsimplexp2localbasis.hhcommon/localbasis.hh
│ │ │ │ +

hierarchicalp2 → common Relation

File in dune/localfunctions/hierarchical/hierarchicalp2Includes file in dune/localfunctions/common
hierarchicalsimplexp2localbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000020_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchicalp2withelementbubble → common Relation

File in dune/localfunctions/hierarchical/hierarchicalp2withelementbubbleIncludes file in dune/localfunctions/common
hierarchicalsimplexp2withelementbubble.hhcommon/localbasis.hh
hierarchicalsimplexp2withelementbubble.hhlocalkey.hh
│ │ │ │ +

hierarchicalp2withelementbubble → common Relation

File in dune/localfunctions/hierarchical/hierarchicalp2withelementbubbleIncludes file in dune/localfunctions/common
hierarchicalsimplexp2withelementbubble.hhcommon/localbasis.hh
hierarchicalsimplexp2withelementbubble.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000021_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

hierarchicalprismp2 → common Relation

File in dune/localfunctions/hierarchical/hierarchicalprismp2Includes file in dune/localfunctions/common
hierarchicalprismp2localbasis.hhcommon/localbasis.hh
│ │ │ │ +

hierarchicalprismp2 → common Relation

File in dune/localfunctions/hierarchical/hierarchicalprismp2Includes file in dune/localfunctions/common
hierarchicalprismp2localbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000022_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

lagrange → common Relation

File in dune/localfunctions/lagrangeIncludes file in dune/localfunctions/common
emptypoints.hhlocalkey.hh
lagrangecoefficients.hhlocalkey.hh
lagrangecube.hhcommon/localbasis.hh
lagrangecube.hhlocalfiniteelementtraits.hh
lagrangecube.hhlocalkey.hh
lagrangelfecache.hhlocalfiniteelementvariantcache.hh
lagrangeprism.hhcommon/localbasis.hh
lagrangeprism.hhlocalfiniteelementtraits.hh
lagrangeprism.hhlocalkey.hh
lagrangepyramid.hhcommon/localbasis.hh
lagrangepyramid.hhlocalfiniteelementtraits.hh
lagrangepyramid.hhlocalkey.hh
lagrangesimplex.hhcommon/localbasis.hh
lagrangesimplex.hhlocalfiniteelementtraits.hh
lagrangesimplex.hhlocalkey.hh
p0.hhlocalfiniteelementtraits.hh
pk1d.hhlocalfiniteelementtraits.hh
pk1d.hhlocaltoglobaladaptors.hh
pk2d.hhlocalfiniteelementtraits.hh
pk2d.hhlocaltoglobaladaptors.hh
pq22d.hhlocalfiniteelementvariant.hh
pqkfactory.hhvirtualinterface.hh
pqkfactory.hhvirtualwrappers.hh
q1.hhlocalfiniteelementtraits.hh
q1.hhlocaltoglobaladaptors.hh
q2.hhlocalfiniteelementtraits.hh
q2.hhlocaltoglobaladaptors.hh
p0 / p0localbasis.hhcommon/localbasis.hh
p0 / p0localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000022_000031.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

lagrange → p0 Relation

File in dune/localfunctions/lagrangeIncludes file in dune/localfunctions/lagrange/p0
p0.hhp0localbasis.hh
p0.hhp0localcoefficients.hh
p0.hhp0localinterpolation.hh
│ │ │ │ +

lagrange → p0 Relation

File in dune/localfunctions/lagrangeIncludes file in dune/localfunctions/lagrange/p0
p0.hhp0localbasis.hh
p0.hhp0localcoefficients.hh
p0.hhp0localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000022_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

lagrange → utility Relation

File in dune/localfunctions/lagrangeIncludes file in dune/localfunctions/utility
equidistantpoints.hhfield.hh
lagrangebasis.hhdefaultbasisfactory.hh
lagrangebasis.hhmonomialbasis.hh
lagrangecoefficients.hhfield.hh
│ │ │ │ +

lagrange → utility Relation

File in dune/localfunctions/lagrangeIncludes file in dune/localfunctions/utility
equidistantpoints.hhfield.hh
lagrangebasis.hhdefaultbasisfactory.hh
lagrangebasis.hhmonomialbasis.hh
lagrangecoefficients.hhfield.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000001.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → brezzidouglasmarini Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/brezzidouglasmarini
brezzidouglasmarini.hhbrezzidouglasmarinicube.hh
brezzidouglasmarini.hhbrezzidouglasmarinisimplex.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │ +

localfunctions → brezzidouglasmarini Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/brezzidouglasmarini
brezzidouglasmarini.hhbrezzidouglasmarinicube.hh
brezzidouglasmarini.hhbrezzidouglasmarinisimplex.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhbrezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhbrezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhbrezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhbrezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalinterpolation.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalbasis.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalcoefficients.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhbrezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → common Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/common
brezzidouglasfortinmarini / bdfmcube.hhlocalfiniteelementtraits.hh
brezzidouglasfortinmarini / cube / brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
brezzidouglasfortinmarini / cube / brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalcoefficients.hhlocalkey.hh
crouzeixraviart.hhcommon/localbasis.hh
crouzeixraviart.hhlocalfiniteelementtraits.hh
crouzeixraviart.hhlocalkey.hh
dualmortarbasis / dualp1.hhlocalfiniteelementtraits.hh
dualmortarbasis / dualp1 / dualp1localbasis.hhcommon/localbasis.hh
dualmortarbasis / dualp1 / dualp1localcoefficients.hhlocalkey.hh
dualmortarbasis / dualpq1factory.hhvirtualinterface.hh
dualmortarbasis / dualpq1factory.hhvirtualwrappers.hh
dualmortarbasis / dualq1.hhlocalfiniteelementtraits.hh
dualmortarbasis / dualq1 / dualq1localbasis.hhcommon/localbasis.hh
dualmortarbasis / dualq1 / dualq1localcoefficients.hhlocalkey.hh
lagrange / emptypoints.hhlocalkey.hh
hierarchical / hierarchicalp2.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalp2withelementbubble.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalprismp2.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalprismp2 / hierarchicalprismp2localbasis.hhcommon/localbasis.hh
hierarchical / hierarchicalp2 / hierarchicalsimplexp2localbasis.hhcommon/localbasis.hh
hierarchical / hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhcommon/localbasis.hh
hierarchical / hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhlocalkey.hh
lagrange / lagrangecoefficients.hhlocalkey.hh
lagrange / lagrangecube.hhcommon/localbasis.hh
lagrange / lagrangecube.hhlocalfiniteelementtraits.hh
lagrange / lagrangecube.hhlocalkey.hh
lagrange / lagrangelfecache.hhlocalfiniteelementvariantcache.hh
lagrange / lagrangeprism.hhcommon/localbasis.hh
lagrange / lagrangeprism.hhlocalfiniteelementtraits.hh
lagrange / lagrangeprism.hhlocalkey.hh
lagrange / lagrangepyramid.hhcommon/localbasis.hh
lagrange / lagrangepyramid.hhlocalfiniteelementtraits.hh
lagrange / lagrangepyramid.hhlocalkey.hh
lagrange / lagrangesimplex.hhcommon/localbasis.hh
lagrange / lagrangesimplex.hhlocalfiniteelementtraits.hh
lagrange / lagrangesimplex.hhlocalkey.hh
mimetic.hhlocalfiniteelementtraits.hh
monomial.hhlocalfiniteelementtraits.hh
monomial.hhlocaltoglobaladaptors.hh
lagrange / p0.hhlocalfiniteelementtraits.hh
lagrange / pk1d.hhlocalfiniteelementtraits.hh
lagrange / pk1d.hhlocaltoglobaladaptors.hh
lagrange / pk2d.hhlocalfiniteelementtraits.hh
lagrange / pk2d.hhlocaltoglobaladaptors.hh
lagrange / pq22d.hhlocalfiniteelementvariant.hh
lagrange / pqkfactory.hhvirtualinterface.hh
lagrange / pqkfactory.hhvirtualwrappers.hh
lagrange / q1.hhlocalfiniteelementtraits.hh
lagrange / q1.hhlocaltoglobaladaptors.hh
lagrange / q2.hhlocalfiniteelementtraits.hh
lagrange / q2.hhlocaltoglobaladaptors.hh
refined / common / refinedsimplexlocalbasis.hhcommon/localbasis.hh
enriched / simplexp1bubble.hhlocalfiniteelementtraits.hh
whitney / edges0.5 / whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
whitney / edges0.5 / whitney/edges0.5/coefficients.hhlocalkey.hh
mimetic / mimeticall.hhcommon/localbasis.hh
mimetic / mimeticall.hhlocalkey.hh
monomial / monomiallocalbasis.hhcommon/localbasis.hh
monomial / monomiallocalcoefficients.hhlocalkey.hh
nedelec / nedelec1stkindcube.hhcommon/localbasis.hh
nedelec / nedelec1stkindcube.hhlocalfiniteelementtraits.hh
nedelec / nedelec1stkindcube.hhlocalkey.hh
nedelec / nedelec1stkindsimplex.hhcommon/localbasis.hh
nedelec / nedelec1stkindsimplex.hhlocalfiniteelementtraits.hh
nedelec / nedelec1stkindsimplex.hhlocalkey.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhlocalkey.hh
lagrange / p0 / p0localbasis.hhcommon/localbasis.hh
lagrange / p0 / p0localcoefficients.hhlocalkey.hh
meta / power / meta/power/coefficients.hhlocalkey.hh
rannacherturek / rannacherturek/rannacherturek.hhlocalfiniteelementtraits.hh
rannacherturek / rannachertureklocalcoefficients.hhlocalkey.hh
rannacherturek / rannachertureklocalinterpolation.hhcommon/localbasis.hh
rannacherturek / rannacherturek2d / rannacherturek2dlocalbasis.hhcommon/localbasis.hh
rannacherturek / rannacherturek3d / rannacherturek3dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas02d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas03d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0cube3d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0prism.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0pyramid.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas12d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas1cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas1cube3d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas2cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas3cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas4cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomaslfecache.hhlocalfiniteelementvariantcache.hh
raviartthomas / raviartthomas02d / raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas02d / raviartthomas02dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas03d / raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas03d / raviartthomas03dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas0cube2d / raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas / raviartthomas0cube2d / raviartthomas0cube2dall.hhlocalkey.hh
raviartthomas / raviartthomas0cube3d / raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas / raviartthomas0cube3d / raviartthomas0cube3dall.hhlocalkey.hh
raviartthomas / raviartthomas0prism / raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas0prism / raviartthomas0prismlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas12d / raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas12d / raviartthomas12dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhlocalkey.hh
refined / refinedp0.hhlocalfiniteelementtraits.hh
refined / refinedp1.hhlocalfiniteelementtraits.hh
refined / refinedp0 / refinedp0localbasis.hhcommon/localbasis.hh
refined / refinedp0 / refinedp0localcoefficients.hhlocalkey.hh
enriched / simplexp1bubble / enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
enriched / simplexp1bubble / enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
utility / dglocalcoefficients.hhlocalkey.hh
utility / localfunctions/utility/localfiniteelement.hhlocalfiniteelementtraits.hh
utility / polynomialbasis.hhcommon/localbasis.hh
│ │ │ │ +

localfunctions → common Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/common
brezzidouglasfortinmarini / bdfmcube.hhlocalfiniteelementtraits.hh
brezzidouglasfortinmarini / cube / brezzidouglasfortinmarini/cube/localbasis.hhcommon/localbasis.hh
brezzidouglasfortinmarini / cube / brezzidouglasfortinmarini/cube/localcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube2d / brezzidouglasmarini1cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1cube3d / brezzidouglasmarini1cube3dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini1simplex2d / brezzidouglasmarini1simplex2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini2cube2d / brezzidouglasmarini2cube2dlocalcoefficients.hhlocalkey.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d.hhlocalfiniteelementtraits.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalbasis.hhcommon/localbasis.hh
brezzidouglasmarini / brezzidouglasmarini2simplex2d / brezzidouglasmarini2simplex2dlocalcoefficients.hhlocalkey.hh
crouzeixraviart.hhcommon/localbasis.hh
crouzeixraviart.hhlocalfiniteelementtraits.hh
crouzeixraviart.hhlocalkey.hh
dualmortarbasis / dualp1.hhlocalfiniteelementtraits.hh
dualmortarbasis / dualp1 / dualp1localbasis.hhcommon/localbasis.hh
dualmortarbasis / dualp1 / dualp1localcoefficients.hhlocalkey.hh
dualmortarbasis / dualpq1factory.hhvirtualinterface.hh
dualmortarbasis / dualpq1factory.hhvirtualwrappers.hh
dualmortarbasis / dualq1.hhlocalfiniteelementtraits.hh
dualmortarbasis / dualq1 / dualq1localbasis.hhcommon/localbasis.hh
dualmortarbasis / dualq1 / dualq1localcoefficients.hhlocalkey.hh
lagrange / emptypoints.hhlocalkey.hh
hierarchical / hierarchicalp2.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalp2withelementbubble.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalprismp2.hhlocalfiniteelementtraits.hh
hierarchical / hierarchicalprismp2 / hierarchicalprismp2localbasis.hhcommon/localbasis.hh
hierarchical / hierarchicalp2 / hierarchicalsimplexp2localbasis.hhcommon/localbasis.hh
hierarchical / hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhcommon/localbasis.hh
hierarchical / hierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hhlocalkey.hh
lagrange / lagrangecoefficients.hhlocalkey.hh
lagrange / lagrangecube.hhcommon/localbasis.hh
lagrange / lagrangecube.hhlocalfiniteelementtraits.hh
lagrange / lagrangecube.hhlocalkey.hh
lagrange / lagrangelfecache.hhlocalfiniteelementvariantcache.hh
lagrange / lagrangeprism.hhcommon/localbasis.hh
lagrange / lagrangeprism.hhlocalfiniteelementtraits.hh
lagrange / lagrangeprism.hhlocalkey.hh
lagrange / lagrangepyramid.hhcommon/localbasis.hh
lagrange / lagrangepyramid.hhlocalfiniteelementtraits.hh
lagrange / lagrangepyramid.hhlocalkey.hh
lagrange / lagrangesimplex.hhcommon/localbasis.hh
lagrange / lagrangesimplex.hhlocalfiniteelementtraits.hh
lagrange / lagrangesimplex.hhlocalkey.hh
mimetic.hhlocalfiniteelementtraits.hh
monomial.hhlocalfiniteelementtraits.hh
monomial.hhlocaltoglobaladaptors.hh
lagrange / p0.hhlocalfiniteelementtraits.hh
lagrange / pk1d.hhlocalfiniteelementtraits.hh
lagrange / pk1d.hhlocaltoglobaladaptors.hh
lagrange / pk2d.hhlocalfiniteelementtraits.hh
lagrange / pk2d.hhlocaltoglobaladaptors.hh
lagrange / pq22d.hhlocalfiniteelementvariant.hh
lagrange / pqkfactory.hhvirtualinterface.hh
lagrange / pqkfactory.hhvirtualwrappers.hh
lagrange / q1.hhlocalfiniteelementtraits.hh
lagrange / q1.hhlocaltoglobaladaptors.hh
lagrange / q2.hhlocalfiniteelementtraits.hh
lagrange / q2.hhlocaltoglobaladaptors.hh
refined / common / refinedsimplexlocalbasis.hhcommon/localbasis.hh
enriched / simplexp1bubble.hhlocalfiniteelementtraits.hh
whitney / edges0.5 / whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
whitney / edges0.5 / whitney/edges0.5/coefficients.hhlocalkey.hh
mimetic / mimeticall.hhcommon/localbasis.hh
mimetic / mimeticall.hhlocalkey.hh
monomial / monomiallocalbasis.hhcommon/localbasis.hh
monomial / monomiallocalcoefficients.hhlocalkey.hh
nedelec / nedelec1stkindcube.hhcommon/localbasis.hh
nedelec / nedelec1stkindcube.hhlocalfiniteelementtraits.hh
nedelec / nedelec1stkindcube.hhlocalkey.hh
nedelec / nedelec1stkindsimplex.hhcommon/localbasis.hh
nedelec / nedelec1stkindsimplex.hhlocalfiniteelementtraits.hh
nedelec / nedelec1stkindsimplex.hhlocalkey.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhlocalkey.hh
lagrange / p0 / p0localbasis.hhcommon/localbasis.hh
lagrange / p0 / p0localcoefficients.hhlocalkey.hh
meta / power / meta/power/coefficients.hhlocalkey.hh
rannacherturek / rannacherturek/rannacherturek.hhlocalfiniteelementtraits.hh
rannacherturek / rannachertureklocalcoefficients.hhlocalkey.hh
rannacherturek / rannachertureklocalinterpolation.hhcommon/localbasis.hh
rannacherturek / rannacherturek2d / rannacherturek2dlocalbasis.hhcommon/localbasis.hh
rannacherturek / rannacherturek3d / rannacherturek3dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas02d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas03d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0cube3d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0prism.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas0pyramid.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas12d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas1cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas1cube3d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas2cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas3cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomas4cube2d.hhlocalfiniteelementtraits.hh
raviartthomas / raviartthomaslfecache.hhlocalfiniteelementvariantcache.hh
raviartthomas / raviartthomas02d / raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas02d / raviartthomas02dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas03d / raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas03d / raviartthomas03dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas0cube2d / raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas / raviartthomas0cube2d / raviartthomas0cube2dall.hhlocalkey.hh
raviartthomas / raviartthomas0cube3d / raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas / raviartthomas0cube3d / raviartthomas0cube3dall.hhlocalkey.hh
raviartthomas / raviartthomas0prism / raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas0prism / raviartthomas0prismlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas12d / raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas12d / raviartthomas12dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas / raviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhlocalkey.hh
refined / refinedp0.hhlocalfiniteelementtraits.hh
refined / refinedp1.hhlocalfiniteelementtraits.hh
refined / refinedp0 / refinedp0localbasis.hhcommon/localbasis.hh
refined / refinedp0 / refinedp0localcoefficients.hhlocalkey.hh
enriched / simplexp1bubble / enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
enriched / simplexp1bubble / enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
utility / dglocalcoefficients.hhlocalkey.hh
utility / localfunctions/utility/localfiniteelement.hhlocalfiniteelementtraits.hh
utility / polynomialbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000012.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → dualmortarbasis Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/dualmortarbasis
dualmortarbasis.hhdualp1.hh
dualmortarbasis.hhdualq1.hh
dualmortarbasis / dualp1.hhdualp1 / dualp1localbasis.hh
dualmortarbasis / dualp1.hhdualp1 / dualp1localcoefficients.hh
dualmortarbasis / dualp1.hhdualp1 / dualp1localinterpolation.hh
dualmortarbasis / dualq1.hhdualq1 / dualq1localbasis.hh
dualmortarbasis / dualq1.hhdualq1 / dualq1localcoefficients.hh
dualmortarbasis / dualq1.hhdualq1 / dualq1localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000017.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → enriched Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/enriched
enriched.hhsimplexp1bubble.hh
hierarchical / hierarchicalp1withelementbubble.hhsimplexp1bubble.hh
enriched / simplexp1bubble.hhsimplexp1bubble / enriched/simplexp1bubble/localbasis.hh
enriched / simplexp1bubble.hhsimplexp1bubble / enriched/simplexp1bubble/localcoefficients.hh
enriched / simplexp1bubble.hhsimplexp1bubble / enriched/simplexp1bubble/localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000018.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → hierarchical Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/hierarchical
hierarchical.hhhierarchicalp2.hh
hierarchical.hhhierarchicalp2withelementbubble.hh
hierarchical.hhhierarchicalprismp2.hh
hierarchical / hierarchicalp2.hhhierarchicalp2 / hierarchicalsimplexp2localbasis.hh
hierarchical / hierarchicalp2.hhhierarchicalp2 / hierarchicalsimplexp2localinterpolation.hh
hierarchical / hierarchicalp2withelementbubble.hhhierarchicalp2withelementbubble / hierarchicalsimplexp2withelementbubble.hh
hierarchical / hierarchicalprismp2.hhhierarchicalprismp2 / hierarchicalprismp2localbasis.hh
hierarchical / hierarchicalprismp2.hhhierarchicalprismp2 / hierarchicalprismp2localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → lagrange Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/lagrange
dualmortarbasis / dualq1.hhlagrangecube.hh
hierarchical / hierarchicalp2.hhlagrangesimplex.hh
hierarchical / hierarchicalprismp2.hhlagrangeprism.hh
lagrange.hhlagrange/interpolation.hh
lagrange.hhlagrangebasis.hh
lagrange.hhlagrangecoefficients.hh
lagrange.hhlagrangecube.hh
lagrange.hhlagrangeprism.hh
lagrange.hhlagrangepyramid.hh
lagrange.hhlagrangesimplex.hh
lagrange.hhp0.hh
lagrange.hhpq22d.hh
lagrange / p0.hhp0 / p0localbasis.hh
lagrange / p0.hhp0 / p0localcoefficients.hh
lagrange / p0.hhp0 / p0localinterpolation.hh
whitney / edges0.5 / whitney/edges0.5/basis.hhlagrangesimplex.hh
refined / refinedp0.hhp0.hh
refined / refinedp1.hhp0.hh
refined / refinedp1.hhlagrangesimplex.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000026.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → mimetic Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/mimetic
mimetic.hhmimeticall.hh
│ │ │ │ +

localfunctions → mimetic Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/mimetic
mimetic.hhmimeticall.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000027.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → monomial Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/monomial
monomial.hhmonomiallocalbasis.hh
monomial.hhmonomiallocalcoefficients.hh
monomial.hhmonomiallocalinterpolation.hh
│ │ │ │ +

localfunctions → monomial Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/monomial
monomial.hhmonomiallocalbasis.hh
monomial.hhmonomiallocalcoefficients.hh
monomial.hhmonomiallocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000028.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → nedelec Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/nedelec
nedelec.hhnedelec1stkindcube.hh
nedelec.hhnedelec1stkindsimplex.hh
│ │ │ │ +

localfunctions → nedelec Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/nedelec
nedelec.hhnedelec1stkindcube.hh
nedelec.hhnedelec1stkindsimplex.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000030.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → orthonormal Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/orthonormal
orthonormal.hhorthonormalbasis.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhorthonormalbasis.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ +

localfunctions → orthonormal Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/orthonormal
orthonormal.hhorthonormalbasis.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhorthonormalbasis.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000034.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → rannacherturek Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/rannacherturek
rannacherturek.hhrannacherturek/rannacherturek.hh
rannacherturek / rannachertureklocalbasis.hhrannacherturek2d / rannacherturek2dlocalbasis.hh
rannacherturek / rannachertureklocalbasis.hhrannacherturek3d / rannacherturek3dlocalbasis.hh
│ │ │ │ +

localfunctions → rannacherturek Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/rannacherturek
rannacherturek.hhrannacherturek/rannacherturek.hh
rannacherturek / rannachertureklocalbasis.hhrannacherturek2d / rannacherturek2dlocalbasis.hh
rannacherturek / rannachertureklocalbasis.hhrannacherturek3d / rannacherturek3dlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000037.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → raviartthomas Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/raviartthomas
raviartthomas.hhraviartthomas02d.hh
raviartthomas.hhraviartthomas03d.hh
raviartthomas.hhraviartthomas0cube2d.hh
raviartthomas.hhraviartthomas0cube3d.hh
raviartthomas.hhraviartthomas0prism.hh
raviartthomas.hhraviartthomas0pyramid.hh
raviartthomas.hhraviartthomas12d.hh
raviartthomas.hhraviartthomas1cube2d.hh
raviartthomas.hhraviartthomas1cube3d.hh
raviartthomas.hhraviartthomas2cube2d.hh
raviartthomas.hhraviartthomas3cube2d.hh
raviartthomas.hhraviartthomascube.hh
raviartthomas.hhraviartthomassimplex.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalbasis.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalcoefficients.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalinterpolation.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalbasis.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalcoefficients.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalinterpolation.hh
raviartthomas / raviartthomas0cube2d.hhraviartthomas0cube2d / raviartthomas0cube2dall.hh
raviartthomas / raviartthomas0cube3d.hhraviartthomas0cube3d / raviartthomas0cube3dall.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalbasis.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalcoefficients.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalinterpolation.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalinterpolation.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalbasis.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalcoefficients.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalinterpolation.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalinterpolation.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalinterpolation.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalinterpolation.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalinterpolation.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalinterpolation.hh
raviartthomas / raviartthomassimplex.hhraviartthomassimplex / raviartthomassimplexbasis.hh
│ │ │ │ +

localfunctions → raviartthomas Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/raviartthomas
raviartthomas.hhraviartthomas02d.hh
raviartthomas.hhraviartthomas03d.hh
raviartthomas.hhraviartthomas0cube2d.hh
raviartthomas.hhraviartthomas0cube3d.hh
raviartthomas.hhraviartthomas0prism.hh
raviartthomas.hhraviartthomas0pyramid.hh
raviartthomas.hhraviartthomas12d.hh
raviartthomas.hhraviartthomas1cube2d.hh
raviartthomas.hhraviartthomas1cube3d.hh
raviartthomas.hhraviartthomas2cube2d.hh
raviartthomas.hhraviartthomas3cube2d.hh
raviartthomas.hhraviartthomascube.hh
raviartthomas.hhraviartthomassimplex.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalbasis.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalcoefficients.hh
raviartthomas / raviartthomas02d.hhraviartthomas02d / raviartthomas02dlocalinterpolation.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalbasis.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalcoefficients.hh
raviartthomas / raviartthomas03d.hhraviartthomas03d / raviartthomas03dlocalinterpolation.hh
raviartthomas / raviartthomas0cube2d.hhraviartthomas0cube2d / raviartthomas0cube2dall.hh
raviartthomas / raviartthomas0cube3d.hhraviartthomas0cube3d / raviartthomas0cube3dall.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalbasis.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalcoefficients.hh
raviartthomas / raviartthomas0prism.hhraviartthomas0prism / raviartthomas0prismlocalinterpolation.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hh
raviartthomas / raviartthomas0pyramid.hhraviartthomas0pyramid / raviartthomas0pyramidlocalinterpolation.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalbasis.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalcoefficients.hh
raviartthomas / raviartthomas12d.hhraviartthomas12d / raviartthomas12dlocalinterpolation.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalinterpolation.hh
raviartthomas / raviartthomas1cube2d.hhraviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hh
raviartthomas / raviartthomas1cube3d.hhraviartthomas1cube3d / raviartthomas1cube3dlocalinterpolation.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hh
raviartthomas / raviartthomas2cube2d.hhraviartthomas2cube2d / raviartthomas2cube2dlocalinterpolation.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hh
raviartthomas / raviartthomas3cube2d.hhraviartthomas3cube2d / raviartthomas3cube2dlocalinterpolation.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hh
raviartthomas / raviartthomas4cube2d.hhraviartthomas4cube2d / raviartthomas4cube2dlocalinterpolation.hh
raviartthomas / raviartthomassimplex.hhraviartthomassimplex / raviartthomassimplexbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000051.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → refined Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/refined
refined.hhrefinedp0.hh
refined.hhrefinedp1.hh
refined / refinedp0.hhrefinedp0 / refinedp0localbasis.hh
refined / refinedp0.hhrefinedp0 / refinedp0localcoefficients.hh
refined / refinedp0.hhrefinedp0 / refinedp0localinterpolation.hh
refined / refinedp1.hhrefinedp1 / refinedp1localbasis.hh
refined / refinedp0 / refinedp0localbasis.hhcommon / refinedsimplexlocalbasis.hh
refined / refinedp1 / refinedp1localbasis.hhcommon / refinedsimplexlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000023_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

localfunctions → utility Relation

File in dune/localfunctionsIncludes file in dune/localfunctions/utility
lagrange / equidistantpoints.hhfield.hh
lagrange.hhdglocalcoefficients.hh
lagrange.hhlocalfunctions/utility/localfiniteelement.hh
lagrange / lagrangebasis.hhdefaultbasisfactory.hh
lagrange / lagrangebasis.hhmonomialbasis.hh
lagrange / lagrangecoefficients.hhfield.hh
orthonormal.hhdglocalcoefficients.hh
orthonormal.hhl2interpolation.hh
orthonormal.hhlocalfunctions/utility/localfiniteelement.hh
nedelec / nedelecsimplex / nedelecsimplexbasis.hhdefaultbasisfactory.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhinterpolationhelper.hh
nedelec / nedelecsimplex / nedelecsimplexinterpolation.hhpolynomialbasis.hh
nedelec / nedelecsimplex / nedelecsimplexprebasis.hhpolynomialbasis.hh
orthonormal / orthonormalbasis.hhpolynomialbasis.hh
orthonormal / orthonormalcompute.hhfield.hh
orthonormal / orthonormalcompute.hhmonomialbasis.hh
orthonormal / orthonormalcompute.hhmultiindex.hh
raviartthomas / raviartthomassimplex.hhlocalfunctions/utility/localfiniteelement.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexbasis.hhdefaultbasisfactory.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhinterpolationhelper.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexinterpolation.hhpolynomialbasis.hh
raviartthomas / raviartthomassimplex / raviartthomassimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000024_000023.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

localfunctions → localfunctions Relation

File in dune/python/localfunctionsIncludes file in dune/localfunctions
python/localfunctions/localfiniteelement.hhcommon / localkey.hh
python/localfunctions/localfiniteelement.hhcommon / virtualinterface.hh
│ │ │ │ +

localfunctions → localfunctions Relation

File in dune/python/localfunctionsIncludes file in dune/localfunctions
python/localfunctions/localfiniteelement.hhcommon / localkey.hh
python/localfunctions/localfiniteelement.hhcommon / virtualinterface.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000025_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

meta → common Relation

File in dune/localfunctions/metaIncludes file in dune/localfunctions/common
power / meta/power/coefficients.hhlocalkey.hh
│ │ │ │ +

meta → common Relation

File in dune/localfunctions/metaIncludes file in dune/localfunctions/common
power / meta/power/coefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000025_000032.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

meta → power Relation

File in dune/localfunctions/metaIncludes file in dune/localfunctions/meta/power
power.hhmeta/power/basis.hh
power.hhmeta/power/coefficients.hh
power.hhmeta/power/interpolation.hh
│ │ │ │ +

meta → power Relation

File in dune/localfunctions/metaIncludes file in dune/localfunctions/meta/power
power.hhmeta/power/basis.hh
power.hhmeta/power/coefficients.hh
power.hhmeta/power/interpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000026_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

mimetic → common Relation

File in dune/localfunctions/mimeticIncludes file in dune/localfunctions/common
mimeticall.hhcommon/localbasis.hh
mimeticall.hhlocalkey.hh
│ │ │ │ +

mimetic → common Relation

File in dune/localfunctions/mimeticIncludes file in dune/localfunctions/common
mimeticall.hhcommon/localbasis.hh
mimeticall.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000027_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

monomial → common Relation

File in dune/localfunctions/monomialIncludes file in dune/localfunctions/common
monomiallocalbasis.hhcommon/localbasis.hh
monomiallocalcoefficients.hhlocalkey.hh
│ │ │ │ +

monomial → common Relation

File in dune/localfunctions/monomialIncludes file in dune/localfunctions/common
monomiallocalbasis.hhcommon/localbasis.hh
monomiallocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000028_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

nedelec → common Relation

File in dune/localfunctions/nedelecIncludes file in dune/localfunctions/common
nedelec1stkindcube.hhcommon/localbasis.hh
nedelec1stkindcube.hhlocalfiniteelementtraits.hh
nedelec1stkindcube.hhlocalkey.hh
nedelec1stkindsimplex.hhcommon/localbasis.hh
nedelec1stkindsimplex.hhlocalfiniteelementtraits.hh
nedelec1stkindsimplex.hhlocalkey.hh
nedelecsimplex / nedelecsimplexinterpolation.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000028_000030.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

nedelec → orthonormal Relation

File in dune/localfunctions/nedelecIncludes file in dune/localfunctions/orthonormal
nedelecsimplex / nedelecsimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ +

nedelec → orthonormal Relation

File in dune/localfunctions/nedelecIncludes file in dune/localfunctions/orthonormal
nedelecsimplex / nedelecsimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000028_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

nedelec → utility Relation

File in dune/localfunctions/nedelecIncludes file in dune/localfunctions/utility
nedelecsimplex / nedelecsimplexbasis.hhdefaultbasisfactory.hh
nedelecsimplex / nedelecsimplexinterpolation.hhinterpolationhelper.hh
nedelecsimplex / nedelecsimplexinterpolation.hhpolynomialbasis.hh
nedelecsimplex / nedelecsimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000029_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

nedelecsimplex → common Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/common
nedelecsimplexinterpolation.hhlocalkey.hh
│ │ │ │ +

nedelecsimplex → common Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/common
nedelecsimplexinterpolation.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000029_000030.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

nedelecsimplex → orthonormal Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/orthonormal
nedelecsimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ +

nedelecsimplex → orthonormal Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/orthonormal
nedelecsimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000029_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

nedelecsimplex → utility Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/utility
nedelecsimplexbasis.hhdefaultbasisfactory.hh
nedelecsimplexinterpolation.hhinterpolationhelper.hh
nedelecsimplexinterpolation.hhpolynomialbasis.hh
nedelecsimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ +

nedelecsimplex → utility Relation

File in dune/localfunctions/nedelec/nedelecsimplexIncludes file in dune/localfunctions/utility
nedelecsimplexbasis.hhdefaultbasisfactory.hh
nedelecsimplexinterpolation.hhinterpolationhelper.hh
nedelecsimplexinterpolation.hhpolynomialbasis.hh
nedelecsimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000030_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

orthonormal → utility Relation

File in dune/localfunctions/orthonormalIncludes file in dune/localfunctions/utility
orthonormalbasis.hhpolynomialbasis.hh
orthonormalcompute.hhfield.hh
orthonormalcompute.hhmonomialbasis.hh
orthonormalcompute.hhmultiindex.hh
│ │ │ │ +

orthonormal → utility Relation

File in dune/localfunctions/orthonormalIncludes file in dune/localfunctions/utility
orthonormalbasis.hhpolynomialbasis.hh
orthonormalcompute.hhfield.hh
orthonormalcompute.hhmonomialbasis.hh
orthonormalcompute.hhmultiindex.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000031_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

p0 → common Relation

File in dune/localfunctions/lagrange/p0Includes file in dune/localfunctions/common
p0localbasis.hhcommon/localbasis.hh
p0localcoefficients.hhlocalkey.hh
│ │ │ │ +

p0 → common Relation

File in dune/localfunctions/lagrange/p0Includes file in dune/localfunctions/common
p0localbasis.hhcommon/localbasis.hh
p0localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000032_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

power → common Relation

File in dune/localfunctions/meta/powerIncludes file in dune/localfunctions/common
meta/power/coefficients.hhlocalkey.hh
│ │ │ │ +

power → common Relation

File in dune/localfunctions/meta/powerIncludes file in dune/localfunctions/common
meta/power/coefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000033_000023.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

python → localfunctions Relation

File in dune/pythonIncludes file in dune/localfunctions
localfunctions / python/localfunctions/localfiniteelement.hhcommon / localkey.hh
localfunctions / python/localfunctions/localfiniteelement.hhcommon / virtualinterface.hh
│ │ │ │ +

python → localfunctions Relation

File in dune/pythonIncludes file in dune/localfunctions
localfunctions / python/localfunctions/localfiniteelement.hhcommon / localkey.hh
localfunctions / python/localfunctions/localfiniteelement.hhcommon / virtualinterface.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000034_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

rannacherturek → common Relation

File in dune/localfunctions/rannacherturekIncludes file in dune/localfunctions/common
rannacherturek/rannacherturek.hhlocalfiniteelementtraits.hh
rannachertureklocalcoefficients.hhlocalkey.hh
rannachertureklocalinterpolation.hhcommon/localbasis.hh
rannacherturek2d / rannacherturek2dlocalbasis.hhcommon/localbasis.hh
rannacherturek3d / rannacherturek3dlocalbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000034_000035.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

rannacherturek → rannacherturek2d Relation

File in dune/localfunctions/rannacherturekIncludes file in dune/localfunctions/rannacherturek/rannacherturek2d
rannachertureklocalbasis.hhrannacherturek2dlocalbasis.hh
│ │ │ │ +

rannacherturek → rannacherturek2d Relation

File in dune/localfunctions/rannacherturekIncludes file in dune/localfunctions/rannacherturek/rannacherturek2d
rannachertureklocalbasis.hhrannacherturek2dlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000034_000036.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

rannacherturek → rannacherturek3d Relation

File in dune/localfunctions/rannacherturekIncludes file in dune/localfunctions/rannacherturek/rannacherturek3d
rannachertureklocalbasis.hhrannacherturek3dlocalbasis.hh
│ │ │ │ +

rannacherturek → rannacherturek3d Relation

File in dune/localfunctions/rannacherturekIncludes file in dune/localfunctions/rannacherturek/rannacherturek3d
rannachertureklocalbasis.hhrannacherturek3dlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000035_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

rannacherturek2d → common Relation

File in dune/localfunctions/rannacherturek/rannacherturek2dIncludes file in dune/localfunctions/common
rannacherturek2dlocalbasis.hhcommon/localbasis.hh
│ │ │ │ +

rannacherturek2d → common Relation

File in dune/localfunctions/rannacherturek/rannacherturek2dIncludes file in dune/localfunctions/common
rannacherturek2dlocalbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000036_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

rannacherturek3d → common Relation

File in dune/localfunctions/rannacherturek/rannacherturek3dIncludes file in dune/localfunctions/common
rannacherturek3dlocalbasis.hhcommon/localbasis.hh
│ │ │ │ +

rannacherturek3d → common Relation

File in dune/localfunctions/rannacherturek/rannacherturek3dIncludes file in dune/localfunctions/common
rannacherturek3dlocalbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → common Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/common
raviartthomas02d.hhlocalfiniteelementtraits.hh
raviartthomas03d.hhlocalfiniteelementtraits.hh
raviartthomas0cube2d.hhlocalfiniteelementtraits.hh
raviartthomas0cube3d.hhlocalfiniteelementtraits.hh
raviartthomas0prism.hhlocalfiniteelementtraits.hh
raviartthomas0pyramid.hhlocalfiniteelementtraits.hh
raviartthomas12d.hhlocalfiniteelementtraits.hh
raviartthomas1cube2d.hhlocalfiniteelementtraits.hh
raviartthomas1cube3d.hhlocalfiniteelementtraits.hh
raviartthomas2cube2d.hhlocalfiniteelementtraits.hh
raviartthomas3cube2d.hhlocalfiniteelementtraits.hh
raviartthomas4cube2d.hhlocalfiniteelementtraits.hh
raviartthomaslfecache.hhlocalfiniteelementvariantcache.hh
raviartthomas02d / raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas02d / raviartthomas02dlocalcoefficients.hhlocalkey.hh
raviartthomas03d / raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas03d / raviartthomas03dlocalcoefficients.hhlocalkey.hh
raviartthomas0cube2d / raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas0cube2d / raviartthomas0cube2dall.hhlocalkey.hh
raviartthomas0cube3d / raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas0cube3d / raviartthomas0cube3dall.hhlocalkey.hh
raviartthomas0prism / raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas0prism / raviartthomas0prismlocalcoefficients.hhlocalkey.hh
raviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
raviartthomas12d / raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas12d / raviartthomas12dlocalcoefficients.hhlocalkey.hh
raviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
raviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
raviartthomassimplex / raviartthomassimplexinterpolation.hhlocalkey.hh
│ │ │ │ +

raviartthomas → common Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/common
raviartthomas02d.hhlocalfiniteelementtraits.hh
raviartthomas03d.hhlocalfiniteelementtraits.hh
raviartthomas0cube2d.hhlocalfiniteelementtraits.hh
raviartthomas0cube3d.hhlocalfiniteelementtraits.hh
raviartthomas0prism.hhlocalfiniteelementtraits.hh
raviartthomas0pyramid.hhlocalfiniteelementtraits.hh
raviartthomas12d.hhlocalfiniteelementtraits.hh
raviartthomas1cube2d.hhlocalfiniteelementtraits.hh
raviartthomas1cube3d.hhlocalfiniteelementtraits.hh
raviartthomas2cube2d.hhlocalfiniteelementtraits.hh
raviartthomas3cube2d.hhlocalfiniteelementtraits.hh
raviartthomas4cube2d.hhlocalfiniteelementtraits.hh
raviartthomaslfecache.hhlocalfiniteelementvariantcache.hh
raviartthomas02d / raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas02d / raviartthomas02dlocalcoefficients.hhlocalkey.hh
raviartthomas03d / raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas03d / raviartthomas03dlocalcoefficients.hhlocalkey.hh
raviartthomas0cube2d / raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas0cube2d / raviartthomas0cube2dall.hhlocalkey.hh
raviartthomas0cube3d / raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas0cube3d / raviartthomas0cube3dall.hhlocalkey.hh
raviartthomas0prism / raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas0prism / raviartthomas0prismlocalcoefficients.hhlocalkey.hh
raviartthomas0pyramid / raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas0pyramid / raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
raviartthomas12d / raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas12d / raviartthomas12dlocalcoefficients.hhlocalkey.hh
raviartthomas1cube2d / raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube2d / raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas1cube3d / raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube3d / raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
raviartthomas2cube2d / raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas2cube2d / raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas3cube2d / raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas3cube2d / raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
raviartthomas4cube2d / raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas4cube2d / raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
raviartthomassimplex / raviartthomassimplexinterpolation.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000030.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → orthonormal Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/orthonormal
raviartthomassimplex / raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ +

raviartthomas → orthonormal Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/orthonormal
raviartthomassimplex / raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000038.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas02d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas02d
raviartthomas02d.hhraviartthomas02dlocalbasis.hh
raviartthomas02d.hhraviartthomas02dlocalcoefficients.hh
raviartthomas02d.hhraviartthomas02dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas02d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas02d
raviartthomas02d.hhraviartthomas02dlocalbasis.hh
raviartthomas02d.hhraviartthomas02dlocalcoefficients.hh
raviartthomas02d.hhraviartthomas02dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000039.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas03d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas03d
raviartthomas03d.hhraviartthomas03dlocalbasis.hh
raviartthomas03d.hhraviartthomas03dlocalcoefficients.hh
raviartthomas03d.hhraviartthomas03dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas03d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas03d
raviartthomas03d.hhraviartthomas03dlocalbasis.hh
raviartthomas03d.hhraviartthomas03dlocalcoefficients.hh
raviartthomas03d.hhraviartthomas03dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000040.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas0cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0cube2d
raviartthomas0cube2d.hhraviartthomas0cube2dall.hh
│ │ │ │ +

raviartthomas → raviartthomas0cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0cube2d
raviartthomas0cube2d.hhraviartthomas0cube2dall.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000041.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas0cube3d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0cube3d
raviartthomas0cube3d.hhraviartthomas0cube3dall.hh
│ │ │ │ +

raviartthomas → raviartthomas0cube3d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0cube3d
raviartthomas0cube3d.hhraviartthomas0cube3dall.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000042.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas0prism Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0prism
raviartthomas0prism.hhraviartthomas0prismlocalbasis.hh
raviartthomas0prism.hhraviartthomas0prismlocalcoefficients.hh
raviartthomas0prism.hhraviartthomas0prismlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas0prism Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0prism
raviartthomas0prism.hhraviartthomas0prismlocalbasis.hh
raviartthomas0prism.hhraviartthomas0prismlocalcoefficients.hh
raviartthomas0prism.hhraviartthomas0prismlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000043.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas0pyramid Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0pyramid
raviartthomas0pyramid.hhraviartthomas0pyramidlocalbasis.hh
raviartthomas0pyramid.hhraviartthomas0pyramidlocalcoefficients.hh
raviartthomas0pyramid.hhraviartthomas0pyramidlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas0pyramid Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas0pyramid
raviartthomas0pyramid.hhraviartthomas0pyramidlocalbasis.hh
raviartthomas0pyramid.hhraviartthomas0pyramidlocalcoefficients.hh
raviartthomas0pyramid.hhraviartthomas0pyramidlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000044.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas12d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas12d
raviartthomas12d.hhraviartthomas12dlocalbasis.hh
raviartthomas12d.hhraviartthomas12dlocalcoefficients.hh
raviartthomas12d.hhraviartthomas12dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas12d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas12d
raviartthomas12d.hhraviartthomas12dlocalbasis.hh
raviartthomas12d.hhraviartthomas12dlocalcoefficients.hh
raviartthomas12d.hhraviartthomas12dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000045.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas1cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas1cube2d
raviartthomas1cube2d.hhraviartthomas1cube2dlocalbasis.hh
raviartthomas1cube2d.hhraviartthomas1cube2dlocalcoefficients.hh
raviartthomas1cube2d.hhraviartthomas1cube2dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas1cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas1cube2d
raviartthomas1cube2d.hhraviartthomas1cube2dlocalbasis.hh
raviartthomas1cube2d.hhraviartthomas1cube2dlocalcoefficients.hh
raviartthomas1cube2d.hhraviartthomas1cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000046.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas1cube3d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas1cube3d
raviartthomas1cube3d.hhraviartthomas1cube3dlocalbasis.hh
raviartthomas1cube3d.hhraviartthomas1cube3dlocalcoefficients.hh
raviartthomas1cube3d.hhraviartthomas1cube3dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas1cube3d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas1cube3d
raviartthomas1cube3d.hhraviartthomas1cube3dlocalbasis.hh
raviartthomas1cube3d.hhraviartthomas1cube3dlocalcoefficients.hh
raviartthomas1cube3d.hhraviartthomas1cube3dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000047.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas2cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas2cube2d
raviartthomas2cube2d.hhraviartthomas2cube2dlocalbasis.hh
raviartthomas2cube2d.hhraviartthomas2cube2dlocalcoefficients.hh
raviartthomas2cube2d.hhraviartthomas2cube2dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas2cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas2cube2d
raviartthomas2cube2d.hhraviartthomas2cube2dlocalbasis.hh
raviartthomas2cube2d.hhraviartthomas2cube2dlocalcoefficients.hh
raviartthomas2cube2d.hhraviartthomas2cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000048.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas3cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas3cube2d
raviartthomas3cube2d.hhraviartthomas3cube2dlocalbasis.hh
raviartthomas3cube2d.hhraviartthomas3cube2dlocalcoefficients.hh
raviartthomas3cube2d.hhraviartthomas3cube2dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas3cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas3cube2d
raviartthomas3cube2d.hhraviartthomas3cube2dlocalbasis.hh
raviartthomas3cube2d.hhraviartthomas3cube2dlocalcoefficients.hh
raviartthomas3cube2d.hhraviartthomas3cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000049.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomas4cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas4cube2d
raviartthomas4cube2d.hhraviartthomas4cube2dlocalbasis.hh
raviartthomas4cube2d.hhraviartthomas4cube2dlocalcoefficients.hh
raviartthomas4cube2d.hhraviartthomas4cube2dlocalinterpolation.hh
│ │ │ │ +

raviartthomas → raviartthomas4cube2d Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomas4cube2d
raviartthomas4cube2d.hhraviartthomas4cube2dlocalbasis.hh
raviartthomas4cube2d.hhraviartthomas4cube2dlocalcoefficients.hh
raviartthomas4cube2d.hhraviartthomas4cube2dlocalinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000050.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas → raviartthomassimplex Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomassimplex
raviartthomassimplex.hhraviartthomassimplexbasis.hh
│ │ │ │ +

raviartthomas → raviartthomassimplex Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/raviartthomas/raviartthomassimplex
raviartthomassimplex.hhraviartthomassimplexbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000037_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

raviartthomas → utility Relation

File in dune/localfunctions/raviartthomasIncludes file in dune/localfunctions/utility
raviartthomassimplex.hhlocalfunctions/utility/localfiniteelement.hh
raviartthomassimplex / raviartthomassimplexbasis.hhdefaultbasisfactory.hh
raviartthomassimplex / raviartthomassimplexinterpolation.hhinterpolationhelper.hh
raviartthomassimplex / raviartthomassimplexinterpolation.hhpolynomialbasis.hh
raviartthomassimplex / raviartthomassimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000038_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas02d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas02dIncludes file in dune/localfunctions/common
raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas02dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas02d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas02dIncludes file in dune/localfunctions/common
raviartthomas02dlocalbasis.hhcommon/localbasis.hh
raviartthomas02dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000039_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas03d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas03dIncludes file in dune/localfunctions/common
raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas03dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas03d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas03dIncludes file in dune/localfunctions/common
raviartthomas03dlocalbasis.hhcommon/localbasis.hh
raviartthomas03dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000040_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas0cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0cube2dIncludes file in dune/localfunctions/common
raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas0cube2dall.hhlocalkey.hh
│ │ │ │ +

raviartthomas0cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0cube2dIncludes file in dune/localfunctions/common
raviartthomas0cube2dall.hhcommon/localbasis.hh
raviartthomas0cube2dall.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000041_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas0cube3d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0cube3dIncludes file in dune/localfunctions/common
raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas0cube3dall.hhlocalkey.hh
│ │ │ │ +

raviartthomas0cube3d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0cube3dIncludes file in dune/localfunctions/common
raviartthomas0cube3dall.hhcommon/localbasis.hh
raviartthomas0cube3dall.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000042_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas0prism → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0prismIncludes file in dune/localfunctions/common
raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas0prismlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas0prism → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0prismIncludes file in dune/localfunctions/common
raviartthomas0prismlocalbasis.hhcommon/localbasis.hh
raviartthomas0prismlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000043_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas0pyramid → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0pyramidIncludes file in dune/localfunctions/common
raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas0pyramid → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas0pyramidIncludes file in dune/localfunctions/common
raviartthomas0pyramidlocalbasis.hhcommon/localbasis.hh
raviartthomas0pyramidlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000044_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas12d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas12dIncludes file in dune/localfunctions/common
raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas12dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas12d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas12dIncludes file in dune/localfunctions/common
raviartthomas12dlocalbasis.hhcommon/localbasis.hh
raviartthomas12dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000045_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas1cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas1cube2dIncludes file in dune/localfunctions/common
raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas1cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas1cube2dIncludes file in dune/localfunctions/common
raviartthomas1cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000046_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas1cube3d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas1cube3dIncludes file in dune/localfunctions/common
raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas1cube3d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas1cube3dIncludes file in dune/localfunctions/common
raviartthomas1cube3dlocalbasis.hhcommon/localbasis.hh
raviartthomas1cube3dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000047_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas2cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas2cube2dIncludes file in dune/localfunctions/common
raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas2cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas2cube2dIncludes file in dune/localfunctions/common
raviartthomas2cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas2cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000048_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas3cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas3cube2dIncludes file in dune/localfunctions/common
raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas3cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas3cube2dIncludes file in dune/localfunctions/common
raviartthomas3cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas3cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000049_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomas4cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas4cube2dIncludes file in dune/localfunctions/common
raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ +

raviartthomas4cube2d → common Relation

File in dune/localfunctions/raviartthomas/raviartthomas4cube2dIncludes file in dune/localfunctions/common
raviartthomas4cube2dlocalbasis.hhcommon/localbasis.hh
raviartthomas4cube2dlocalcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000050_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomassimplex → common Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/common
raviartthomassimplexinterpolation.hhlocalkey.hh
│ │ │ │ +

raviartthomassimplex → common Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/common
raviartthomassimplexinterpolation.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000050_000030.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomassimplex → orthonormal Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/orthonormal
raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ +

raviartthomassimplex → orthonormal Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/orthonormal
raviartthomassimplexinterpolation.hhorthonormalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000050_000055.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

raviartthomassimplex → utility Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/utility
raviartthomassimplexbasis.hhdefaultbasisfactory.hh
raviartthomassimplexinterpolation.hhinterpolationhelper.hh
raviartthomassimplexinterpolation.hhpolynomialbasis.hh
raviartthomassimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ +

raviartthomassimplex → utility Relation

File in dune/localfunctions/raviartthomas/raviartthomassimplexIncludes file in dune/localfunctions/utility
raviartthomassimplexbasis.hhdefaultbasisfactory.hh
raviartthomassimplexinterpolation.hhinterpolationhelper.hh
raviartthomassimplexinterpolation.hhpolynomialbasis.hh
raviartthomassimplexprebasis.hhpolynomialbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000051_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ +

refined → common Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/common
refinedp0.hhlocalfiniteelementtraits.hh
refinedp1.hhlocalfiniteelementtraits.hh
common / refinedsimplexlocalbasis.hhcommon/localbasis.hh
refinedp0 / refinedp0localbasis.hhcommon/localbasis.hh
refinedp0 / refinedp0localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000051_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refined → lagrange Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/lagrange
refinedp0.hhp0.hh
refinedp1.hhlagrangesimplex.hh
refinedp1.hhp0.hh
│ │ │ │ +

refined → lagrange Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/lagrange
refinedp0.hhp0.hh
refinedp1.hhlagrangesimplex.hh
refinedp1.hhp0.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000051_000052.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refined → refinedp0 Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/refined/refinedp0
refinedp0.hhrefinedp0localbasis.hh
refinedp0.hhrefinedp0localcoefficients.hh
refinedp0.hhrefinedp0localinterpolation.hh
│ │ │ │ +

refined → refinedp0 Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/refined/refinedp0
refinedp0.hhrefinedp0localbasis.hh
refinedp0.hhrefinedp0localcoefficients.hh
refinedp0.hhrefinedp0localinterpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000051_000053.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refined → refinedp1 Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/refined/refinedp1
refinedp1.hhrefinedp1localbasis.hh
│ │ │ │ +

refined → refinedp1 Relation

File in dune/localfunctions/refinedIncludes file in dune/localfunctions/refined/refinedp1
refinedp1.hhrefinedp1localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000052_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refinedp0 → common Relation

File in dune/localfunctions/refined/refinedp0Includes file in dune/localfunctions/common
refinedp0localbasis.hhcommon/localbasis.hh
refinedp0localcoefficients.hhlocalkey.hh
│ │ │ │ +

refinedp0 → common Relation

File in dune/localfunctions/refined/refinedp0Includes file in dune/localfunctions/common
refinedp0localbasis.hhcommon/localbasis.hh
refinedp0localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000052_000008.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refinedp0 → common Relation

File in dune/localfunctions/refined/refinedp0Includes file in dune/localfunctions/refined/common
refinedp0localbasis.hhrefinedsimplexlocalbasis.hh
│ │ │ │ +

refinedp0 → common Relation

File in dune/localfunctions/refined/refinedp0Includes file in dune/localfunctions/refined/common
refinedp0localbasis.hhrefinedsimplexlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000053_000008.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

refinedp1 → common Relation

File in dune/localfunctions/refined/refinedp1Includes file in dune/localfunctions/refined/common
refinedp1localbasis.hhrefinedsimplexlocalbasis.hh
│ │ │ │ +

refinedp1 → common Relation

File in dune/localfunctions/refined/refinedp1Includes file in dune/localfunctions/refined/common
refinedp1localbasis.hhrefinedsimplexlocalbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000054_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

simplexp1bubble → common Relation

File in dune/localfunctions/enriched/simplexp1bubbleIncludes file in dune/localfunctions/common
enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
│ │ │ │ +

simplexp1bubble → common Relation

File in dune/localfunctions/enriched/simplexp1bubbleIncludes file in dune/localfunctions/common
enriched/simplexp1bubble/localbasis.hhcommon/localbasis.hh
enriched/simplexp1bubble/localcoefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000055_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

utility → common Relation

File in dune/localfunctions/utilityIncludes file in dune/localfunctions/common
dglocalcoefficients.hhlocalkey.hh
localfunctions/utility/localfiniteelement.hhlocalfiniteelementtraits.hh
polynomialbasis.hhcommon/localbasis.hh
│ │ │ │ +

utility → common Relation

File in dune/localfunctions/utilityIncludes file in dune/localfunctions/common
dglocalcoefficients.hhlocalkey.hh
localfunctions/utility/localfiniteelement.hhlocalfiniteelementtraits.hh
polynomialbasis.hhcommon/localbasis.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000056_000007.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

whitney → common Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/common
edges0.5 / whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
edges0.5 / whitney/edges0.5/coefficients.hhlocalkey.hh
│ │ │ │ +

whitney → common Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/common
edges0.5 / whitney/edges0.5/basis.hhlocaltoglobaladaptors.hh
edges0.5 / whitney/edges0.5/coefficients.hhlocalkey.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000056_000016.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

whitney → edges0.5 Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/whitney/edges0.5
edges0.5.hhwhitney/edges0.5/basis.hh
edges0.5.hhwhitney/edges0.5/coefficients.hh
edges0.5.hhwhitney/edges0.5/interpolation.hh
│ │ │ │ +

whitney → edges0.5 Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/whitney/edges0.5
edges0.5.hhwhitney/edges0.5/basis.hh
edges0.5.hhwhitney/edges0.5/coefficients.hh
edges0.5.hhwhitney/edges0.5/interpolation.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_000056_000022.html │ │ │ │ @@ -69,14 +69,14 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ -

whitney → lagrange Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/lagrange
edges0.5 / whitney/edges0.5/basis.hhlagrangesimplex.hh
│ │ │ │ +

whitney → lagrange Relation

File in dune/localfunctions/whitneyIncludes file in dune/localfunctions/lagrange
edges0.5 / whitney/edges0.5/basis.hhlagrangesimplex.hh
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├── ./usr/share/doc/libdune-localfunctions-doc/doxygen/dir_00f4c9da8ab215917e2238f0b0796258.html │ │ │ │ @@ -87,17 +87,17 @@ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ - │ │ │ │ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │

│ │ │ │ Files

 raviartthomas12dlocalbasis.hh
 raviartthomas12dlocalbasis.hh
 
 raviartthomas12dlocalcoefficients.hh
 raviartthomas12dlocalcoefficients.hh
 
 raviartthomas12dlocalinterpolation.hh
 
│ │ │ │ │ │ │ │ │ │ │ │